From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mx.groups.io with SMTP id smtpd.web10.543.1589474031894066467 for ; Thu, 14 May 2020 09:33:52 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=s8FiXfut; spf=pass (domain: intel.com, ip: 134.134.136.126, mailfrom: michael.d.kinney@intel.com) IronPort-SDR: OUvdzJnU8fNOAPmSCNYyQHXBgfkMcRjd02cb93e5H9PbRRhKd1hmc2orIshy4qM4bArL3ckrjl cY40JzPZjAmg== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 May 2020 09:33:51 -0700 IronPort-SDR: gX4HCWIyHhO3d1ACwc7UAaHKsHnNJxRILksWC59DL6n57FNGJxhwfk3i89VrZQq8trw0F2Mqgr Bs5D8RoYGcCw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,392,1583222400"; d="scan'208";a="298092535" Received: from orsmsx110.amr.corp.intel.com ([10.22.240.8]) by fmsmga002.fm.intel.com with ESMTP; 14 May 2020 09:33:50 -0700 Received: from ORSEDG001.ED.cps.intel.com (10.7.248.4) by ORSMSX110.amr.corp.intel.com (10.22.240.8) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 14 May 2020 09:33:49 -0700 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (104.47.36.58) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 14 May 2020 09:33:50 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QFpA8OsUq07WvbJU7z/iQjanfgH6HuwF6/fyTvcbu5a2/oKdM0Sn21TY57Eu4vNTPzV/rwoCjk1C4aWZUUdxygY9FIULB8TTWn4Zdy0KoHM5khjt7lyz6Gsxy5euqiBugYOO1eCb3TyI6ppazC6kePDLGEJ8YKQ0Nwnrry1XegtMtkrVNH3udJE71aIAYZ5DG6LzL5ob3bQz8tsuMby1FBGu2t9UNvmXxQ+sr6tKIGYALDN7pmakjBBJjXGkmeDeTDanpLSWYpvS8uUGYWt5CWlJe8QZe08xkdvk9MpJl56Lls0LCViv52Dj6ZSH+dC/LhZpaxyhS+tISnQW++sQ6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Sf3mE15qWXzrusSxaNnajgoHbTs4AjIPOMaF+PBoaog=; b=OzD74BozYw8Ec/U0yu4u4HKZsVK2NEagZQzdFkJNqezbCOH6zCL8VjAEnxgN/cYdmqfAHehXrx3Un4gFrKbJ7ZJs384JmVJ7DF0PMhro5pFc8mIXEEMnNUbgzTTEm6STUcoKzRMsRSHbgGdLX3YOiRt89H5VNjcKrXtyqj2ohbTlA40z7KtCRy3VswCUz6a2lXbIXxnA4uQvqSOJmlnUzXp3P7QawNyQx5MgqFWj//DuKEGfYMKw1hgLwaaqhRpE2HnchbMpB5/32Sz158L+aFJyDgiMqKHirF9qm7yEUD55vZt3ZyWy73r8mrVKy/7WgLwRz5/hP3eBZ5m8had2wg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Sf3mE15qWXzrusSxaNnajgoHbTs4AjIPOMaF+PBoaog=; b=s8FiXfutnR5mOp321FGBY06oP+nP3byktAG7wZr1qfI2u5YJl73WJjfJcmofXKJ7fb6fYWQHEKn25ZnHi/rxa06Ik17DgN8hwYBB3DbFsdPBc5/fs+/rzfpU38Vpz3XwDlRbwLLc8gplMZJA39GyKfo1eqfC6fUycqEl9UJ1naE= Received: from MN2PR11MB4461.namprd11.prod.outlook.com (2603:10b6:208:192::29) by MN2PR11MB4029.namprd11.prod.outlook.com (2603:10b6:208:155::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3000.25; Thu, 14 May 2020 16:33:47 +0000 Received: from MN2PR11MB4461.namprd11.prod.outlook.com ([fe80::10bc:1a4e:4745:ffc1]) by MN2PR11MB4461.namprd11.prod.outlook.com ([fe80::10bc:1a4e:4745:ffc1%3]) with mapi id 15.20.2979.033; Thu, 14 May 2020 16:33:47 +0000 From: "Michael D Kinney" To: "devel@edk2.groups.io" , "sami.mujawar@arm.com" , "Kinney, Michael D" CC: "ard.biesheuvel@arm.com" , "leif@nuviainc.com" , "Gao, Liming" , "Alexandru.Elisei@arm.com" , "Andre.Przywara@arm.com" , "Matteo.Carlini@arm.com" , "Laura.Moretta@arm.com" , "nd@arm.com" Subject: Re: [edk2-devel] [PATCH v1 03/11] MdePkg: Base Memory Lib instance using MMIO Thread-Topic: [edk2-devel] [PATCH v1 03/11] MdePkg: Base Memory Lib instance using MMIO Thread-Index: AQHWKcv76dldkNk12kahlJVPLFZmVainxfhA Date: Thu, 14 May 2020 16:33:47 +0000 Message-ID: References: <20200514084019.71368-1-sami.mujawar@arm.com> <20200514084019.71368-4-sami.mujawar@arm.com> In-Reply-To: <20200514084019.71368-4-sami.mujawar@arm.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.2.0.6 authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=intel.com; x-originating-ip: [134.134.136.220] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: d010ea99-3570-4e30-74db-08d7f824937b x-ms-traffictypediagnostic: MN2PR11MB4029: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-forefront-prvs: 040359335D x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: vG8N/Oa0nDPVqEf9B7f9VsRZSc7cKHv2q+mO6qgWI8uY2K2TMinmKbGjEnmYo9XXLZi8DDEOehsk9Bye76G+x+AM9LuC/++ljGABI747BOhgz5ia/A92nmaaIhA62bo0NlcpPd5HBVq6EcEFUz8poi/9O6ck0HL//WUqv8IFv6f5RfRLdHFEVXBYBa/WEP/hlG8iJDWokMhZ5rsro1lODF6iKIn87LFbg566R5+5ZyoKrUl56u3YWi7IMwykeEQxkkBlUPydsAaSi9SFJtAXgEqhrs2d2aGsonMRzX5ImmtPQfeAfxemKUDEZB/BhJGTp256ovQk3jG5Hh4mlfyjdlURjP6RsyPTnaUc3m+jvOug+vlBk4VELvn49dS1qfIV3U6MLFkx5J5iFwTJWn5P41I/Y0wBqcKIgffMHatpn/PQ0uUR++P08LgsoyEIhc2wZJFIHZQ8LcGUueZwQH0m1NnGkFJwSFdjJ1dyAvSHfxim6f3jujPM7X/MInAXnuRi7gfYiWD/068stO5u3IJ35w== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR11MB4461.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(136003)(39860400002)(346002)(376002)(396003)(366004)(52536014)(53546011)(2906002)(316002)(6506007)(8936002)(966005)(8676002)(7696005)(86362001)(26005)(110136005)(54906003)(186003)(4326008)(19627235002)(66946007)(5660300002)(478600001)(30864003)(9686003)(76116006)(66446008)(66556008)(71200400001)(64756008)(66476007)(55016002)(33656002)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: tdJyp4dsScNeFoD+zSu4MijxGoUOVa6pKvboXMkGd491otE6hN1Q+OxWjHBYSZ550kaHd7733yUGX/fIDJiJOP7fn1ZLD25mhQXezPBMsj+5cCni1Cnhl8b1qziVVFL5QYmNEBjXYO1fcLHzauTJlXWMOfVa4kry5psKJdNgcT3iZiWpCx4zEaNoc2E9Oe9uGf2J2LgRgs1nedheiOx4JFyEoR/Lu1qaN4c25tOyh1sYVF4T+MWLbV6137JLQ//86Jl063vrFm+4ymTWFVxSWRDjju4LHE3pQwh/WS215ZJq6EYXUVA+65vqntdHcITEi7aAIDYz+tPdFwbBiM1Y4naqEYZ68rpvekVoni9suiUlcPgmV30W8B4ZSIFnKa9J4Mo+yzlti9ofsA6ZqVIZhT5HszkxzJP2VZUUqBQOfNQskJwHu/F8Z9TnCPeFm8tynMIYFTpit+e6Mftf0YdomCWjj/Gdjz7Sq7/IQd7kUiFqOZ2PJDqtoWV3vhoM9wuE MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: d010ea99-3570-4e30-74db-08d7f824937b X-MS-Exchange-CrossTenant-originalarrivaltime: 14 May 2020 16:33:47.1208 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ASG3RcUEGsRiv6eFEREAXrrSJjZ/NamDua3iC1Usvh7FqmH+rqmEHLjGVQadLkexg0stRDMGH5kvEYG5pxDqYE1VFBd1xPNTJvlPJ26JR+U= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4029 Return-Path: michael.d.kinney@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 U2FtaSwNCg0KVGhpcyBkb2VzIG5vdCBzZWVtIHJpZ2h0IHRvIG1lLg0KDQpCYXNlTWVtb3J5TGli IGlzIGZvciBtZW1vcnkgb3BlcmF0aW9ucy4NCg0KSW9MaWIgZm9yIEkvTyBwb3J0IGFuZCBNTUlP IG9wZXJhdGlvbnMuDQoNClRoZSBJb0xpYiBhbHJlYWR5IHN1cHBvcnRzIGFsaWduZWQgYnVmZmVy IHJlYWQvd3JpdGUNCkFQSXMgZm9yIE1NSU8uICBXaHkgY2Fu4oCZdCB0aGUgZXhpdGluZyBJb0xp YiBBUElzIGJlDQp1c2VkIGZvciB0aGlzIHVzZSBjYXNlLg0KDQogIE1taW9SZWFkQnVmZmVyOCgp DQogIE1taW9SZWFkQnVmZmVyMTYoKQ0KICBNbWlvUmVhZEJ1ZmZlcjMyKCkNCiAgTW1pb1JlYWRC dWZmZXI2NCgpDQogIE1taW9Xcml0ZUJ1ZmZlcjgoKQ0KICBNbWlvV3JpdGVCdWZmZXIxNigpDQog IE1taW9Xcml0ZUJ1ZmZlcjMyKCkNCiAgTW1pb1dyaXRlQnVmZmVyNjQoKQ0KDQpCeSB1c2luZyBN TUlPIGZyb20gYSBCYXNlTWVtb3J5TGliIGluc3RhbmNlLCBhIHBsYXRmb3JtDQp0aGF0IHVzZXMg dGhpcyBpbnN0YW5jZSBtYXkgZ2V0IHVuZXhwZWN0ZWQgY2FjaGluZyBiZWhhdmlvcg0KYmVjYXVz ZSBNTUlPIGlzIHR5cGljYWxseSB1bmNhY2hlZCBhbmQgdGhlIGV4cGVjdGF0aW9uIGlzDQp0aGF0 IEJhc2VNZW1vcnlMaWIgdXNlcyB0aGUgY2FjaGluZyBhdHRyaWJ1dGVzIG9mIHRoZSByYW5nZS4N ClJlZHVjZWQgcGVyZm9ybWFuY2UgbWF5IGFsc28gYmUgc2VlIGlmIHVzZSBvZiB1bmNhY2hlZCAN Cm9wZXJhdGlvbnMgd2FzIG5vdCBleHBlY3RlZC4NCg0KTWlrZQ0KDQo+IC0tLS0tT3JpZ2luYWwg TWVzc2FnZS0tLS0tDQo+IEZyb206IGRldmVsQGVkazIuZ3JvdXBzLmlvIDxkZXZlbEBlZGsyLmdy b3Vwcy5pbz4gT24NCj4gQmVoYWxmIE9mIFNhbWkgTXVqYXdhcg0KPiBTZW50OiBUaHVyc2RheSwg TWF5IDE0LCAyMDIwIDE6NDAgQU0NCj4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvDQo+IENjOiBT YW1pIE11amF3YXIgPHNhbWkubXVqYXdhckBhcm0uY29tPjsNCj4gYXJkLmJpZXNoZXV2ZWxAYXJt LmNvbTsgbGVpZkBudXZpYWluYy5jb207IEtpbm5leSwNCj4gTWljaGFlbCBEIDxtaWNoYWVsLmQu a2lubmV5QGludGVsLmNvbT47IEdhbywgTGltaW5nDQo+IDxsaW1pbmcuZ2FvQGludGVsLmNvbT47 IEFsZXhhbmRydS5FbGlzZWlAYXJtLmNvbTsNCj4gQW5kcmUuUHJ6eXdhcmFAYXJtLmNvbTsgTWF0 dGVvLkNhcmxpbmlAYXJtLmNvbTsNCj4gTGF1cmEuTW9yZXR0YUBhcm0uY29tOyBuZEBhcm0uY29t DQo+IFN1YmplY3Q6IFtlZGsyLWRldmVsXSBbUEFUQ0ggdjEgMDMvMTFdIE1kZVBrZzogQmFzZQ0K PiBNZW1vcnkgTGliIGluc3RhbmNlIHVzaW5nIE1NSU8NCj4gDQo+IFNvbWUgZGV2aWNlIGRyaXZl cnMgcGVyZm9ybSBjb3B5IG9wZXJhdGlvbnMgb24NCj4gZGV2aWNlIG1lbW9yeSwgZS5nLiBkZXZp Y2UgZHJpdmVycyBmb3IgYSBGbGFzaA0KPiBkZXZpY2UuIE9uIHNvbWUgYXJjaGl0ZWN0dXJlcyB1 bmFsaWduZWQgYWNjZXNzDQo+IHRvIGRldmljZSBtZW1vcnkgcmVnaW9ucyBpcyBub3QgcGVybWl0 dGVkLiBUbw0KPiBhZGQgdG8gdGhpcyBpZiB0aGUgZGV2aWNlIGlzIHZpcnR1YWxpc2VkIHRoZW4N Cj4gdGhlcmUgYXJlIGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSB0eXBlIG9mDQo+IGxvYWQv c3RvcmUgb3BlcmF0aW9ucyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQNCj4gb24gdGhlIGRldmljZSBt ZW1vcnkgcmVnaW9ucywgZS5nLiBvbiBBQVJDSDY0LA0KPiBQcmUvUG9zdCBpbmRleCBvciBMRFAg b3BlcmF0aW9ucyBjYW5ub3QgYmUNCj4gdXNlZCwgYXMgYSB0cmFwIHRvIEVMMiBkb2VzIG5vdCBw cm92aWRlIHRoZQ0KPiBzeW5kcm9tZSBpbmZvcm1hdGlvbiB0byB0aGUgaHlwZXJ2aXNvci4NCj4g DQo+IFRvIGFkZHJlc3MgdGhlc2UgaXNzdWVzIHRoaXMgcGF0Y2ggaW50cm9kdWNlcw0KPiBCYXNl TWVtb3J5TGliTW1pbyBsaWJyYXJ5IHdoaWNoIHByb3ZpZGVzIGFuDQo+IGltcGxlbWVudGF0aW9u IG9mIEJhc2UgbWVtb3J5IGxpYnJhcnkgdGhhdA0KPiB1c2VzIGFsaWduZWQgTU1JTyBhY2Nlc3Nl cy4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IFNhbWkgTXVqYXdhciA8c2FtaS5tdWphd2FyQGFybS5j b20+DQo+IC0tLQ0KPiAgTWRlUGtnL0xpYnJhcnkvQmFzZU1lbW9yeUxpYk1taW8vQmFzZU1lbW9y eUxpYk1taW8uaW5mDQo+IHwgIDUwICsrKysNCj4gIE1kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlM aWJNbWlvL0Jhc2VNZW1vcnlMaWJNbWlvLnVuaQ0KPiB8ICAxNSArDQo+ICBNZGVQa2cvTGlicmFy eS9CYXNlTWVtb3J5TGliTW1pby9Db21wYXJlTWVtV3JhcHBlci5jDQo+IHwgIDYyICsrKysNCj4g IE1kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL0NvcHlNZW0uYw0KPiB8IDE0OSArKysr KysrKysrDQo+ICBNZGVQa2cvTGlicmFyeS9CYXNlTWVtb3J5TGliTW1pby9Db3B5TWVtV3JhcHBl ci5jDQo+IHwgIDU5ICsrKysNCj4gIE1kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL0lz WmVyb0J1ZmZlcldyYXBwZXIuYw0KPiB8ICA1MCArKysrDQo+ICBNZGVQa2cvTGlicmFyeS9CYXNl TWVtb3J5TGliTW1pby9NZW1MaWJHZW5lcmljLmMNCj4gfCAzMDQgKysrKysrKysrKysrKysrKysr KysNCj4gIE1kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL01lbUxpYkd1aWQuYw0KPiB8 IDE0MyArKysrKysrKysNCj4gIE1kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL01lbUxp YkludGVybmFscy5oDQo+IHwgMjQ4ICsrKysrKysrKysrKysrKysNCj4gIE1kZVBrZy9MaWJyYXJ5 L0Jhc2VNZW1vcnlMaWJNbWlvL1NjYW5NZW0xNldyYXBwZXIuYw0KPiB8ICA2MyArKysrDQo+ICBN ZGVQa2cvTGlicmFyeS9CYXNlTWVtb3J5TGliTW1pby9TY2FuTWVtMzJXcmFwcGVyLmMNCj4gfCAg NjIgKysrKw0KPiAgTWRlUGtnL0xpYnJhcnkvQmFzZU1lbW9yeUxpYk1taW8vU2Nhbk1lbTY0V3Jh cHBlci5jDQo+IHwgIDYzICsrKysNCj4gIE1kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlv L1NjYW5NZW04V3JhcHBlci5jDQo+IHwgIDk1ICsrKysrKw0KPiAgTWRlUGtnL0xpYnJhcnkvQmFz ZU1lbW9yeUxpYk1taW8vU2V0TWVtLmMNCj4gfCAgODMgKysrKysrDQo+ICBNZGVQa2cvTGlicmFy eS9CYXNlTWVtb3J5TGliTW1pby9TZXRNZW0xNldyYXBwZXIuYw0KPiB8ICA2MCArKysrDQo+ICBN ZGVQa2cvTGlicmFyeS9CYXNlTWVtb3J5TGliTW1pby9TZXRNZW0zMldyYXBwZXIuYw0KPiB8ICA2 MCArKysrDQo+ICBNZGVQa2cvTGlicmFyeS9CYXNlTWVtb3J5TGliTW1pby9TZXRNZW02NFdyYXBw ZXIuYw0KPiB8ICA2MCArKysrDQo+ICBNZGVQa2cvTGlicmFyeS9CYXNlTWVtb3J5TGliTW1pby9T ZXRNZW1XcmFwcGVyLmMNCj4gfCAgODcgKysrKysrDQo+ICBNZGVQa2cvTGlicmFyeS9CYXNlTWVt b3J5TGliTW1pby9aZXJvTWVtV3JhcHBlci5jDQo+IHwgIDUyICsrKysNCj4gIDE5IGZpbGVzIGNo YW5nZWQsIDE3NjUgaW5zZXJ0aW9ucygrKQ0KPiANCj4gZGlmZiAtLWdpdA0KPiBhL01kZVBrZy9M aWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL0Jhc2VNZW1vcnlMaWJNbWlvLmluDQo+IGYNCj4gYi9N ZGVQa2cvTGlicmFyeS9CYXNlTWVtb3J5TGliTW1pby9CYXNlTWVtb3J5TGliTW1pby5pbg0KPiBm DQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhNjFjYjk4NWEyNDINCj4gYTRjZTdhMjQ0NmM0ZWZiOWI3 OGZiMWQ3YjVkDQo+IC0tLSAvZGV2L251bGwNCj4gKysrDQo+IGIvTWRlUGtnL0xpYnJhcnkvQmFz ZU1lbW9yeUxpYk1taW8vQmFzZU1lbW9yeUxpYk1taW8uaW4NCj4gZg0KPiBAQCAtMCwwICsxLDUw IEBADQo+ICsjIyBAZmlsZQ0KPiArIyAgSW5zdGFuY2Ugb2YgQmFzZSBNZW1vcnkgTGlicmFyeSB1 c2luZyBNbWlvDQo+IG9wZXJhdGlvbnMuDQo+ICsjDQo+ICsjDQo+ICsjICBDb3B5cmlnaHQgKGMp IDIwMjAsIEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gKyMNCj4g KyMgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsjDQo+ ICsjIw0KPiArDQo+ICtbRGVmaW5lc10NCj4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAg ICAgID0gMHgwMDAxMDAxQg0KPiArICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBC YXNlTWVtb3J5TGliTW1pbw0KPiArICBNT0RVTEVfVU5JX0ZJTEUgICAgICAgICAgICAgICAgPQ0K PiBCYXNlTWVtb3J5TGliTW1pby51bmkNCj4gKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAg ICAgID0gNTcyNDA2M0QtOTg1NS00QjNBLQ0KPiA4REVFLTFGODBFRDA3RTA5Ng0KPiArICBNT0RV TEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBCQVNFDQo+ICsgIFZFUlNJT05fU1RSSU5HICAg ICAgICAgICAgICAgICA9IDEuMA0KPiArICBMSUJSQVJZX0NMQVNTICAgICAgICAgICAgICAgICAg PSBCYXNlTWVtb3J5TGliDQo+ICsNCj4gKyMNCj4gKyMgIFZBTElEX0FSQ0hJVEVDVFVSRVMgICAg ICAgICAgID0gQVJNIEFBUkNINjQNCj4gKyMNCj4gKw0KPiArW1NvdXJjZXNdDQo+ICsgIFNldE1l bS5jDQo+ICsgIFNjYW5NZW02NFdyYXBwZXIuYw0KPiArICBTY2FuTWVtMzJXcmFwcGVyLmMNCj4g KyAgU2Nhbk1lbTE2V3JhcHBlci5jDQo+ICsgIFNjYW5NZW04V3JhcHBlci5jDQo+ICsgIFplcm9N ZW1XcmFwcGVyLmMNCj4gKyAgQ29tcGFyZU1lbVdyYXBwZXIuYw0KPiArICBTZXRNZW02NFdyYXBw ZXIuYw0KPiArICBTZXRNZW0zMldyYXBwZXIuYw0KPiArICBTZXRNZW0xNldyYXBwZXIuYw0KPiAr ICBTZXRNZW1XcmFwcGVyLmMNCj4gKyAgQ29weU1lbVdyYXBwZXIuYw0KPiArICBJc1plcm9CdWZm ZXJXcmFwcGVyLmMNCj4gKyAgTWVtTGliR2VuZXJpYy5jDQo+ICsgIE1lbUxpYkd1aWQuYw0KPiAr ICBDb3B5TWVtLmMNCj4gKyAgTWVtTGliSW50ZXJuYWxzLmgNCj4gKw0KPiArW1BhY2thZ2VzXQ0K PiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiArDQo+ICtbTGlicmFyeUNsYXNzZXNdDQo+ICsgIERl YnVnTGliDQo+ICsgIEJhc2VMaWINCj4gKyAgSW9MaWINCj4gKw0KPiBkaWZmIC0tZ2l0DQo+IGEv TWRlUGtnL0xpYnJhcnkvQmFzZU1lbW9yeUxpYk1taW8vQmFzZU1lbW9yeUxpYk1taW8udW4NCj4g aQ0KPiBiL01kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL0Jhc2VNZW1vcnlMaWJNbWlv LnVuDQo+IGkNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgNCj4gMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2RjOTkxMDNlOWE2Nw0KPiAzOTAyYWJjZWZl ODI0ZDVjZjVjMTliMjU4YjgNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysNCj4gYi9NZGVQa2cvTGli cmFyeS9CYXNlTWVtb3J5TGliTW1pby9CYXNlTWVtb3J5TGliTW1pby51bg0KPiBpDQo+IEBAIC0w LDAgKzEsMTUgQEANCj4gKy8vIC8qKiBAZmlsZQ0KPiArLy8gSW5zdGFuY2Ugb2YgQmFzZSBNZW1v cnkgTGlicmFyeSB1c2luZyBNbWlvDQo+IG9wZXJhdGlvbnMuDQo+ICsvLw0KPiArLy8NCj4gKy8v IENvcHlyaWdodCAoYykgMjAyMCwgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQu PEJSPg0KPiArLy8NCj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2Ut UGF0ZW50DQo+ICsvLw0KPiArLy8gKiovDQo+ICsNCj4gKw0KPiArI3N0cmluZyBTVFJfTU9EVUxF X0FCU1RSQUNUICAgICAgICAgICAgICNsYW5ndWFnZSBlbi0NCj4gVVMgIkluc3RhbmNlIG9mIEJh c2UgTWVtb3J5IExpYnJhcnkgdXNpbmcgTW1pbw0KPiBvcGVyYXRpb25zIg0KPiArDQo+ICsjc3Ry aW5nIFNUUl9NT0RVTEVfREVTQ1JJUFRJT04gICAgICAgICAgI2xhbmd1YWdlIGVuLQ0KPiBVUyAi QmFzZSBNZW1vcnkgTGlicmFyeSB1c2luZyBNbWlvIG9wZXJhdGlvbnMiDQo+ICsNCj4gZGlmZiAt LWdpdA0KPiBhL01kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL0NvbXBhcmVNZW1XcmFw cGVyLmMNCj4gYi9NZGVQa2cvTGlicmFyeS9CYXNlTWVtb3J5TGliTW1pby9Db21wYXJlTWVtV3Jh cHBlci5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzZTBlM2VhNTgzY2INCj4gMjQyYTkyNDJmNDgz ZThjOTUyZTQ4MTIyZTc3DQo+IC0tLSAvZGV2L251bGwNCj4gKysrDQo+IGIvTWRlUGtnL0xpYnJh cnkvQmFzZU1lbW9yeUxpYk1taW8vQ29tcGFyZU1lbVdyYXBwZXIuYw0KPiBAQCAtMCwwICsxLDYy IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgQ29tcGFyZU1lbSgpIGltcGxlbWVudGF0aW9uLg0KPiAr DQo+ICsgIFRoZSBmb2xsb3dpbmcgQmFzZU1lbW9yeUxpYiBpbnN0YW5jZXMgY29udGFpbiB0aGUN Cj4gc2FtZSBjb3B5IG9mIHRoaXMgZmlsZToNCj4gKyAgICBCYXNlTWVtb3J5TGliDQo+ICsgICAg QmFzZU1lbW9yeUxpYk1taW8NCj4gKyAgICBCYXNlTWVtb3J5TGliTW14DQo+ICsgICAgQmFzZU1l bW9yeUxpYlNzZTINCj4gKyAgICBCYXNlTWVtb3J5TGliUmVwU3RyDQo+ICsgICAgQmFzZU1lbW9y eUxpYk9wdER4ZQ0KPiArICAgIEJhc2VNZW1vcnlMaWJPcHRQZWkNCj4gKyAgICBQZWlNZW1vcnlM aWINCj4gKyAgICBVZWZpTWVtb3J5TGliDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDA2IC0g MjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbA0KPiByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiAr ICBDb3B5cmlnaHQgKGMpIDIwMjAsIEFSTSBMdGQuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuPEJS Pg0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiAr DQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgIk1lbUxpYkludGVybmFscy5oIg0KPiArDQo+ICsv KioNCj4gKyAgQ29tcGFyZXMgdGhlIGNvbnRlbnRzIG9mIHR3byBidWZmZXJzLg0KPiArDQo+ICsg IFRoaXMgZnVuY3Rpb24gY29tcGFyZXMgTGVuZ3RoIGJ5dGVzIG9mIFNvdXJjZUJ1ZmZlcg0KPiB0 byBMZW5ndGggYnl0ZXMgb2YgRGVzdGluYXRpb25CdWZmZXIuDQo+ICsgIElmIGFsbCBMZW5ndGgg Ynl0ZXMgb2YgdGhlIHR3byBidWZmZXJzIGFyZQ0KPiBpZGVudGljYWwsIHRoZW4gMCBpcyByZXR1 cm5lZC4gIE90aGVyd2lzZSwgdGhlDQo+ICsgIHZhbHVlIHJldHVybmVkIGlzIHRoZSBmaXJzdCBt aXNtYXRjaGVkIGJ5dGUgaW4NCj4gU291cmNlQnVmZmVyIHN1YnRyYWN0ZWQgZnJvbSB0aGUgZmly c3QNCj4gKyAgbWlzbWF0Y2hlZCBieXRlIGluIERlc3RpbmF0aW9uQnVmZmVyLg0KPiArDQo+ICsg IElmIExlbmd0aCA+IDAgYW5kIERlc3RpbmF0aW9uQnVmZmVyIGlzIE5VTEwsIHRoZW4NCj4gQVNT RVJUKCkuDQo+ICsgIElmIExlbmd0aCA+IDAgYW5kIFNvdXJjZUJ1ZmZlciBpcyBOVUxMLCB0aGVu DQo+IEFTU0VSVCgpLg0KPiArICBJZiBMZW5ndGggaXMgZ3JlYXRlciB0aGFuIChNQVhfQUREUkVT UyAtDQo+IERlc3RpbmF0aW9uQnVmZmVyICsgMSksIHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmIExl bmd0aCBpcyBncmVhdGVyIHRoYW4gKE1BWF9BRERSRVNTIC0NCj4gU291cmNlQnVmZmVyICsgMSks IHRoZW4gQVNTRVJUKCkuDQo+ICsNCj4gKyAgQHBhcmFtICBEZXN0aW5hdGlvbkJ1ZmZlciBBIHBv aW50ZXIgdG8gdGhlDQo+IGRlc3RpbmF0aW9uIGJ1ZmZlciB0byBjb21wYXJlLg0KPiArICBAcGFy YW0gIFNvdXJjZUJ1ZmZlciAgICAgIEEgcG9pbnRlciB0byB0aGUgc291cmNlDQo+IGJ1ZmZlciB0 byBjb21wYXJlLg0KPiArICBAcGFyYW0gIExlbmd0aCAgICAgICAgICAgIFRoZSBudW1iZXIgb2Yg Ynl0ZXMgdG8NCj4gY29tcGFyZS4NCj4gKw0KPiArICBAcmV0dXJuIDAgICAgICAgICAgICAgICAg IEFsbCBMZW5ndGggYnl0ZXMgb2YgdGhlDQo+IHR3byBidWZmZXJzIGFyZSBpZGVudGljYWwuDQo+ ICsgIEByZXR2YWwgTm9uLXplcm8gICAgICAgICAgVGhlIGZpcnN0IG1pc21hdGNoZWQgYnl0ZQ0K PiBpbiBTb3VyY2VCdWZmZXIgc3VidHJhY3RlZCBmcm9tIHRoZSBmaXJzdA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1pc21hdGNoZWQgYnl0ZSBpbg0KPiBEZXN0aW5hdGlvbkJ1ZmZl ci4NCj4gKw0KPiArKiovDQo+ICtJTlRODQo+ICtFRklBUEkNCj4gK0NvbXBhcmVNZW0gKA0KPiAr ICBJTiBDT05TVCBWT0lEICAqRGVzdGluYXRpb25CdWZmZXIsDQo+ICsgIElOIENPTlNUIFZPSUQg ICpTb3VyY2VCdWZmZXIsDQo+ICsgIElOIFVJTlROICAgICAgIExlbmd0aA0KPiArICApDQo+ICt7 DQo+ICsgIGlmIChMZW5ndGggPT0gMCB8fCBEZXN0aW5hdGlvbkJ1ZmZlciA9PQ0KPiBTb3VyY2VC dWZmZXIpIHsNCj4gKyAgICByZXR1cm4gMDsNCj4gKyAgfQ0KPiArICBBU1NFUlQgKERlc3RpbmF0 aW9uQnVmZmVyICE9IE5VTEwpOw0KPiArICBBU1NFUlQgKFNvdXJjZUJ1ZmZlciAhPSBOVUxMKTsN Cj4gKyAgQVNTRVJUICgoTGVuZ3RoIC0gMSkgPD0gKE1BWF9BRERSRVNTIC0NCj4gKFVJTlROKURl c3RpbmF0aW9uQnVmZmVyKSk7DQo+ICsgIEFTU0VSVCAoKExlbmd0aCAtIDEpIDw9IChNQVhfQURE UkVTUyAtDQo+IChVSU5UTilTb3VyY2VCdWZmZXIpKTsNCj4gKw0KPiArICByZXR1cm4gSW50ZXJu YWxNZW1Db21wYXJlTWVtIChEZXN0aW5hdGlvbkJ1ZmZlciwNCj4gU291cmNlQnVmZmVyLCBMZW5n dGgpOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvTWRlUGtnL0xpYnJhcnkvQmFzZU1lbW9yeUxpYk1t aW8vQ29weU1lbS5jDQo+IGIvTWRlUGtnL0xpYnJhcnkvQmFzZU1lbW9yeUxpYk1taW8vQ29weU1l bS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg0YTIwN2JmMGY4YTUNCj4gMzdiMDgzMmI1YzRjOWY2 NzM1MTIyZWU3ODUxDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvTWRlUGtnL0xpYnJhcnkvQmFz ZU1lbW9yeUxpYk1taW8vQ29weU1lbS5jDQo+IEBAIC0wLDAgKzEsMTQ5IEBADQo+ICsvKiogQGZp bGUNCj4gKyAgSW1wbGVtZW50YXRpb24gb2YgdGhlIEludGVybmFsTWVtQ29weU1lbSByb3V0aW5l Lg0KPiBUaGlzIGZ1bmN0aW9uIGlzIGJyb2tlbg0KPiArICBvdXQgaW50byBpdHMgb3duIHNvdXJj ZSBmaWxlIHNvIHRoYXQgaXQgY2FuIGJlDQo+IGV4Y2x1ZGVkIGZyb20gYSBidWlsZCBmb3IgYQ0K PiArICBwYXJ0aWN1bGFyIHBsYXRmb3JtIGVhc2lseSBpZiBhbiBvcHRpbWl6ZWQgdmVyc2lvbg0K PiBpcyBkZXNpcmVkLg0KPiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMTYsIEludGVs IENvcnBvcmF0aW9uLiBBbGwNCj4gcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyAgQ29weXJpZ2h0 IChjKSAyMDEyIC0gMjAyMCwgQVJNIEx0ZC4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ ICsgIENvcHlyaWdodCAoYykgMjAxNiwgTGluYXJvIEx0ZC4gQWxsIHJpZ2h0cw0KPiByZXNlcnZl ZC48QlI+DQo+ICsNCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1Q YXRlbnQNCj4gKw0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlICJNZW1MaWJJbnRlcm5hbHMuaCIN Cj4gKw0KPiArLyoqDQo+ICsgIENvcHkgTGVuZ3RoIGJ5dGVzIGZyb20gU291cmNlIHRvIERlc3Rp bmF0aW9uLg0KPiArDQo+ICsgIEBwYXJhbSAgRGVzdGluYXRpb25CdWZmZXIgVGhlIHRhcmdldCBv ZiB0aGUgY29weQ0KPiByZXF1ZXN0Lg0KPiArICBAcGFyYW0gIFNvdXJjZUJ1ZmZlciAgICAgIFRo ZSBwbGFjZSB0byBjb3B5IGZyb20uDQo+ICsgIEBwYXJhbSAgTGVuZ3RoICAgICAgICAgICAgVGhl IG51bWJlciBvZiBieXRlcyB0bw0KPiBjb3B5Lg0KPiArDQo+ICsgIEByZXR1cm4gRGVzdGluYXRp b24NCj4gKw0KPiArKiovDQo+ICtWT0lEICoNCj4gK0VGSUFQSQ0KPiArSW50ZXJuYWxNZW1Db3B5 TWVtICgNCj4gKyAgT1VUICAgICBWT0lEDQo+ICpEZXN0aW5hdGlvbkJ1ZmZlciwNCj4gKyAgSU4g ICAgICBDT05TVCBWT0lEICAgICAgICAgICAgICAgICpTb3VyY2VCdWZmZXIsDQo+ICsgIElOICAg ICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBMZW5ndGgNCj4gKyAgKQ0KPiArew0KPiArICAv Lw0KPiArICAvLyBEZWNsYXJlIHRoZSBsb2NhbCB2YXJpYWJsZXMgdGhhdCBhY3R1YWxseSBtb3Zl DQo+IHRoZSBkYXRhIGVsZW1lbnRzIGFzDQo+ICsgIC8vIHZvbGF0aWxlIHRvIHByZXZlbnQgdGhl IG9wdGltaXplciBmcm9tIHJlcGxhY2luZw0KPiB0aGlzIGZ1bmN0aW9uIHdpdGgNCj4gKyAgLy8g dGhlIGludHJpbnNpYyBtZW1jcHkoKQ0KPiArICAvLw0KPiArICB2b2xhdGlsZSBVSU5UOCAgICAg ICAgICAgICAgICAgICAgKkRlc3RpbmF0aW9uODsNCj4gKyAgQ09OU1QgVUlOVDggICAgICAgICAg ICAgICAgICAgICAgICpTb3VyY2U4Ow0KPiArICB2b2xhdGlsZSBVSU5UMzIgICAgICAgICAgICAg ICAgICAgKkRlc3RpbmF0aW9uMzI7DQo+ICsgIENPTlNUIFVJTlQzMiAgICAgICAgICAgICAgICAg ICAgICAqU291cmNlMzI7DQo+ICsgIHZvbGF0aWxlIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAq RGVzdGluYXRpb242NDsNCj4gKyAgQ09OU1QgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICpT b3VyY2U2NDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsaWdubWVu dDsNCj4gKw0KPiArICBpZiAoKCgoVUlOVE4pRGVzdGluYXRpb25CdWZmZXIgJiAweDcpID09IDAp ICYmDQo+ICsgICAgICAoKChVSU5UTilTb3VyY2VCdWZmZXIgJiAweDcpID09IDApICAgICAgJiYN Cj4gKyAgICAgIChMZW5ndGggPj0gOCkpIHsNCj4gKyAgICBpZiAoU291cmNlQnVmZmVyID4gRGVz dGluYXRpb25CdWZmZXIpIHsNCj4gKyAgICAgIERlc3RpbmF0aW9uNjQgPSAoVUlOVDY0KilEZXN0 aW5hdGlvbkJ1ZmZlcjsNCj4gKyAgICAgIFNvdXJjZTY0ID0gKENPTlNUIFVJTlQ2NCopU291cmNl QnVmZmVyOw0KPiArICAgICAgd2hpbGUgKExlbmd0aCA+PSA4KSB7DQo+ICsgICAgICAgIE1taW9X cml0ZTY0ICgoVUlOVE4pRGVzdGluYXRpb242NCsrLA0KPiBNbWlvUmVhZDY0ICgoVUlOVE4pU291 cmNlNjQrKykpOw0KPiArICAgICAgICBMZW5ndGggLT0gODsNCj4gKyAgICAgIH0NCj4gKw0KPiAr ICAgICAgLy8gRmluaXNoIGlmIHRoZXJlIGFyZSBzdGlsbCBzb21lIGJ5dGVzIHRvIGNvcHkNCj4g KyAgICAgIERlc3RpbmF0aW9uOCA9IChVSU5UOCopRGVzdGluYXRpb242NDsNCj4gKyAgICAgIFNv dXJjZTggPSAoQ09OU1QgVUlOVDgqKVNvdXJjZTY0Ow0KPiArICAgICAgd2hpbGUgKExlbmd0aC0t ICE9IDApIHsNCj4gKyAgICAgICAgTW1pb1dyaXRlOCAoKFVJTlROKURlc3RpbmF0aW9uOCsrLCBN bWlvUmVhZDgNCj4gKChVSU5UTilTb3VyY2U4KyspKTsNCj4gKyAgICAgIH0NCj4gKyAgICB9IGVs c2UgaWYgKFNvdXJjZUJ1ZmZlciA8IERlc3RpbmF0aW9uQnVmZmVyKSB7DQo+ICsgICAgICBEZXN0 aW5hdGlvbjY0ID0NCj4gKFVJTlQ2NCopKChVSU5UTilEZXN0aW5hdGlvbkJ1ZmZlciArIExlbmd0 aCk7DQo+ICsgICAgICBTb3VyY2U2NCA9IChDT05TVCBVSU5UNjQqKSgoVUlOVE4pU291cmNlQnVm ZmVyICsNCj4gTGVuZ3RoKTsNCj4gKw0KPiArICAgICAgLy8gRGVzdGluYXRpb242NCBhbmQgU291 cmNlNjQgd2VyZSBhbGlnbmVkIG9uIGENCj4gNjQtYml0IGJvdW5kYXJ5DQo+ICsgICAgICAvLyBi dXQgaWYgbGVuZ3RoIGlzIG5vdCBhIG11bHRpcGxlIG9mIDggYnl0ZXMNCj4gdGhlbiB0aGV5IHdv bid0IGJlDQo+ICsgICAgICAvLyBhbnltb3JlLg0KPiArDQo+ICsgICAgICBBbGlnbm1lbnQgPSBM ZW5ndGggJiAweDc7DQo+ICsgICAgICBpZiAoQWxpZ25tZW50ICE9IDApIHsNCj4gKyAgICAgICAg RGVzdGluYXRpb244ID0gKFVJTlQ4KilEZXN0aW5hdGlvbjY0Ow0KPiArICAgICAgICBTb3VyY2U4 ID0gKENPTlNUIFVJTlQ4KilTb3VyY2U2NDsNCj4gKw0KPiArICAgICAgICB3aGlsZSAoQWxpZ25t ZW50LS0gIT0gMCkgew0KPiArICAgICAgICAgIE1taW9Xcml0ZTggKChVSU5UTiktLURlc3RpbmF0 aW9uOCwgTW1pb1JlYWQ4DQo+ICgoVUlOVE4pLS1Tb3VyY2U4KSk7DQo+ICsgICAgICAgICAgLS1M ZW5ndGg7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgRGVzdGluYXRpb242NCA9IChVSU5UNjQq KURlc3RpbmF0aW9uODsNCj4gKyAgICAgICAgU291cmNlNjQgPSAoQ09OU1QgVUlOVDY0KilTb3Vy Y2U4Ow0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICB3aGlsZSAoTGVuZ3RoID4gMCkgew0KPiAr ICAgICAgICBNbWlvV3JpdGU2NCAoKFVJTlROKS0tRGVzdGluYXRpb242NCwNCj4gTW1pb1JlYWQ2 NCAoKFVJTlROKS0tU291cmNlNjQpKTsNCj4gKyAgICAgICAgTGVuZ3RoIC09IDg7DQo+ICsgICAg ICB9DQo+ICsgICAgfQ0KPiArICB9IGVsc2UgaWYgKCgoKFVJTlROKURlc3RpbmF0aW9uQnVmZmVy ICYgMHgzKSA9PSAwKQ0KPiAmJg0KPiArICAgICAgICAgICAgICgoKFVJTlROKVNvdXJjZUJ1ZmZl ciAmIDB4MykgPT0gMCkNCj4gJiYNCj4gKyAgICAgICAgICAgICAoTGVuZ3RoID49IDQpKSB7DQo+ ICsgICAgaWYgKFNvdXJjZUJ1ZmZlciA+IERlc3RpbmF0aW9uQnVmZmVyKSB7DQo+ICsgICAgICBE ZXN0aW5hdGlvbjMyID0gKFVJTlQzMiopRGVzdGluYXRpb25CdWZmZXI7DQo+ICsgICAgICBTb3Vy Y2UzMiA9IChDT05TVCBVSU5UMzIqKVNvdXJjZUJ1ZmZlcjsNCj4gKyAgICAgIHdoaWxlIChMZW5n dGggPj0gNCkgew0KPiArICAgICAgICBNbWlvV3JpdGUzMiAoKFVJTlROKURlc3RpbmF0aW9uMzIr KywNCj4gTW1pb1JlYWQzMiAoKFVJTlROKVNvdXJjZTMyKyspKTsNCj4gKyAgICAgICAgTGVuZ3Ro IC09IDQ7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIC8vIEZpbmlzaCBpZiB0aGVyZSBhcmUg c3RpbGwgc29tZSBieXRlcyB0byBjb3B5DQo+ICsgICAgICBEZXN0aW5hdGlvbjggPSAoVUlOVDgq KURlc3RpbmF0aW9uMzI7DQo+ICsgICAgICBTb3VyY2U4ID0gKENPTlNUIFVJTlQ4KilTb3VyY2Uz MjsNCj4gKyAgICAgIHdoaWxlIChMZW5ndGgtLSAhPSAwKSB7DQo+ICsgICAgICAgIE1taW9Xcml0 ZTggKChVSU5UTilEZXN0aW5hdGlvbjgrKywgTW1pb1JlYWQ4DQo+ICgoVUlOVE4pU291cmNlOCsr KSk7DQo+ICsgICAgICB9DQo+ICsgICAgfSBlbHNlIGlmIChTb3VyY2VCdWZmZXIgPCBEZXN0aW5h dGlvbkJ1ZmZlcikgew0KPiArICAgICAgRGVzdGluYXRpb24zMiA9DQo+IChVSU5UMzIqKSgoVUlO VE4pRGVzdGluYXRpb25CdWZmZXIgKyBMZW5ndGgpOw0KPiArICAgICAgU291cmNlMzIgPSAoQ09O U1QgVUlOVDMyKikoKFVJTlROKVNvdXJjZUJ1ZmZlciArDQo+IExlbmd0aCk7DQo+ICsNCj4gKyAg ICAgIC8vIERlc3RpbmF0aW9uMzIgYW5kIFNvdXJjZTMyIHdlcmUgYWxpZ25lZCBvbiBhDQo+IDMy LWJpdCBib3VuZGFyeQ0KPiArICAgICAgLy8gYnV0IGlmIGxlbmd0aCBpcyBub3QgYSBtdWx0aXBs ZSBvZiA0IGJ5dGVzDQo+IHRoZW4gdGhleSB3b24ndCBiZQ0KPiArICAgICAgLy8gYW55bW9yZS4N Cj4gKw0KPiArICAgICAgQWxpZ25tZW50ID0gTGVuZ3RoICYgMHgzOw0KPiArICAgICAgaWYgKEFs aWdubWVudCAhPSAwKSB7DQo+ICsgICAgICAgIERlc3RpbmF0aW9uOCA9IChVSU5UOCopRGVzdGlu YXRpb24zMjsNCj4gKyAgICAgICAgU291cmNlOCA9IChDT05TVCBVSU5UOCopU291cmNlMzI7DQo+ ICsNCj4gKyAgICAgICAgd2hpbGUgKEFsaWdubWVudC0tICE9IDApIHsNCj4gKyAgICAgICAgICBN bWlvV3JpdGU4ICgoVUlOVE4pLS1EZXN0aW5hdGlvbjgsIE1taW9SZWFkOA0KPiAoKFVJTlROKS0t U291cmNlOCkpOw0KPiArICAgICAgICAgIC0tTGVuZ3RoOw0KPiArICAgICAgICB9DQo+ICsgICAg ICAgIERlc3RpbmF0aW9uMzIgPSAoVUlOVDMyKilEZXN0aW5hdGlvbjg7DQo+ICsgICAgICAgIFNv dXJjZTMyID0gKENPTlNUIFVJTlQzMiopU291cmNlODsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAg ICAgd2hpbGUgKExlbmd0aCA+IDApIHsNCj4gKyAgICAgICAgTW1pb1dyaXRlMzIgKChVSU5UTikt LURlc3RpbmF0aW9uMzIsDQo+IE1taW9SZWFkMzIgKChVSU5UTiktLVNvdXJjZTMyKSk7DQo+ICsg ICAgICAgIExlbmd0aCAtPSA0Ow0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfSBlbHNlIHsN Cj4gKyAgICBpZiAoU291cmNlQnVmZmVyID4gRGVzdGluYXRpb25CdWZmZXIpIHsNCj4gKyAgICAg IERlc3RpbmF0aW9uOCA9IChVSU5UOCopRGVzdGluYXRpb25CdWZmZXI7DQo+ICsgICAgICBTb3Vy Y2U4ID0gKENPTlNUIFVJTlQ4KilTb3VyY2VCdWZmZXI7DQo+ICsgICAgICB3aGlsZSAoTGVuZ3Ro LS0gIT0gMCkgew0KPiArICAgICAgICBNbWlvV3JpdGU4ICgoVUlOVE4pRGVzdGluYXRpb244Kyss IE1taW9SZWFkOA0KPiAoKFVJTlROKVNvdXJjZTgrKykpOw0KPiArICAgICAgfQ0KPiArICAgIH0g ZWxzZSBpZiAoU291cmNlQnVmZmVyIDwgRGVzdGluYXRpb25CdWZmZXIpIHsNCj4gKyAgICAgIERl c3RpbmF0aW9uOCA9IChVSU5UOCopRGVzdGluYXRpb25CdWZmZXIgKw0KPiAoTGVuZ3RoIC0gMSk7 DQo+ICsgICAgICBTb3VyY2U4ID0gKENPTlNUIFVJTlQ4KilTb3VyY2VCdWZmZXIgKyAoTGVuZ3Ro IC0NCj4gMSk7DQo+ICsgICAgICB3aGlsZSAoTGVuZ3RoLS0gIT0gMCkgew0KPiArICAgICAgICBN bWlvV3JpdGU4ICgoVUlOVE4pRGVzdGluYXRpb244LS0sIE1taW9SZWFkOA0KPiAoKFVJTlROKVNv dXJjZTgtLSkpOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArICByZXR1cm4gRGVz dGluYXRpb25CdWZmZXI7DQo+ICt9DQo+IGRpZmYgLS1naXQNCj4gYS9NZGVQa2cvTGlicmFyeS9C YXNlTWVtb3J5TGliTW1pby9Db3B5TWVtV3JhcHBlci5jDQo+IGIvTWRlUGtnL0xpYnJhcnkvQmFz ZU1lbW9yeUxpYk1taW8vQ29weU1lbVdyYXBwZXIuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNTU3 YmJiODkwNGMyDQo+IGIwN2M2NDQyNjEyOTBhNjJiZTZmYzgzMWMwOA0KPiAtLS0gL2Rldi9udWxs DQo+ICsrKyBiL01kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL0NvcHlNZW1XcmFwcGVy LmMNCj4gQEAgLTAsMCArMSw1OSBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIENvcHlNZW0oKSBpbXBs ZW1lbnRhdGlvbi4NCj4gKw0KPiArICBUaGUgZm9sbG93aW5nIEJhc2VNZW1vcnlMaWIgaW5zdGFu Y2VzIGNvbnRhaW4gdGhlDQo+IHNhbWUgY29weSBvZiB0aGlzIGZpbGU6DQo+ICsNCj4gKyAgICBC YXNlTWVtb3J5TGliDQo+ICsgICAgQmFzZU1lbW9yeUxpYk1taW8NCj4gKyAgICBCYXNlTWVtb3J5 TGliTW14DQo+ICsgICAgQmFzZU1lbW9yeUxpYlNzZTINCj4gKyAgICBCYXNlTWVtb3J5TGliUmVw U3RyDQo+ICsgICAgQmFzZU1lbW9yeUxpYk9wdER4ZQ0KPiArICAgIEJhc2VNZW1vcnlMaWJPcHRQ ZWkNCj4gKyAgICBQZWlNZW1vcnlMaWINCj4gKyAgICBVZWZpTWVtb3J5TGliDQo+ICsNCj4gKyAg Q29weXJpZ2h0IChjKSAyMDA2IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbA0KPiByaWdo dHMgcmVzZXJ2ZWQuPEJSPg0KPiArICBDb3B5cmlnaHQgKGMpIDIwMjAsIEFSTSBMdGQuIEFsbCBy aWdodHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE LTItQ2xhdXNlLVBhdGVudA0KPiArDQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgIk1lbUxpYklu dGVybmFscy5oIg0KPiArDQo+ICsvKioNCj4gKyAgQ29waWVzIGEgc291cmNlIGJ1ZmZlciB0byBh IGRlc3RpbmF0aW9uIGJ1ZmZlciwgYW5kDQo+IHJldHVybnMgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZl ci4NCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIGNvcGllcyBMZW5ndGggYnl0ZXMgZnJvbSBTb3Vy Y2VCdWZmZXINCj4gdG8gRGVzdGluYXRpb25CdWZmZXIsIGFuZCByZXR1cm5zDQo+ICsgIERlc3Rp bmF0aW9uQnVmZmVyLiAgVGhlIGltcGxlbWVudGF0aW9uIG11c3QgYmUNCj4gcmVlbnRyYW50LCBh bmQgaXQgbXVzdCBoYW5kbGUgdGhlIGNhc2UNCj4gKyAgd2hlcmUgU291cmNlQnVmZmVyIG92ZXJs YXBzIERlc3RpbmF0aW9uQnVmZmVyLg0KPiArDQo+ICsgIElmIExlbmd0aCBpcyBncmVhdGVyIHRo YW4gKE1BWF9BRERSRVNTIC0NCj4gRGVzdGluYXRpb25CdWZmZXIgKyAxKSwgdGhlbiBBU1NFUlQo KS4NCj4gKyAgSWYgTGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiAoTUFYX0FERFJFU1MgLQ0KPiBTb3Vy Y2VCdWZmZXIgKyAxKSwgdGhlbiBBU1NFUlQoKS4NCj4gKw0KPiArICBAcGFyYW0gIERlc3RpbmF0 aW9uQnVmZmVyICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBkZXN0aW5hdGlvbiBidWZmZXIgb2YgdGhl IG1lbW9yeSBjb3B5Lg0KPiArICBAcGFyYW0gIFNvdXJjZUJ1ZmZlciAgICAgICAgQSBwb2ludGVy IHRvIHRoZSBzb3VyY2UNCj4gYnVmZmVyIG9mIHRoZSBtZW1vcnkgY29weS4NCj4gKyAgQHBhcmFt ICBMZW5ndGggICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8NCj4gY29weSBmcm9t IFNvdXJjZUJ1ZmZlciB0byBEZXN0aW5hdGlvbkJ1ZmZlci4NCj4gKw0KPiArICBAcmV0dXJuIERl c3RpbmF0aW9uQnVmZmVyLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQgKg0KPiArRUZJQVBJDQo+ICtD b3B5TWVtICgNCj4gKyAgT1VUIFZPSUQgICAgICAgKkRlc3RpbmF0aW9uQnVmZmVyLA0KPiArICBJ TiBDT05TVCBWT0lEICAqU291cmNlQnVmZmVyLA0KPiArICBJTiBVSU5UTiAgICAgICBMZW5ndGgN Cj4gKyAgKQ0KPiArew0KPiArICBpZiAoTGVuZ3RoID09IDApIHsNCj4gKyAgICByZXR1cm4gRGVz dGluYXRpb25CdWZmZXI7DQo+ICsgIH0NCj4gKyAgQVNTRVJUICgoTGVuZ3RoIC0gMSkgPD0gKE1B WF9BRERSRVNTIC0NCj4gKFVJTlROKURlc3RpbmF0aW9uQnVmZmVyKSk7DQo+ICsgIEFTU0VSVCAo KExlbmd0aCAtIDEpIDw9IChNQVhfQUREUkVTUyAtDQo+IChVSU5UTilTb3VyY2VCdWZmZXIpKTsN Cj4gKw0KPiArICBpZiAoRGVzdGluYXRpb25CdWZmZXIgPT0gU291cmNlQnVmZmVyKSB7DQo+ICsg ICAgcmV0dXJuIERlc3RpbmF0aW9uQnVmZmVyOw0KPiArICB9DQo+ICsgIHJldHVybiBJbnRlcm5h bE1lbUNvcHlNZW0gKERlc3RpbmF0aW9uQnVmZmVyLA0KPiBTb3VyY2VCdWZmZXIsIExlbmd0aCk7 DQo+ICt9DQo+IGRpZmYgLS1naXQNCj4gYS9NZGVQa2cvTGlicmFyeS9CYXNlTWVtb3J5TGliTW1p by9Jc1plcm9CdWZmZXJXcmFwcGVyLg0KPiBjDQo+IGIvTWRlUGtnL0xpYnJhcnkvQmFzZU1lbW9y eUxpYk1taW8vSXNaZXJvQnVmZmVyV3JhcHBlci4NCj4gYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45 YzMxMzNjNjY4YzQzDQo+IDQ4MzliMGQ5YmYxMDViYzcyNjVlZWI3NmE1Yg0KPiAtLS0gL2Rldi9u dWxsDQo+ICsrKw0KPiBiL01kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL0lzWmVyb0J1 ZmZlcldyYXBwZXIuDQo+IGMNCj4gQEAgLTAsMCArMSw1MCBAQA0KPiArLyoqIEBmaWxlDQo+ICsg IEltcGxlbWVudGF0aW9uIG9mIElzWmVyb0J1ZmZlciBmdW5jdGlvbi4NCj4gKw0KPiArICBUaGUg Zm9sbG93aW5nIEJhc2VNZW1vcnlMaWIgaW5zdGFuY2VzIGNvbnRhaW4gdGhlDQo+IHNhbWUgY29w eSBvZiB0aGlzIGZpbGU6DQo+ICsNCj4gKyAgICBCYXNlTWVtb3J5TGliDQo+ICsgICAgQmFzZU1l bW9yeUxpYk1taW8NCj4gKyAgICBCYXNlTWVtb3J5TGliTW14DQo+ICsgICAgQmFzZU1lbW9yeUxp YlNzZTINCj4gKyAgICBCYXNlTWVtb3J5TGliUmVwU3RyDQo+ICsgICAgQmFzZU1lbW9yeUxpYk9w dER4ZQ0KPiArICAgIEJhc2VNZW1vcnlMaWJPcHRQZWkNCj4gKyAgICBQZWlNZW1vcnlMaWINCj4g KyAgICBVZWZpTWVtb3J5TGliDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDE2LCBJbnRlbCBD b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ICsgIENvcHlyaWdodCAo YykgMjAyMCwgQVJNIEx0ZC4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsNCj4gKyoqLw0KPiAr DQo+ICsjaW5jbHVkZSAiTWVtTGliSW50ZXJuYWxzLmgiDQo+ICsNCj4gKy8qKg0KPiArICBDaGVj a3MgaWYgdGhlIGNvbnRlbnRzIG9mIGEgYnVmZmVyIGFyZSBhbGwgemVyb3MuDQo+ICsNCj4gKyAg VGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciB0aGUgY29udGVudHMgb2YgYQ0KPiBidWZmZXIg YXJlIGFsbCB6ZXJvcy4gSWYgdGhlDQo+ICsgIGNvbnRlbnRzIGFyZSBhbGwgemVyb3MsIHJldHVy biBUUlVFLiBPdGhlcndpc2UsDQo+IHJldHVybiBGQUxTRS4NCj4gKw0KPiArICBJZiBMZW5ndGgg PiAwIGFuZCBCdWZmZXIgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgTGVuZ3RoIGlz IGdyZWF0ZXIgdGhhbiAoTUFYX0FERFJFU1MgLSBCdWZmZXIgKw0KPiAxKSwgdGhlbiBBU1NFUlQo KS4NCj4gKw0KPiArICBAcGFyYW0gIEJ1ZmZlciAgICAgIFRoZSBwb2ludGVyIHRvIHRoZSBidWZm ZXIgdG8gYmUNCj4gY2hlY2tlZC4NCj4gKyAgQHBhcmFtICBMZW5ndGggICAgICBUaGUgc2l6ZSBv ZiB0aGUgYnVmZmVyIChpbg0KPiBieXRlcykgdG8gYmUgY2hlY2tlZC4NCj4gKw0KPiArICBAcmV0 dmFsIFRSVUUgICAgICAgIENvbnRlbnRzIG9mIHRoZSBidWZmZXIgYXJlIGFsbA0KPiB6ZXJvcy4N Cj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICBDb250ZW50cyBvZiB0aGUgYnVmZmVyIGFyZSBub3QN Cj4gYWxsIHplcm9zLg0KPiArDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArSXNa ZXJvQnVmZmVyICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJ1ZmZlciwNCj4gKyAgSU4gVUlOVE4g ICAgICAgTGVuZ3RoDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUICghKEJ1ZmZlciA9PSBOVUxM ICYmIExlbmd0aCA+IDApKTsNCj4gKyAgQVNTRVJUICgoTGVuZ3RoIC0gMSkgPD0gKE1BWF9BRERS RVNTIC0NCj4gKFVJTlROKUJ1ZmZlcikpOw0KPiArICByZXR1cm4gSW50ZXJuYWxNZW1Jc1plcm9C dWZmZXIgKEJ1ZmZlciwgTGVuZ3RoKTsNCj4gK30NCj4gZGlmZiAtLWdpdA0KPiBhL01kZVBrZy9M aWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL01lbUxpYkdlbmVyaWMuYw0KPiBiL01kZVBrZy9MaWJy YXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL01lbUxpYkdlbmVyaWMuYw0KPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw Li4xYzY1YjY3NDIzMDc5DQo+IDVlOTU2YzlkMjJmMmI5YzE1MWM0MTgzOTcwNg0KPiAtLS0gL2Rl di9udWxsDQo+ICsrKyBiL01kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL01lbUxpYkdl bmVyaWMuYw0KPiBAQCAtMCwwICsxLDMwNCBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIEFyY2hpdGVj dHVyZSBJbmRlcGVuZGVudCBCYXNlIE1lbW9yeSBMaWJyYXJ5DQo+IEltcGxlbWVudGF0aW9uLg0K PiArDQo+ICsgIFRoZSBmb2xsb3dpbmcgQmFzZU1lbW9yeUxpYiBpbnN0YW5jZXMgY29udGFpbiB0 aGUNCj4gc2FtZSBjb3B5IG9mIHRoaXMgZmlsZToNCj4gKyAgICBCYXNlTWVtb3J5TGliDQo+ICsg ICAgQmFzZU1lbW9yeUxpYk1taW8NCj4gKyAgICBQZWlNZW1vcnlMaWINCj4gKyAgICBVZWZpTWVt b3J5TGliDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxNiwgSW50ZWwgQ29ycG9y YXRpb24uIEFsbA0KPiByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArICBDb3B5cmlnaHQgKGMpIDIw MjAsIEFSTSBMdGQuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiArICBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArDQo+ICsqKi8NCj4gKw0KPiAr I2luY2x1ZGUgIk1lbUxpYkludGVybmFscy5oIg0KPiArDQo+ICsvKioNCj4gKyAgRmlsbHMgYSB0 YXJnZXQgYnVmZmVyIHdpdGggYSAxNi1iaXQgdmFsdWUsIGFuZA0KPiByZXR1cm5zIHRoZSB0YXJn ZXQgYnVmZmVyLg0KPiArDQo+ICsgIEBwYXJhbSAgQnVmZmVyICBUaGUgcG9pbnRlciB0byB0aGUg dGFyZ2V0IGJ1ZmZlciB0bw0KPiBmaWxsLg0KPiArICBAcGFyYW0gIExlbmd0aCAgVGhlIGNvdW50 IG9mIDE2LWJpdCB2YWx1ZSB0byBmaWxsLg0KPiArICBAcGFyYW0gIFZhbHVlICAgVGhlIHZhbHVl IHdpdGggd2hpY2ggdG8gZmlsbCBMZW5ndGgNCj4gYnl0ZXMgb2YgQnVmZmVyLg0KPiArDQo+ICsg IEByZXR1cm4gQnVmZmVyDQo+ICsNCj4gKyoqLw0KPiArVk9JRCAqDQo+ICtFRklBUEkNCj4gK0lu dGVybmFsTWVtU2V0TWVtMTYgKA0KPiArICBPVVQgICAgIFZPSUQgICAgICAgICAgICAgICAgICAg ICAgKkJ1ZmZlciwNCj4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIExlbmd0 aCwNCj4gKyAgSU4gICAgICBVSU5UMTYgICAgICAgICAgICAgICAgICAgIFZhbHVlDQo+ICsgICkN Cj4gK3sNCj4gKyAgdm9sYXRpbGUgVUlOVDE2ICAqRGVzdGluYXRpb24xNjsNCj4gKw0KPiArICBE ZXN0aW5hdGlvbjE2ID0gKFVJTlQxNiopQnVmZmVyOw0KPiArICB3aGlsZSAoTGVuZ3RoID4gMCkg ew0KPiArICAgIE1taW9Xcml0ZTE2ICgoVUlOVE4pLS1EZXN0aW5hdGlvbjE2LCBWYWx1ZSk7DQo+ ICsgICAgTGVuZ3RoIC09IDI7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gQnVmZmVyOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgRmlsbHMgYSB0YXJnZXQgYnVmZmVyIHdpdGggYSAzMi1iaXQg dmFsdWUsIGFuZA0KPiByZXR1cm5zIHRoZSB0YXJnZXQgYnVmZmVyLg0KPiArDQo+ICsgIEBwYXJh bSAgQnVmZmVyICBUaGUgcG9pbnRlciB0byB0aGUgdGFyZ2V0IGJ1ZmZlciB0bw0KPiBmaWxsLg0K PiArICBAcGFyYW0gIExlbmd0aCAgVGhlIGNvdW50IG9mIDMyLWJpdCB2YWx1ZSB0byBmaWxsLg0K PiArICBAcGFyYW0gIFZhbHVlICAgVGhlIHZhbHVlIHdpdGggd2hpY2ggdG8gZmlsbCBMZW5ndGgN Cj4gYnl0ZXMgb2YgQnVmZmVyLg0KPiArDQo+ICsgIEByZXR1cm4gQnVmZmVyDQo+ICsNCj4gKyoq Lw0KPiArVk9JRCAqDQo+ICtFRklBUEkNCj4gK0ludGVybmFsTWVtU2V0TWVtMzIgKA0KPiArICBP VVQgICAgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlciwNCj4gKyAgSU4gICAgICBV SU5UTiAgICAgICAgICAgICAgICAgICAgIExlbmd0aCwNCj4gKyAgSU4gICAgICBVSU5UMzIgICAg ICAgICAgICAgICAgICAgIFZhbHVlDQo+ICsgICkNCj4gK3sNCj4gKyAgdm9sYXRpbGUgVUlOVDMy ICAqRGVzdGluYXRpb24zMjsNCj4gKw0KPiArICBEZXN0aW5hdGlvbjMyID0gKFVJTlQzMiopQnVm ZmVyOw0KPiArICB3aGlsZSAoTGVuZ3RoID4gMCkgew0KPiArICAgIE1taW9Xcml0ZTMyICgoVUlO VE4pLS1EZXN0aW5hdGlvbjMyLCBWYWx1ZSk7DQo+ICsgICAgTGVuZ3RoIC09IDQ7DQo+ICsgIH0N Cj4gKyAgcmV0dXJuIEJ1ZmZlcjsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEZpbGxzIGEgdGFy Z2V0IGJ1ZmZlciB3aXRoIGEgNjQtYml0IHZhbHVlLCBhbmQNCj4gcmV0dXJucyB0aGUgdGFyZ2V0 IGJ1ZmZlci4NCj4gKw0KPiArICBAcGFyYW0gIEJ1ZmZlciAgVGhlIHBvaW50ZXIgdG8gdGhlIHRh cmdldCBidWZmZXIgdG8NCj4gZmlsbC4NCj4gKyAgQHBhcmFtICBMZW5ndGggIFRoZSBjb3VudCBv ZiA2NC1iaXQgdmFsdWUgdG8gZmlsbC4NCj4gKyAgQHBhcmFtICBWYWx1ZSAgIFRoZSB2YWx1ZSB3 aXRoIHdoaWNoIHRvIGZpbGwgTGVuZ3RoDQo+IGJ5dGVzIG9mIEJ1ZmZlci4NCj4gKw0KPiArICBA cmV0dXJuIEJ1ZmZlcg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQgKg0KPiArRUZJQVBJDQo+ICtJbnRl cm5hbE1lbVNldE1lbTY0ICgNCj4gKyAgT1VUICAgICBWT0lEICAgICAgICAgICAgICAgICAgICAg ICpCdWZmZXIsDQo+ICsgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBMZW5ndGgs DQo+ICsgIElOICAgICAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICBWYWx1ZQ0KPiArICApDQo+ ICt7DQo+ICsgIHZvbGF0aWxlIFVJTlQ2NCAgKkRlc3RpbmF0aW9uNjQ7DQo+ICsNCj4gKyAgRGVz dGluYXRpb242NCA9IChVSU5UNjQqKUJ1ZmZlcjsNCj4gKyAgd2hpbGUgKExlbmd0aCA+IDApIHsN Cj4gKyAgICBNbWlvV3JpdGU2NCAoKFVJTlROKS0tRGVzdGluYXRpb242NCwgVmFsdWUpOw0KPiAr ICAgIExlbmd0aCAtPSA4Ow0KPiArICB9DQo+ICsgIHJldHVybiBCdWZmZXI7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBTZXQgQnVmZmVyIHRvIDAgZm9yIFNpemUgYnl0ZXMuDQo+ICsNCj4gKyAg QHBhcmFtICBCdWZmZXIgTWVtb3J5IHRvIHNldC4NCj4gKyAgQHBhcmFtICBMZW5ndGggVGhlIG51 bWJlciBvZiBieXRlcyB0byBzZXQuDQo+ICsNCj4gKyAgQHJldHVybiBCdWZmZXINCj4gKw0KPiAr KiovDQo+ICtWT0lEICoNCj4gK0VGSUFQSQ0KPiArSW50ZXJuYWxNZW1aZXJvTWVtICgNCj4gKyAg T1VUICAgICBWT0lEICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXIsDQo+ICsgIElOICAgICAg VUlOVE4gICAgICAgICAgICAgICAgICAgICBMZW5ndGgNCj4gKyAgKQ0KPiArew0KPiArICByZXR1 cm4gSW50ZXJuYWxNZW1TZXRNZW0gKEJ1ZmZlciwgTGVuZ3RoLCAwKTsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIENvbXBhcmVzIHR3byBtZW1vcnkgYnVmZmVycyBvZiBhIGdpdmVuIGxlbmd0aC4N Cj4gKw0KPiArICBAcGFyYW0gIERlc3RpbmF0aW9uQnVmZmVyIFRoZSBmaXJzdCBtZW1vcnkgYnVm ZmVyLg0KPiArICBAcGFyYW0gIFNvdXJjZUJ1ZmZlciAgICAgIFRoZSBzZWNvbmQgbWVtb3J5IGJ1 ZmZlci4NCj4gKyAgQHBhcmFtICBMZW5ndGggICAgICAgICAgICBMZW5ndGggb2YNCj4gRGVzdGlu YXRpb25CdWZmZXIgYW5kIFNvdXJjZUJ1ZmZlciBtZW1vcnkNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZWdpb25zIHRvIGNvbXBhcmUuIE11c3QNCj4gYmUgbm9uLXplcm8uDQo+ICsN Cj4gKyAgQHJldHVybiAwICAgICAgICAgICAgICAgICBBbGwgTGVuZ3RoIGJ5dGVzIG9mIHRoZQ0K PiB0d28gYnVmZmVycyBhcmUgaWRlbnRpY2FsLg0KPiArICBAcmV0dmFsIE5vbi16ZXJvICAgICAg ICAgIFRoZSBmaXJzdCBtaXNtYXRjaGVkIGJ5dGUNCj4gaW4gU291cmNlQnVmZmVyIHN1YnRyYWN0 ZWQgZnJvbSB0aGUgZmlyc3QNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNtYXRj aGVkIGJ5dGUgaW4NCj4gRGVzdGluYXRpb25CdWZmZXIuDQo+ICsNCj4gKyoqLw0KPiArSU5UTg0K PiArRUZJQVBJDQo+ICtJbnRlcm5hbE1lbUNvbXBhcmVNZW0gKA0KPiArICBJTiAgICAgIENPTlNU IFZPSUQNCj4gKkRlc3RpbmF0aW9uQnVmZmVyLA0KPiArICBJTiAgICAgIENPTlNUIFZPSUQgICAg ICAgICAgICAgICAgKlNvdXJjZUJ1ZmZlciwNCj4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgIExlbmd0aA0KPiArICApDQo+ICt7DQo+ICsgIHdoaWxlICgoLS1MZW5ndGggIT0g MCkgJiYNCj4gKyAgICAgICAgIChNbWlvUmVhZDggKChVSU5UTilEZXN0aW5hdGlvbkJ1ZmZlcikg PT0NCj4gKyAgICAgICAgICBNbWlvUmVhZDggKChVSU5UTilTb3VyY2VCdWZmZXIpKSkgew0KPiAr ICAgIERlc3RpbmF0aW9uQnVmZmVyID0gKElOVDgqKURlc3RpbmF0aW9uQnVmZmVyICsgMTsNCj4g KyAgICBTb3VyY2VCdWZmZXIgPSAoSU5UOCopU291cmNlQnVmZmVyICsgMTsNCj4gKyAgfQ0KPiAr ICByZXR1cm4gKElOVE4pTW1pb1JlYWQ4ICgoVUlOVE4pRGVzdGluYXRpb25CdWZmZXIpIC0NCj4g KyAgICAgICAgIChJTlROKU1taW9SZWFkOCAoKFVJTlROKVNvdXJjZUJ1ZmZlcik7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICBTY2FucyBhIHRhcmdldCBidWZmZXIgZm9yIGFuIDgtYml0IHZhbHVl LCBhbmQNCj4gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlDQo+ICsgIG1hdGNoaW5nIDgtYml0IHZh bHVlIGluIHRoZSB0YXJnZXQgYnVmZmVyLg0KPiArDQo+ICsgIEBwYXJhbSAgQnVmZmVyICBUaGUg cG9pbnRlciB0byB0aGUgdGFyZ2V0IGJ1ZmZlciB0bw0KPiBzY2FuLg0KPiArICBAcGFyYW0gIExl bmd0aCAgVGhlIGNvdW50IG9mIDgtYml0IHZhbHVlIHRvIHNjYW4uDQo+IE11c3QgYmUgbm9uLXpl cm8uDQo+ICsgIEBwYXJhbSAgVmFsdWUgICBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvciBpbiB0aGUN Cj4gdGFyZ2V0IGJ1ZmZlci4NCj4gKw0KPiArICBAcmV0dXJuIFRoZSBwb2ludGVyIHRvIHRoZSBm aXJzdCBvY2N1cnJlbmNlLCBvciBOVUxMDQo+IGlmIG5vdCBmb3VuZC4NCj4gKw0KPiArKiovDQo+ ICtDT05TVCBWT0lEICoNCj4gK0VGSUFQSQ0KPiArSW50ZXJuYWxNZW1TY2FuTWVtOCAoDQo+ICsg IElOICAgICAgQ09OU1QgVk9JRCAgICAgICAgICAgICAgICAqQnVmZmVyLA0KPiArICBJTiAgICAg IFVJTlROICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiArICBJTiAgICAgIFVJTlQ4ICAg ICAgICAgICAgICAgICAgICAgVmFsdWUNCj4gKyAgKQ0KPiArew0KPiArICBDT05TVCBVSU5UOCAg ICAgICAgICAgICAgICAgICAgICAgKlBvaW50ZXI7DQo+ICsNCj4gKyAgUG9pbnRlciA9IChDT05T VCBVSU5UOCopQnVmZmVyOw0KPiArICBkbyB7DQo+ICsgICAgaWYgKE1taW9SZWFkOCAoKFVJTlRO KVBvaW50ZXIpID09IFZhbHVlKSB7DQo+ICsgICAgICByZXR1cm4gUG9pbnRlcjsNCj4gKyAgICB9 DQo+ICsgICAgKytQb2ludGVyOw0KPiArICB9IHdoaWxlICgtLUxlbmd0aCAhPSAwKTsNCj4gKyAg cmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBTY2FucyBhIHRhcmdldCBidWZm ZXIgZm9yIGEgMTYtYml0IHZhbHVlLCBhbmQNCj4gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlDQo+ ICsgIG1hdGNoaW5nIDE2LWJpdCB2YWx1ZSBpbiB0aGUgdGFyZ2V0IGJ1ZmZlci4NCj4gKw0KPiAr ICBAcGFyYW0gIEJ1ZmZlciAgVGhlIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBidWZmZXIgdG8NCj4g c2Nhbi4NCj4gKyAgQHBhcmFtICBMZW5ndGggIFRoZSBjb3VudCBvZiAxNi1iaXQgdmFsdWUgdG8g c2Nhbi4NCj4gTXVzdCBiZSBub24temVyby4NCj4gKyAgQHBhcmFtICBWYWx1ZSAgIFRoZSB2YWx1 ZSB0byBzZWFyY2ggZm9yIGluIHRoZQ0KPiB0YXJnZXQgYnVmZmVyLg0KPiArDQo+ICsgIEByZXR1 cm4gVGhlIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG9jY3VycmVuY2UsIG9yIE5VTEwNCj4gaWYgbm90 IGZvdW5kLg0KPiArDQo+ICsqKi8NCj4gK0NPTlNUIFZPSUQgKg0KPiArRUZJQVBJDQo+ICtJbnRl cm5hbE1lbVNjYW5NZW0xNiAoDQo+ICsgIElOICAgICAgQ09OU1QgVk9JRCAgICAgICAgICAgICAg ICAqQnVmZmVyLA0KPiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgTGVuZ3Ro LA0KPiArICBJTiAgICAgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgVmFsdWUNCj4gKyAgKQ0K PiArew0KPiArICBDT05TVCBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgKlBvaW50ZXI7DQo+ ICsNCj4gKyAgUG9pbnRlciA9IChDT05TVCBVSU5UMTYqKUJ1ZmZlcjsNCj4gKyAgZG8gew0KPiAr ICAgIGlmIChNbWlvUmVhZDE2ICgoVUlOVE4pUG9pbnRlcikgPT0gVmFsdWUpIHsNCj4gKyAgICAg IHJldHVybiBQb2ludGVyOw0KPiArICAgIH0NCj4gKyAgICArK1BvaW50ZXI7DQo+ICsgIH0gd2hp bGUgKC0tTGVuZ3RoICE9IDApOw0KPiArICByZXR1cm4gTlVMTDsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIFNjYW5zIGEgdGFyZ2V0IGJ1ZmZlciBmb3IgYSAzMi1iaXQgdmFsdWUsIGFuZA0KPiBy ZXR1cm5zIGEgcG9pbnRlciB0byB0aGUNCj4gKyAgbWF0Y2hpbmcgMzItYml0IHZhbHVlIGluIHRo ZSB0YXJnZXQgYnVmZmVyLg0KPiArDQo+ICsgIEBwYXJhbSAgQnVmZmVyICBUaGUgcG9pbnRlciB0 byB0aGUgdGFyZ2V0IGJ1ZmZlciB0bw0KPiBzY2FuLg0KPiArICBAcGFyYW0gIExlbmd0aCAgVGhl IGNvdW50IG9mIDMyLWJpdCB2YWx1ZSB0byBzY2FuLg0KPiBNdXN0IGJlIG5vbi16ZXJvLg0KPiAr ICBAcGFyYW0gIFZhbHVlICAgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IgaW4gdGhlDQo+IHRhcmdl dCBidWZmZXIuDQo+ICsNCj4gKyAgQHJldHVybiBUaGUgcG9pbnRlciB0byB0aGUgZmlyc3Qgb2Nj dXJyZW5jZSwgb3IgTlVMTA0KPiBpZiBub3QgZm91bmQuDQo+ICsNCj4gKyoqLw0KPiArQ09OU1Qg Vk9JRCAqDQo+ICtFRklBUEkNCj4gK0ludGVybmFsTWVtU2Nhbk1lbTMyICgNCj4gKyAgSU4gICAg ICBDT05TVCBWT0lEICAgICAgICAgICAgICAgICpCdWZmZXIsDQo+ICsgIElOICAgICAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICBMZW5ndGgsDQo+ICsgIElOICAgICAgVUlOVDMyICAgICAgICAg ICAgICAgICAgICBWYWx1ZQ0KPiArICApDQo+ICt7DQo+ICsgIENPTlNUIFVJTlQzMiAgICAgICAg ICAgICAgICAgICAgICAqUG9pbnRlcjsNCj4gKw0KPiArICBQb2ludGVyID0gKENPTlNUIFVJTlQz MiopQnVmZmVyOw0KPiArICBkbyB7DQo+ICsgICAgaWYgKE1taW9SZWFkMzIgKChVSU5UTilQb2lu dGVyKSA9PSBWYWx1ZSkgew0KPiArICAgICAgcmV0dXJuIFBvaW50ZXI7DQo+ICsgICAgfQ0KPiAr ICAgICsrUG9pbnRlcjsNCj4gKyAgfSB3aGlsZSAoLS1MZW5ndGggIT0gMCk7DQo+ICsgIHJldHVy biBOVUxMOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgU2NhbnMgYSB0YXJnZXQgYnVmZmVyIGZv ciBhIDY0LWJpdCB2YWx1ZSwgYW5kDQo+IHJldHVybnMgYSBwb2ludGVyIHRvIHRoZQ0KPiArICBt YXRjaGluZyA2NC1iaXQgdmFsdWUgaW4gdGhlIHRhcmdldCBidWZmZXIuDQo+ICsNCj4gKyAgQHBh cmFtICBCdWZmZXIgIFRoZSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgYnVmZmVyIHRvDQo+IHNjYW4u DQo+ICsgIEBwYXJhbSAgTGVuZ3RoICBUaGUgY291bnQgb2YgNjQtYml0IHZhbHVlIHRvIHNjYW4u DQo+IE11c3QgYmUgbm9uLXplcm8uDQo+ICsgIEBwYXJhbSAgVmFsdWUgICBUaGUgdmFsdWUgdG8g c2VhcmNoIGZvciBpbiB0aGUNCj4gdGFyZ2V0IGJ1ZmZlci4NCj4gKw0KPiArICBAcmV0dXJuIFRo ZSBwb2ludGVyIHRvIHRoZSBmaXJzdCBvY2N1cnJlbmNlLCBvciBOVUxMDQo+IGlmIG5vdCBmb3Vu ZC4NCj4gKw0KPiArKiovDQo+ICtDT05TVCBWT0lEICoNCj4gK0VGSUFQSQ0KPiArSW50ZXJuYWxN ZW1TY2FuTWVtNjQgKA0KPiArICBJTiAgICAgIENPTlNUIFZPSUQgICAgICAgICAgICAgICAgKkJ1 ZmZlciwNCj4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIExlbmd0aCwNCj4g KyAgSU4gICAgICBVSU5UNjQgICAgICAgICAgICAgICAgICAgIFZhbHVlDQo+ICsgICkNCj4gK3sN Cj4gKyAgQ09OU1QgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICpQb2ludGVyOw0KPiArDQo+ ICsgIFBvaW50ZXIgPSAoQ09OU1QgVUlOVDY0KilCdWZmZXI7DQo+ICsgIGRvIHsNCj4gKyAgICBp ZiAoTW1pb1JlYWQ2NCAoKFVJTlROKVBvaW50ZXIpID09IFZhbHVlKSB7DQo+ICsgICAgICByZXR1 cm4gUG9pbnRlcjsNCj4gKyAgICB9DQo+ICsgICAgKytQb2ludGVyOw0KPiArICB9IHdoaWxlICgt LUxlbmd0aCAhPSAwKTsNCj4gKyAgcmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICBDaGVja3Mgd2hldGhlciB0aGUgY29udGVudHMgb2YgYSBidWZmZXIgYXJlIGFsbA0KPiB6ZXJv cy4NCj4gKw0KPiArICBAcGFyYW0gIEJ1ZmZlciAgVGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0 byBiZQ0KPiBjaGVja2VkLg0KPiArICBAcGFyYW0gIExlbmd0aCAgVGhlIHNpemUgb2YgdGhlIGJ1 ZmZlciAoaW4gYnl0ZXMpIHRvDQo+IGJlIGNoZWNrZWQuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVF ICAgIENvbnRlbnRzIG9mIHRoZSBidWZmZXIgYXJlIGFsbA0KPiB6ZXJvcy4NCj4gKyAgQHJldHZh bCBGQUxTRSAgIENvbnRlbnRzIG9mIHRoZSBidWZmZXIgYXJlIG5vdCBhbGwNCj4gemVyb3MuDQo+ ICsNCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArRUZJQVBJDQo+ICtJbnRlcm5hbE1lbUlzWmVyb0J1 ZmZlciAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpCdWZmZXIsDQo+ICsgIElOIFVJTlROICAgICAg IExlbmd0aA0KPiArICApDQo+ICt7DQo+ICsgIENPTlNUIFVJTlQ4ICpCdWZmZXJEYXRhOw0KPiAr ICBVSU5UTiAgICAgICBJbmRleDsNCj4gKw0KPiArICBCdWZmZXJEYXRhID0gQnVmZmVyOw0KPiAr ICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBMZW5ndGg7IEluZGV4KyspIHsNCj4gKyAgICBpZiAo TW1pb1JlYWQ4ICgoVUlOVE4pKEJ1ZmZlckRhdGEgKyBJbmRleCkpICE9IDApDQo+IHsNCj4gKyAg ICAgIHJldHVybiBGQUxTRTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKyAgcmV0dXJuIFRSVUU7DQo+ ICt9DQo+IGRpZmYgLS1naXQNCj4gYS9NZGVQa2cvTGlicmFyeS9CYXNlTWVtb3J5TGliTW1pby9N ZW1MaWJHdWlkLmMNCj4gYi9NZGVQa2cvTGlicmFyeS9CYXNlTWVtb3J5TGliTW1pby9NZW1MaWJH dWlkLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2U2OWU0MzEzMDlmNA0KPiA0NDdhNGU5OTI1MWE4 NmI1MTgyMTIzZTViOTcNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9NZGVQa2cvTGlicmFyeS9C YXNlTWVtb3J5TGliTW1pby9NZW1MaWJHdWlkLmMNCj4gQEAgLTAsMCArMSwxNDMgQEANCj4gKy8q KiBAZmlsZQ0KPiArICBJbXBsZW1lbnRhdGlvbiBvZiBHVUlEIGZ1bmN0aW9ucy4NCj4gKw0KPiAr ICBUaGUgZm9sbG93aW5nIEJhc2VNZW1vcnlMaWIgaW5zdGFuY2VzIGNvbnRhaW4gdGhlDQo+IHNh bWUgY29weSBvZiB0aGlzIGZpbGU6DQo+ICsNCj4gKyAgICBCYXNlTWVtb3J5TGliDQo+ICsgICAg QmFzZU1lbW9yeUxpYk1taW8NCj4gKyAgICBCYXNlTWVtb3J5TGliTW14DQo+ICsgICAgQmFzZU1l bW9yeUxpYlNzZTINCj4gKyAgICBCYXNlTWVtb3J5TGliUmVwU3RyDQo+ICsgICAgQmFzZU1lbW9y eUxpYk9wdER4ZQ0KPiArICAgIEJhc2VNZW1vcnlMaWJPcHRQZWkNCj4gKyAgICBQZWlNZW1vcnlM aWINCj4gKyAgICBVZWZpTWVtb3J5TGliDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDA2IC0g MjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbA0KPiByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiAr ICBDb3B5cmlnaHQgKGMpIDIwMjAsIEFSTSBMdGQuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuPEJS Pg0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiAr DQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgIk1lbUxpYkludGVybmFscy5oIg0KPiArDQo+ICsv KioNCj4gKyAgQ29waWVzIGEgc291cmNlIEdVSUQgdG8gYSBkZXN0aW5hdGlvbiBHVUlELg0KPiAr DQo+ICsgIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgMTI4LWJpdA0K PiBHVUlEIHNwZWNpZmllZCBieSBTb3VyY2VHdWlkDQo+ICsgIHRvIERlc3RpbmF0aW9uR3VpZCwg YW5kIHJldHVybnMgRGVzdGluYXRpb25HdWlkLg0KPiArDQo+ICsgIElmIERlc3RpbmF0aW9uR3Vp ZCBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiArICBJZiBTb3VyY2VHdWlkIGlzIE5VTEwsIHRo ZW4gQVNTRVJUKCkuDQo+ICsNCj4gKyAgQHBhcmFtICBEZXN0aW5hdGlvbkd1aWQgICBBIHBvaW50 ZXIgdG8gdGhlDQo+IGRlc3RpbmF0aW9uIEdVSUQuDQo+ICsgIEBwYXJhbSAgU291cmNlR3VpZCAg ICAgICAgQSBwb2ludGVyIHRvIHRoZSBzb3VyY2UNCj4gR1VJRC4NCj4gKw0KPiArICBAcmV0dXJu IERlc3RpbmF0aW9uR3VpZC4NCj4gKw0KPiArKiovDQo+ICtHVUlEICoNCj4gK0VGSUFQSQ0KPiAr Q29weUd1aWQgKA0KPiArICBPVVQgR1VJRCAgICAgICAqRGVzdGluYXRpb25HdWlkLA0KPiArICBJ TiBDT05TVCBHVUlEICAqU291cmNlR3VpZA0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiBJbnRl cm5hbE1lbUNvcHlNZW0gKERlc3RpbmF0aW9uR3VpZCwNCj4gU291cmNlR3VpZCwgc2l6ZW9mIChH VUlEKSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDb21wYXJlcyB0d28gR1VJRHMuDQo+ICsN Cj4gKyAgVGhpcyBmdW5jdGlvbiBjb21wYXJlcyBHdWlkMSB0byBHdWlkMi4gIElmIHRoZSBHVUlE cw0KPiBhcmUgaWRlbnRpY2FsIHRoZW4gVFJVRSBpcyByZXR1cm5lZC4NCj4gKyAgSWYgdGhlcmUg YXJlIGFueSBiaXQgZGlmZmVyZW5jZXMgaW4gdGhlIHR3byBHVUlEcywNCj4gdGhlbiBGQUxTRSBp cyByZXR1cm5lZC4NCj4gKw0KPiArICBJZiBHdWlkMSBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0K PiArICBJZiBHdWlkMiBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiArDQo+ICsgIEBwYXJhbSAg R3VpZDEgICAgICAgQSBwb2ludGVyIHRvIGEgMTI4IGJpdCBHVUlELg0KPiArICBAcGFyYW0gIEd1 aWQyICAgICAgIEEgcG9pbnRlciB0byBhIDEyOCBiaXQgR1VJRC4NCj4gKw0KPiArICBAcmV0dmFs IFRSVUUgICAgICAgIEd1aWQxIGFuZCBHdWlkMiBhcmUgaWRlbnRpY2FsLg0KPiArICBAcmV0dmFs IEZBTFNFICAgICAgIEd1aWQxIGFuZCBHdWlkMiBhcmUgbm90DQo+IGlkZW50aWNhbC4NCj4gKw0K PiArKiovDQo+ICtCT09MRUFODQo+ICtFRklBUEkNCj4gK0NvbXBhcmVHdWlkICgNCj4gKyAgSU4g Q09OU1QgR1VJRCAgKkd1aWQxLA0KPiArICBJTiBDT05TVCBHVUlEICAqR3VpZDINCj4gKyAgKQ0K PiArew0KPiArICByZXR1cm4gKDAgPT0gSW50ZXJuYWxNZW1Db21wYXJlTWVtIChHdWlkMSwgR3Vp ZDIsDQo+IHNpemVvZiAoR1VJRCkpKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFNjYW5zIGEg dGFyZ2V0IGJ1ZmZlciBmb3IgYSBHVUlELCBhbmQgcmV0dXJucyBhDQo+IHBvaW50ZXIgdG8gdGhl IG1hdGNoaW5nIEdVSUQNCj4gKyAgaW4gdGhlIHRhcmdldCBidWZmZXIuDQo+ICsNCj4gKyAgVGhp cyBmdW5jdGlvbiBzZWFyY2hlcyB0aGUgdGFyZ2V0IGJ1ZmZlciBzcGVjaWZpZWQNCj4gYnkgQnVm ZmVyIGFuZCBMZW5ndGggZnJvbQ0KPiArICB0aGUgbG93ZXN0IGFkZHJlc3MgdG8gdGhlIGhpZ2hl c3QgYWRkcmVzcyBhdCAxMjgtYml0DQo+IGluY3JlbWVudHMgZm9yIHRoZSAxMjgtYml0DQo+ICsg IEdVSUQgdmFsdWUgdGhhdCBtYXRjaGVzIEd1aWQuICBJZiBhIG1hdGNoIGlzIGZvdW5kLA0KPiB0 aGVuIGEgcG9pbnRlciB0byB0aGUgbWF0Y2hpbmcNCj4gKyAgR1VJRCBpbiB0aGUgdGFyZ2V0IGJ1 ZmZlciBpcyByZXR1cm5lZC4gIElmIG5vIG1hdGNoDQo+IGlzIGZvdW5kLCB0aGVuIE5VTEwgaXMg cmV0dXJuZWQuDQo+ICsgIElmIExlbmd0aCBpcyAwLCB0aGVuIE5VTEwgaXMgcmV0dXJuZWQuDQo+ ICsNCj4gKyAgSWYgTGVuZ3RoID4gMCBhbmQgQnVmZmVyIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCku DQo+ICsgIElmIEJ1ZmZlciBpcyBub3QgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeSwgdGhl bg0KPiBBU1NFUlQoKS4NCj4gKyAgSWYgTGVuZ3RoIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTI4LWJp dCBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gKyAgSWYgTGVuZ3RoIGlzIGdyZWF0ZXIg dGhhbiAoTUFYX0FERFJFU1MgLSBCdWZmZXIgKw0KPiAxKSwgdGhlbiBBU1NFUlQoKS4NCj4gKw0K PiArICBAcGFyYW0gIEJ1ZmZlciAgVGhlIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBidWZmZXIgdG8N Cj4gc2Nhbi4NCj4gKyAgQHBhcmFtICBMZW5ndGggIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gQnVm ZmVyIHRvDQo+IHNjYW4uDQo+ICsgIEBwYXJhbSAgR3VpZCAgICBUaGUgdmFsdWUgdG8gc2VhcmNo IGZvciBpbiB0aGUNCj4gdGFyZ2V0IGJ1ZmZlci4NCj4gKw0KPiArICBAcmV0dXJuIEEgcG9pbnRl ciB0byB0aGUgbWF0Y2hpbmcgR3VpZCBpbiB0aGUgdGFyZ2V0DQo+IGJ1ZmZlciBvciBOVUxMIG90 aGVyd2lzZS4NCj4gKw0KPiArKiovDQo+ICtWT0lEICoNCj4gK0VGSUFQSQ0KPiArU2Nhbkd1aWQg KA0KPiArICBJTiBDT05TVCBWT0lEICAqQnVmZmVyLA0KPiArICBJTiBVSU5UTiAgICAgICBMZW5n dGgsDQo+ICsgIElOIENPTlNUIEdVSUQgICpHdWlkDQo+ICsgICkNCj4gK3sNCj4gKyAgQ09OU1Qg R1VJRCAgICAgICAgICAgICAgICAgICAgICAgICpHdWlkUHRyOw0KPiArDQo+ICsgIEFTU0VSVCAo KChVSU5UTilCdWZmZXIgJiAoc2l6ZW9mIChHdWlkLT5EYXRhMSkgLSAxKSkNCj4gPT0gMCk7DQo+ ICsgIEFTU0VSVCAoTGVuZ3RoIDw9IChNQVhfQUREUkVTUyAtIChVSU5UTilCdWZmZXIgKw0KPiAx KSk7DQo+ICsgIEFTU0VSVCAoKExlbmd0aCAmIChzaXplb2YgKCpHdWlkUHRyKSAtIDEpKSA9PSAw KTsNCj4gKw0KPiArICBHdWlkUHRyID0gKEdVSUQqKUJ1ZmZlcjsNCj4gKyAgQnVmZmVyICA9IEd1 aWRQdHIgKyBMZW5ndGggLyBzaXplb2YgKCpHdWlkUHRyKTsNCj4gKyAgd2hpbGUgKEd1aWRQdHIg PCAoQ09OU1QgR1VJRCopQnVmZmVyKSB7DQo+ICsgICAgaWYgKENvbXBhcmVHdWlkIChHdWlkUHRy LCBHdWlkKSkgew0KPiArICAgICAgcmV0dXJuIChWT0lEKilHdWlkUHRyOw0KPiArICAgIH0NCj4g KyAgICBHdWlkUHRyKys7DQo+ICsgIH0NCj4gKyAgcmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICBDaGVja3MgaWYgdGhlIGdpdmVuIEdVSUQgaXMgYSB6ZXJvIEdVSUQuDQo+ICsN Cj4gKyAgVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gR1VJRCBpcyBhDQo+ IHplcm8gR1VJRC4gSWYgdGhlIEdVSUQgaXMNCj4gKyAgaWRlbnRpY2FsIHRvIGEgemVybyBHVUlE IHRoZW4gVFJVRSBpcyByZXR1cm5lZC4NCj4gT3RoZXJ3aXNlLCBGQUxTRSBpcyByZXR1cm5lZC4N Cj4gKw0KPiArICBJZiBHdWlkIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ICsNCj4gKyAgQHBh cmFtICBHdWlkICAgICAgICBUaGUgcG9pbnRlciB0byBhIDEyOCBiaXQgR1VJRC4NCj4gKw0KPiAr ICBAcmV0dmFsIFRSVUUgICAgICAgIEd1aWQgaXMgYSB6ZXJvIEdVSUQuDQo+ICsgIEByZXR2YWwg RkFMU0UgICAgICAgR3VpZCBpcyBub3QgYSB6ZXJvIEdVSUQuDQo+ICsNCj4gKyoqLw0KPiArQk9P TEVBTg0KPiArRUZJQVBJDQo+ICtJc1plcm9HdWlkICgNCj4gKyAgSU4gQ09OU1QgR1VJRCAgKkd1 aWQNCj4gKyAgKQ0KPiArew0KPiArICByZXR1cm4gSW50ZXJuYWxNZW1Jc1plcm9CdWZmZXIgKEd1 aWQsIHNpemVvZg0KPiAoR1VJRCkpOw0KPiArfQ0KPiBkaWZmIC0tZ2l0DQo+IGEvTWRlUGtnL0xp YnJhcnkvQmFzZU1lbW9yeUxpYk1taW8vTWVtTGliSW50ZXJuYWxzLmgNCj4gYi9NZGVQa2cvTGli cmFyeS9CYXNlTWVtb3J5TGliTW1pby9NZW1MaWJJbnRlcm5hbHMuaA0KPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwLi5kYzI4YTkwNzhhOGE3DQo+IDA3YWY4YTgzNTE3ZDM3NTZjNjEyNjA5MzA3OQ0KPiAtLS0g L2Rldi9udWxsDQo+ICsrKw0KPiBiL01kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL01l bUxpYkludGVybmFscy5oDQo+IEBAIC0wLDAgKzEsMjQ4IEBADQo+ICsvKiogQGZpbGUNCj4gKyAg RGVjbGFyYXRpb24gb2YgaW50ZXJuYWwgZnVuY3Rpb25zIGZvciBCYXNlIE1lbW9yeQ0KPiBMaWJy YXJ5Lg0KPiArDQo+ICsgIFRoZSBmb2xsb3dpbmcgQmFzZU1lbW9yeUxpYiBpbnN0YW5jZXMgY29u dGFpbiB0aGUNCj4gc2FtZSBjb3B5IG9mIHRoaXMgZmlsZToNCj4gKyAgICBCYXNlTWVtb3J5TGli DQo+ICsgICAgQmFzZU1lbW9yeUxpYk1taW8NCj4gKyAgICBCYXNlTWVtb3J5TGliTW14DQo+ICsg ICAgQmFzZU1lbW9yeUxpYlNzZTINCj4gKyAgICBCYXNlTWVtb3J5TGliUmVwU3RyDQo+ICsgICAg QmFzZU1lbW9yeUxpYk9wdER4ZQ0KPiArICAgIEJhc2VNZW1vcnlMaWJPcHRQZWkNCj4gKw0KPiAr ICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsDQo+IHJp Z2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIENvcHlyaWdodCAoYykgMjAyMCwgQVJNIEx0ZC4gQWxs IHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC U0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaWZuZGVmIF9fTUVNX0xJ Ql9JTlRFUk5BTFNfXw0KPiArI2RlZmluZSBfX01FTV9MSUJfSU5URVJOQUxTX18NCj4gKw0KPiAr I2luY2x1ZGUgPEJhc2UuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4N Cj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Rl YnVnTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9Jb0xpYi5oPg0KPiArDQo+ICsvKioNCj4g KyAgQ29weSBMZW5ndGggYnl0ZXMgZnJvbSBTb3VyY2UgdG8gRGVzdGluYXRpb24uDQo+ICsNCj4g KyAgQHBhcmFtICBEZXN0aW5hdGlvbkJ1ZmZlciBUYXJnZXQgb2YgY29weQ0KPiArICBAcGFyYW0g IFNvdXJjZUJ1ZmZlciAgICAgIFBsYWNlIHRvIGNvcHkgZnJvbQ0KPiArICBAcGFyYW0gIExlbmd0 aCAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8NCj4gY29weQ0KPiArDQo+ICsgIEBy ZXR1cm4gRGVzdGluYXRpb24NCj4gKw0KPiArKiovDQo+ICtWT0lEICoNCj4gK0VGSUFQSQ0KPiAr SW50ZXJuYWxNZW1Db3B5TWVtICgNCj4gKyAgT1VUICAgICBWT0lEDQo+ICpEZXN0aW5hdGlvbkJ1 ZmZlciwNCj4gKyAgSU4gICAgICBDT05TVCBWT0lEICAgICAgICAgICAgICAgICpTb3VyY2VCdWZm ZXIsDQo+ICsgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBMZW5ndGgNCj4gKyAg KTsNCj4gKw0KPiArLyoqDQo+ICsgIFNldCBCdWZmZXIgdG8gVmFsdWUgZm9yIFNpemUgYnl0ZXMu DQo+ICsNCj4gKyAgQHBhcmFtICBCdWZmZXIgICBUaGUgbWVtb3J5IHRvIHNldC4NCj4gKyAgQHBh cmFtICBMZW5ndGggICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNldA0KPiArICBAcGFyYW0gIFZh bHVlICAgIFRoZSB2YWx1ZSBvZiB0aGUgc2V0IG9wZXJhdGlvbi4NCj4gKw0KPiArICBAcmV0dXJu IEJ1ZmZlcg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQgKg0KPiArRUZJQVBJDQo+ICtJbnRlcm5hbE1l bVNldE1lbSAoDQo+ICsgIE9VVCAgICAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAqQnVmZmVy LA0KPiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiArICBJ TiAgICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgVmFsdWUNCj4gKyAgKTsNCj4gKw0KPiAr LyoqDQo+ICsgIEZpbGxzIGEgdGFyZ2V0IGJ1ZmZlciB3aXRoIGEgMTYtYml0IHZhbHVlLCBhbmQN Cj4gcmV0dXJucyB0aGUgdGFyZ2V0IGJ1ZmZlci4NCj4gKw0KPiArICBAcGFyYW0gIEJ1ZmZlciAg VGhlIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBidWZmZXIgdG8NCj4gZmlsbC4NCj4gKyAgQHBhcmFt ICBMZW5ndGggIFRoZSBjb3VudCBvZiAxNi1iaXQgdmFsdWUgdG8gZmlsbC4NCj4gKyAgQHBhcmFt ICBWYWx1ZSAgIFRoZSB2YWx1ZSB3aXRoIHdoaWNoIHRvIGZpbGwgTGVuZ3RoDQo+IGJ5dGVzIG9m IEJ1ZmZlci4NCj4gKw0KPiArICBAcmV0dXJuIEJ1ZmZlcg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQg Kg0KPiArRUZJQVBJDQo+ICtJbnRlcm5hbE1lbVNldE1lbTE2ICgNCj4gKyAgT1VUICAgICBWT0lE ICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXIsDQo+ICsgIElOICAgICAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICBMZW5ndGgsDQo+ICsgIElOICAgICAgVUlOVDE2ICAgICAgICAgICAgICAg ICAgICBWYWx1ZQ0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgRmlsbHMgYSB0YXJnZXQgYnVm ZmVyIHdpdGggYSAzMi1iaXQgdmFsdWUsIGFuZA0KPiByZXR1cm5zIHRoZSB0YXJnZXQgYnVmZmVy Lg0KPiArDQo+ICsgIEBwYXJhbSAgQnVmZmVyICBUaGUgcG9pbnRlciB0byB0aGUgdGFyZ2V0IGJ1 ZmZlciB0bw0KPiBmaWxsLg0KPiArICBAcGFyYW0gIExlbmd0aCAgVGhlIGNvdW50IG9mIDMyLWJp dCB2YWx1ZSB0byBmaWxsLg0KPiArICBAcGFyYW0gIFZhbHVlICAgVGhlIHZhbHVlIHdpdGggd2hp Y2ggdG8gZmlsbCBMZW5ndGgNCj4gYnl0ZXMgb2YgQnVmZmVyLg0KPiArDQo+ICsgIEByZXR1cm4g QnVmZmVyDQo+ICsNCj4gKyoqLw0KPiArVk9JRCAqDQo+ICtFRklBUEkNCj4gK0ludGVybmFsTWVt U2V0TWVtMzIgKA0KPiArICBPVVQgICAgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZl ciwNCj4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIExlbmd0aCwNCj4gKyAg SU4gICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFZhbHVlDQo+ICsgICk7DQo+ICsNCj4g Ky8qKg0KPiArICBGaWxscyBhIHRhcmdldCBidWZmZXIgd2l0aCBhIDY0LWJpdCB2YWx1ZSwgYW5k DQo+IHJldHVybnMgdGhlIHRhcmdldCBidWZmZXIuDQo+ICsNCj4gKyAgQHBhcmFtICBCdWZmZXIg IFRoZSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgYnVmZmVyIHRvDQo+IGZpbGwuDQo+ICsgIEBwYXJh bSAgTGVuZ3RoICBUaGUgY291bnQgb2YgNjQtYml0IHZhbHVlIHRvIGZpbGwuDQo+ICsgIEBwYXJh bSAgVmFsdWUgICBUaGUgdmFsdWUgd2l0aCB3aGljaCB0byBmaWxsIExlbmd0aA0KPiBieXRlcyBv ZiBCdWZmZXIuDQo+ICsNCj4gKyAgQHJldHVybiBCdWZmZXINCj4gKw0KPiArKiovDQo+ICtWT0lE ICoNCj4gK0VGSUFQSQ0KPiArSW50ZXJuYWxNZW1TZXRNZW02NCAoDQo+ICsgIE9VVCAgICAgVk9J RCAgICAgICAgICAgICAgICAgICAgICAqQnVmZmVyLA0KPiArICBJTiAgICAgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiArICBJTiAgICAgIFVJTlQ2NCAgICAgICAgICAgICAg ICAgICAgVmFsdWUNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFNldCBCdWZmZXIgdG8gMCBm b3IgU2l6ZSBieXRlcy4NCj4gKw0KPiArICBAcGFyYW0gIEJ1ZmZlciBUaGUgbWVtb3J5IHRvIHNl dC4NCj4gKyAgQHBhcmFtICBMZW5ndGggVGhlIG51bWJlciBvZiBieXRlcyB0byBzZXQuDQo+ICsN Cj4gKyAgQHJldHVybiBCdWZmZXINCj4gKw0KPiArKiovDQo+ICtWT0lEICoNCj4gK0VGSUFQSQ0K PiArSW50ZXJuYWxNZW1aZXJvTWVtICgNCj4gKyAgT1VUICAgICBWT0lEICAgICAgICAgICAgICAg ICAgICAgICpCdWZmZXIsDQo+ICsgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBM ZW5ndGgNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIENvbXBhcmVzIHR3byBtZW1vcnkgYnVm ZmVycyBvZiBhIGdpdmVuIGxlbmd0aC4NCj4gKw0KPiArICBAcGFyYW0gIERlc3RpbmF0aW9uQnVm ZmVyIFRoZSBmaXJzdCBtZW1vcnkgYnVmZmVyLg0KPiArICBAcGFyYW0gIFNvdXJjZUJ1ZmZlciAg ICAgIFRoZSBzZWNvbmQgbWVtb3J5IGJ1ZmZlci4NCj4gKyAgQHBhcmFtICBMZW5ndGggICAgICAg ICAgICBUaGUgbGVuZ3RoIG9mDQo+IERlc3RpbmF0aW9uQnVmZmVyIGFuZCBTb3VyY2VCdWZmZXIg bWVtb3J5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9ucyB0byBjb21wYXJl LiBNdXN0DQo+IGJlIG5vbi16ZXJvLg0KPiArDQo+ICsgIEByZXR1cm4gMCAgICAgICAgICAgICAg ICAgQWxsIExlbmd0aCBieXRlcyBvZiB0aGUNCj4gdHdvIGJ1ZmZlcnMgYXJlIGlkZW50aWNhbC4N Cj4gKyAgQHJldHZhbCBOb24temVybyAgICAgICAgICBUaGUgZmlyc3QgbWlzbWF0Y2hlZCBieXRl DQo+IGluIFNvdXJjZUJ1ZmZlciBzdWJ0cmFjdGVkIGZyb20gdGhlIGZpcnN0DQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbWlzbWF0Y2hlZCBieXRlIGluDQo+IERlc3RpbmF0aW9uQnVm ZmVyLg0KPiArDQo+ICsqKi8NCj4gK0lOVE4NCj4gK0VGSUFQSQ0KPiArSW50ZXJuYWxNZW1Db21w YXJlTWVtICgNCj4gKyAgSU4gICAgICBDT05TVCBWT0lEDQo+ICpEZXN0aW5hdGlvbkJ1ZmZlciwN Cj4gKyAgSU4gICAgICBDT05TVCBWT0lEICAgICAgICAgICAgICAgICpTb3VyY2VCdWZmZXIsDQo+ ICsgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBMZW5ndGgNCj4gKyAgKTsNCj4g Kw0KPiArLyoqDQo+ICsgIFNjYW5zIGEgdGFyZ2V0IGJ1ZmZlciBmb3IgYW4gOC1iaXQgdmFsdWUs IGFuZA0KPiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUNCj4gKyAgbWF0Y2hpbmcgOC1iaXQgdmFs dWUgaW4gdGhlIHRhcmdldCBidWZmZXIuDQo+ICsNCj4gKyAgQHBhcmFtICBCdWZmZXIgIFRoZSBw b2ludGVyIHRvIHRoZSB0YXJnZXQgYnVmZmVyIHRvDQo+IHNjYW4uDQo+ICsgIEBwYXJhbSAgTGVu Z3RoICBUaGUgY291bnQgb2YgOC1iaXQgdmFsdWUgdG8gc2Nhbi4NCj4gTXVzdCBiZSBub24temVy by4NCj4gKyAgQHBhcmFtICBWYWx1ZSAgIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yIGluIHRoZQ0K PiB0YXJnZXQgYnVmZmVyLg0KPiArDQo+ICsgIEByZXR1cm4gVGhlIHBvaW50ZXIgdG8gdGhlIGZp cnN0IG9jY3VycmVuY2UsIG9yIE5VTEwNCj4gaWYgbm90IGZvdW5kLg0KPiArDQo+ICsqKi8NCj4g K0NPTlNUIFZPSUQgKg0KPiArRUZJQVBJDQo+ICtJbnRlcm5hbE1lbVNjYW5NZW04ICgNCj4gKyAg SU4gICAgICBDT05TVCBWT0lEICAgICAgICAgICAgICAgICpCdWZmZXIsDQo+ICsgIElOICAgICAg VUlOVE4gICAgICAgICAgICAgICAgICAgICBMZW5ndGgsDQo+ICsgIElOICAgICAgVUlOVDggICAg ICAgICAgICAgICAgICAgICBWYWx1ZQ0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgU2NhbnMg YSB0YXJnZXQgYnVmZmVyIGZvciBhIDE2LWJpdCB2YWx1ZSwgYW5kDQo+IHJldHVybnMgYSBwb2lu dGVyIHRvIHRoZQ0KPiArICBtYXRjaGluZyAxNi1iaXQgdmFsdWUgaW4gdGhlIHRhcmdldCBidWZm ZXIuDQo+ICsNCj4gKyAgQHBhcmFtICBCdWZmZXIgIFRoZSBwb2ludGVyIHRvIHRoZSB0YXJnZXQg YnVmZmVyIHRvDQo+IHNjYW4uDQo+ICsgIEBwYXJhbSAgTGVuZ3RoICBUaGUgY291bnQgb2YgMTYt Yml0IHZhbHVlIHRvIHNjYW4uDQo+IE11c3QgYmUgbm9uLXplcm8uDQo+ICsgIEBwYXJhbSAgVmFs dWUgICBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvciBpbiB0aGUNCj4gdGFyZ2V0IGJ1ZmZlci4NCj4g Kw0KPiArICBAcmV0dXJuIFRoZSBwb2ludGVyIHRvIHRoZSBmaXJzdCBvY2N1cnJlbmNlLCBvciBO VUxMDQo+IGlmIG5vdCBmb3VuZC4NCj4gKw0KPiArKiovDQo+ICtDT05TVCBWT0lEICoNCj4gK0VG SUFQSQ0KPiArSW50ZXJuYWxNZW1TY2FuTWVtMTYgKA0KPiArICBJTiAgICAgIENPTlNUIFZPSUQg ICAgICAgICAgICAgICAgKkJ1ZmZlciwNCj4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgIExlbmd0aCwNCj4gKyAgSU4gICAgICBVSU5UMTYgICAgICAgICAgICAgICAgICAgIFZh bHVlDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBTY2FucyBhIHRhcmdldCBidWZmZXIgZm9y IGEgMzItYml0IHZhbHVlLCBhbmQNCj4gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlDQo+ICsgIG1h dGNoaW5nIDMyLWJpdCB2YWx1ZSBpbiB0aGUgdGFyZ2V0IGJ1ZmZlci4NCj4gKw0KPiArICBAcGFy YW0gIEJ1ZmZlciAgVGhlIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBidWZmZXIgdG8NCj4gc2Nhbi4N Cj4gKyAgQHBhcmFtICBMZW5ndGggIFRoZSBjb3VudCBvZiAzMi1iaXQgdmFsdWUgdG8gc2Nhbi4N Cj4gTXVzdCBiZSBub24temVyby4NCj4gKyAgQHBhcmFtICBWYWx1ZSAgIFRoZSB2YWx1ZSB0byBz ZWFyY2ggZm9yIGluIHRoZQ0KPiB0YXJnZXQgYnVmZmVyLg0KPiArDQo+ICsgIEByZXR1cm4gVGhl IHBvaW50ZXIgdG8gdGhlIGZpcnN0IG9jY3VycmVuY2UsIG9yIE5VTEwNCj4gaWYgbm90IGZvdW5k Lg0KPiArDQo+ICsqKi8NCj4gK0NPTlNUIFZPSUQgKg0KPiArRUZJQVBJDQo+ICtJbnRlcm5hbE1l bVNjYW5NZW0zMiAoDQo+ICsgIElOICAgICAgQ09OU1QgVk9JRCAgICAgICAgICAgICAgICAqQnVm ZmVyLA0KPiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiAr ICBJTiAgICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgVmFsdWUNCj4gKyAgKTsNCj4gKw0K PiArLyoqDQo+ICsgIFNjYW5zIGEgdGFyZ2V0IGJ1ZmZlciBmb3IgYSA2NC1iaXQgdmFsdWUsIGFu ZA0KPiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUNCj4gKyAgbWF0Y2hpbmcgNjQtYml0IHZhbHVl IGluIHRoZSB0YXJnZXQgYnVmZmVyLg0KPiArDQo+ICsgIEBwYXJhbSAgQnVmZmVyICBUaGUgcG9p bnRlciB0byB0aGUgdGFyZ2V0IGJ1ZmZlciB0bw0KPiBzY2FuLg0KPiArICBAcGFyYW0gIExlbmd0 aCAgVGhlIGNvdW50IG9mIDY0LWJpdCB2YWx1ZSB0byBzY2FuLg0KPiBNdXN0IGJlIG5vbi16ZXJv Lg0KPiArICBAcGFyYW0gIFZhbHVlICAgVGhlIGNhbHVlIHRvIHNlYXJjaCBmb3IgaW4gdGhlDQo+ IHRhcmdldCBidWZmZXIuDQo+ICsNCj4gKyAgQHJldHVybiBUaGUgcG9pbnRlciB0byB0aGUgZmly c3Qgb2NjdXJyZW5jZSwgb3IgTlVMTA0KPiBpZiBub3QgZm91bmQuDQo+ICsNCj4gKyoqLw0KPiAr Q09OU1QgVk9JRCAqDQo+ICtFRklBUEkNCj4gK0ludGVybmFsTWVtU2Nhbk1lbTY0ICgNCj4gKyAg SU4gICAgICBDT05TVCBWT0lEICAgICAgICAgICAgICAgICpCdWZmZXIsDQo+ICsgIElOICAgICAg VUlOVE4gICAgICAgICAgICAgICAgICAgICBMZW5ndGgsDQo+ICsgIElOICAgICAgVUlOVDY0ICAg ICAgICAgICAgICAgICAgICBWYWx1ZQ0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgQ2hlY2tz IHdoZXRoZXIgdGhlIGNvbnRlbnRzIG9mIGEgYnVmZmVyIGFyZSBhbGwNCj4gemVyb3MuDQo+ICsN Cj4gKyAgQHBhcmFtICBCdWZmZXIgIFRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIgdG8gYmUNCj4g Y2hlY2tlZC4NCj4gKyAgQHBhcmFtICBMZW5ndGggIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgKGlu IGJ5dGVzKSB0bw0KPiBiZSBjaGVja2VkLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICBDb250 ZW50cyBvZiB0aGUgYnVmZmVyIGFyZSBhbGwNCj4gemVyb3MuDQo+ICsgIEByZXR2YWwgRkFMU0Ug ICBDb250ZW50cyBvZiB0aGUgYnVmZmVyIGFyZSBub3QgYWxsDQo+IHplcm9zLg0KPiArDQo+ICsq Ki8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQSQ0KPiArSW50ZXJuYWxNZW1Jc1plcm9CdWZmZXIgKA0K PiArICBJTiBDT05TVCBWT0lEICAqQnVmZmVyLA0KPiArICBJTiBVSU5UTiAgICAgICBMZW5ndGgN Cj4gKyAgKTsNCj4gKw0KPiArI2VuZGlmDQo+IGRpZmYgLS1naXQNCj4gYS9NZGVQa2cvTGlicmFy eS9CYXNlTWVtb3J5TGliTW1pby9TY2FuTWVtMTZXcmFwcGVyLmMNCj4gYi9NZGVQa2cvTGlicmFy eS9CYXNlTWVtb3J5TGliTW1pby9TY2FuTWVtMTZXcmFwcGVyLmMNCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MC4uYWQ5MzMwYjk5MzhkZg0KPiA5OTk1YTU5N2RiYWJjMWFhMjc0NGFhMGQ4YzENCj4gLS0tIC9k ZXYvbnVsbA0KPiArKysNCj4gYi9NZGVQa2cvTGlicmFyeS9CYXNlTWVtb3J5TGliTW1pby9TY2Fu TWVtMTZXcmFwcGVyLmMNCj4gQEAgLTAsMCArMSw2MyBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIFNj YW5NZW0xNigpIGltcGxlbWVudGF0aW9uLg0KPiArDQo+ICsgIFRoZSBmb2xsb3dpbmcgQmFzZU1l bW9yeUxpYiBpbnN0YW5jZXMgY29udGFpbiB0aGUNCj4gc2FtZSBjb3B5IG9mIHRoaXMgZmlsZToN Cj4gKw0KPiArICAgIEJhc2VNZW1vcnlMaWINCj4gKyAgICBCYXNlTWVtb3J5TGliTW1pbw0KPiAr ICAgIEJhc2VNZW1vcnlMaWJNbXgNCj4gKyAgICBCYXNlTWVtb3J5TGliU3NlMg0KPiArICAgIEJh c2VNZW1vcnlMaWJSZXBTdHINCj4gKyAgICBCYXNlTWVtb3J5TGliT3B0RHhlDQo+ICsgICAgQmFz ZU1lbW9yeUxpYk9wdFBlaQ0KPiArICAgIFBlaU1lbW9yeUxpYg0KPiArICAgIFVlZmlNZW1vcnlM aWINCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlv bi4gQWxsDQo+IHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIENvcHlyaWdodCAoYykgMjAyMCwg QVJNIEx0ZC4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaW5j bHVkZSAiTWVtTGliSW50ZXJuYWxzLmgiDQo+ICsNCj4gKy8qKg0KPiArICBTY2FucyBhIHRhcmdl dCBidWZmZXIgZm9yIGEgMTYtYml0IHZhbHVlLCBhbmQNCj4gcmV0dXJucyBhIHBvaW50ZXIgdG8g dGhlIG1hdGNoaW5nIDE2LWJpdCB2YWx1ZQ0KPiArICBpbiB0aGUgdGFyZ2V0IGJ1ZmZlci4NCj4g Kw0KPiArICBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIHRoZSB0YXJnZXQgYnVmZmVyIHNwZWNpZmll ZA0KPiBieSBCdWZmZXIgYW5kIExlbmd0aCBmcm9tIHRoZSBsb3dlc3QNCj4gKyAgYWRkcmVzcyB0 byB0aGUgaGlnaGVzdCBhZGRyZXNzIGZvciBhIDE2LWJpdCB2YWx1ZQ0KPiB0aGF0IG1hdGNoZXMg VmFsdWUuICBJZiBhIG1hdGNoIGlzIGZvdW5kLA0KPiArICB0aGVuIGEgcG9pbnRlciB0byB0aGUg bWF0Y2hpbmcgYnl0ZSBpbiB0aGUgdGFyZ2V0DQo+IGJ1ZmZlciBpcyByZXR1cm5lZC4gIElmIG5v IG1hdGNoIGlzIGZvdW5kLA0KPiArICB0aGVuIE5VTEwgaXMgcmV0dXJuZWQuICBJZiBMZW5ndGgg aXMgMCwgdGhlbiBOVUxMIGlzDQo+IHJldHVybmVkLg0KPiArDQo+ICsgIElmIExlbmd0aCA+IDAg YW5kIEJ1ZmZlciBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiArICBJZiBCdWZmZXIgaXMgbm90 IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+ICsgIElm IExlbmd0aCBpcyBub3QgYWxpZ25lZCBvbiBhIDE2LWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NF UlQoKS4NCj4gKyAgSWYgTGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiAoTUFYX0FERFJFU1MgLSBCdWZm ZXIgKw0KPiAxKSwgdGhlbiBBU1NFUlQoKS4NCj4gKw0KPiArICBAcGFyYW0gIEJ1ZmZlciAgICAg IFRoZSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgYnVmZmVyDQo+IHRvIHNjYW4uDQo+ICsgIEBwYXJh bSAgTGVuZ3RoICAgICAgVGhlIG51bWJlciBvZiBieXRlcyBpbiBCdWZmZXIgdG8NCj4gc2Nhbi4N Cj4gKyAgQHBhcmFtICBWYWx1ZSAgICAgICBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvciBpbiB0aGUN Cj4gdGFyZ2V0IGJ1ZmZlci4NCj4gKw0KPiArICBAcmV0dXJuIEEgcG9pbnRlciB0byB0aGUgbWF0 Y2hpbmcgYnl0ZSBpbiB0aGUgdGFyZ2V0DQo+IGJ1ZmZlciBvciBOVUxMIG90aGVyd2lzZS4NCj4g Kw0KPiArKiovDQo+ICtWT0lEICoNCj4gK0VGSUFQSQ0KPiArU2Nhbk1lbTE2ICgNCj4gKyAgSU4g Q09OU1QgVk9JRCAgKkJ1ZmZlciwNCj4gKyAgSU4gVUlOVE4gICAgICAgTGVuZ3RoLA0KPiArICBJ TiBVSU5UMTYgICAgICBWYWx1ZQ0KPiArICApDQo+ICt7DQo+ICsgIGlmIChMZW5ndGggPT0gMCkg ew0KPiArICAgIHJldHVybiBOVUxMOw0KPiArICB9DQo+ICsNCj4gKyAgQVNTRVJUIChCdWZmZXIg IT0gTlVMTCk7DQo+ICsgIEFTU0VSVCAoKChVSU5UTilCdWZmZXIgJiAoc2l6ZW9mIChWYWx1ZSkg LSAxKSkgPT0NCj4gMCk7DQo+ICsgIEFTU0VSVCAoKExlbmd0aCAtIDEpIDw9IChNQVhfQUREUkVT UyAtDQo+IChVSU5UTilCdWZmZXIpKTsNCj4gKyAgQVNTRVJUICgoTGVuZ3RoICYgKHNpemVvZiAo VmFsdWUpIC0gMSkpID09IDApOw0KPiArDQo+ICsgIHJldHVybiAoVk9JRCopSW50ZXJuYWxNZW1T Y2FuTWVtMTYgKEJ1ZmZlciwgTGVuZ3RoIC8NCj4gc2l6ZW9mIChWYWx1ZSksIFZhbHVlKTsNCj4g K30NCj4gZGlmZiAtLWdpdA0KPiBhL01kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL1Nj YW5NZW0zMldyYXBwZXIuYw0KPiBiL01kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL1Nj YW5NZW0zMldyYXBwZXIuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleA0KPiAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NDY3NTY5N2QxMjAxDQo+IDZm OTJjNDZjMDhjNjVhY2E2NDcyODhhOGI5OQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKw0KPiBiL01k ZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL1NjYW5NZW0zMldyYXBwZXIuYw0KPiBAQCAt MCwwICsxLDYyIEBADQo+ICsvKiogQGZpbGUNCj4gKyAgU2Nhbk1lbTMyKCkgaW1wbGVtZW50YXRp b24uDQo+ICsNCj4gKyAgVGhlIGZvbGxvd2luZyBCYXNlTWVtb3J5TGliIGluc3RhbmNlcyBjb250 YWluIHRoZQ0KPiBzYW1lIGNvcHkgb2YgdGhpcyBmaWxlOg0KPiArICAgIEJhc2VNZW1vcnlMaWIN Cj4gKyAgICBCYXNlTWVtb3J5TGliTW1pbw0KPiArICAgIEJhc2VNZW1vcnlMaWJNbXgNCj4gKyAg ICBCYXNlTWVtb3J5TGliU3NlMg0KPiArICAgIEJhc2VNZW1vcnlMaWJSZXBTdHINCj4gKyAgICBC YXNlTWVtb3J5TGliT3B0RHhlDQo+ICsgICAgQmFzZU1lbW9yeUxpYk9wdFBlaQ0KPiArICAgIFBl aU1lbW9yeUxpYg0KPiArICAgIFVlZmlNZW1vcnlMaWINCj4gKw0KPiArICBDb3B5cmlnaHQgKGMp IDIwMDYgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsDQo+IHJpZ2h0cyByZXNlcnZlZC48 QlI+DQo+ICsgIENvcHlyaWdodCAoYykgMjAyMCwgQVJNIEx0ZC4gQWxsIHJpZ2h0cw0KPiByZXNl cnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0 ZW50DQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVkZSAiTWVtTGliSW50ZXJuYWxzLmgiDQo+ ICsNCj4gKy8qKg0KPiArICBTY2FucyBhIHRhcmdldCBidWZmZXIgZm9yIGEgMzItYml0IHZhbHVl LCBhbmQNCj4gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG1hdGNoaW5nIDMyLWJpdCB2YWx1ZQ0K PiArICBpbiB0aGUgdGFyZ2V0IGJ1ZmZlci4NCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIHNlYXJj aGVzIHRoZSB0YXJnZXQgYnVmZmVyIHNwZWNpZmllZA0KPiBieSBCdWZmZXIgYW5kIExlbmd0aCBm cm9tIHRoZSBsb3dlc3QNCj4gKyAgYWRkcmVzcyB0byB0aGUgaGlnaGVzdCBhZGRyZXNzIGZvciBh IDMyLWJpdCB2YWx1ZQ0KPiB0aGF0IG1hdGNoZXMgVmFsdWUuICBJZiBhIG1hdGNoIGlzIGZvdW5k LA0KPiArICB0aGVuIGEgcG9pbnRlciB0byB0aGUgbWF0Y2hpbmcgYnl0ZSBpbiB0aGUgdGFyZ2V0 DQo+IGJ1ZmZlciBpcyByZXR1cm5lZC4gIElmIG5vIG1hdGNoIGlzIGZvdW5kLA0KPiArICB0aGVu IE5VTEwgaXMgcmV0dXJuZWQuICBJZiBMZW5ndGggaXMgMCwgdGhlbiBOVUxMIGlzDQo+IHJldHVy bmVkLg0KPiArDQo+ICsgIElmIExlbmd0aCA+IDAgYW5kIEJ1ZmZlciBpcyBOVUxMLCB0aGVuIEFT U0VSVCgpLg0KPiArICBJZiBCdWZmZXIgaXMgbm90IGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRh cnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+ICsgIElmIExlbmd0aCBpcyBub3QgYWxpZ25lZCBvbiBh IDMyLWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gKyAgSWYgTGVuZ3RoIGlzIGdy ZWF0ZXIgdGhhbiAoTUFYX0FERFJFU1MgLSBCdWZmZXIgKw0KPiAxKSwgdGhlbiBBU1NFUlQoKS4N Cj4gKw0KPiArICBAcGFyYW0gIEJ1ZmZlciAgICAgIFRoZSBwb2ludGVyIHRvIHRoZSB0YXJnZXQg YnVmZmVyDQo+IHRvIHNjYW4uDQo+ICsgIEBwYXJhbSAgTGVuZ3RoICAgICAgVGhlIG51bWJlciBv ZiBieXRlcyBpbiBCdWZmZXIgdG8NCj4gc2Nhbi4NCj4gKyAgQHBhcmFtICBWYWx1ZSAgICAgICBU aGUgdmFsdWUgdG8gc2VhcmNoIGZvciBpbiB0aGUNCj4gdGFyZ2V0IGJ1ZmZlci4NCj4gKw0KPiAr ICBAcmV0dXJuIEEgcG9pbnRlciB0byB0aGUgbWF0Y2hpbmcgYnl0ZSBpbiB0aGUgdGFyZ2V0DQo+ IGJ1ZmZlciBvciBOVUxMIG90aGVyd2lzZS4NCj4gKw0KPiArKiovDQo+ICtWT0lEICoNCj4gK0VG SUFQSQ0KPiArU2Nhbk1lbTMyICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJ1ZmZlciwNCj4gKyAg SU4gVUlOVE4gICAgICAgTGVuZ3RoLA0KPiArICBJTiBVSU5UMzIgICAgICBWYWx1ZQ0KPiArICAp DQo+ICt7DQo+ICsgIGlmIChMZW5ndGggPT0gMCkgew0KPiArICAgIHJldHVybiBOVUxMOw0KPiAr ICB9DQo+ICsNCj4gKyAgQVNTRVJUIChCdWZmZXIgIT0gTlVMTCk7DQo+ICsgIEFTU0VSVCAoKChV SU5UTilCdWZmZXIgJiAoc2l6ZW9mIChWYWx1ZSkgLSAxKSkgPT0NCj4gMCk7DQo+ICsgIEFTU0VS VCAoKExlbmd0aCAtIDEpIDw9IChNQVhfQUREUkVTUyAtDQo+IChVSU5UTilCdWZmZXIpKTsNCj4g KyAgQVNTRVJUICgoTGVuZ3RoICYgKHNpemVvZiAoVmFsdWUpIC0gMSkpID09IDApOw0KPiArDQo+ ICsgIHJldHVybiAoVk9JRCopSW50ZXJuYWxNZW1TY2FuTWVtMzIgKEJ1ZmZlciwgTGVuZ3RoIC8N Cj4gc2l6ZW9mIChWYWx1ZSksIFZhbHVlKTsNCj4gK30NCj4gZGlmZiAtLWdpdA0KPiBhL01kZVBr Zy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL1NjYW5NZW02NFdyYXBwZXIuYw0KPiBiL01kZVBr Zy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL1NjYW5NZW02NFdyYXBwZXIuYw0KPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi5kZjc0OWRjZTQ1NzgyDQo+IDdmZTA3MGJhZDhiN2M2MDcxYWFlMjllYmIwMg0K PiAtLS0gL2Rldi9udWxsDQo+ICsrKw0KPiBiL01kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJN bWlvL1NjYW5NZW02NFdyYXBwZXIuYw0KPiBAQCAtMCwwICsxLDYzIEBADQo+ICsvKiogQGZpbGUN Cj4gKyAgU2Nhbk1lbTY0KCkgaW1wbGVtZW50YXRpb24uDQo+ICsNCj4gKyAgVGhlIGZvbGxvd2lu ZyBCYXNlTWVtb3J5TGliIGluc3RhbmNlcyBjb250YWluIHRoZQ0KPiBzYW1lIGNvcHkgb2YgdGhp cyBmaWxlOg0KPiArDQo+ICsgICAgQmFzZU1lbW9yeUxpYg0KPiArICAgIEJhc2VNZW1vcnlMaWJN bWlvDQo+ICsgICAgQmFzZU1lbW9yeUxpYk1teA0KPiArICAgIEJhc2VNZW1vcnlMaWJTc2UyDQo+ ICsgICAgQmFzZU1lbW9yeUxpYlJlcFN0cg0KPiArICAgIEJhc2VNZW1vcnlMaWJPcHREeGUNCj4g KyAgICBCYXNlTWVtb3J5TGliT3B0UGVpDQo+ICsgICAgUGVpTWVtb3J5TGliDQo+ICsgICAgVWVm aU1lbW9yeUxpYg0KPiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMTgsIEludGVsIENv cnBvcmF0aW9uLiBBbGwNCj4gcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyAgQ29weXJpZ2h0IChj KSAyMDIwLCBBUk0gTHRkLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKw0KPiArKiovDQo+ICsN Cj4gKyNpbmNsdWRlICJNZW1MaWJJbnRlcm5hbHMuaCINCj4gKw0KPiArLyoqDQo+ICsgIFNjYW5z IGEgdGFyZ2V0IGJ1ZmZlciBmb3IgYSA2NC1iaXQgdmFsdWUsIGFuZA0KPiByZXR1cm5zIGEgcG9p bnRlciB0byB0aGUgbWF0Y2hpbmcgNjQtYml0IHZhbHVlDQo+ICsgIGluIHRoZSB0YXJnZXQgYnVm ZmVyLg0KPiArDQo+ICsgIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgdGhlIHRhcmdldCBidWZmZXIg c3BlY2lmaWVkDQo+IGJ5IEJ1ZmZlciBhbmQgTGVuZ3RoIGZyb20gdGhlIGxvd2VzdA0KPiArICBh ZGRyZXNzIHRvIHRoZSBoaWdoZXN0IGFkZHJlc3MgZm9yIGEgNjQtYml0IHZhbHVlDQo+IHRoYXQg bWF0Y2hlcyBWYWx1ZS4gIElmIGEgbWF0Y2ggaXMgZm91bmQsDQo+ICsgIHRoZW4gYSBwb2ludGVy IHRvIHRoZSBtYXRjaGluZyBieXRlIGluIHRoZSB0YXJnZXQNCj4gYnVmZmVyIGlzIHJldHVybmVk LiAgSWYgbm8gbWF0Y2ggaXMgZm91bmQsDQo+ICsgIHRoZW4gTlVMTCBpcyByZXR1cm5lZC4gIElm IExlbmd0aCBpcyAwLCB0aGVuIE5VTEwgaXMNCj4gcmV0dXJuZWQuDQo+ICsNCj4gKyAgSWYgTGVu Z3RoID4gMCBhbmQgQnVmZmVyIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmIEJ1ZmZl ciBpcyBub3QgYWxpZ25lZCBvbiBhIDY0LWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4N Cj4gKyAgSWYgTGVuZ3RoIGlzIG5vdCBhbGlnbmVkIG9uIGEgNjQtYml0IGJvdW5kYXJ5LCB0aGVu DQo+IEFTU0VSVCgpLg0KPiArICBJZiBMZW5ndGggaXMgZ3JlYXRlciB0aGFuIChNQVhfQUREUkVT UyAtIEJ1ZmZlciArDQo+IDEpLCB0aGVuIEFTU0VSVCgpLg0KPiArDQo+ICsgIEBwYXJhbSAgQnVm ZmVyICAgICAgVGhlIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBidWZmZXINCj4gdG8gc2Nhbi4NCj4g KyAgQHBhcmFtICBMZW5ndGggICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIEJ1ZmZlciB0bw0K PiBzY2FuLg0KPiArICBAcGFyYW0gIFZhbHVlICAgICAgIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9y IGluIHRoZQ0KPiB0YXJnZXQgYnVmZmVyLg0KPiArDQo+ICsgIEByZXR1cm4gQSBwb2ludGVyIHRv IHRoZSBtYXRjaGluZyBieXRlIGluIHRoZSB0YXJnZXQNCj4gYnVmZmVyIG9yIE5VTEwgb3RoZXJ3 aXNlLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQgKg0KPiArRUZJQVBJDQo+ICtTY2FuTWVtNjQgKA0K PiArICBJTiBDT05TVCBWT0lEICAqQnVmZmVyLA0KPiArICBJTiBVSU5UTiAgICAgICBMZW5ndGgs DQo+ICsgIElOIFVJTlQ2NCAgICAgIFZhbHVlDQo+ICsgICkNCj4gK3sNCj4gKyAgaWYgKExlbmd0 aCA9PSAwKSB7DQo+ICsgICAgcmV0dXJuIE5VTEw7DQo+ICsgIH0NCj4gKw0KPiArICBBU1NFUlQg KEJ1ZmZlciAhPSBOVUxMKTsNCj4gKyAgQVNTRVJUICgoKFVJTlROKUJ1ZmZlciAmIChzaXplb2Yg KFZhbHVlKSAtIDEpKSA9PQ0KPiAwKTsNCj4gKyAgQVNTRVJUICgoTGVuZ3RoIC0gMSkgPD0gKE1B WF9BRERSRVNTIC0NCj4gKFVJTlROKUJ1ZmZlcikpOw0KPiArICBBU1NFUlQgKChMZW5ndGggJiAo c2l6ZW9mIChWYWx1ZSkgLSAxKSkgPT0gMCk7DQo+ICsNCj4gKyAgcmV0dXJuIChWT0lEKilJbnRl cm5hbE1lbVNjYW5NZW02NCAoQnVmZmVyLCBMZW5ndGggLw0KPiBzaXplb2YgKFZhbHVlKSwgVmFs dWUpOw0KPiArfQ0KPiBkaWZmIC0tZ2l0DQo+IGEvTWRlUGtnL0xpYnJhcnkvQmFzZU1lbW9yeUxp Yk1taW8vU2Nhbk1lbThXcmFwcGVyLmMNCj4gYi9NZGVQa2cvTGlicmFyeS9CYXNlTWVtb3J5TGli TW1pby9TY2FuTWVtOFdyYXBwZXIuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleA0K PiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNzA5ODEwMTdkYmUz DQo+IDFjZjVlMGMzZGFiZjI2YTRmZWEzM2Y3YTdkNw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKw0K PiBiL01kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL1NjYW5NZW04V3JhcHBlci5jDQo+ IEBAIC0wLDAgKzEsOTUgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBTY2FuTWVtOCgpIGFuZCBTY2Fu TWVtTigpIGltcGxlbWVudGF0aW9uLg0KPiArDQo+ICsgIFRoZSBmb2xsb3dpbmcgQmFzZU1lbW9y eUxpYiBpbnN0YW5jZXMgY29udGFpbiB0aGUNCj4gc2FtZSBjb3B5IG9mIHRoaXMgZmlsZToNCj4g Kw0KPiArICAgIEJhc2VNZW1vcnlMaWINCj4gKyAgICBCYXNlTWVtb3J5TGliTW1pbw0KPiArICAg IEJhc2VNZW1vcnlMaWJNbXgNCj4gKyAgICBCYXNlTWVtb3J5TGliU3NlMg0KPiArICAgIEJhc2VN ZW1vcnlMaWJSZXBTdHINCj4gKyAgICBCYXNlTWVtb3J5TGliT3B0RHhlDQo+ICsgICAgQmFzZU1l bW9yeUxpYk9wdFBlaQ0KPiArICAgIFBlaU1lbW9yeUxpYg0KPiArICAgIFVlZmlNZW1vcnlMaWIN Cj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsDQo+IHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIENvcHlyaWdodCAoYykgMjAyMCwgQVJN IEx0ZC4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVk ZSAiTWVtTGliSW50ZXJuYWxzLmgiDQo+ICsNCj4gKy8qKg0KPiArICBTY2FucyBhIHRhcmdldCBi dWZmZXIgZm9yIGFuIDgtYml0IHZhbHVlLCBhbmQNCj4gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhl IG1hdGNoaW5nIDgtYml0IHZhbHVlDQo+ICsgIGluIHRoZSB0YXJnZXQgYnVmZmVyLg0KPiArDQo+ ICsgIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgdGhlIHRhcmdldCBidWZmZXIgc3BlY2lmaWVkDQo+ IGJ5IEJ1ZmZlciBhbmQgTGVuZ3RoIGZyb20gdGhlIGxvd2VzdA0KPiArICBhZGRyZXNzIHRvIHRo ZSBoaWdoZXN0IGFkZHJlc3MgZm9yIGFuIDgtYml0IHZhbHVlDQo+IHRoYXQgbWF0Y2hlcyBWYWx1 ZS4gIElmIGEgbWF0Y2ggaXMgZm91bmQsDQo+ICsgIHRoZW4gYSBwb2ludGVyIHRvIHRoZSBtYXRj aGluZyBieXRlIGluIHRoZSB0YXJnZXQNCj4gYnVmZmVyIGlzIHJldHVybmVkLiAgSWYgbm8gbWF0 Y2ggaXMgZm91bmQsDQo+ICsgIHRoZW4gTlVMTCBpcyByZXR1cm5lZC4gIElmIExlbmd0aCBpcyAw LCB0aGVuIE5VTEwgaXMNCj4gcmV0dXJuZWQuDQo+ICsNCj4gKyAgSWYgTGVuZ3RoID4gMCBhbmQg QnVmZmVyIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmIExlbmd0aCBpcyBncmVhdGVy IHRoYW4gKE1BWF9BRERSRVNTIC0gQnVmZmVyICsNCj4gMSksIHRoZW4gQVNTRVJUKCkuDQo+ICsN Cj4gKyAgQHBhcmFtICBCdWZmZXIgICAgICBUaGUgcG9pbnRlciB0byB0aGUgdGFyZ2V0IGJ1ZmZl cg0KPiB0byBzY2FuLg0KPiArICBAcGFyYW0gIExlbmd0aCAgICAgIFRoZSBudW1iZXIgb2YgYnl0 ZXMgaW4gQnVmZmVyIHRvDQo+IHNjYW4uDQo+ICsgIEBwYXJhbSAgVmFsdWUgICAgICAgVGhlIHZh bHVlIHRvIHNlYXJjaCBmb3IgaW4gdGhlDQo+IHRhcmdldCBidWZmZXIuDQo+ICsNCj4gKyAgQHJl dHVybiBBIHBvaW50ZXIgdG8gdGhlIG1hdGNoaW5nIGJ5dGUgaW4gdGhlIHRhcmdldA0KPiBidWZm ZXIsIG9yIE5VTEwgb3RoZXJ3aXNlLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQgKg0KPiArRUZJQVBJ DQo+ICtTY2FuTWVtOCAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpCdWZmZXIsDQo+ICsgIElOIFVJ TlROICAgICAgIExlbmd0aCwNCj4gKyAgSU4gVUlOVDggICAgICAgVmFsdWUNCj4gKyAgKQ0KPiAr ew0KPiArICBpZiAoTGVuZ3RoID09IDApIHsNCj4gKyAgICByZXR1cm4gTlVMTDsNCj4gKyAgfQ0K PiArICBBU1NFUlQgKEJ1ZmZlciAhPSBOVUxMKTsNCj4gKyAgQVNTRVJUICgoTGVuZ3RoIC0gMSkg PD0gKE1BWF9BRERSRVNTIC0NCj4gKFVJTlROKUJ1ZmZlcikpOw0KPiArDQo+ICsgIHJldHVybiAo Vk9JRCopSW50ZXJuYWxNZW1TY2FuTWVtOCAoQnVmZmVyLCBMZW5ndGgsDQo+IFZhbHVlKTsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIFNjYW5zIGEgdGFyZ2V0IGJ1ZmZlciBmb3IgYSBVSU5UTiBz aXplZCB2YWx1ZSwgYW5kDQo+IHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBtYXRjaGluZw0KPiAr ICBVSU5UTiBzaXplZCB2YWx1ZSBpbiB0aGUgdGFyZ2V0IGJ1ZmZlci4NCj4gKw0KPiArICBUaGlz IGZ1bmN0aW9uIHNlYXJjaGVzIHRoZSB0YXJnZXQgYnVmZmVyIHNwZWNpZmllZA0KPiBieSBCdWZm ZXIgYW5kIExlbmd0aCBmcm9tIHRoZSBsb3dlc3QNCj4gKyAgYWRkcmVzcyB0byB0aGUgaGlnaGVz dCBhZGRyZXNzIGZvciBhIFVJTlROIHNpemVkDQo+IHZhbHVlIHRoYXQgbWF0Y2hlcyBWYWx1ZS4g IElmIGEgbWF0Y2ggaXMgZm91bmQsDQo+ICsgIHRoZW4gYSBwb2ludGVyIHRvIHRoZSBtYXRjaGlu ZyBieXRlIGluIHRoZSB0YXJnZXQNCj4gYnVmZmVyIGlzIHJldHVybmVkLiAgSWYgbm8gbWF0Y2gg aXMgZm91bmQsDQo+ICsgIHRoZW4gTlVMTCBpcyByZXR1cm5lZC4gIElmIExlbmd0aCBpcyAwLCB0 aGVuIE5VTEwgaXMNCj4gcmV0dXJuZWQuDQo+ICsNCj4gKyAgSWYgTGVuZ3RoID4gMCBhbmQgQnVm ZmVyIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmIEJ1ZmZlciBpcyBub3QgYWxpZ25l ZCBvbiBhIFVJTlROIGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiArICBJZiBMZW5ndGgg aXMgbm90IGFsaWduZWQgb24gYSBVSU5UTiBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4g KyAgSWYgTGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiAoTUFYX0FERFJFU1MgLSBCdWZmZXIgKw0KPiAx KSwgdGhlbiBBU1NFUlQoKS4NCj4gKw0KPiArICBAcGFyYW0gIEJ1ZmZlciAgICAgIFRoZSBwb2lu dGVyIHRvIHRoZSB0YXJnZXQgYnVmZmVyDQo+IHRvIHNjYW4uDQo+ICsgIEBwYXJhbSAgTGVuZ3Ro ICAgICAgVGhlIG51bWJlciBvZiBieXRlcyBpbiBCdWZmZXIgdG8NCj4gc2Nhbi4NCj4gKyAgQHBh cmFtICBWYWx1ZSAgICAgICBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvciBpbiB0aGUNCj4gdGFyZ2V0 IGJ1ZmZlci4NCj4gKw0KPiArICBAcmV0dXJuIEEgcG9pbnRlciB0byB0aGUgbWF0Y2hpbmcgYnl0 ZSBpbiB0aGUgdGFyZ2V0DQo+IGJ1ZmZlciwgb3IgTlVMTCBvdGhlcndpc2UuDQo+ICsNCj4gKyoq Lw0KPiArVk9JRCAqDQo+ICtFRklBUEkNCj4gK1NjYW5NZW1OICgNCj4gKyAgSU4gQ09OU1QgVk9J RCAgKkJ1ZmZlciwNCj4gKyAgSU4gVUlOVE4gICAgICAgTGVuZ3RoLA0KPiArICBJTiBVSU5UTiAg ICAgICBWYWx1ZQ0KPiArICApDQo+ICt7DQo+ICsgIGlmIChzaXplb2YgKFVJTlROKSA9PSBzaXpl b2YgKFVJTlQ2NCkpIHsNCj4gKyAgICByZXR1cm4gU2Nhbk1lbTY0IChCdWZmZXIsIExlbmd0aCwg KFVJTlQ2NClWYWx1ZSk7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgcmV0dXJuIFNjYW5NZW0zMiAo QnVmZmVyLCBMZW5ndGgsIChVSU5UMzIpVmFsdWUpOw0KPiArICB9DQo+ICt9DQo+ICsNCj4gZGlm ZiAtLWdpdCBhL01kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL1NldE1lbS5jDQo+IGIv TWRlUGtnL0xpYnJhcnkvQmFzZU1lbW9yeUxpYk1taW8vU2V0TWVtLmMNCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMC4uNDAyNTU2NzBjNmYyNg0KPiBlYjcyYTgyNTY4ZjAzNTcyMGZjNmZlNzU1NDYNCj4gLS0t IC9kZXYvbnVsbA0KPiArKysgYi9NZGVQa2cvTGlicmFyeS9CYXNlTWVtb3J5TGliTW1pby9TZXRN ZW0uYw0KPiBAQCAtMCwwICsxLDgzIEBADQo+ICsvKiogQGZpbGUNCj4gKyAgSW1wbGVtZW50YXRp b24gb2YgdGhlIEVmaVNldE1lbSByb3V0aW5lLiBUaGlzDQo+IGZ1bmN0aW9uIGlzIGJyb2tlbg0K PiArICBvdXQgaW50byBpdHMgb3duIHNvdXJjZSBmaWxlIHNvIHRoYXQgaXQgY2FuIGJlDQo+IGV4 Y2x1ZGVkIGZyb20gYQ0KPiArICBidWlsZCBmb3IgYSBwYXJ0aWN1bGFyIHBsYXRmb3JtIGVhc2ls eSBpZiBhbg0KPiBvcHRpbWl6ZWQgdmVyc2lvbg0KPiArICBpcyBkZXNpcmVkLg0KPiArDQo+ICsg IFRoZSBmb2xsb3dpbmcgQmFzZU1lbW9yeUxpYiBpbnN0YW5jZXMgY29udGFpbiB0aGUNCj4gc2Ft ZSBjb3B5IG9mIHRoaXMgZmlsZToNCj4gKw0KPiArICAgIEJhc2VNZW1vcnlMaWINCj4gKyAgICBC YXNlTWVtb3J5TGliTW1pbw0KPiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMTAsIElu dGVsIENvcnBvcmF0aW9uLiBBbGwNCj4gcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyAgQ29weXJp Z2h0IChjKSAyMDEyIC0gMjAyMCwgQVJNIEx0ZC4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+ DQo+ICsgIENvcHlyaWdodCAoYykgMjAxNiwgTGluYXJvIEx0ZC4gQWxsIHJpZ2h0cw0KPiByZXNl cnZlZC48QlI+DQo+ICsNCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVz ZS1QYXRlbnQNCj4gKw0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlICJNZW1MaWJJbnRlcm5hbHMu aCINCj4gKw0KPiArLyoqDQo+ICsgIFNldCBCdWZmZXIgdG8gVmFsdWUgZm9yIFNpemUgYnl0ZXMu DQo+ICsNCj4gKyAgQHBhcmFtICBCdWZmZXIgICBUaGUgbWVtb3J5IHRvIHNldC4NCj4gKyAgQHBh cmFtICBMZW5ndGggICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNldC4NCj4gKyAgQHBhcmFtICBW YWx1ZSAgICBUaGUgdmFsdWUgb2YgdGhlIHNldCBvcGVyYXRpb24uDQo+ICsNCj4gKyAgQHJldHVy biBCdWZmZXINCj4gKw0KPiArKiovDQo+ICtWT0lEICoNCj4gK0VGSUFQSQ0KPiArSW50ZXJuYWxN ZW1TZXRNZW0gKA0KPiArICBPVVQgICAgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZl ciwNCj4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIExlbmd0aCwNCj4gKyAg SU4gICAgICBVSU5UOCAgICAgICAgICAgICAgICAgICAgIFZhbHVlDQo+ICsgICkNCj4gK3sNCj4g KyAgLy8NCj4gKyAgLy8gRGVjbGFyZSB0aGUgbG9jYWwgdmFyaWFibGVzIHRoYXQgYWN0dWFsbHkg bW92ZQ0KPiB0aGUgZGF0YSBlbGVtZW50cyBhcw0KPiArICAvLyB2b2xhdGlsZSB0byBwcmV2ZW50 IHRoZSBvcHRpbWl6ZXIgZnJvbSByZXBsYWNpbmcNCj4gdGhpcyBmdW5jdGlvbiB3aXRoDQo+ICsg IC8vIHRoZSBpbnRyaW5zaWMgbWVtc2V0KCkNCj4gKyAgLy8NCj4gKyAgdm9sYXRpbGUgVUlOVDgg ICAgICAgICAgICAgICAgICAgICpQb2ludGVyODsNCj4gKyAgdm9sYXRpbGUgVUlOVDMyICAgICAg ICAgICAgICAgICAgICpQb2ludGVyMzI7DQo+ICsgIHZvbGF0aWxlIFVJTlQ2NCAgICAgICAgICAg ICAgICAgICAqUG9pbnRlcjY0Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVmFsdWUzMjsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVl NjQ7DQo+ICsNCj4gKyAgaWYgKCgoKFVJTlROKUJ1ZmZlciAmIDB4NykgPT0gMCkgJiYgKExlbmd0 aCA+PSA4KSkgew0KPiArICAgIC8vIEdlbmVyYXRlIHRoZSA2NGJpdCB2YWx1ZQ0KPiArICAgIFZh bHVlMzIgPSAoVmFsdWUgPDwgMjQpIHwgKFZhbHVlIDw8IDE2KSB8IChWYWx1ZQ0KPiA8PCA4KSB8 IFZhbHVlOw0KPiArICAgIFZhbHVlNjQgPSBMU2hpZnRVNjQgKFZhbHVlMzIsIDMyKSB8IFZhbHVl MzI7DQo+ICsNCj4gKyAgICBQb2ludGVyNjQgPSAoVUlOVDY0KilCdWZmZXI7DQo+ICsgICAgd2hp bGUgKExlbmd0aCA+PSA4KSB7DQo+ICsgICAgICBNbWlvV3JpdGU2NCAoKFVJTlROKVBvaW50ZXI2 NCsrLCBWYWx1ZTY0KTsNCj4gKyAgICAgIExlbmd0aCAtPSA4Ow0KPiArICAgIH0NCj4gKw0KPiAr ICAgIC8vIEZpbmlzaCB3aXRoIGJ5dGVzIGlmIG5lZWRlZA0KPiArICAgIFBvaW50ZXI4ID0gKFVJ TlQ4KilQb2ludGVyNjQ7DQo+ICsgIH0gZWxzZSBpZiAoKCgoVUlOVE4pQnVmZmVyICYgMHgzKSA9 PSAwKSAmJiAoTGVuZ3RoDQo+ID49IDQpKSB7DQo+ICsgICAgLy8gR2VuZXJhdGUgdGhlIDMyYml0 IHZhbHVlDQo+ICsgICAgVmFsdWUzMiA9IChWYWx1ZSA8PCAyNCkgfCAoVmFsdWUgPDwgMTYpIHwg KFZhbHVlDQo+IDw8IDgpIHwgVmFsdWU7DQo+ICsNCj4gKyAgICBQb2ludGVyMzIgPSAoVUlOVDMy KilCdWZmZXI7DQo+ICsgICAgd2hpbGUgKExlbmd0aCA+PSA0KSB7DQo+ICsgICAgICBNbWlvV3Jp dGUzMiAoKFVJTlROKVBvaW50ZXIzMisrLCBWYWx1ZTMyKTsNCj4gKyAgICAgIExlbmd0aCAtPSA0 Ow0KPiArICAgIH0NCj4gKw0KPiArICAgIC8vIEZpbmlzaCB3aXRoIGJ5dGVzIGlmIG5lZWRlZA0K PiArICAgIFBvaW50ZXI4ID0gKFVJTlQ4KilQb2ludGVyMzI7DQo+ICsgIH0gZWxzZSB7DQo+ICsg ICAgUG9pbnRlcjggPSAoVUlOVDgqKUJ1ZmZlcjsNCj4gKyAgfQ0KPiArICB3aGlsZSAoTGVuZ3Ro LS0gPiAwKSB7DQo+ICsgICAgTW1pb1dyaXRlOCAoKFVJTlROKVBvaW50ZXI4KyssIFZhbHVlKTsN Cj4gKyAgfQ0KPiArICByZXR1cm4gQnVmZmVyOw0KPiArfQ0KPiBkaWZmIC0tZ2l0DQo+IGEvTWRl UGtnL0xpYnJhcnkvQmFzZU1lbW9yeUxpYk1taW8vU2V0TWVtMTZXcmFwcGVyLmMNCj4gYi9NZGVQ a2cvTGlicmFyeS9CYXNlTWVtb3J5TGliTW1pby9TZXRNZW0xNldyYXBwZXIuYw0KPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi5iZTc4NWM1ZWI2OTZlDQo+IGY2YjkxM2JmN2JjMDA4MWE1ZjQxNGM2ZjE0MQ0K PiAtLS0gL2Rldi9udWxsDQo+ICsrKw0KPiBiL01kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJN bWlvL1NldE1lbTE2V3JhcHBlci5jDQo+IEBAIC0wLDAgKzEsNjAgQEANCj4gKy8qKiBAZmlsZQ0K PiArICBTZXRNZW0xNigpIGltcGxlbWVudGF0aW9uLg0KPiArDQo+ICsgIFRoZSBmb2xsb3dpbmcg QmFzZU1lbW9yeUxpYiBpbnN0YW5jZXMgY29udGFpbiB0aGUNCj4gc2FtZSBjb3B5IG9mIHRoaXMg ZmlsZToNCj4gKyAgICBCYXNlTWVtb3J5TGliDQo+ICsgICAgQmFzZU1lbW9yeUxpYk1taW8NCj4g KyAgICBCYXNlTWVtb3J5TGliTW14DQo+ICsgICAgQmFzZU1lbW9yeUxpYlNzZTINCj4gKyAgICBC YXNlTWVtb3J5TGliUmVwU3RyDQo+ICsgICAgQmFzZU1lbW9yeUxpYk9wdER4ZQ0KPiArICAgIEJh c2VNZW1vcnlMaWJPcHRQZWkNCj4gKyAgICBQZWlNZW1vcnlMaWINCj4gKyAgICBVZWZpTWVtb3J5 TGliDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxMCwgSW50ZWwgQ29ycG9yYXRp b24uIEFsbA0KPiByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArICBDb3B5cmlnaHQgKGMpIDIwMjAs IEFSTSBMdGQuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiArICBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArDQo+ICsqKi8NCj4gKw0KPiArI2lu Y2x1ZGUgIk1lbUxpYkludGVybmFscy5oIg0KPiArDQo+ICsvKioNCj4gKyAgRmlsbHMgYSB0YXJn ZXQgYnVmZmVyIHdpdGggYSAxNi1iaXQgdmFsdWUsIGFuZA0KPiByZXR1cm5zIHRoZSB0YXJnZXQg YnVmZmVyLg0KPiArDQo+ICsgIFRoaXMgZnVuY3Rpb24gZmlsbHMgTGVuZ3RoIGJ5dGVzIG9mIEJ1 ZmZlciB3aXRoIHRoZQ0KPiAxNi1iaXQgdmFsdWUgc3BlY2lmaWVkIGJ5DQo+ICsgIFZhbHVlLCBh bmQgcmV0dXJucyBCdWZmZXIuIFZhbHVlIGlzIHJlcGVhdGVkIGV2ZXJ5DQo+IDE2LWJpdHMgaW4g Zm9yIExlbmd0aA0KPiArICBieXRlcyBvZiBCdWZmZXIuDQo+ICsNCj4gKyAgSWYgTGVuZ3RoID4g MCBhbmQgQnVmZmVyIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmIExlbmd0aCBpcyBn cmVhdGVyIHRoYW4gKE1BWF9BRERSRVNTIC0gQnVmZmVyICsNCj4gMSksIHRoZW4gQVNTRVJUKCku DQo+ICsgIElmIEJ1ZmZlciBpcyBub3QgYWxpZ25lZCBvbiBhIDE2LWJpdCBib3VuZGFyeSwgdGhl bg0KPiBBU1NFUlQoKS4NCj4gKyAgSWYgTGVuZ3RoIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0 IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiArDQo+ICsgIEBwYXJhbSAgQnVmZmVyICBU aGUgcG9pbnRlciB0byB0aGUgdGFyZ2V0IGJ1ZmZlciB0bw0KPiBmaWxsLg0KPiArICBAcGFyYW0g IExlbmd0aCAgVGhlIG51bWJlciBvZiBieXRlcyBpbiBCdWZmZXIgdG8NCj4gZmlsbC4NCj4gKyAg QHBhcmFtICBWYWx1ZSAgIFRoZSB2YWx1ZSB3aXRoIHdoaWNoIHRvIGZpbGwgTGVuZ3RoDQo+IGJ5 dGVzIG9mIEJ1ZmZlci4NCj4gKw0KPiArICBAcmV0dXJuIEJ1ZmZlci4NCj4gKw0KPiArKiovDQo+ ICtWT0lEICoNCj4gK0VGSUFQSQ0KPiArU2V0TWVtMTYgKA0KPiArICBPVVQgVk9JRCAgICpCdWZm ZXIsDQo+ICsgIElOIFVJTlROICAgTGVuZ3RoLA0KPiArICBJTiBVSU5UMTYgIFZhbHVlDQo+ICsg ICkNCj4gK3sNCj4gKyAgaWYgKExlbmd0aCA9PSAwKSB7DQo+ICsgICAgcmV0dXJuIEJ1ZmZlcjsN Cj4gKyAgfQ0KPiArDQo+ICsgIEFTU0VSVCAoQnVmZmVyICE9IE5VTEwpOw0KPiArICBBU1NFUlQg KChMZW5ndGggLSAxKSA8PSAoTUFYX0FERFJFU1MgLQ0KPiAoVUlOVE4pQnVmZmVyKSk7DQo+ICsg IEFTU0VSVCAoKCgoVUlOVE4pQnVmZmVyKSAmIChzaXplb2YgKFZhbHVlKSAtIDEpKSA9PQ0KPiAw KTsNCj4gKyAgQVNTRVJUICgoTGVuZ3RoICYgKHNpemVvZiAoVmFsdWUpIC0gMSkpID09IDApOw0K PiArDQo+ICsgIHJldHVybiBJbnRlcm5hbE1lbVNldE1lbTE2IChCdWZmZXIsIExlbmd0aCAvIHNp emVvZg0KPiAoVmFsdWUpLCBWYWx1ZSk7DQo+ICt9DQo+IGRpZmYgLS1naXQNCj4gYS9NZGVQa2cv TGlicmFyeS9CYXNlTWVtb3J5TGliTW1pby9TZXRNZW0zMldyYXBwZXIuYw0KPiBiL01kZVBrZy9M aWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL1NldE1lbTMyV3JhcHBlci5jDQo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAuLjYyMmM2ZWRkY2NjODgNCj4gZTg0NjkyMTc4MmVmYzI5ZTQwZjgxNmFlNDk5DQo+IC0t LSAvZGV2L251bGwNCj4gKysrDQo+IGIvTWRlUGtnL0xpYnJhcnkvQmFzZU1lbW9yeUxpYk1taW8v U2V0TWVtMzJXcmFwcGVyLmMNCj4gQEAgLTAsMCArMSw2MCBAQA0KPiArLyoqIEBmaWxlDQo+ICsg IFNldE1lbTMyKCkgaW1wbGVtZW50YXRpb24uDQo+ICsNCj4gKyAgVGhlIGZvbGxvd2luZyBCYXNl TWVtb3J5TGliIGluc3RhbmNlcyBjb250YWluIHRoZQ0KPiBzYW1lIGNvcHkgb2YgdGhpcyBmaWxl Og0KPiArICAgIEJhc2VNZW1vcnlMaWINCj4gKyAgICBCYXNlTWVtb3J5TGliTW1pbw0KPiArICAg IEJhc2VNZW1vcnlMaWJNbXgNCj4gKyAgICBCYXNlTWVtb3J5TGliU3NlMg0KPiArICAgIEJhc2VN ZW1vcnlMaWJSZXBTdHINCj4gKyAgICBCYXNlTWVtb3J5TGliT3B0RHhlDQo+ICsgICAgQmFzZU1l bW9yeUxpYk9wdFBlaQ0KPiArICAgIFBlaU1lbW9yeUxpYg0KPiArICAgIFVlZmlNZW1vcnlMaWIN Cj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsDQo+IHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIENvcHlyaWdodCAoYykgMjAyMCwgQVJN IEx0ZC4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVk ZSAiTWVtTGliSW50ZXJuYWxzLmgiDQo+ICsNCj4gKy8qKg0KPiArICBGaWxscyBhIHRhcmdldCBi dWZmZXIgd2l0aCBhIDMyLWJpdCB2YWx1ZSwgYW5kDQo+IHJldHVybnMgdGhlIHRhcmdldCBidWZm ZXIuDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlvbiBmaWxscyBMZW5ndGggYnl0ZXMgb2YgQnVmZmVy IHdpdGggdGhlDQo+IDMyLWJpdCB2YWx1ZSBzcGVjaWZpZWQgYnkNCj4gKyAgVmFsdWUsIGFuZCBy ZXR1cm5zIEJ1ZmZlci4gVmFsdWUgaXMgcmVwZWF0ZWQgZXZlcnkNCj4gMzItYml0cyBpbiBmb3Ig TGVuZ3RoDQo+ICsgIGJ5dGVzIG9mIEJ1ZmZlci4NCj4gKw0KPiArICBJZiBMZW5ndGggPiAwIGFu ZCBCdWZmZXIgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgTGVuZ3RoIGlzIGdyZWF0 ZXIgdGhhbiAoTUFYX0FERFJFU1MgLSBCdWZmZXIgKw0KPiAxKSwgdGhlbiBBU1NFUlQoKS4NCj4g KyAgSWYgQnVmZmVyIGlzIG5vdCBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5LCB0aGVuDQo+ IEFTU0VSVCgpLg0KPiArICBJZiBMZW5ndGggaXMgbm90IGFsaWduZWQgb24gYSAzMi1iaXQgYm91 bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+ICsNCj4gKyAgQHBhcmFtICBCdWZmZXIgIFRoZSBw b2ludGVyIHRvIHRoZSB0YXJnZXQgYnVmZmVyIHRvDQo+IGZpbGwuDQo+ICsgIEBwYXJhbSAgTGVu Z3RoICBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIEJ1ZmZlciB0bw0KPiBmaWxsLg0KPiArICBAcGFy YW0gIFZhbHVlICAgVGhlIHZhbHVlIHdpdGggd2hpY2ggdG8gZmlsbCBMZW5ndGgNCj4gYnl0ZXMg b2YgQnVmZmVyLg0KPiArDQo+ICsgIEByZXR1cm4gQnVmZmVyLg0KPiArDQo+ICsqKi8NCj4gK1ZP SUQgKg0KPiArRUZJQVBJDQo+ICtTZXRNZW0zMiAoDQo+ICsgIE9VVCBWT0lEICAgKkJ1ZmZlciwN Cj4gKyAgSU4gVUlOVE4gICBMZW5ndGgsDQo+ICsgIElOIFVJTlQzMiAgVmFsdWUNCj4gKyAgKQ0K PiArew0KPiArICBpZiAoTGVuZ3RoID09IDApIHsNCj4gKyAgICByZXR1cm4gQnVmZmVyOw0KPiAr ICB9DQo+ICsNCj4gKyAgQVNTRVJUIChCdWZmZXIgIT0gTlVMTCk7DQo+ICsgIEFTU0VSVCAoKExl bmd0aCAtIDEpIDw9IChNQVhfQUREUkVTUyAtDQo+IChVSU5UTilCdWZmZXIpKTsNCj4gKyAgQVNT RVJUICgoKChVSU5UTilCdWZmZXIpICYgKHNpemVvZiAoVmFsdWUpIC0gMSkpID09DQo+IDApOw0K PiArICBBU1NFUlQgKChMZW5ndGggJiAoc2l6ZW9mIChWYWx1ZSkgLSAxKSkgPT0gMCk7DQo+ICsN Cj4gKyAgcmV0dXJuIEludGVybmFsTWVtU2V0TWVtMzIgKEJ1ZmZlciwgTGVuZ3RoIC8gc2l6ZW9m DQo+IChWYWx1ZSksIFZhbHVlKTsNCj4gK30NCj4gZGlmZiAtLWdpdA0KPiBhL01kZVBrZy9MaWJy YXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL1NldE1lbTY0V3JhcHBlci5jDQo+IGIvTWRlUGtnL0xpYnJh cnkvQmFzZU1lbW9yeUxpYk1taW8vU2V0TWVtNjRXcmFwcGVyLmMNCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MC4uNzY1M2VlZDg1Y2Q2Mw0KPiAzYmU1YWVhNDM5Y2Y0YWI2Mjk1OGRkNjJjNDcNCj4gLS0tIC9k ZXYvbnVsbA0KPiArKysNCj4gYi9NZGVQa2cvTGlicmFyeS9CYXNlTWVtb3J5TGliTW1pby9TZXRN ZW02NFdyYXBwZXIuYw0KPiBAQCAtMCwwICsxLDYwIEBADQo+ICsvKiogQGZpbGUNCj4gKyAgU2V0 TWVtNjQoKSBpbXBsZW1lbnRhdGlvbi4NCj4gKw0KPiArICBUaGUgZm9sbG93aW5nIEJhc2VNZW1v cnlMaWIgaW5zdGFuY2VzIGNvbnRhaW4gdGhlDQo+IHNhbWUgY29weSBvZiB0aGlzIGZpbGU6DQo+ ICsgICAgQmFzZU1lbW9yeUxpYg0KPiArICAgIEJhc2VNZW1vcnlMaWJNbWlvDQo+ICsgICAgQmFz ZU1lbW9yeUxpYk1teA0KPiArICAgIEJhc2VNZW1vcnlMaWJTc2UyDQo+ICsgICAgQmFzZU1lbW9y eUxpYlJlcFN0cg0KPiArICAgIEJhc2VNZW1vcnlMaWJPcHREeGUNCj4gKyAgICBCYXNlTWVtb3J5 TGliT3B0UGVpDQo+ICsgICAgUGVpTWVtb3J5TGliDQo+ICsgICAgVWVmaU1lbW9yeUxpYg0KPiAr DQo+ICsgIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMTAsIEludGVsIENvcnBvcmF0aW9uLiBBbGwN Cj4gcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIwLCBBUk0gTHRk LiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKw0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlICJN ZW1MaWJJbnRlcm5hbHMuaCINCj4gKw0KPiArLyoqDQo+ICsgIEZpbGxzIGEgdGFyZ2V0IGJ1ZmZl ciB3aXRoIGEgNjQtYml0IHZhbHVlLCBhbmQNCj4gcmV0dXJucyB0aGUgdGFyZ2V0IGJ1ZmZlci4N Cj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIGZpbGxzIExlbmd0aCBieXRlcyBvZiBCdWZmZXIgd2l0 aCB0aGUNCj4gNjQtYml0IHZhbHVlIHNwZWNpZmllZCBieQ0KPiArICBWYWx1ZSwgYW5kIHJldHVy bnMgQnVmZmVyLiBWYWx1ZSBpcyByZXBlYXRlZCBldmVyeQ0KPiA2NC1iaXRzIGluIGZvciBMZW5n dGgNCj4gKyAgYnl0ZXMgb2YgQnVmZmVyLg0KPiArDQo+ICsgIElmIExlbmd0aCA+IDAgYW5kIEJ1 ZmZlciBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiArICBJZiBMZW5ndGggaXMgZ3JlYXRlciB0 aGFuIChNQVhfQUREUkVTUyAtIEJ1ZmZlciArDQo+IDEpLCB0aGVuIEFTU0VSVCgpLg0KPiArICBJ ZiBCdWZmZXIgaXMgbm90IGFsaWduZWQgb24gYSA2NC1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNT RVJUKCkuDQo+ICsgIElmIExlbmd0aCBpcyBub3QgYWxpZ25lZCBvbiBhIDY0LWJpdCBib3VuZGFy eSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gKw0KPiArICBAcGFyYW0gIEJ1ZmZlciAgVGhlIHBvaW50 ZXIgdG8gdGhlIHRhcmdldCBidWZmZXIgdG8NCj4gZmlsbC4NCj4gKyAgQHBhcmFtICBMZW5ndGgg IFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gQnVmZmVyIHRvDQo+IGZpbGwuDQo+ICsgIEBwYXJhbSAg VmFsdWUgICBUaGUgdmFsdWUgd2l0aCB3aGljaCB0byBmaWxsIExlbmd0aA0KPiBieXRlcyBvZiBC dWZmZXIuDQo+ICsNCj4gKyAgQHJldHVybiBCdWZmZXIuDQo+ICsNCj4gKyoqLw0KPiArVk9JRCAq DQo+ICtFRklBUEkNCj4gK1NldE1lbTY0ICgNCj4gKyAgT1VUIFZPSUQgICAqQnVmZmVyLA0KPiAr ICBJTiBVSU5UTiAgIExlbmd0aCwNCj4gKyAgSU4gVUlOVDY0ICBWYWx1ZQ0KPiArICApDQo+ICt7 DQo+ICsgIGlmIChMZW5ndGggPT0gMCkgew0KPiArICAgIHJldHVybiBCdWZmZXI7DQo+ICsgIH0N Cj4gKw0KPiArICBBU1NFUlQgKEJ1ZmZlciAhPSBOVUxMKTsNCj4gKyAgQVNTRVJUICgoTGVuZ3Ro IC0gMSkgPD0gKE1BWF9BRERSRVNTIC0NCj4gKFVJTlROKUJ1ZmZlcikpOw0KPiArICBBU1NFUlQg KCgoKFVJTlROKUJ1ZmZlcikgJiAoc2l6ZW9mIChWYWx1ZSkgLSAxKSkgPT0NCj4gMCk7DQo+ICsg IEFTU0VSVCAoKExlbmd0aCAmIChzaXplb2YgKFZhbHVlKSAtIDEpKSA9PSAwKTsNCj4gKw0KPiAr ICByZXR1cm4gSW50ZXJuYWxNZW1TZXRNZW02NCAoQnVmZmVyLCBMZW5ndGggLyBzaXplb2YNCj4g KFZhbHVlKSwgVmFsdWUpOw0KPiArfQ0KPiBkaWZmIC0tZ2l0DQo+IGEvTWRlUGtnL0xpYnJhcnkv QmFzZU1lbW9yeUxpYk1taW8vU2V0TWVtV3JhcHBlci5jDQo+IGIvTWRlUGtnL0xpYnJhcnkvQmFz ZU1lbW9yeUxpYk1taW8vU2V0TWVtV3JhcHBlci5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2ZGQ5 NTY2ODZkMTUNCj4gYjRiNGNiMjUxNTdkNzY0ODQ5MDQzZDFiNTdiDQo+IC0tLSAvZGV2L251bGwN Cj4gKysrIGIvTWRlUGtnL0xpYnJhcnkvQmFzZU1lbW9yeUxpYk1taW8vU2V0TWVtV3JhcHBlci5j DQo+IEBAIC0wLDAgKzEsODcgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBTZXRNZW0oKSBhbmQgU2V0 TWVtTigpIGltcGxlbWVudGF0aW9uLg0KPiArDQo+ICsgIFRoZSBmb2xsb3dpbmcgQmFzZU1lbW9y eUxpYiBpbnN0YW5jZXMgY29udGFpbiB0aGUNCj4gc2FtZSBjb3B5IG9mIHRoaXMgZmlsZToNCj4g Kw0KPiArICAgIEJhc2VNZW1vcnlMaWINCj4gKyAgICBCYXNlTWVtb3J5TGliTW1pbw0KPiArICAg IEJhc2VNZW1vcnlMaWJNbXgNCj4gKyAgICBCYXNlTWVtb3J5TGliU3NlMg0KPiArICAgIEJhc2VN ZW1vcnlMaWJSZXBTdHINCj4gKyAgICBCYXNlTWVtb3J5TGliT3B0RHhlDQo+ICsgICAgQmFzZU1l bW9yeUxpYk9wdFBlaQ0KPiArICAgIFBlaU1lbW9yeUxpYg0KPiArICAgIFVlZmlNZW1vcnlMaWIN Cj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsDQo+IHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIENvcHlyaWdodCAoYykgMjAyMCwgQVJN IEx0ZC4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVk ZSAiTWVtTGliSW50ZXJuYWxzLmgiDQo+ICsNCj4gKy8qKg0KPiArICBGaWxscyBhIHRhcmdldCBi dWZmZXIgd2l0aCBhIGJ5dGUgdmFsdWUsIGFuZCByZXR1cm5zDQo+IHRoZSB0YXJnZXQgYnVmZmVy Lg0KPiArDQo+ICsgIFRoaXMgZnVuY3Rpb24gZmlsbHMgTGVuZ3RoIGJ5dGVzIG9mIEJ1ZmZlciB3 aXRoDQo+IFZhbHVlLCBhbmQgcmV0dXJucyBCdWZmZXIuDQo+ICsNCj4gKyAgSWYgTGVuZ3RoIGlz IGdyZWF0ZXIgdGhhbiAoTUFYX0FERFJFU1MgLSBCdWZmZXIgKw0KPiAxKSwgdGhlbiBBU1NFUlQo KS4NCj4gKw0KPiArICBAcGFyYW0gIEJ1ZmZlciAgICBUaGUgbWVtb3J5IHRvIHNldC4NCj4gKyAg QHBhcmFtICBMZW5ndGggICAgVGhlIG51bWJlciBvZiBieXRlcyB0byBzZXQuDQo+ICsgIEBwYXJh bSAgVmFsdWUgICAgIFRoZSB2YWx1ZSB3aXRoIHdoaWNoIHRvIGZpbGwNCj4gTGVuZ3RoIGJ5dGVz IG9mIEJ1ZmZlci4NCj4gKw0KPiArICBAcmV0dXJuIEJ1ZmZlci4NCj4gKw0KPiArKiovDQo+ICtW T0lEICoNCj4gK0VGSUFQSQ0KPiArU2V0TWVtICgNCj4gKyAgT1VUIFZPSUQgICpCdWZmZXIsDQo+ ICsgIElOIFVJTlROICBMZW5ndGgsDQo+ICsgIElOIFVJTlQ4ICBWYWx1ZQ0KPiArICApDQo+ICt7 DQo+ICsgIGlmIChMZW5ndGggPT0gMCkgew0KPiArICAgIHJldHVybiBCdWZmZXI7DQo+ICsgIH0N Cj4gKw0KPiArICBBU1NFUlQgKChMZW5ndGggLSAxKSA8PSAoTUFYX0FERFJFU1MgLQ0KPiAoVUlO VE4pQnVmZmVyKSk7DQo+ICsNCj4gKyAgcmV0dXJuIEludGVybmFsTWVtU2V0TWVtIChCdWZmZXIs IExlbmd0aCwgVmFsdWUpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRmlsbHMgYSB0YXJnZXQg YnVmZmVyIHdpdGggYSB2YWx1ZSB0aGF0IGlzIHNpemUNCj4gVUlOVE4sIGFuZCByZXR1cm5zIHRo ZSB0YXJnZXQgYnVmZmVyLg0KPiArDQo+ICsgIFRoaXMgZnVuY3Rpb24gZmlsbHMgTGVuZ3RoIGJ5 dGVzIG9mIEJ1ZmZlciB3aXRoIHRoZQ0KPiBVSU5UTiBzaXplZCB2YWx1ZSBzcGVjaWZpZWQgYnkN Cj4gKyAgVmFsdWUsIGFuZCByZXR1cm5zIEJ1ZmZlci4gVmFsdWUgaXMgcmVwZWF0ZWQgZXZlcnkN Cj4gc2l6ZW9mKFVJTlROKSBieXRlcyBmb3IgTGVuZ3RoDQo+ICsgIGJ5dGVzIG9mIEJ1ZmZlci4N Cj4gKw0KPiArICBJZiBMZW5ndGggPiAwIGFuZCBCdWZmZXIgaXMgTlVMTCwgdGhlbiBBU1NFUlQo KS4NCj4gKyAgSWYgTGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiAoTUFYX0FERFJFU1MgLSBCdWZmZXIg Kw0KPiAxKSwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgQnVmZmVyIGlzIG5vdCBhbGlnbmVkIG9u IGEgVUlOVE4gYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+ICsgIElmIExlbmd0aCBpcyBu b3QgYWxpZ25lZCBvbiBhIFVJTlROIGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiArDQo+ ICsgIEBwYXJhbSAgQnVmZmVyICBUaGUgcG9pbnRlciB0byB0aGUgdGFyZ2V0IGJ1ZmZlciB0bw0K PiBmaWxsLg0KPiArICBAcGFyYW0gIExlbmd0aCAgVGhlIG51bWJlciBvZiBieXRlcyBpbiBCdWZm ZXIgdG8NCj4gZmlsbC4NCj4gKyAgQHBhcmFtICBWYWx1ZSAgIFRoZSB2YWx1ZSB3aXRoIHdoaWNo IHRvIGZpbGwgTGVuZ3RoDQo+IGJ5dGVzIG9mIEJ1ZmZlci4NCj4gKw0KPiArICBAcmV0dXJuIEJ1 ZmZlci4NCj4gKw0KPiArKiovDQo+ICtWT0lEICoNCj4gK0VGSUFQSQ0KPiArU2V0TWVtTiAoDQo+ ICsgIE9VVCBWT0lEICAqQnVmZmVyLA0KPiArICBJTiBVSU5UTiAgTGVuZ3RoLA0KPiArICBJTiBV SU5UTiAgVmFsdWUNCj4gKyAgKQ0KPiArew0KPiArICBpZiAoc2l6ZW9mIChVSU5UTikgPT0gc2l6 ZW9mIChVSU5UNjQpKSB7DQo+ICsgICAgcmV0dXJuIFNldE1lbTY0IChCdWZmZXIsIExlbmd0aCwg KFVJTlQ2NClWYWx1ZSk7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgcmV0dXJuIFNldE1lbTMyIChC dWZmZXIsIExlbmd0aCwgKFVJTlQzMilWYWx1ZSk7DQo+ICsgIH0NCj4gK30NCj4gZGlmZiAtLWdp dA0KPiBhL01kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWJNbWlvL1plcm9NZW1XcmFwcGVyLmMN Cj4gYi9NZGVQa2cvTGlicmFyeS9CYXNlTWVtb3J5TGliTW1pby9aZXJvTWVtV3JhcHBlci5jDQo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLjU1MjQ2ZDEyMWM2ODINCj4gMGQzNzFhZjQ2Mzc5MjYxNGMxZDcz Njc2ZTZmDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvTWRlUGtnL0xpYnJhcnkvQmFzZU1lbW9y eUxpYk1taW8vWmVyb01lbVdyYXBwZXIuYw0KPiBAQCAtMCwwICsxLDUyIEBADQo+ICsvKiogQGZp bGUNCj4gKyAgWmVyb01lbSgpIGltcGxlbWVudGF0aW9uLg0KPiArDQo+ICsgIFRoZSBmb2xsb3dp bmcgQmFzZU1lbW9yeUxpYiBpbnN0YW5jZXMgY29udGFpbiB0aGUNCj4gc2FtZSBjb3B5IG9mIHRo aXMgZmlsZToNCj4gKw0KPiArICAgIEJhc2VNZW1vcnlMaWINCj4gKyAgICBCYXNlTWVtb3J5TGli TW1pbw0KPiArICAgIEJhc2VNZW1vcnlMaWJNbXgNCj4gKyAgICBCYXNlTWVtb3J5TGliU3NlMg0K PiArICAgIEJhc2VNZW1vcnlMaWJSZXBTdHINCj4gKyAgICBCYXNlTWVtb3J5TGliT3B0RHhlDQo+ ICsgICAgQmFzZU1lbW9yeUxpYk9wdFBlaQ0KPiArICAgIFBlaU1lbW9yeUxpYg0KPiArICAgIFVl ZmlNZW1vcnlMaWINCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE4LCBJbnRlbCBD b3Jwb3JhdGlvbi4gQWxsDQo+IHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIENvcHlyaWdodCAo YykgMjAyMCwgQVJNIEx0ZC4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsNCj4gKyoqLw0KPiAr DQo+ICsjaW5jbHVkZSAiTWVtTGliSW50ZXJuYWxzLmgiDQo+ICsNCj4gKy8qKg0KPiArICBGaWxs cyBhIHRhcmdldCBidWZmZXIgd2l0aCB6ZXJvcywgYW5kIHJldHVybnMgdGhlDQo+IHRhcmdldCBi dWZmZXIuDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlvbiBmaWxscyBMZW5ndGggYnl0ZXMgb2YgQnVm ZmVyIHdpdGgNCj4gemVyb3MsIGFuZCByZXR1cm5zIEJ1ZmZlci4NCj4gKw0KPiArICBJZiBMZW5n dGggPiAwIGFuZCBCdWZmZXIgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgTGVuZ3Ro IGlzIGdyZWF0ZXIgdGhhbiAoTUFYX0FERFJFU1MgLSBCdWZmZXIgKw0KPiAxKSwgdGhlbiBBU1NF UlQoKS4NCj4gKw0KPiArICBAcGFyYW0gIEJ1ZmZlciAgICAgIFRoZSBwb2ludGVyIHRvIHRoZSB0 YXJnZXQgYnVmZmVyDQo+IHRvIGZpbGwgd2l0aCB6ZXJvcy4NCj4gKyAgQHBhcmFtICBMZW5ndGgg ICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIEJ1ZmZlciB0bw0KPiBmaWxsIHdpdGggemVyb3Mu DQo+ICsNCj4gKyAgQHJldHVybiBCdWZmZXIuDQo+ICsNCj4gKyoqLw0KPiArVk9JRCAqDQo+ICtF RklBUEkNCj4gK1plcm9NZW0gKA0KPiArICBPVVQgVk9JRCAgKkJ1ZmZlciwNCj4gKyAgSU4gVUlO VE4gIExlbmd0aA0KPiArICApDQo+ICt7DQo+ICsgIGlmIChMZW5ndGggPT0gMCkgew0KPiArICAg IHJldHVybiBCdWZmZXI7DQo+ICsgIH0NCj4gKw0KPiArICBBU1NFUlQgKEJ1ZmZlciAhPSBOVUxM KTsNCj4gKyAgQVNTRVJUIChMZW5ndGggPD0gKE1BWF9BRERSRVNTIC0gKFVJTlROKUJ1ZmZlciAr DQo+IDEpKTsNCj4gKyAgcmV0dXJuIEludGVybmFsTWVtWmVyb01lbSAoQnVmZmVyLCBMZW5ndGgp Ow0KPiArfQ0KPiAtLQ0KPiAnR3VpZChDRTE2NTY2OS0zRUYzLTQ5M0YtQjg1RC02MTkwRUU1Qjk3 NTkpJw0KPiANCj4gDQo+IA0KDQo=