From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id B1F1E4805B for ; Sun, 10 Dec 2023 03:47:46 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9E08768D0CB; Sun, 10 Dec 2023 05:47:43 +0200 (EET) Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9A70968CFEE for ; Sun, 10 Dec 2023 05:47:35 +0200 (EET) Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-286de610668so554843a91.1 for ; Sat, 09 Dec 2023 19:47:35 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702180053; x=1702784853; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Z3j2i90auQ86D29mK2a9Q8rWXOaodUW0hJlBhF2+JY8=; b=Q9js/dtdvKXmNdJRQafd8qD4oDbDLmgCwdBotQdayDL/BrETIaxCyildDIOv3g/eUA U0x6qqK1PUZL0xEQuvqwDSHyQDMJseLwDc8lvhrC6ovhutcyTZouOTSy6GCd45kbSJoh MsH316WsVesyqQ0wnCsYKtGfPniHWMzYxKcmk4T/LoRvxOxR0CLrNrj4KLOq6hFO8Wm1 TgQw1leK8qbOLWiP0LUE7BTAZZWjbp5PMciBOHV+svK6EZBLzWRSKd9EXkH+QFwwvtaG zIgYnaAXLJk2UnTikodKMYbEECDFmQQLuUV53fyq69UR3usdmpL/EtmnYcEPfCsNhcLn NUHA== X-Gm-Message-State: AOJu0Yw6L9y0CczpiTDXis/thhTfEhsobdl28Pz5YUv3E+K3mY4R+KnE uP3gvE8ZHgGP20vwiFlNCPxafErGaViH008yV3n0atn/QwLPhngUnlU= X-Google-Smtp-Source: AGHT+IH5JsDrtPpvSgRKGuYA8g/zO5XmkmrIUXXmPgDCQDC6FreUhE+Ky62g1KfZXBS9WPWkeXA6P/+DWBh5sJZYVyY= X-Received: by 2002:a17:902:e888:b0:1d0:9661:161b with SMTP id w8-20020a170902e88800b001d09661161bmr4955058plg.6.1702180053081; Sat, 09 Dec 2023 19:47:33 -0800 (PST) MIME-Version: 1.0 References: <20231209100639.607234-1-marth64@proxyid.net> <04e7ac5c-926e-4b44-9473-dbc04d2b7c03@gmail.com> In-Reply-To: <04e7ac5c-926e-4b44-9473-dbc04d2b7c03@gmail.com> From: Marth64 Date: Sat, 9 Dec 2023 21:47:22 -0600 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH] [WIP] [RFC] dvdvideo: initial contribution (DVD demuxer) X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: PiBXaGF0IGlzIGEgeXV2LXRvLXJnYiBmdW5jdGlvbiBkb2luZyBpbnNpZGUgYSBkdmQtdmlkZW8g ZGVtdXhlcj8KRFZEIHN1YnRpdGxlIHBhbGV0dGUgaXMgWVVWLiBIb3dldmVyLCB3aGVuIHN0b3Jl ZCBpbiBtb2Rlcm4gZm9ybWF0cyBzdWNoIGFzCm1hdHJvc2thIG9yIE1QNCwgdGhlICJjb252ZW50 aW9uIiBpcyB0byBzdG9yZSBpbiBSR0IuCkluIGZhY3QsIG1wNC9tb3YgbXV4ZXIgaGFzIGEgc2lt aWxhciByb3V0aW5lLgoKPiBUaGlzIGZ1bmN0aW9uIGlzIHBvaW50bGVzcy4KSSdtIG9wZW5pbmcg dGhlIE1QRUctUFMgc3ViZGVtdXhlciB3aXRoIGN1c3RvbSBJTyBmbGFnLiBJdCBzZWVtcyB0byBl eHBlY3QKdGhpcyBhY2NvcmRpbmcgdG8gdGhlIGRvY3VtZW50YXRpb24uIEkgY2FuIHRyeSB3aXRo b3V0LgoKT24gU2F0LCBEZWMgOSwgMjAyMyBhdCA5OjAz4oCvUE0gTGVvIEl6ZW4gPGxlby5pemVu QGdtYWlsLmNvbT4gd3JvdGU6Cgo+IE9uIDEyLzkvMjMgMDU6MDYsIE1hcnRoNjQgd3JvdGU6Cj4g PiBIZWxsbywgSSBhbSBoYXBweSB0byBzaGFyZSBhIERWRCBkZW11eGVyIGZvciBmZm1wZWcgcG93 ZXJlZCBieQo+IGxpYmR2ZHJlYWQgYW5kIGxpYmR2ZG5hdi4KPiA+IEkgaGF2ZSBiZWVuIHdvcmtp bmcgb24gdGhpcyBvbi9vZmYgdGhyb3VnaG91dCB0aGUgeWVhciBhbmQgdGhpbmsgaXQgaXMKPiBp biBhIGdvb2Qgc3BvdAo+ID4gdG8gc2hhcmUgYXQgdGhlIE1MIG5vdy4gVGhpcyB3YXMgYSBtYWpv ciBsZWFybmluZyBleHBlcmllbmNlIGZvciBtZSBpbgo+IG1hbnkgd2F5cyBhbmQKPiA+IGFtIG9w ZW4gdG8gYW55IGZlZWRiYWNrIG9uIGhvdyBJIGNvdWxkIGltcHJvdmUgaXQgdG8gYmUgYmV0dGVy LiBJbiBmYWN0LAo+IHRoZXJlIGlzIHN0aWxsCj4gPiBvbmUgaXNzdWUgSSBjYW4ndCBzZWVtIHRv IGZpZ3VyZSBvdXQgaG93IHRvIHNvbHZlIChpbiBkaXNjdXNzaW9uIGJlbG93KS4KPiBSZWdhcmRs ZXNzLAo+ID4gYSBnb29kIG51bWJlciBvZiBEVkRzIEkgaGF2ZSB0cmllZCBzZWVtIHRvIHdvcmsg b3V0IG9mIHRoZSBib3guIFRoaXMgaXMKPiBhIGZ1bGwtc2VydmljZQo+ID4gZGVtdXhlciB3aXRo IGNoYXB0ZXJzLCBzdWJ0aXRsZXMgKGFuZCB0aGVpciBwYWxldHRlcyksIGFzIHdlbGwgYXMKPiBs YW5ndWFnZSBtZXRhZGF0YS4KPiA+Cj4gPiBBdCBhIGhpZ2ggbGV2ZWwsIHRoZSBkZW11eGVyIHVz ZXMgbGliZHZkcmVhZCBmb3IgbWV0YWRhdGEgb2YgdGhlIGRpc2MsCj4gbGliZHZkbmF2IGZvcgo+ ID4gdGhlIGFjdHVhbCBwbGF5YmFjaywgYW5kIHRoZSBNUEVHLVBTIGRlbXV4ZXIgZm9yIHRoZSB1 bmRlcmx5aW5nIFZPQgo+IHN0cmVhbS4KPiA+Cj4gPiBGaXJzdCwgdGhlIGJhc2ljIHVzYWdlLCBp cyBxdWl0ZSBzdHJhaWdodGZvcndhcmQ6Cj4gPiBmZm1wZWcgLWYgZHZkdmlkZW8gLXRpdGxlIE5O IC1pIERWRC5pc298L2Rldi9zclh8L3BhdGgvdG8vRFZEIC4uLgo+ID4gV2hlcmUgTk4gY2FuIGJl IHJlcGxhY2VkIGJ5IHlvdXIga25vd24gdGl0bGUgbnVtYmVyIGluIHRoZSBkaXNjCj4gPgo+ID4g QXMgdGhlIGRlbXV4ZXIgZWZmZWN0aXZlbHkgd29ya3MgYXQgYSBQR0MgbGV2ZWwsIG11bHRpLVBH QyB0aXRsZXMgYXJlCj4gbm90IHN1cHBvcnRlZC4KPiA+IEJ1dCB0byBwcm92aWRlIHRoaXMgZmxl eGliaWxpdHkgYXMgdGhlcmUgYXJlIG1hbnkgd2VpcmRseSBhdXRob3JlZCBEVkRzCj4gb3V0IHRo ZXJlLAo+ID4gb25lIGNhbiBzcGVjaWZ5IGFuIGV4YWN0IFBHQyB2aWEgLXBnYyBvcHRpb24gYW5k IGFuIGFzc29jaWF0ZWQgcHJvZ3JhbQo+IChQRywgY2FuIHN0YXJ0IGF0IDEpLgo+ID4KPiA+IEkg YW0gaG9waW5nIGFuZCB3aWxsaW5nIHRvIGltcHJvdmUgdGhpcyB0byBiZSBhIHJvYnVzdCBkZW11 eGVyIHdoZXJldmVyCj4gcG9zc2libGUsIGJ1dCB0bwo+ID4gdGhhdCBleHRlbnQgdGhlcmUgaXMg c3RpbGwgYW4gaXNzdWUgSSBjYW4ndCBmaWd1cmUgb3V0IGhvdyB0byBzb2x2ZToKPiBEZWFsaW5n IHdpdGggRFRTIGRpc2NvbnRpbnVpdGllcwo+ID4gYW5kIFBUUyBnZW5lcmF0aW9uLgo+ID4KPiA+ IFJpZ2h0IG5vdywgYXMgYSBiYW5kLWFpZCwgSSBhbSBhZGRpbmcgQVZGTVRfRkxBR19HRU5QVFMg KGxpbmUgMTQwOCkKPiA+IHRvIHRoZSBNUEVHLVBTIHN1YmRlbXV4ZXIuIFRoaXMgd29ya3Mgd2l0 aCBtb3N0IGRpc2NzIGFuZCB0aGUgb3V0cHV0Cj4gc2VlbXMgT0suIE9uIGRpc2NzIHdpdGggZGlz Y29udGludWl0aWVzLCBob3dldmVyLAo+ID4gdGhpcyBjYXVzZXMgdGhlIGRlbXV4aW5nIHRvIGhh bmcgd2hpY2ggaXMgb2J2aW91c2x5IHVuYWNjZXB0YWJsZSBhbHNvLgo+IFJlbW92aW5nIHRoZSBm bGFnIGNhdXNlcyB0aGUgZGlzY3MKPiA+IHRvIG5vdCBoYW5nLCBidXQgdGhlbiB0aGUgb3V0cHV0 IGZvciBhbGwgZGlzY3MgYmVjb21lcyBjaG9wcHkgZm9yCj4gb2J2aW91cyByZWFzb25zIChpbnZh bGlkIFBUUykuCj4gPgo+ID4gSXQgY291bGQgYmUgYmVjYXVzZSBJIGhhdmUgc29tZSBtaXN1bmRl cnN0YW5kaW5ncyBvbiBob3cgdGhpbmdzIHdvcmsKPiB3aXRoaW4gZmZtcGVnLAo+ID4gYnV0IEkg aGF2ZSB0cmllZCB0byB0aGUgcG9pbnQgbm93IHdoZXJlIEkgdGhvdWdodCBpdCBiZXN0IHRvIGFz ayB0aGUKPiBleHBlcnRzIGZvciBoZWxwIGlmIHlvdSBjYW4gc3BvdAo+ID4gd2hhdCBJIGFtIGRv aW5nIHdyb25nLiBJIGFtIHJlYWxseSBtb3RpdmF0ZWQgdG8gbWFrZSB0aGlzIHdvcmsgYW5kIGdv b2QKPiBxdWFsaXR5Lgo+ID4KPiA+IFRoYW5rIHlvdSEKPiA+Cj4gPiAtLS0KPiA+ICAgY29uZmln dXJlICAgICAgICAgICAgICAgICB8ICAgIDggKwo+ID4gICBsaWJhdmZvcm1hdC9NYWtlZmlsZSAg ICAgIHwgICAgMSArCj4gPiAgIGxpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyAgfCAgICAxICsKPiA+ ICAgbGliYXZmb3JtYXQvYXZsYW5ndWFnZS5jICB8ICAgMTAgKy0KPiA+ICAgbGliYXZmb3JtYXQv ZHZkdmlkZW9kZWMuYyB8IDE1OTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kwo+ID4gICA1IGZpbGVzIGNoYW5nZWQsIDE2MTcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMo LSkKPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L2R2ZHZpZGVvZGVjLmMKPiA+ Cj4gPiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCj4gPiBpbmRleCBkNzdjMDUz MjI2Li42NWU1OTY4MTk0IDEwMDc1NQo+ID4gLS0tIGEvY29uZmlndXJlCj4gPiArKysgYi9jb25m aWd1cmUKPiA+IEBAIC0yMjcsNiArMjI3LDggQEAgRXh0ZXJuYWwgbGlicmFyeSBzdXBwb3J0Ogo+ ID4gICAgIC0tZW5hYmxlLWxpYmRhdnMyICAgICAgICBlbmFibGUgQVZTMiBkZWNvZGluZyB2aWEg bGliZGF2czIgW25vXQo+ID4gICAgIC0tZW5hYmxlLWxpYmRjMTM5NCAgICAgICBlbmFibGUgSUlE Qy0xMzk0IGdyYWJiaW5nIHVzaW5nIGxpYmRjMTM5NAo+ID4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhbmQgbGlicmF3MTM5NCBbbm9dCj4gPiArICAtLWVuYWJsZS1saWJkdmRuYXYgICAg ICAgZW5hYmxlIGxpYmR2ZG5hdiwgbmVlZGVkIGZvciBEVkQgZGVtdXhpbmcKPiBbbm9dCj4gPiAr ICAtLWVuYWJsZS1saWJkdmRyZWFkICAgICAgZW5hYmxlIGxpYmR2ZHJlYWQsIG5lZWRlZCBmb3Ig RFZEIGRlbXV4aW5nCj4gW25vXQo+Cj4gV2h5IGRvIHlvdSBuZWVkIGJvdGggb2YgdGhlc2U/IGxp YmR2ZG5hdiBkZXBlbmRzIG9uIGxpYmR2ZHJlYWQuCj4KPiA+ICAgICAtLWVuYWJsZS1saWJmZGst YWFjICAgICAgZW5hYmxlIEFBQyBkZS9lbmNvZGluZyB2aWEgbGliZmRrLWFhYyBbbm9dCj4gPiAg ICAgLS1lbmFibGUtbGliZmxpdGUgICAgICAgIGVuYWJsZSBmbGl0ZSAodm9pY2Ugc3ludGhlc2lz KSBzdXBwb3J0IHZpYQo+IGxpYmZsaXRlIFtub10KPiA+ICAgICAtLWVuYWJsZS1saWJmb250Y29u ZmlnICAgZW5hYmxlIGxpYmZvbnRjb25maWcsIHVzZWZ1bCBmb3IgZHJhd3RleHQKPiBmaWx0ZXIg W25vXQo+ID4gQEAgLTE4MDIsNiArMTgwNCw4IEBAIEVYVEVSTkFMX0xJQlJBUllfR1BMX0xJU1Q9 Igo+ID4gICAgICAgZnJlaTByCj4gPiAgICAgICBsaWJjZGlvCj4gPiAgICAgICBsaWJkYXZzMgo+ ID4gKyAgICBsaWJkdmRuYXYKPiA+ICsgICAgbGliZHZkcmVhZAo+ID4gICAgICAgbGlicnViYmVy YmFuZAo+ID4gICAgICAgbGlidmlkc3RhYgo+ID4gICAgICAgbGlieDI2NAo+ID4gQEAgLTM0OTQs NiArMzQ5OCw4IEBAIGR0c19kZW11eGVyX3NlbGVjdD0iZGNhX3BhcnNlciIKPiA+ICAgZHRzaGRf ZGVtdXhlcl9zZWxlY3Q9ImRjYV9wYXJzZXIiCj4gPiAgIGR2X2RlbXV4ZXJfc2VsZWN0PSJkdnBy b2ZpbGUiCj4gPiAgIGR2X211eGVyX3NlbGVjdD0iZHZwcm9maWxlIgo+ID4gK2R2ZHZpZGVvX2Rl bXV4ZXJfc2VsZWN0PSJtcGVncHNfZGVtdXhlciIKPiA+ICtkdmR2aWRlb19kZW11eGVyX2RlcHM9 ImxpYmR2ZG5hdiBsaWJkdmRyZWFkIgo+ID4gICBkeGFfZGVtdXhlcl9zZWxlY3Q9InJpZmZkZWMi Cj4gPiAgIGVhYzNfZGVtdXhlcl9zZWxlY3Q9ImFjM19wYXJzZXIiCj4gPiAgIGV2Y19kZW11eGVy X3NlbGVjdD0iZXZjX2ZyYW1lX21lcmdlX2JzZiBldmNfcGFyc2VyIgo+ID4gQEAgLTY3MjMsNiAr NjcyOSw4IEBAIGVuYWJsZWQgbGliZGF2MWQgICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmln Cj4gbGliZGF2MWQgImRhdjFkID49IDAuNS4wIiAiZGF2MWQKPiA+ICAgZW5hYmxlZCBsaWJkYXZz MiAgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGliZGF2czIgImRhdnMyID49Cj4gMS42 LjAiIGRhdnMyLmggZGF2czJfZGVjb2Rlcl9vcGVuCj4gPiAgIGVuYWJsZWQgbGliZGMxMzk0ICAg ICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmRjMTM5NCBsaWJkYzEzOTQtMgo+IGRjMTM5 NC9kYzEzOTQuaCBkYzEzOTRfbmV3Cj4gPiAgIGVuYWJsZWQgbGliZHJtICAgICAgICAgICAgJiYg cmVxdWlyZV9wa2dfY29uZmlnIGxpYmRybSBsaWJkcm0KPiB4Zjg2ZHJtLmggZHJtR2V0VmVyc2lv bgo+ID4gK2VuYWJsZWQgbGliZHZkbmF2ICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxp YmR2ZG5hdiAiZHZkbmF2ID49Cj4gNi4xLjEiIGR2ZG5hdi9kdmRuYXYuaCBkdmRuYXZfb3BlbjIK PiA+ICtlbmFibGVkIGxpYmR2ZHJlYWQgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJk dmRyZWFkICJkdmRyZWFkID49Cj4gNi4xLjIiIGR2ZHJlYWQvZHZkX3JlYWRlci5oIERWRE9wZW4y IC1sZHZkcmVhZAo+ID4gICBlbmFibGVkIGxpYmZka19hYWMgICAgICAgICYmIHsgY2hlY2tfcGtn X2NvbmZpZyBsaWJmZGtfYWFjIGZkay1hYWMKPiAiZmRrLWFhYy9hYWNlbmNfbGliLmgiIGFhY0Vu Y09wZW4gfHwKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmVxdWlyZSBs aWJmZGtfYWFjCj4gZmRrLWFhYy9hYWNlbmNfbGliLmggYWFjRW5jT3BlbiAtbGZkay1hYWMgJiYK PiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybiAidXNpbmcgbGliZmRr IHdpdGhvdXQKPiBwa2ctY29uZmlnIjsgfSB9Cj4gPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQv TWFrZWZpbGUgYi9saWJhdmZvcm1hdC9NYWtlZmlsZQo+ID4gaW5kZXggMmRiODNhZmY4MS4uNDVk YmE1MzA0NCAxMDA2NDQKPiA+IC0tLSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gPiArKysgYi9s aWJhdmZvcm1hdC9NYWtlZmlsZQo+ID4gQEAgLTE5Miw2ICsxOTIsNyBAQCBPQkpTLSQoQ09ORklH X0RUU19NVVhFUikgICAgICAgICAgICAgICAgICs9IHJhd2VuYy5vCj4gPiAgIE9CSlMtJChDT05G SUdfRFZfTVVYRVIpICAgICAgICAgICAgICAgICAgKz0gZHZlbmMubwo+ID4gICBPQkpTLSQoQ09O RklHX0RWQlNVQl9ERU1VWEVSKSAgICAgICAgICAgICs9IGR2YnN1Yi5vIHJhd2RlYy5vCj4gPiAg IE9CSlMtJChDT05GSUdfRFZCVFhUX0RFTVVYRVIpICAgICAgICAgICAgKz0gZHZidHh0Lm8gcmF3 ZGVjLm8KPiA+ICtPQkpTLSQoQ09ORklHX0RWRFZJREVPX0RFTVVYRVIpICAgICAgICAgICs9IGR2 ZHZpZGVvZGVjLm8KPiA+ICAgT0JKUy0kKENPTkZJR19EWEFfREVNVVhFUikgICAgICAgICAgICAg ICArPSBkeGEubwo+ID4gICBPQkpTLSQoQ09ORklHX0VBX0NEQVRBX0RFTVVYRVIpICAgICAgICAg ICs9IGVhY2RhdGEubwo+ID4gICBPQkpTLSQoQ09ORklHX0VBX0RFTVVYRVIpICAgICAgICAgICAg ICAgICs9IGVsZWN0cm9uaWNhcnRzLm8KPiA+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9hbGxm b3JtYXRzLmMgYi9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKPiA+IGluZGV4IGM4YmI0ZTM4NjYu LmRjMmFjZjU3NWMgMTAwNjQ0Cj4gPiAtLS0gYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKPiA+ ICsrKyBiL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwo+ID4gQEAgLTE1MCw2ICsxNTAsNyBAQCBl eHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZHZfZGVtdXhlcjsKPiA+ICAgZXh0ZXJuIGNv bnN0IEZGT3V0cHV0Rm9ybWF0IGZmX2R2X211eGVyOwo+ID4gICBleHRlcm4gY29uc3QgQVZJbnB1 dEZvcm1hdCAgZmZfZHZic3ViX2RlbXV4ZXI7Cj4gPiAgIGV4dGVybiBjb25zdCBBVklucHV0Rm9y bWF0ICBmZl9kdmJ0eHRfZGVtdXhlcjsKPiA+ICtleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAg ZmZfZHZkdmlkZW9fZGVtdXhlcjsKPiA+ICAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZm X2R4YV9kZW11eGVyOwo+ID4gICBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZWFfZGVt dXhlcjsKPiA+ICAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2VhX2NkYXRhX2RlbXV4 ZXI7Cj4gPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvYXZsYW5ndWFnZS5jIGIvbGliYXZmb3Jt YXQvYXZsYW5ndWFnZS5jCj4gPiBpbmRleCA3ODJhNThhZGIyLi4yMDJkOWFhODM1IDEwMDY0NAo+ ID4gLS0tIGEvbGliYXZmb3JtYXQvYXZsYW5ndWFnZS5jCj4gPiArKysgYi9saWJhdmZvcm1hdC9h dmxhbmd1YWdlLmMKPiA+IEBAIC0yOSw3ICsyOSw3IEBAIHR5cGVkZWYgc3RydWN0IExhbmdFbnRy eSB7Cj4gPiAgICAgICB1aW50MTZfdCBuZXh0X2VxdWl2YWxlbnQ7Cj4gPiAgIH0gTGFuZ0VudHJ5 Owo+ID4KPiA+IC1zdGF0aWMgY29uc3QgdWludDE2X3QgbGFuZ190YWJsZV9jb3VudHNbXSA9IHsg NDg0LCAyMCwgMTg0IH07Cj4gPiArc3RhdGljIGNvbnN0IHVpbnQxNl90IGxhbmdfdGFibGVfY291 bnRzW10gPSB7IDQ4NCwgMjAsIDE5MCB9Owo+ID4gICBzdGF0aWMgY29uc3QgdWludDE2X3QgbGFu Z190YWJsZV9vZmZzZXRzW10gPSB7IDAsIDQ4NCwgNTA0IH07Cj4gPgo+ID4gICBzdGF0aWMgY29u c3QgTGFuZ0VudHJ5IGxhbmdfdGFibGVbXSA9IHsKPiA+IEBAIC01MzksNyArNTM5LDcgQEAgc3Rh dGljIGNvbnN0IExhbmdFbnRyeSBsYW5nX3RhYmxlW10gPSB7Cj4gPiAgICAgICAvKjA1MDEqLyB7 ICJzbGsiLCAgNjQ3IH0sCj4gPiAgICAgICAvKjA1MDIqLyB7ICJzcWkiLCAgNjUyIH0sCj4gPiAg ICAgICAvKjA1MDMqLyB7ICJ6aG8iLCAgNjg2IH0sCj4gPiAtICAgIC8qLS0tLS0gQVZfTEFOR19J U082MzlfMSBlbnRyaWVzICgxODQpIC0tLS0tKi8KPiA+ICsgICAgLyotLS0tLSBBVl9MQU5HX0lT TzYzOV8xIGVudHJpZXMgKDE5MCkgLS0tLS0qLwo+ID4gICAgICAgLyowNTA0Ki8geyAiYWEiICwg ICAgMCB9LAo+ID4gICAgICAgLyowNTA1Ki8geyAiYWIiICwgICAgMSB9LAo+ID4gICAgICAgLyow NTA2Ki8geyAiYWUiICwgICAzMyB9LAo+ID4gQEAgLTcyNCw2ICs3MjQsMTIgQEAgc3RhdGljIGNv bnN0IExhbmdFbnRyeSBsYW5nX3RhYmxlW10gPSB7Cj4gPiAgICAgICAvKjA2ODUqLyB7ICJ6YSIg LCAgNDc4IH0sCj4gPiAgICAgICAvKjA2ODYqLyB7ICJ6aCIgLCAgIDc4IH0sCj4gPiAgICAgICAv KjA2ODcqLyB7ICJ6dSIgLCAgNDgwIH0sCj4gPiArICAgIC8qMDY4OCovIHsgImluIiAsICAxOTUg fSwgLyogZGVwcmVjYXRlZCAqLwo+ID4gKyAgICAvKjA2ODkqLyB7ICJpdyIgLCAgMTcyIH0sIC8q IGRlcHJlY2F0ZWQgKi8KPiA+ICsgICAgLyowNjkwKi8geyAiamkiICwgIDQ3MiB9LCAvKiBkZXBy ZWNhdGVkICovCj4gPiArICAgIC8qMDY5MSovIHsgImp3IiAsICAyMDIgfSwgLyogZGVwcmVjYXRl ZCAqLwo+ID4gKyAgICAvKjA2OTIqLyB7ICJtbyIgLCAgMzU4IH0sIC8qIGRlcHJlY2F0ZWQgKi8K PiA+ICsgICAgLyowNjkzKi8geyAic2giICwgIDY5MyB9LCAvKiBkZXByZWNhdGVkIChubyBlcXVp dmFsZW50KSAqLwo+ID4gICAgICAgeyAiIiwgMCB9Cj4gPiAgIH07Cj4gPgo+ID4gZGlmZiAtLWdp dCBhL2xpYmF2Zm9ybWF0L2R2ZHZpZGVvZGVjLmMgYi9saWJhdmZvcm1hdC9kdmR2aWRlb2RlYy5j Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMC4uMmIyMmE3ZGU0 Zgo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvbGliYXZmb3JtYXQvZHZkdmlkZW9kZWMuYwo+ ID4gQEAgLTAsMCArMSwxNTk5IEBACj4gPiArLyoKPiA+ICsgKiBEVkQtVmlkZW8gZGVtdXhlciAo cG93ZXJlZCBieSBsaWJkdmRuYXYvbGliZHZkcmVhZCkKPiA+ICsgKgo+ID4gKyAqIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiA+ICsgKgo+ID4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiA+ICsgKiBtb2RpZnkgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gPiArICogTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy Cj4gPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCj4gPiArICoKPiA+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiA+ICsgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ID4gKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUgR05VCj4gPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KPiA+ICsgKgo+ID4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiA+ICsgKiBMaWNlbnNlIGFsb25nIHdp dGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gPiArICogRm91 bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN QQo+IDAyMTEwLTEzMDEgVVNBCj4gPiArICovCj4gPiArCj4gPiArLyoqCj4gPiArICogRFZELVZp ZGVvIGlzIG5vdCBhIGRpcmVjdGx5IGFjY2Vzc2libGUsIGxpbmVhciBjb250YWluZXIgZm9ybWF0 IGluCj4gdGhlCj4gPiArICogdHJhZGl0aW9uYWwgc2Vuc2UuIEluc3RlYWQsIGl0IGFsbG93cyBm b3IgY29tcGxleCBhbmQgcHJvZ3JhbW1hdGljCj4gPiArICogcGxheWJhY2sgb2YgY2FyZWZ1bGx5 IG11eGVkIHN0cmVhbXMuIEEgdHlwaWNhbCBEVkQgcGxheWVyIHJlbGllcyBvbgo+ID4gKyAqIHVz ZXIgR1VJIGludGVyYWN0aW9uIHRvIGRyaXZlIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGRlbXV4aW5n Lgo+ID4gKyAqIFVsdGltYXRlbHksIHRoZSBsb2dpY2FsIHBsYXliYWNrIHNlcXVlbmNlIGlzIGRl ZmluZWQgYnkgYSB0aXRsZSdzIFBHQwo+ID4gKyAqIGFuZCBhIHVzZXIgc2VsZWN0ZWQgImFuZ2xl Ii4gQW4gYWRkaXRpb25hbCBsYXllciBvZiBjb250cm9sIGlzCj4gZGVmaW5lZCBieQo+ID4gKyAq IE5BViBwYWNrZXRzIGluIHRoZSBNUEVHLVBTLCBidXQgYXMgdGhlc2UgYXJlIHByb2Nlc3NlZCBi eSBsaWJkdmRuYXYsCj4gPiArICogdGhleSBhcmUgd2l0aGVsZCBmcm9tIHRoZSBvdXRwdXQgb2Yg dGhpcyBkZW11eGVyLgo+ID4gKyAqCj4gPiArICogVGhlcmVmb3JlLCB0aGUgaGlnaC1sZXZlbCBh cHByb2FjaCBpcyBhcyBmb2xsb3dzOgo+ID4gKyAqIDEpIE9wZW4gdGhlIHZvbHVtZSB3aXRoIGxp YmR2ZHJlYWQKPiA+ICsgKiAyKSBHYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZXItcmVx dWVzdGVkIHRpdGxlIGFuZCBQR0MKPiBjb29yZGluYXRlcwo+ID4gKyAqIDMpIFJlcXVlc3QgcGxh eWJhY2sgYXQgdGhlIGNvb3JkaW5hdGVzIGFuZCBjaG9zZW4gYW5nbGUgd2l0aAo+IGxpYmR2ZG5h dgo+ID4gKyAqIDQpIFNlZWsgcGxheWJhY2sgdG8gZmlyc3QgY2VsbCBhdCB0aGUgY29vcmRpbmF0 ZXMgKHNraXBwaW5nIHN0aWxscywKPiBldGMuKQo+ID4gKyAqIDUpIEJlZ2luIHRoZSBwbGF5YmFj ayAocmVhZGluZyBhbmQgZGVtdXhpbmcpIG9mIE1QRUctUFMgYmxvY2tzCj4gPiArICogNikgRW5k IHBsYXliYWNrIGlmIHRoZSBQR0Mgb3IgYW5nbGUgY2hhbmdlCj4gPiArICogNykgQ2xvc2UgcmVz b3VyY2VzCj4gPiArICoqLwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIElzc3Vlcy9idWcgdHJhY2tl ciAoVE9ETyk6Cj4gPiArICogLSBTRERTIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Cj4gPiArICogLSBB cmUgd2UgaGFuZGxpbmcgYmFja3dhcmRzIGNlbGwgY2hhbmdlcyBhbmQgUFRUIGNoYW5nZXMgY29y cmVjdGx5Pwo+ID4gKyAqIC0gU29tZSBjb2RlYyBwYXJhbWV0ZXJzL21ldGFkYXRhIGlzIG5vdCBi ZWluZyBleHBsaWNpdGx5IHNldDoKPiA+ICsgKiAgICAgIC0+IENoYW5uZWxMYXlvdXQsIGNvbG9y L2Nocm9tYSBpbmZvLCBEQVIsIGZyYW1lIHNpemUgZm9yCj4gTVAxL01QMiBhdWRpbwo+ID4gKyAq IC0gQWRkaXRpb25hbCBQR0MgdmFsaWRhdGlvbnM/Cj4gPiArKiovCj4gPiArCj4gPiArI2luY2x1 ZGUgPGR2ZHJlYWQvZHZkX3JlYWRlci5oPgo+ID4gKyNpbmNsdWRlIDxkdmRyZWFkL2lmb19yZWFk Lmg+Cj4gPiArI2luY2x1ZGUgPGR2ZHJlYWQvaWZvX3R5cGVzLmg+Cj4gPiArI2luY2x1ZGUgPGR2 ZHJlYWQvbmF2X3JlYWQuaD4KPiA+ICsjaW5jbHVkZSA8ZHZkbmF2L2R2ZG5hdi5oPgo+ID4gKwo+ ID4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZzdHJpbmcuaCIKPiA+ICsjaW5jbHVkZSAibGliYXZ1 dGlsL2F2dXRpbC5oIgo+ID4gKyNpbmNsdWRlICJsaWJhdnV0aWwvY29sb3JzcGFjZS5oIgo+ID4g KyNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCj4gPiArI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQu aCIKPiA+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3NhbXBsZWZtdC5oIgo+ID4gKwo+ID4gKyNpbmNs dWRlICJsaWJhdmNvZGVjL2F2Y29kZWMuaCIKPiA+ICsjaW5jbHVkZSAibGliYXZmb3JtYXQvYXZp b19pbnRlcm5hbC5oIgo+ID4gKyNpbmNsdWRlICJsaWJhdmZvcm1hdC9hdmxhbmd1YWdlLmgiCj4g PiArI2luY2x1ZGUgImxpYmF2Zm9ybWF0L2F2Zm9ybWF0LmgiCj4gPiArI2luY2x1ZGUgImxpYmF2 Zm9ybWF0L2RlbXV4LmgiCj4gPiArI2luY2x1ZGUgImxpYmF2Zm9ybWF0L2ludGVybmFsLmgiCj4g PiArI2luY2x1ZGUgImxpYmF2Zm9ybWF0L3VybC5oIgo+ID4gKwo+ID4gKyNkZWZpbmUgWkVST19R ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFWUmF0aW9uYWwpIHsK PiAwLCAxIH0KPiBVbm5lY2Vzc2FyeSAjZGVmaW5lLgo+Cj4gPiArCj4gPiArI2RlZmluZSBEVkRW SURFT19QU19NQVhfU0VBUkNIX0JMT0NLUyAgICAgICAgICAgICAgICAgICAxMjgKPiA+ICsjZGVm aW5lIERWRFZJREVPX0xJQkRWRFhfTE9HX0JVRkZFUl9TSVpFICAgICAgICAgICAgICAgIDEwMjQK PiA+ICsKPiA+ICsjZGVmaW5lIERWRFZJREVPX1RJTUVfQkFTRV9RICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChBVlJhdGlvbmFsKSB7Cj4gMSwgOTAwMDAgfQo+ID4gKyNkZWZpbmUgRFZEVklE RU9fVElNRV9CQVNFX01JTExJU19RICAgICAgICAgICAgICAgICAgICAgKEFWUmF0aW9uYWwpIHsK PiAxLCAxMDAwIH0KPiA+ICsjZGVmaW5lIERWRFZJREVPX1BUU19XUkFQX0JJVFMgICAgICAgICAg ICAgICAgICAgICAgICAgIDMyCj4gPiArI2RlZmluZSBEVkRWSURFT19CTE9DS19TSVpFICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAyMDQ4Cj4gPiArCj4gPiArI2RlZmluZSBEVkRWSURFT19O VFNDX0ZSQU1FUkFURV9RICAgICAgICAgICAgICAgICAgICAgICAoQVZSYXRpb25hbCkgewo+IDMw MDAwLCAxMDAxIH0KPiA+ICsjZGVmaW5lIERWRFZJREVPX05UU0NfSEVJR0hUICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDQ4MAo+ID4gKyNkZWZpbmUgRFZEVklERU9fUEFMX0ZSQU1FUkFURV9R ICAgICAgICAgICAgICAgICAgICAgICAgKEFWUmF0aW9uYWwpIHsKPiAyNSwgMSB9Cj4gPiArI2Rl ZmluZSBEVkRWSURFT19QQUxfSEVJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NzYK PiA+ICsjZGVmaW5lIERWRFZJREVPX0QxX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDcyMAo+ID4gKyNkZWZpbmUgRFZEVklERU9fNENJRl9XSURUSCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgNzA0Cj4gPiArI2RlZmluZSBEVkRWSURFT19EMV9IQUxGX1dJRFRIICAgICAg ICAgICAgICAgICAgICAgICAgICAzNTIKPiA+ICsjZGVmaW5lIERWRFZJREVPX0NJRl9XSURUSCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM1Mgo+ID4gKyNkZWZpbmUgRFZEVklERU9fUElY RUxfRk9STUFUCj4gIEFWX1BJWF9GTVRfWVVWNDIwUAo+ID4gKwo+ID4gKyNkZWZpbmUgRFZEVklE RU9fU1RBUlRDT0RFX1ZJREVPICAgICAgICAgICAgICAgICAgICAgICAgMHgxRTAKPiA+ICsjZGVm aW5lIERWRFZJREVPX1NUQVJUQ09ERV9PRkZTRVRfQVVESU9fQUMzICAgICAgICAgICAgIDB4ODAK PiA+ICsjZGVmaW5lIERWRFZJREVPX1NUQVJUQ09ERV9PRkZTRVRfQVVESU9fTVAxICAgICAgICAg ICAgIDB4MUMwCj4gPiArI2RlZmluZSBEVkRWSURFT19TVEFSVENPREVfT0ZGU0VUX0FVRElPX01Q MiAgICAgICAgICAgICAweDFDMAo+ID4gKyNkZWZpbmUgRFZEVklERU9fU1RBUlRDT0RFX09GRlNF VF9BVURJT19QQ00gICAgICAgICAgICAgMHhBMAo+ID4gKyNkZWZpbmUgRFZEVklERU9fU1RBUlRD T0RFX09GRlNFVF9BVURJT19EVFMgICAgICAgICAgICAgMHg4OAo+ID4gKyNkZWZpbmUgRFZEVklE RU9fU1RBUlRDT0RFX09GRlNFVF9TVUJQICAgICAgICAgICAgICAgICAgMHgyMAo+ID4gKwo+ID4g KyNkZWZpbmUgRFZEVklERU9fVElUTEVfTlVNQkVSX01BWCAgICAgICAgICAgICAgICAgICAgICAg OTkKPiA+ICsjZGVmaW5lIERWRFZJREVPX1BUVF9OVU1CRVJfTUFYICAgICAgICAgICAgICAgICAg ICAgICAgIDk5Cj4gPiArI2RlZmluZSBEVkRWSURFT19QR0NfTlVNQkVSX01BWCAgICAgICAgICAg ICAgICAgICAgICAgICAzMjc2Nwo+ID4gKyNkZWZpbmUgRFZEVklERU9fUEdfTlVNQkVSX01BWCAg ICAgICAgICAgICAgICAgICAgICAgICAgMjU1Cj4gPiArI2RlZmluZSBEVkRWSURFT19BTkdMRV9O VU1CRVJfTUFYICAgICAgICAgICAgICAgICAgICAgICA5Cj4gPiArI2RlZmluZSBEVkRWSURFT19W VFNfTlVNQkVSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICA5OQo+ID4gKyNkZWZpbmUgRFZE VklERU9fVFRfTlVNQkVSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgOTkKPiA+ICsjZGVm aW5lIERWRFZJREVPX1JFR0lPTl9OVU1CRVJfTUFYICAgICAgICAgICAgICAgICAgICAgIDgKPiA+ ICsjZGVmaW5lIERWRFZJREVPX0FVRElPX0NPTlRST0xfRU5BQkxFRF9NQVNLICAgICAgICAgICAg IDB4ODAwMAo+ID4gKyNkZWZpbmUgRFZEVklERU9fU1VCUF9DT05UUk9MX0VOQUJMRURfTUFTSyAg ICAgICAgICAgICAgMHg4MDAwMDAwMAo+ID4gKyNkZWZpbmUgRFZEVklERU9fVlRTX0FVRElPX1NU UkVBTVNfTUFYICAgICAgICAgICAgICAgICAgOAo+ID4gKyNkZWZpbmUgRFZEVklERU9fVlRTX1NV QlBfU1RSRUFNU19NQVggICAgICAgICAgICAgICAgICAgMzIKPiA+ICsKPiA+ICsvKiAoInBhbGV0 dGU6ICIpICsgKCJycmdnYmIsICIqMTUpICsgKCJycmdnYmIiKSArIFxuICsgXDAgKi8KPiA+ICsj ZGVmaW5lIERWRFZJREVPX1NVQlBfQ0xVVF9SR0JfRVhUUkFEQVRBX1NJWkUgICAgICAgICAgICg5 ICsgKDggKiAxNSkgKwo+IDYgKyAxICsgMSkKPiA+ICsjZGVmaW5lIERWRFZJREVPX1NVQlBfQ0xV VF9MRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDE2Cj4gPiArI2RlZmluZSBEVkRWSURFT19T VUJQX0NMVVRfU0laRQo+ICBEVkRWSURFT19TVUJQX0NMVVRfTEVOICogc2l6ZW9mKHVpbnQzMl90 KQo+ID4gKwo+ID4gKy8qIGNvbnZlcnQgYmluYXJ5LWNvZGVkIGRlY2ltYWwgdG8gZGVjaW1hbCAq Lwo+ID4gKyNkZWZpbmUgQkNEMkQoX194X18pICgoKF9feF9fICYgMHhGMCkgPj4gNCkgKiAxMCAr IChfX3hfXyAmIDB4MEYpKQo+ID4gKwo+ID4gKy8qIGNyb3AgdGFibGUgZm9yIFlVViB0byBSR0Ig c3VicGljdHVyZSBwYWxldHRlIGNvbnZlcnNpb24gKi8KPiA+ICsjZGVmaW5lIERWRFZJREVPX1lV Vl9ORUdfQ1JPUF9NQVggICAgICAgICAgICAgICAgICAgICAgIDEwMjQKPiA+ICsjZGVmaW5lIHRp bWVzNCh4KSB4LCB4LCB4LCB4Cj4gPiArI2RlZmluZSB0aW1lczI1Nih4KSB0aW1lczQodGltZXM0 KHRpbWVzNCh0aW1lczQodGltZXM0KHgpKSkpKQo+ID4gKwo+ID4gK2NvbnN0IHVpbnQ4X3QgZHZk dmlkZW9feXV2X2Nyb3BfdGFiWzI1NiArIDIgKgo+IERWRFZJREVPX1lVVl9ORUdfQ1JPUF9NQVhd ID0gewo+ID4gK3RpbWVzMjU2KDB4MDApLAo+ID4KPiArMHgwMCwweDAxLDB4MDIsMHgwMywweDA0 LDB4MDUsMHgwNiwweDA3LDB4MDgsMHgwOSwweDBBLDB4MEIsMHgwQywweDBELDB4MEUsMHgwRiwK PiA+Cj4gKzB4MTAsMHgxMSwweDEyLDB4MTMsMHgxNCwweDE1LDB4MTYsMHgxNywweDE4LDB4MTks MHgxQSwweDFCLDB4MUMsMHgxRCwweDFFLDB4MUYsCj4gPgo+ICsweDIwLDB4MjEsMHgyMiwweDIz LDB4MjQsMHgyNSwweDI2LDB4MjcsMHgyOCwweDI5LDB4MkEsMHgyQiwweDJDLDB4MkQsMHgyRSww eDJGLAo+ID4KPiArMHgzMCwweDMxLDB4MzIsMHgzMywweDM0LDB4MzUsMHgzNiwweDM3LDB4Mzgs MHgzOSwweDNBLDB4M0IsMHgzQywweDNELDB4M0UsMHgzRiwKPiA+Cj4gKzB4NDAsMHg0MSwweDQy LDB4NDMsMHg0NCwweDQ1LDB4NDYsMHg0NywweDQ4LDB4NDksMHg0QSwweDRCLDB4NEMsMHg0RCww eDRFLDB4NEYsCj4gPgo+ICsweDUwLDB4NTEsMHg1MiwweDUzLDB4NTQsMHg1NSwweDU2LDB4NTcs MHg1OCwweDU5LDB4NUEsMHg1QiwweDVDLDB4NUQsMHg1RSwweDVGLAo+ID4KPiArMHg2MCwweDYx LDB4NjIsMHg2MywweDY0LDB4NjUsMHg2NiwweDY3LDB4NjgsMHg2OSwweDZBLDB4NkIsMHg2Qyww eDZELDB4NkUsMHg2RiwKPiA+Cj4gKzB4NzAsMHg3MSwweDcyLDB4NzMsMHg3NCwweDc1LDB4NzYs MHg3NywweDc4LDB4NzksMHg3QSwweDdCLDB4N0MsMHg3RCwweDdFLDB4N0YsCj4gPgo+ICsweDgw LDB4ODEsMHg4MiwweDgzLDB4ODQsMHg4NSwweDg2LDB4ODcsMHg4OCwweDg5LDB4OEEsMHg4Qiww eDhDLDB4OEQsMHg4RSwweDhGLAo+ID4KPiArMHg5MCwweDkxLDB4OTIsMHg5MywweDk0LDB4OTUs MHg5NiwweDk3LDB4OTgsMHg5OSwweDlBLDB4OUIsMHg5QywweDlELDB4OUUsMHg5RiwKPiA+Cj4g KzB4QTAsMHhBMSwweEEyLDB4QTMsMHhBNCwweEE1LDB4QTYsMHhBNywweEE4LDB4QTksMHhBQSww eEFCLDB4QUMsMHhBRCwweEFFLDB4QUYsCj4gPgo+ICsweEIwLDB4QjEsMHhCMiwweEIzLDB4QjQs MHhCNSwweEI2LDB4QjcsMHhCOCwweEI5LDB4QkEsMHhCQiwweEJDLDB4QkQsMHhCRSwweEJGLAo+ ID4KPiArMHhDMCwweEMxLDB4QzIsMHhDMywweEM0LDB4QzUsMHhDNiwweEM3LDB4QzgsMHhDOSww eENBLDB4Q0IsMHhDQywweENELDB4Q0UsMHhDRiwKPiA+Cj4gKzB4RDAsMHhEMSwweEQyLDB4RDMs MHhENCwweEQ1LDB4RDYsMHhENywweEQ4LDB4RDksMHhEQSwweERCLDB4REMsMHhERCwweERFLDB4 REYsCj4gPgo+ICsweEUwLDB4RTEsMHhFMiwweEUzLDB4RTQsMHhFNSwweEU2LDB4RTcsMHhFOCww eEU5LDB4RUEsMHhFQiwweEVDLDB4RUQsMHhFRSwweEVGLAo+ID4KPiArMHhGMCwweEYxLDB4RjIs MHhGMywweEY0LDB4RjUsMHhGNiwweEY3LDB4RjgsMHhGOSwweEZBLDB4RkIsMHhGQywweEZELDB4 RkUsMHhGRiwKPiA+ICt0aW1lczI1NigweEZGKQo+ID4gK307Cj4gPiArCj4gPiArZW51bSBEVkRW aWRlb1ZUU01QRUdWZXJzaW9uIHsKPiA+ICsgICAgRFZEVklERU9fVlRTX01QRUdfVkVSU0lPTl9N UEVHMSAgICAgICAgICA9IDAsCj4gPiArICAgIERWRFZJREVPX1ZUU19NUEVHX1ZFUlNJT05fTVBF RzIgICAgICAgICAgPSAxCj4gPiArfTsKPiA+ICsKPiA+ICtlbnVtIERWRFZpZGVvVlRTUGljdHVy ZUZvcm1hdCB7Cj4gPiArICAgIERWRFZJREVPX1ZUU19QSUNUVVJFX0ZPUk1BVF9OVFNDICAgICAg ICAgPSAwLAo+ID4gKyAgICBEVkRWSURFT19WVFNfUElDVFVSRV9GT1JNQVRfUEFMICAgICAgICAg ID0gMQo+ID4gK307Cj4gPiArCj4gPiArZW51bSBEVkRWaWRlb1ZUU1BpY3R1cmVTaXplIHsKPiA+ ICsgICAgRFZEVklERU9fVlRTX1BJQ1RVUkVfU0laRV9EMSAgICAgICAgICAgICA9IDAsCj4gPiAr ICAgIERWRFZJREVPX1ZUU19QSUNUVVJFX1NJWkVfNENJRiAgICAgICAgICAgPSAxLAo+ID4gKyAg ICBEVkRWSURFT19WVFNfUElDVFVSRV9TSVpFX0QxX0hBTEYgICAgICAgID0gMiwKPiA+ICsgICAg RFZEVklERU9fVlRTX1BJQ1RVUkVfU0laRV9DSUYgICAgICAgICAgICA9IDMKPiA+ICt9Owo+ID4g Kwo+ID4gK2VudW0gRFZEVmlkZW9WVFNQaWN0dXJlREFSIHsKPiA+ICsgICAgRFZEVklERU9fVlRT X1BJQ1RVUkVfREFSXzRfMyAgICAgICAgICAgICA9IDAsCj4gPiArICAgIERWRFZJREVPX1ZUU19Q SUNUVVJFX0RBUl8xNl85ICAgICAgICAgICAgPSAzCj4gPiArfTsKPiA+ICsKPiA+ICtlbnVtIERW RFZpZGVvVlRTUGVybWl0dGVkRnVsbHNjcmVlbkRpc3BsYXkgewo+ID4gKyAgICBEVkRWSURFT19W VFNfU1BVX1BGRF9BTlkgICAgICAgICAgICAgICAgID0gMCwKPiA+ICsgICAgRFZEVklERU9fVlRT X1NQVV9QRkRfUEFOU0NBTl9PTkxZICAgICAgICA9IDEsCj4gPiArICAgIERWRFZJREVPX1ZUU19T UFVfUEZEX0xFVFRFUkJPWF9PTkxZICAgICAgPSAyCj4gPiArfTsKPiA+ICsKPiA+ICtlbnVtIERW RFZpZGVvVlRTQXVkaW9Gb3JtYXQgewo+ID4gKyAgICBEVkRWSURFT19WVFNfQVVESU9fRk9STUFU X0FDMyAgICAgICAgICAgID0gMCwKPiA+ICsgICAgRFZEVklERU9fVlRTX0FVRElPX0ZPUk1BVF9N UDEgICAgICAgICAgICA9IDIsCj4gPiArICAgIERWRFZJREVPX1ZUU19BVURJT19GT1JNQVRfTVAy ICAgICAgICAgICAgPSAzLAo+ID4gKyAgICBEVkRWSURFT19WVFNfQVVESU9fRk9STUFUX1BDTSAg ICAgICAgICAgID0gNCwKPiA+ICsgICAgRFZEVklERU9fVlRTX0FVRElPX0ZPUk1BVF9TRERTICAg ICAgICAgICA9IDUsCj4gPiArICAgIERWRFZJREVPX1ZUU19BVURJT19GT1JNQVRfRFRTICAgICAg ICAgICAgPSA2Cj4gPiArfTsKPiA+ICsKPiA+ICtlbnVtIEZGRFZEVmlkZW9WVFNBdWRpb1NhbXBs ZVJhdGUgewo+ID4gKyAgICBEVkRWSURFT19WVFNfQVVESU9fU0FNUExFX1JBVEVfNDhLICAgICAg ID0gMCwKPiA+ICsgICAgRFZEVklERU9fVlRTX0FVRElPX1NBTVBMRV9SQVRFXzk2SyAgICAgICA9 IDEKPiA+ICt9Owo+ID4gKwo+ID4gK2VudW0gRkZEVkRWaWRlb1ZUU0F1ZGlvUXVhbnRpemF0aW9u IHsKPiA+ICsgICAgRFZEVklERU9fVlRTX0FVRElPX1FVQU5USVpBVElPTl8xNiAgICAgICA9IDAs Cj4gPiArICAgIERWRFZJREVPX1ZUU19BVURJT19RVUFOVElaQVRJT05fMjAgICAgICAgPSAxLAo+ ID4gKyAgICBEVkRWSURFT19WVFNfQVVESU9fUVVBTlRJWkFUSU9OXzI0ICAgICAgID0gMgo+ID4g K307Cj4gPiArCj4gPiArdHlwZWRlZiBzdHJ1Y3QgRFZEVmlkZW9EZW11eENvbnRleHQgewo+ID4g KyAgICBjb25zdCBBVkNsYXNzICAgICAgICAgICAgICAgKmNsYXNzOwo+ID4gKwo+ID4gKyAgICAv KiBvcHRpb25zICovCj4gPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfdGl0 bGU7ICAgICAgICAgICAgICAgICAgLyogdGhlCj4gdXNlci1wcm92aWRlZCB0aXRsZSBudW1iZXIg KDEtaW5kZXhlZCkgKi8KPiA+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9w dHQ7ICAgICAgICAgICAgICAgICAgICAvKiB0aGUKPiB1c2VyLXByb3ZpZGVkIFBUVCBudW1iZXIg KDEtaW5kZXhlZCkgKi8KPiA+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9w Z2M7ICAgICAgICAgICAgICAgICAgICAvKiB0aGUKPiB1c2VyLXByb3ZpZGVkIFBHQyBudW1iZXIg KDEtaW5kZXhlZCkgKi8KPiA+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9w ZzsgICAgICAgICAgICAgICAgICAgICAvKiB0aGUKPiB1c2VyLXByb3ZpZGVkIFBHIG51bWJlciAo MS1pbmRleGVkKSAqLwo+ID4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X2Fu Z2xlOyAgICAgICAgICAgICAgICAgIC8qIHRoZQo+IHVzZXItcHJvdmlkZWQgYW5nbGUgbnVtYmVy ICgxLWluZGV4ZWQpICovCj4gPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBvcHRf cmVnaW9uOyAgICAgICAgICAgICAgICAgLyogdGhlCj4gdXNlci1wcm92aWRlZCByZWdpb24gaWRl bnRpZmljYXRpb24gZGlnaXQgKi8KPiA+ICsKPiA+ICsgICAgLyogc3ViZGVtdXggKi8KPiA+ICsg ICAgY29uc3QgQVZJbnB1dEZvcm1hdCAgICAgICAgICptcGVnX2ZtdDsgICAgICAgICAgICAgICAg ICAvKiBpbm5lcgo+IE1QRUctUFMgKFZPQikgZGVtdXhlciAqLwo+ID4gKyAgICBBVkZvcm1hdENv bnRleHQgICAgICAgICAgICAgKm1wZWdfY3R4OyAgICAgICAgICAgICAgICAgIC8qIGNvbnRleHQK PiBmb3IgaW5uZXIgZGVtdXhlciAqLwo+ID4gKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAg ICAgKm1wZWdfYnVmOyAgICAgICAgICAgICAgICAgIC8qIGJ1ZmZlcgo+IGZvciBpbm5lciBkZW11 eGVyICovCj4gPiArICAgIEZGSU9Db250ZXh0ICAgICAgICAgICAgICAgICBtcGVnX3BiOyAgICAg ICAgICAgICAgICAgICAgLyogYnVmZmVyCj4gY29udGV4dCBmb3IgaW5uZXIgZGVtdXhlciAqLwo+ ID4gKwo+ID4gKyAgICAvKiB2b2x1bWUgKi8KPiA+ICsgICAgZHZkX3JlYWRlcl90ICAgICAgICAg ICAgICAgICp2b2xfZHZkcmVhZDsgICAgICAgICAgICAgICAvKiBoYW5kbGUKPiB0byBsaWJkdmRy ZWFkICovCj4gPiArICAgIGlmb19oYW5kbGVfdCAgICAgICAgICAgICAgICAqdm9sX3ZtZ19pZm87 ICAgICAgICAgICAgICAgLyogaGFuZGxlCj4gdG8gdGhlIFZNRyAoVklERU9fVFMuSUZPKSAqLwo+ ID4gKwo+ID4gKyAgICAvKiBwbGF5YmFjayAqLwo+ID4gKyAgICBpZm9faGFuZGxlX3QgICAgICAg ICAgICAgICAgKnBsYXlfdnRzX2lmbzsgICAgICAgICAgICAgIC8qIGhhbmRsZQo+IHRvIHRoZSBh Y3RpdmUgVlRTIChWVFNfbm5fbi5JRk8pICovCj4gPiArICAgIHBnY190ICAgICAgICAgICAgICAg ICAgICAgICAqcGxheV9wZ2M7ICAgICAgICAgICAgICAgICAgLyogaGFuZGxlCj4gdG8gdGhlIGFj dGl2ZSBQR0MgKi8KPiA+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlfdnRz bjsgICAgICAgICAgICAgICAgICAvKiBudW1iZXIKPiBvZiB0aGUgYWN0aXZlIFZUUyAodmlkZW8g dGl0bGUgc2V0KSAqLwo+ID4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcGxheV9w Z2NuOyAgICAgICAgICAgICAgICAgIC8qIG51bWJlcgo+IG9mIHRoZSBhY3RpdmUgUEdDIChwcm9n cmFtIGNoYWluKSAqLwo+ID4gKyAgICBkdmRuYXZfdCAgICAgICAgICAgICAgICAgICAgKnBsYXlf ZHZkbmF2OyAgICAgICAgICAgICAgIC8qIGhhbmRsZQo+IHRvIGxpYmR2ZG5hdiAqLwo+ID4gK30g RFZEVmlkZW9EZW11eENvbnRleHQ7Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZHZkdmlkZW9fbGli ZHZkcmVhZF9sb2codm9pZCAqb3BhcXVlLCBkdmRfbG9nZ2VyX2xldmVsX3QKPiBsZXZlbCwKPiA+ ICsgICAgICAgIGNvbnN0IGNoYXIgKm1zZywgdmFfbGlzdCBtc2dfdmEpCj4gPiArewo+Cj4gVGhp cyBmdW5jdGlvbiBpcyB1bm5lY2Vzc2FyeS4gSWYgeW91IHJlYWxseSBuZWVkIHRvIGludGVyY2Vw dCBsb2dnZWQKPiBtZXNzYWdlcyBmcm9tIGxpYmR2ZG5hdiBhbmQgZmVlZCB0aGVtIHRvIGF2X2xv ZywgeW91IHNob3VsZCBqdXN0IGhhdmUgYQo+IGxvb2t1cCB0aGF0IG1hcHMgdGhlIGNvcnJlc3Bv bmRpbmcgbWVzc2FnZSBsZXZlbC4KPgo+ID4gKyAgICBBVkZvcm1hdENvbnRleHQgKnMgPSBvcGFx dWU7Cj4gPiArICAgIGludCBsYXZ1X2xldmVsOwo+ID4gKwo+ID4gKyAgICBjaGFyIG1zZ19idWZb RFZEVklERU9fTElCRFZEWF9MT0dfQlVGRkVSX1NJWkVdID0gezB9Owo+ID4gKyAgICB2c25wcmlu dGYobXNnX2J1ZiwgRFZEVklERU9fTElCRFZEWF9MT0dfQlVGRkVSX1NJWkUsIG1zZywgbXNnX3Zh KTsKPiA+ICsKPiA+ICsgICAgc3dpdGNoIChsZXZlbCkgewo+ID4gKyAgICAgICAgY2FzZSBEVkRf TE9HR0VSX0xFVkVMX0VSUk9SOgo+ID4gKyAgICAgICAgICAgIGxhdnVfbGV2ZWwgPSBBVl9MT0df RVJST1I7Cj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICBjYXNlIERWRF9MT0dH RVJfTEVWRUxfV0FSTjoKPiA+ICsgICAgICAgICAgICBsYXZ1X2xldmVsID0gQVZfTE9HX1dBUk5J Tkc7Cj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICBjYXNlIERWRF9MT0dHRVJf TEVWRUxfSU5GTzoKPiA+ICsgICAgICAgICAgICBsYXZ1X2xldmVsID0gQVZfTE9HX0lORk87Cj4g PiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICBjYXNlIERWRF9MT0dHRVJfTEVWRUxf REVCVUc6Cj4gPiArICAgICAgICBkZWZhdWx0Ogo+ID4gKyAgICAgICAgICAgIGxhdnVfbGV2ZWwg PSBBVl9MT0dfREVCVUc7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgLyogbGliZHZkcmVhZCBt ZXNzYWdlcyBkb24ndCBoYXZlIGxpbmUgdGVybWluYXRvcnMgKi8KPiA+ICsgICAgYXZfbG9nKHMs IGxhdnVfbGV2ZWwsICJsaWJkdmRyZWFkOiAlc1xuIiwgbXNnX2J1Zik7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyB2b2lkIGR2ZHZpZGVvX2xpYmR2ZG5hdl9sb2codm9pZCAqb3BhcXVlLCBkdmRu YXZfbG9nZ2VyX2xldmVsX3QKPiBsZXZlbCwKPiA+ICsgICAgICAgIGNvbnN0IGNoYXIgKm1zZywg dmFfbGlzdCBtc2dfdmEpCj4gPiArewo+ID4gKyAgICBBVkZvcm1hdENvbnRleHQgKnMgPSBvcGFx dWU7Cj4gU2FtZSBjb21wbGFpbnQgaGVyZS4gQWxzbyB5b3UgaGF2ZSBubyB0byByZWFzc2lnbiBv cGFxdWUgaGVyZS4KPgo+ID4gKyAgICBpbnQgbGF2dV9sZXZlbDsKPiA+ICsKPiA+ICsgICAgY2hh ciBtc2dfYnVmW0RWRFZJREVPX0xJQkRWRFhfTE9HX0JVRkZFUl9TSVpFXSA9IHswfTsKPiA+ICsg ICAgdnNucHJpbnRmKG1zZ19idWYsIERWRFZJREVPX0xJQkRWRFhfTE9HX0JVRkZFUl9TSVpFLCBt c2csIG1zZ192YSk7Cj4gPiArCj4gPiArICAgIHN3aXRjaCAobGV2ZWwpIHsKPiA+ICsgICAgICAg IGNhc2UgRFZETkFWX0xPR0dFUl9MRVZFTF9FUlJPUjoKPiA+ICsgICAgICAgICAgICBsYXZ1X2xl dmVsID0gQVZfTE9HX0VSUk9SOwo+ID4gKyAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAg Y2FzZSBEVkROQVZfTE9HR0VSX0xFVkVMX1dBUk46Cj4gPiArICAgICAgICAgICAgbGF2dV9sZXZl bCA9IEFWX0xPR19XQVJOSU5HOwo+ID4gKyAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAg Y2FzZSBEVkROQVZfTE9HR0VSX0xFVkVMX0lORk86Cj4gPiArICAgICAgICAgICAgbGF2dV9sZXZl bCA9IEFWX0xPR19JTkZPOwo+ID4gKyAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgY2Fz ZSBEVkROQVZfTE9HR0VSX0xFVkVMX0RFQlVHOgo+ID4gKyAgICAgICAgZGVmYXVsdDoKPiA+ICsg ICAgICAgICAgICBsYXZ1X2xldmVsID0gQVZfTE9HX0RFQlVHOwo+ID4gKyAgICB9Cj4gPiArCj4g PiArICAgIC8qIGxpYmR2ZG5hdiBtZXNzYWdlcyBkb24ndCBoYXZlIGxpbmUgdGVybWluYXRvcnMg Ki8KPiA+ICsgICAgYXZfbG9nKHMsIGxhdnVfbGV2ZWwsICJsaWJkdmRuYXY6ICVzXG4iLCBtc2df YnVmKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNoYXIgKmR2ZHZpZGVvX2xhbmdfY29kZV90 b19pc282MzlfXzIoY29uc3QgdWludDE2X3QgbGFuZ19jb2RlKQo+ID4gK3sKPiA+ICsgICAgY2hh ciBsYW5nX2NvZGVfc3RyWzNdID0gezB9Owo+ID4gKwo+ID4gKyAgICBpZiAobGFuZ19jb2RlICYm IGxhbmdfY29kZSAhPSAweEZGRkYpIHsKPiA+ICsgICAgICAgIGxhbmdfY29kZV9zdHJbMF0gPSAo bGFuZ19jb2RlID4+IDgpICYgMHhGRjsKPiA+ICsgICAgICAgIGxhbmdfY29kZV9zdHJbMV0gPSBs YW5nX2NvZGUgJiAweEZGOwo+ID4gKyAgICB9Cj4gQVZfV0IxNihsYW5nX2NvZGVfc3RyLCBsYW5n X2NvZGUpOwo+Cj4gPiArCj4gPiArICAgIHJldHVybiAoY2hhciAqKSBmZl9jb252ZXJ0X2xhbmdf dG8obGFuZ19jb2RlX3N0ciwKPiBBVl9MQU5HX0lTTzYzOV8yX0JJQkwpOwo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgaW50NjRfdCBkdmR2aWRlb190aW1lX3RvX21pbGxpcyhkdmRfdGltZV90ICp0 aW1lKQo+ID4gK3sKPiA+ICsgICAgZG91YmxlIGZwczsKPiA+ICsgICAgaW50NjRfdCBtczsKPiA+ ICsKPiA+ICsgICAgaW50NjRfdCBzZWMgPSAoaW50NjRfdCkgKEJDRDJEKHRpbWUtPmhvdXIpKSAq IDYwICogNjA7Cj4gPiArICAgIHNlYyArPSAoaW50NjRfdCkgKEJDRDJEKHRpbWUtPm1pbnV0ZSkp ICogNjA7Cj4gPiArICAgIHNlYyArPSAoaW50NjRfdCkgKEJDRDJEKHRpbWUtPnNlY29uZCkpOwo+ ID4gKwo+ID4gKyAgICAvKiB0aGUgMiBoaWdoIGJpdHMgYXJlIHRoZSBmcmFtZSByYXRlICovCj4g PiArICAgIHN3aXRjaCAoKHRpbWUtPmZyYW1lX3UgJiAweEMwKSA+PiA2KQo+ID4gKyAgICB7Cj4g PiArICAgICAgICBjYXNlIDE6Cj4gPiArICAgICAgICAgICAgZnBzID0gMjUuMDsKPiA+ICsgICAg ICAgICAgICBicmVhazsKPiA+ICsgICAgICAgIGNhc2UgMzoKPiA+ICsgICAgICAgICAgICBmcHMg PSAyOS45NzsKPiBUaGlzIGlzIHdyb25nLCBpdCdzIDMwMDAwLzEwMDEuIFdoaWNoIHlvdSBrbmV3 LCBiZWNhdXNlIHlvdSAjZGVmaW5lZCBpdAo+IGFib3ZlLiBXaHkgbm90IHVzZSB0aG9zZT8KPgo+ ID4gKyAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgZGVmYXVsdDoKPiA+ICsgICAgICAg ICAgICBmcHMgPSAyNTAwLjA7Cj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgIH0KPiA+ ICsgICAgbXMgPSBCQ0QyRCh0aW1lLT5mcmFtZV91ICYgMHgzRikgKiAxMDAwLjAgLyBmcHM7Cj4g PiArCj4gPiArICAgIHJldHVybiAoc2VjICogMTAwMCkgKyBtczsKPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIGludCBkdmR2aWRlb192b2x1bWVfaXNfdGl0bGVfdmFsaWRfaW5fY29udGV4dChBVkZv cm1hdENvbnRleHQgKnMsCj4gPiArICAgICAgICBpbnQgdGl0bGUpCj4gPiArewo+ID4gKyAgICBE VkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiA+ICsKPiA+ICsgICAgcmV0 dXJuIHRpdGxlID49IDEKPiA+ICsgICAgICAgICAgICAmJiB0aXRsZSA8PSBEVkRWSURFT19USVRM RV9OVU1CRVJfTUFYCj4gPiArICAgICAgICAgICAgJiYgdGl0bGUgPD0gYy0+dm9sX3ZtZ19pZm8t PnR0X3NycHQtPm5yX29mX3NycHRzCj4gPiArICAgICAgICAgICAgJiYgYy0+dm9sX3ZtZ19pZm8t PnR0X3NycHQtPnRpdGxlW3RpdGxlIC0gMV0ubnJfb2ZfcHR0cyA+IDA7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fdm9sdW1lX2lzX3RpdGxlX3ZhbGlkX2luX3Z0cyh0aXRs ZV9pbmZvX3QKPiB0aXRsZV9pbmZvLAo+ID4gKyAgICAgICAgaWZvX2hhbmRsZV90ICp2dHNfaWZv KQo+ID4gK3sKPiA+ICsgICAgcmV0dXJuIHRpdGxlX2luZm8udnRzX3R0biA+PSAxCj4gPiArICAg ICAgICAgICAgJiYgdGl0bGVfaW5mby52dHNfdHRuIDw9IERWRFZJREVPX1RUX05VTUJFUl9NQVgK PiA+ICsgICAgICAgICAgICAmJiB0aXRsZV9pbmZvLnZ0c190dG4gPD0gdnRzX2lmby0+dnRzX3B0 dF9zcnB0LT5ucl9vZl9zcnB0cwo+ID4gKyAgICAgICAgICAgICYmIHZ0c19pZm8tPnZ0c2lfbWF0 LT5ucl9vZl92dHNfYXVkaW9fc3RyZWFtcwo+ID4gKyAgICAgICAgICAgICAgICAgICAgPD0gRFZE VklERU9fVlRTX0FVRElPX1NUUkVBTVNfTUFYCj4gPiArICAgICAgICAgICAgJiYgdnRzX2lmby0+ dnRzaV9tYXQtPm5yX29mX3Z0c19zdWJwX3N0cmVhbXMKPiA+ICsgICAgICAgICAgICAgICAgICAg IDw9IERWRFZJREVPX1ZUU19TVUJQX1NUUkVBTVNfTUFYOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgaW50IGR2ZHZpZGVvX3ZvbHVtZV9pc19hbmdsZV92YWxpZF9pbl90aXRsZShpbnQgYW5nbGUs Cj4gPiArICAgICAgICB0aXRsZV9pbmZvX3QgdGl0bGVfaW5mbykKPiA+ICt7Cj4gPiArICAgIHJl dHVybiBhbmdsZSA+PSAxCj4gPiArICAgICAgICAgICAgJiYgYW5nbGUgPD0gRFZEVklERU9fQU5H TEVfTlVNQkVSX01BWAo+ID4gKyAgICAgICAgICAgICYmIGFuZ2xlIDw9IHRpdGxlX2luZm8ubnJf b2ZfYW5nbGVzOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3ZvbHVtZV9p c19wZ2NfdmFsaWRfYW5kX3NlcXVlbnRpYWwocGdjX3QgKnBnYykKPiA+ICt7Cj4gPiArICAgIHJl dHVybiBwZ2MKPiA+ICsgICAgICAgICAgICAmJiBwZ2MtPnByb2dyYW1fbWFwCj4gPiArICAgICAg ICAgICAgJiYgcGdjLT5jZWxsX3BsYXliYWNrICE9IE5VTEwKPiA+ICsgICAgICAgICAgICAmJiBw Z2MtPnBnX3BsYXliYWNrX21vZGUgPT0gMAo+ID4gKyAgICAgICAgICAgICYmIHBnYy0+bnJfb2Zf cHJvZ3JhbXMgPiAwCj4gPiArICAgICAgICAgICAgJiYgcGdjLT5ucl9vZl9jZWxscyA+IDA7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fdm9sdW1lX2lzX3BnY25faW5fdnRz KGludCBwZ2NuLCBpZm9faGFuZGxlX3QKPiAqdnRzX2lmbykKPiA+ICt7Cj4gPiArICAgIHJldHVy biBwZ2NuID49IDEKPiA+ICsgICAgICAgICAgICAmJiBwZ2NuIDw9IERWRFZJREVPX1BHQ19OVU1C RVJfTUFYCj4gPiArICAgICAgICAgICAgJiYgcGdjbiA8PSB2dHNfaWZvLT52dHNfcGdjaXQtPm5y X29mX3BnY2lfc3JwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3ZvbHVt ZV9pc19wZ25faW5fcGdjKGludCBwZ24sIHBnY190ICpwZ2MpCj4gPiArewo+ID4gKyAgICByZXR1 cm4gcGduID49IDEKPiA+ICsgICAgICAgICAgICAmJiBwZ24gPD0gRFZEVklERU9fUEdfTlVNQkVS X01BWAo+ID4gKyAgICAgICAgICAgICYmIHBnbiA8PSBwZ2MtPm5yX29mX3Byb2dyYW1zOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3ZvbHVtZV9vcGVuKEFWRm9ybWF0Q29u dGV4dCAqcykKPiBhdl9jb2xkCj4KPiA+ICt7Cj4gPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0 ICpjID0gcy0+cHJpdl9kYXRhOwo+ID4gKwo+ID4gKyAgICBkdmRfcmVhZGVyX3QgKmR2ZHJlYWQ7 Cj4gPiArICAgIGlmb19oYW5kbGVfdCAqdm1nX2lmbzsKPiA+ICsKPiA+ICsgICAgZHZkX2xvZ2dl cl9jYiBkdmRyZWFkX2xvZ19jYiA9IHsgLnBmX2xvZyA9IGR2ZHZpZGVvX2xpYmR2ZHJlYWRfbG9n Cj4gfTsKPiA+ICsgICAgZHZkcmVhZCA9IERWRE9wZW4yKHMsICZkdmRyZWFkX2xvZ19jYiwgcy0+ dXJsKTsKPiA+ICsKPiA+ICsgICAgaWYgKCFkdmRyZWFkKSB7Cj4gPiArICAgICAgICBhdl9sb2co cywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgbGliZHZkcmVhZFxuIik7Cj4g PiArCj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiA+ICsgICAgfQo+ID4g Kwo+ID4gKyAgICBpZiAoISh2bWdfaWZvID0gaWZvT3BlbihkdmRyZWFkLCAwKSkpIHsKPiA+ICsg ICAgICAgIERWRENsb3NlKGR2ZHJlYWQpOwo+ID4gKwo+ID4gKyAgICAgICAgYXZfbG9nKHMsIEFW X0xPR19FUlJPUiwKPiA+ICsgICAgICAgICAgICAiVW5hYmxlIHRvIG9wZW4gVklERU9fVFMuSUZP LiAiCj4gPiArICAgICAgICAgICAgIklucHV0IGRvZXMgbm90IGhhdmUgYSB2YWxpZCBEVkQtVmlk ZW8gc3RydWN0dXJlICIKPiA+ICsgICAgICAgICAgICAib3IgaXMgbm90IGEgY29tcGxpYW50IFVE RiBEVkQtVmlkZW8gaW1hZ2UuXG4iKTsKPiA+ICsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGMtPnZvbF9kdmRyZWFkID0g ZHZkcmVhZDsKPiA+ICsgICAgYy0+dm9sX3ZtZ19pZm8gPSB2bWdfaWZvOwo+ID4gKwo+ID4gKyAg ICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZHZkdmlkZW9fdm9sdW1l X2Nsb3NlKEFWRm9ybWF0Q29udGV4dCAqcykKPiA+ICt7Cj4gPiArICAgIERWRFZpZGVvRGVtdXhD b250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ID4gKwo+ID4gKyAgICBpZiAoYy0+dm9sX3ZtZ19p Zm8pIHsKPiA+ICsgICAgICAgIGlmb0Nsb3NlKGMtPnZvbF92bWdfaWZvKTsKPiBDYW4gdGhpcyBm YWlsPwo+Cj4gPiArICAgICAgICBjLT52b2xfdm1nX2lmbyA9IE5VTEw7Cj4gPiArICAgIH0KPiA+ ICsKPiA+ICsgICAgaWYgKGMtPnZvbF9kdmRyZWFkKSB7Cj4gPiArICAgICAgICBEVkRDbG9zZShj LT52b2xfZHZkcmVhZCk7Cj4gQ2FuIHRoaXMgZmFpbD8KPgo+ID4gKyAgICAgICAgYy0+dm9sX2R2 ZHJlYWQgPSBOVUxMOwo+ID4gKyAgICB9Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZk dmlkZW9fdm9sdW1lX29wZW5fdnRzX2lmbyhBVkZvcm1hdENvbnRleHQgKnMsIGludCB2dHNuLAo+ ID4gKyAgICAgICAgaWZvX2hhbmRsZV90ICoqcF92dHNfaWZvKQo+ID4gK3sKPiA+ICsgICAgRFZE VmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gPiArCj4gPiArICAgIGlmb19o YW5kbGVfdCAqdnRzX2lmbzsKPiA+ICsKPiA+ICsgICAgaWYgKHZ0c24gPCAxCj4gPiArICAgICAg ICAgICAgfHwgdnRzbiA+IERWRFZJREVPX1ZUU19OVU1CRVJfTUFYCj4gPiArICAgICAgICAgICAg fHwgISh2dHNfaWZvID0gaWZvT3BlbihjLT52b2xfZHZkcmVhZCwgdnRzbikpKSB7Cj4gPiArICAg ICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAg ICBmb3IgKGludCBpID0gMDsgaSA8IHZ0c19pZm8tPnZ0c19jX2FkdC0+bnJfb2Zfdm9iczsgaSsr KSB7Cj4gPiArICAgICAgICBpbnQgc3RhcnRfc2VjdG9yID0KPiB2dHNfaWZvLT52dHNfY19hZHQt PmNlbGxfYWRyX3RhYmxlW2ldLnN0YXJ0X3NlY3RvcjsKPiA+ICsgICAgICAgIGludCBlbmRfc2Vj dG9yID0KPiB2dHNfaWZvLT52dHNfY19hZHQtPmNlbGxfYWRyX3RhYmxlW2ldLmxhc3Rfc2VjdG9y Owo+ID4gKwo+ID4gKyAgICAgICAgaWYgKChzdGFydF9zZWN0b3IgJiAweEZGRkZGRikgPT0gMHhG RkZGRkYKPiA+ICsgICAgICAgICAgICAgICAgfHwgKGVuZF9zZWN0b3IgJiAweEZGRkZGRikgPT0g MHhGRkZGRkYKPiA+ICsgICAgICAgICAgICAgICAgfHwgc3RhcnRfc2VjdG9yID49IGVuZF9zZWN0 b3IpIHsKPiA+ICsgICAgICAgICAgICBpZm9DbG9zZSh2dHNfaWZvKTsKPiA+ICsKPiA+ICsgICAg ICAgICAgICBhdl9sb2cocywgQVZfTE9HX1dBUk5JTkcsICJWVFMgaGFzIGludmFsaWQgY2VsbCBh ZGRyZXNzCj4gdGFibGVcbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOwo+ID4gKyAgICAgICAgfQo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgICgq cF92dHNfaWZvKSA9IHZ0c19pZm87Cj4gPiArCj4gPiArICAgIHJldHVybiAwOwo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3BsYXliYWNrX29wZW4oQVZGb3JtYXRDb250ZXh0 ICpzKQo+ID4gK3sKPiA+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2Rh dGE7Cj4gPiArCj4gPiArICAgIGludCByZXQ7Cj4gPiArCj4gPiArICAgIGlmb19oYW5kbGVfdCAq dnRzX2lmbzsKPiA+ICsgICAgZHZkbmF2X2xvZ2dlcl9jYiBkdmRuYXZfbG9nX2NiOwo+ID4gKyAg ICBkdmRuYXZfc3RhdHVzX3QgZHZkbmF2X3N0YXR1czsKPiA+ICsgICAgZHZkbmF2X3QgKmR2ZG5h djsKPiA+ICsKPiA+ICsgICAgdGl0bGVfaW5mb190IHRpdGxlX2luZm87Cj4gPiArICAgIGludCBw Z2NuOwo+ID4gKyAgICBpbnQgcGduOwo+ID4gKyAgICBwZ2NfdCAqcGdjOwo+ID4gKwo+ID4gKyAg ICBpbnQzMl90IGRpc2NfcmVnaW9uX21hc2s7Cj4gPiArICAgIGludDMyX3QgcGxheWVyX3JlZ2lv bl9tYXNrOwo+ID4gKyAgICBpbnQgY2VsbF9zZWFyY2hfaGFzX3Z0cyA9IDA7Cj4gPiArCj4gPiAr ICAgIC8qIGlmIHRoZSB0aXRsZSBpcyB2YWxpZCwgb3BlbiBpdHMgVlRTIElGTyAqLwo+ID4gKyAg ICBpZiAoIWR2ZHZpZGVvX3ZvbHVtZV9pc190aXRsZV92YWxpZF9pbl9jb250ZXh0KHMsIGMtPm9w dF90aXRsZSkpIHsKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJUaXRsZSBu b3QgZm91bmQgb3IgaW52YWxpZFxuIik7Cj4gPiArCj4gPiArICAgICAgICByZXR1cm4gQVZFUlJP Ul9TVFJFQU1fTk9UX0ZPVU5EOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHRpdGxlX2luZm8g PSBjLT52b2xfdm1nX2lmby0+dHRfc3JwdC0+dGl0bGVbYy0+b3B0X3RpdGxlIC0gMV07Cj4gPiAr Cj4gPiArICAgIGlmICgocmV0ID0gZHZkdmlkZW9fdm9sdW1lX29wZW5fdnRzX2lmbyhzLAo+ID4g KyAgICAgICAgICAgIHRpdGxlX2luZm8udGl0bGVfc2V0X25yLCAmdnRzX2lmbykpICE9IDApIHsK PiBPdXIgY29udmVudGlvbiBpcyB0byByZXR1cm4gbmVnYXRpdmUgdmFsdWVzIG9uIGVycm9yIGlu IEZGbXBlZy4gTm90Cj4gbm9uemVybyB2YWx1ZXMuCj4KPiA+ICsgICAgICAgIGF2X2xvZyhzLCBB Vl9MT0dfRVJST1IsICJUaXRsZSBWVFMgY291bGQgbm90IGJlIG9wZW5lZFxuIik7Cj4gPiArCj4g PiArICAgICAgICByZXR1cm4gcmV0Owo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmICghZHZk dmlkZW9fdm9sdW1lX2lzX3RpdGxlX3ZhbGlkX2luX3Z0cyh0aXRsZV9pbmZvLCB2dHNfaWZvKSkg ewo+ID4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlRpdGxlIFZUUyBpcyBpbnZh bGlkXG4iKTsKPiA+ICsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmICghZHZkdmlkZW9fdm9sdW1lX2lzX2FuZ2xlX3Zh bGlkX2luX3RpdGxlKGMtPm9wdF9hbmdsZSwKPiB0aXRsZV9pbmZvKSkgewo+ID4gKyAgICAgICAg YXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkFuZ2xlIG5vdCBmb3VuZCBvciBpbnZhbGlkXG4iKTsK PiA+ICsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ID4gKyAgICB9 Cj4gPiArCj4gPiArICAgIC8qIGRldGVybWluZSBvdXIgUEdDIGFuZCBQRyAocGxheWJhY2sgY29v cmRpbmF0ZXMpICovCj4gPiArICAgIGlmIChjLT5vcHRfcGdjID4gMCAmJiBjLT5vcHRfcGcgPiAw KSB7Cj4gPiArICAgICAgICBpZiAoYy0+b3B0X3B0dCA+IDApIHsKPiA+ICsgICAgICAgICAgICBh dl9sb2cocywgQVZfTE9HX1dBUk5JTkcsCj4gPiArICAgICAgICAgICAgICAgICAgICAiUFRUIG9w dGlvbiBpZ25vcmVkIGFzIFBHQyBhbmQgUEcgYXJlIHByb3ZpZGVkXG4iKTsKPiA+ICsgICAgICAg IH0KPiA+ICsKPiA+ICsgICAgICAgIHBnY24gPSBjLT5vcHRfcGdjOwo+ID4gKyAgICAgICAgcGdu ID0gYy0+b3B0X3BnOwo+ID4gKyAgICB9IGVsc2Ugewo+ID4gKyAgICAgICAgaWYgKGMtPm9wdF9w dHQgPiB0aXRsZV9pbmZvLm5yX29mX3B0dHMpIHsKPiA+ICsgICAgICAgICAgICBhdl9sb2cocywg QVZfTE9HX0VSUk9SLCAiUFRUIG5vdCBmb3VuZFxuIik7Cj4gPiArCj4gPiArICAgICAgICAgICAg cmV0dXJuIEFWRVJST1JfU1RSRUFNX05PVF9GT1VORDsKPiA+ICsgICAgICAgIH0KPiA+ICsKPiA+ ICsgICAgICAgIHBnY24gPSB2dHNfaWZvLT52dHNfcHR0X3NycHQtPnRpdGxlW3RpdGxlX2luZm8u dnRzX3R0biAtCj4gMV0ucHR0W2MtPm9wdF9wdHQgLSAxXS5wZ2NuOwo+ID4gKyAgICAgICAgcGdu ID0gdnRzX2lmby0+dnRzX3B0dF9zcnB0LT50aXRsZVt0aXRsZV9pbmZvLnZ0c190dG4gLQo+IDFd LnB0dFtjLT5vcHRfcHR0IC0gMV0ucGduOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmICgh ZHZkdmlkZW9fdm9sdW1lX2lzX3BnY25faW5fdnRzKHBnY24sIHZ0c19pZm8pKSB7Cj4gPiArICAg ICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiUEdDIG5vdCBmb3VuZFxuIik7Cj4gPiArCj4g PiArICAgICAgICByZXR1cm4gQVZFUlJPUl9TVFJFQU1fTk9UX0ZPVU5EOwo+ID4gKyAgICB9Cj4g PiArCj4gPiArICAgIHBnYyA9IHZ0c19pZm8tPnZ0c19wZ2NpdC0+cGdjaV9zcnBbcGdjbiAtIDFd LnBnYzsKPiA+ICsKPiA+ICsgICAgaWYgKCFkdmR2aWRlb192b2x1bWVfaXNfcGdjX3ZhbGlkX2Fu ZF9zZXF1ZW50aWFsKHBnYykpIHsKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1Is ICJQR0Mgbm90IHZhbGlkXG4iKTsKPiA+ICsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lO VkFMSUREQVRBOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmICghZHZkdmlkZW9fdm9sdW1l X2lzX3Bnbl9pbl9wZ2MocGduLCBwZ2MpKSB7Cj4gPiArICAgICAgICBhdl9sb2cocywgQVZfTE9H X0VSUk9SLCAiUEcgbm90IGZvdW5kXG4iKTsKPiA+ICsKPiA+ICsgICAgICAgIHJldHVybiBBVkVS Uk9SX1NUUkVBTV9OT1RfRk9VTkQ7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgLyogc2V0IHVw IGxpYmR2ZG5hdiAqLwo+ID4gKyAgICBkdmRuYXZfbG9nX2NiID0gKGR2ZG5hdl9sb2dnZXJfY2Ip IHsgLnBmX2xvZyA9Cj4gZHZkdmlkZW9fbGliZHZkbmF2X2xvZyB9Owo+ID4gKyAgICBkdmRuYXZf c3RhdHVzID0gZHZkbmF2X29wZW4yKCZkdmRuYXYsIE5VTEwsICZkdmRuYXZfbG9nX2NiLCBzLT51 cmwpOwo+ID4gKwo+ID4gKyAgICBpZiAoIWR2ZG5hdikgewo+ID4gKyAgICAgICAgYXZfbG9nKHMs IEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBpbml0aWFsaXplIGxpYmR2ZG5hdlxuIik7Cj4gPiAr Cj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiA+ICsgICAgfQo+ID4gKwo+ ID4gKyAgICBpZiAoZHZkbmF2X3N0YXR1cyAhPSBEVkROQVZfU1RBVFVTX09LKSB7Cj4gQ29kZSBz dHlsZS4gV2UgZG9uJ3QgdXNlIGJyYWNlcyB3aXRoIHNpbmdsZS1saW5lIGJsb2Nrcy4KPgo+ID4g KyAgICAgICAgZ290byBlbmRfc2VhcmNoX2Vycm9yX2R2ZG5hdjsKPiA+ICsgICAgfQo+ID4gKwo+ ID4gKyAgICBpZiAoZHZkbmF2X3NldF9yZWFkYWhlYWRfZmxhZyhkdmRuYXYsIDApICE9IERWRE5B Vl9TVEFUVVNfT0spIHsKPiA+ICsgICAgICAgIGdvdG8gZW5kX3NlYXJjaF9lcnJvcl9kdmRuYXY7 Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKGR2ZG5hdl9zZXRfUEdDX3Bvc2l0aW9uaW5n X2ZsYWcoZHZkbmF2LCAxKSAhPSBEVkROQVZfU1RBVFVTX09LKQo+IHsKPiA+ICsgICAgICAgIGdv dG8gZW5kX3NlYXJjaF9lcnJvcl9kdmRuYXY7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYg KGR2ZG5hdl9nZXRfcmVnaW9uX21hc2soZHZkbmF2LCAmZGlzY19yZWdpb25fbWFzaykgIT0KPiBE VkROQVZfU1RBVFVTX09LKSB7Cj4gPiArICAgICAgICBnb3RvIGVuZF9zZWFyY2hfZXJyb3JfZHZk bmF2Owo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmIChjLT5vcHRfcmVnaW9uID4gMCkgewo+ ID4gKyAgICAgICAgcGxheWVyX3JlZ2lvbl9tYXNrID0gKDEgPDwgKGMtPm9wdF9yZWdpb24gLSAx KSk7Cj4gPiArICAgIH0gZWxzZSB7Cj4gPiArICAgICAgICBwbGF5ZXJfcmVnaW9uX21hc2sgPSBk aXNjX3JlZ2lvbl9tYXNrOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmIChkdmRuYXZfc2V0 X3JlZ2lvbl9tYXNrKGR2ZG5hdiwgcGxheWVyX3JlZ2lvbl9tYXNrKSAhPQo+IERWRE5BVl9TVEFU VVNfT0spIHsKPiA+ICsgICAgICAgIGdvdG8gZW5kX3NlYXJjaF9lcnJvcl9kdmRuYXY7Cj4gPiAr ICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKGR2ZG5hdl9wcm9ncmFtX3BsYXkoZHZkbmF2LCBjLT5v cHRfdGl0bGUsIHBnY24sIHBnbikgIT0KPiBEVkROQVZfU1RBVFVTX09LKSB7Cj4gPiArICAgICAg ICBnb3RvIGVuZF9zZWFyY2hfZXJyb3JfZHZkbmF2Owo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAg IGlmIChkdmRuYXZfYW5nbGVfY2hhbmdlKGR2ZG5hdiwgYy0+b3B0X2FuZ2xlKSAhPSBEVkROQVZf U1RBVFVTX09LKSB7Cj4gPiArICAgICAgICBnb3RvIGVuZF9zZWFyY2hfZXJyb3JfZHZkbmF2Owo+ ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIC8qIGxvY2sgb24gdG8gdGl0bGUncyBWVFMgYW5kIGNo b3NlbiBQR0MvUEdOIGNvb3JkaW5hdGVzICovCj4gPiArICAgIGZvciAoaW50IGkgPSAwOyBpIDwg RFZEVklERU9fUFNfTUFYX1NFQVJDSF9CTE9DS1M7IGkrKykgewo+ID4gKyAgICAgICAgaW50IG5h dl9ldmVudDsKPiA+ICsgICAgICAgIGludCBuYXZfbGVuOwo+ID4gKyAgICAgICAgZHZkbmF2X3Z0 c19jaGFuZ2VfZXZlbnRfdCAqdnRzX2V2ZW50Owo+ID4gKyAgICAgICAgdWludDhfdCBuYXZfYnVm W0RWRFZJREVPX0JMT0NLX1NJWkVdID0gezB9Owo+ID4gKwo+ID4gKyAgICAgICAgaWYgKGZmX2No ZWNrX2ludGVycnVwdCgmcy0+aW50ZXJydXB0X2NhbGxiYWNrKSkgewo+ID4gKyAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0VYSVQ7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICBp ZiAoZHZkbmF2X2dldF9uZXh0X2Jsb2NrKGR2ZG5hdiwgbmF2X2J1ZiwgJm5hdl9ldmVudCwgJm5h dl9sZW4pCj4gPiArICAgICAgICAgICAgICAgICE9IERWRE5BVl9TVEFUVVNfT0spIHsKPiA+ICsg ICAgICAgICAgICBnb3RvIGVuZF9zZWFyY2hfZXJyb3JfZHZkbmF2Owo+ID4gKyAgICAgICAgfQo+ ID4gKwo+ID4gKyAgICAgICAgaWYgKG5hdl9sZW4gPiBEVkRWSURFT19CTE9DS19TSVpFKSB7Cj4g PiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgYmxvY2sgKHRv byBiaWcpXG4iKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7 Cj4gPiArCj4gPiArICAgICAgICAgICAgZ290byBlbmRfc2VhcmNoX2Vycm9yOwo+ID4gKyAgICAg ICAgfQo+ID4gKwo+ID4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19UUkFDRSwgIm5hdiBldmVu dD0lZCBsZW49JWRcbiIsIG5hdl9ldmVudCwKPiBuYXZfbGVuKTsKPiA+ICsKPiA+ICsgICAgICAg IHN3aXRjaCAobmF2X2V2ZW50KSB7Cj4gPiArICAgICAgICAgICAgY2FzZSBEVkROQVZfVlRTX0NI QU5HRToKPiA+ICsgICAgICAgICAgICAgICAgdnRzX2V2ZW50ID0gKGR2ZG5hdl92dHNfY2hhbmdl X2V2ZW50X3QgKikgbmF2X2J1ZjsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgaWYgKGNlbGxf c2VhcmNoX2hhc192dHMpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgIGlmICh2dHNfZXZlbnQt Pm5ld192dHNOICE9IHRpdGxlX2luZm8udGl0bGVfc2V0X25yCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHx8IHZ0c19ldmVudC0+bmV3X2RvbWFpbiAhPQo+IERWRF9ET01BSU5fVlRT VGl0bGUpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VS Uk9SLCAiVW5leHBlY3RlZCBWVFMKPiBjaGFuZ2VcbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgIHJldCA9IEFWRVJST1JfSU5QVVRfQ0hBTkdFRDsKPiA+ICsKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZF9zZWFyY2hfZXJyb3I7Cj4gPiArICAgICAgICAg ICAgICAgICAgICB9Cj4gPiArICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiA+ICsgICAg ICAgICAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICBpZiAodnRzX2V2ZW50LT5u ZXdfdnRzTiA9PSB0aXRsZV9pbmZvLnRpdGxlX3NldF9ucgo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICYmIHZ0c19ldmVudC0+bmV3X2RvbWFpbiA9PQo+IERWRF9ET01BSU5fVlRTVGl0bGUp IHsKPiA+ICsgICAgICAgICAgICAgICAgICAgIGNlbGxfc2VhcmNoX2hhc192dHMgPSAxOwo+ID4g KyAgICAgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ ID4gKyAgICAgICAgICAgIGNhc2UgRFZETkFWX0NFTExfQ0hBTkdFOgo+ID4gKyAgICAgICAgICAg ICAgICAvLyBpZiB3ZSBuZWVkIG1vcmUgaW5mbyBhYm91dCB0aGUgY2VsbDoKPiA+ICsgICAgICAg ICAgICAgICAgLy8gZHZkbmF2X2NlbGxfY2hhbmdlX2V2ZW50X3QgKmV2ZW50X2RhdGEgPQo+ID4g KyAgICAgICAgICAgICAgICAvLyAgICAgKGR2ZG5hdl9jZWxsX2NoYW5nZV9ldmVudF90ICopIG5h dl9idWY7Cj4gPiArICAgICAgICAgICAgICAgIGludCBjaGVja190aXRsZTsKPiA+ICsgICAgICAg ICAgICAgICAgaW50IGNoZWNrX3BnY247Cj4gPiArICAgICAgICAgICAgICAgIGludCBjaGVja19w Z247Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIGlmICghY2VsbF9zZWFyY2hfaGFzX3Z0cykg ewo+ID4gKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gPiArICAgICAgICAgICAgICAg IH0KPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgZHZkbmF2X2N1cnJlbnRfdGl0bGVfcHJvZ3Jh bShkdmRuYXYsICZjaGVja190aXRsZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmY2hlY2tfcGdjbiwgJmNoZWNrX3Bnbik7Cj4gPiArCj4gPiArICAgICAg ICAgICAgICAgIGlmIChjaGVja190aXRsZSA9PSBjLT5vcHRfdGl0bGUgJiYgY2hlY2tfcGdjbiA9 PSBwZ2NuCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2hlY2tfcGduID09IHBnbiAm Jgo+IGR2ZG5hdl9pc19kb21haW5fdnRzKGR2ZG5hdikpIHsKPiA+ICsgICAgICAgICAgICAgICAg ICAgIGdvdG8gZW5kX3JlYWR5Owo+ID4gKyAgICAgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAg ICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKyAgICAgICAgICAgIGNhc2UgRFZETkFWX1NUSUxM X0ZSQU1FOgo+ID4gKyAgICAgICAgICAgICAgICBkdmRuYXZfc3RpbGxfc2tpcChkdmRuYXYpOwo+ ID4gKwo+ID4gKyAgICAgICAgICAgICAgICBjb250aW51ZTsKPiA+ICsgICAgICAgICAgICBjYXNl IERWRE5BVl9XQUlUOgo+ID4gKyAgICAgICAgICAgICAgICBkdmRuYXZfd2FpdF9za2lwKGR2ZG5h dik7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKyAgICAgICAgICAg IGNhc2UgRFZETkFWX1NUT1A6Cj4gPiArICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1JfSU5Q VVRfQ0hBTkdFRDsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgZ290byBlbmRfc2VhcmNoX2Vy cm9yOwo+ID4gKyAgICAgICAgICAgIGRlZmF1bHQ6Cj4gPiArICAgICAgICAgICAgICAgIGNvbnRp bnVlOwo+ID4gKyAgICAgICAgfQo+ID4gKyAgICB9Cj4gPiArCj4gPiArZW5kX3NlYXJjaF9lcnJv cl9kdmRuYXY6Cj4gPiArICAgIHJldCA9IEFWRVJST1JfRVhURVJOQUw7Cj4gPiArICAgIGF2X2xv ZyhzLCBBVl9MT0dfRVJST1IsICJsaWJkdmRuYXY6ICVzXG4iLAo+IGR2ZG5hdl9lcnJfdG9fc3Ry aW5nKGR2ZG5hdikpOwo+ID4gKyAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiRXJyb3Igc3Rh cnRpbmcgcGxheWJhY2tcbiIpOwo+ID4gKwo+ID4gK2VuZF9zZWFyY2hfZXJyb3I6Cj4gPiArICAg IGR2ZG5hdl9jbG9zZShkdmRuYXYpOwo+ID4gKyAgICBpZm9DbG9zZSh2dHNfaWZvKTsKPiA+ICsK PiA+ICsgICAgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICtlbmRfcmVhZHk6Cj4gPiArICAgIC8qIHVw ZGF0ZSB0aGUgY29udGV4dCAqLwo+ID4gKyAgICBjLT5wbGF5X3Z0c19pZm8gPSB2dHNfaWZvOwo+ ID4gKyAgICBjLT5wbGF5X3BnYyA9IHBnYzsKPiA+ICsgICAgYy0+cGxheV92dHNuID0gdGl0bGVf aW5mby50aXRsZV9zZXRfbnI7Cj4gPiArICAgIGMtPnBsYXlfcGdjbiA9IHBnY247Cj4gPiArICAg IGMtPnBsYXlfZHZkbmF2ID0gZHZkbmF2Owo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZHZkdmlkZW9fcGxheWJhY2tfY2xvc2UoQVZGb3JtYXRD b250ZXh0ICpzKQo+ID4gK3sKPiA+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5w cml2X2RhdGE7Cj4gPiArCj4gPiArICAgIGlmIChjLT5wbGF5X2R2ZG5hdikgewo+ID4gKyAgICAg ICAgZHZkbmF2X2Nsb3NlKGMtPnBsYXlfZHZkbmF2KTsKPiA+ICsgICAgICAgIGMtPnBsYXlfZHZk bmF2ID0gTlVMTDsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZiAoYy0+cGxheV92dHNfaWZv KSB7Cj4gPiArICAgICAgICBpZm9DbG9zZShjLT5wbGF5X3Z0c19pZm8pOwo+ID4gKyAgICAgICAg Yy0+cGxheV92dHNfaWZvID0gTlVMTDsKPiA+ICsgICAgfQo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgaW50IGR2ZHZpZGVvX3ZpZGVvX3N0cmVhbV9hbmFseXplKHZpZGVvX2F0dHJfdCB2aWRlb19h dHRyLAo+ID4gKyAgICAgICAgZW51bSBBVkNvZGVjSUQgKnBfY29kZWNfaWQsIEFWUmF0aW9uYWwg KnBfZnJhbWVyYXRlLAo+ID4gKyAgICAgICAgaW50ICpwX2hlaWdodCwgaW50ICpwX3dpZHRoKQo+ ID4gK3sKPiA+ICsgICAgZW51bSBBVkNvZGVjSUQgY29kZWNfaWQgPSBBVl9DT0RFQ19JRF9OT05F Owo+ID4gKyAgICBBVlJhdGlvbmFsIGZyYW1lcmF0ZSA9IFpFUk9fUTsKPiA+ICsgICAgaW50IGhl aWdodCA9IDA7Cj4gPiArICAgIGludCB3aWR0aCA9IDA7Cj4gPiArCj4gPiArICAgIHN3aXRjaCAo dmlkZW9fYXR0ci5tcGVnX3ZlcnNpb24pIHsKPiA+ICsgICAgICAgIGNhc2UgRFZEVklERU9fVlRT X01QRUdfVkVSU0lPTl9NUEVHMToKPiA+ICsgICAgICAgICAgICBjb2RlY19pZCA9IEFWX0NPREVD X0lEX01QRUcxVklERU87Cj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICBjYXNl IERWRFZJREVPX1ZUU19NUEVHX1ZFUlNJT05fTVBFRzI6Cj4gPiArICAgICAgICAgICAgY29kZWNf aWQgPSBBVl9DT0RFQ19JRF9NUEVHMlZJREVPOwo+ID4gKyAgICAgICAgICAgIGJyZWFrOwo+ID4g KyAgICB9Cj4gPiArCj4gPiArICAgIHN3aXRjaCAodmlkZW9fYXR0ci52aWRlb19mb3JtYXQpIHsK PiA+ICsgICAgICAgIGNhc2UgRFZEVklERU9fVlRTX1BJQ1RVUkVfRk9STUFUX05UU0M6Cj4gPiAr ICAgICAgICAgICAgZnJhbWVyYXRlID0gRFZEVklERU9fTlRTQ19GUkFNRVJBVEVfUTsKPiA+ICsg ICAgICAgICAgICBoZWlnaHQgPSBEVkRWSURFT19OVFNDX0hFSUdIVDsKPiA+ICsgICAgICAgICAg ICBicmVhazsKPiA+ICsgICAgICAgIGNhc2UgRFZEVklERU9fVlRTX1BJQ1RVUkVfRk9STUFUX1BB TDoKPiA+ICsgICAgICAgICAgICBmcmFtZXJhdGUgPSBEVkRWSURFT19QQUxfRlJBTUVSQVRFX1E7 Cj4gPiArICAgICAgICAgICAgaGVpZ2h0ID0gRFZEVklERU9fUEFMX0hFSUdIVDsKPiA+ICsgICAg ICAgICAgICBicmVhazsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZiAoaGVpZ2h0ID4gMCkg ewo+ID4gKyAgICAgICAgc3dpdGNoICh2aWRlb19hdHRyLnBpY3R1cmVfc2l6ZSkgewo+ID4gKyAg ICAgICAgICAgIGNhc2UgRFZEVklERU9fVlRTX1BJQ1RVUkVfU0laRV9EMToKPiA+ICsgICAgICAg ICAgICAgICAgd2lkdGggPSBEVkRWSURFT19EMV9XSURUSDsKPiA+ICsgICAgICAgICAgICAgICAg YnJlYWs7Cj4gPiArICAgICAgICAgICAgY2FzZSBEVkRWSURFT19WVFNfUElDVFVSRV9TSVpFXzRD SUY6Cj4gPiArICAgICAgICAgICAgICAgIHdpZHRoID0gRFZEVklERU9fNENJRl9XSURUSDsKPiA+ ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICAgICAgY2FzZSBEVkRWSURFT19W VFNfUElDVFVSRV9TSVpFX0QxX0hBTEY6Cj4gPiArICAgICAgICAgICAgICAgIHdpZHRoID0gRFZE VklERU9fRDFfSEFMRl9XSURUSDsKPiA+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAg ICAgICAgICAgY2FzZSBEVkRWSURFT19WVFNfUElDVFVSRV9TSVpFX0NJRjoKPiA+ICsgICAgICAg ICAgICAgICAgd2lkdGggPSBEVkRWSURFT19DSUZfV0lEVEg7Cj4gPiArICAgICAgICAgICAgICAg IGhlaWdodCAvPSAyOwo+ID4gKyAgICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgIH0K PiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZiAoY29kZWNfaWQgPT0gQVZfQ09ERUNfSURfTk9O RSB8fCBhdl9jbXBfcShmcmFtZXJhdGUsIFpFUk9fUSkgPT0gMAo+IGF2X2NtcF9xIGZvciBjb21w YXJpbmcgYSByYXRpb25hbCB0byB6ZXJvIGlzIHVubmVjZXNzYXJ5LiBKdXN0IGNoZWNrIGlmCj4g dGhlIG51bWVyYXRvciBpcyBub256ZXJvLCBhcyBhIGZyYWN0aW9uIGlzIHplcm8gaWYgYW5kIG9u bHkgaWYgaXRzCj4gbnVtZXJhdG9yIGlzIHplcm8uCj4KPiA+ICsgICAgICAgICAgICB8fCB3aWR0 aCA8IDEgfHwgaGVpZ2h0IDwgMSkgewo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgKCpwX2NvZGVjX2lkKSA9IGNvZGVjX2lk Owo+ID4gKyAgICAoKnBfZnJhbWVyYXRlKSA9IGZyYW1lcmF0ZTsKPiA+ICsgICAgKCpwX2hlaWdo dCkgPSBoZWlnaHQ7Cj4gPiArICAgICgqcF93aWR0aCkgPSB3aWR0aDsKPiA+ICsKPiA+ICsgICAg cmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fdmlkZW9fc3Ry ZWFtX3RvX2F2c3RyZWFtKEFWRm9ybWF0Q29udGV4dCAqcywKPiA+ICsgICAgICAgIGVudW0gQVZD b2RlY0lEIGNvZGVjX2lkLCBBVlJhdGlvbmFsIGZyYW1lcmF0ZSwKPiA+ICsgICAgICAgIGludCBo ZWlnaHQsIGludCB3aWR0aCwKPiA+ICsgICAgICAgIGVudW0gQVZTdHJlYW1QYXJzZVR5cGUgbmVl ZF9wYXJzaW5nKQo+ID4gK3sKPiA+ICsgICAgQVZTdHJlYW0gKnN0Owo+ID4gKyAgICBGRlN0cmVh bSAqc3RpOwo+ID4gKwo+ID4gKyAgICBzdCA9IGF2Zm9ybWF0X25ld19zdHJlYW0ocywgTlVMTCk7 Cj4gPiArICAgIGlmICghc3QpIHsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7 Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgc3QtPmlkID0gRFZEVklERU9fU1RBUlRDT0RFX1ZJ REVPOwo+ID4gKyAgICBzdC0+Y29kZWNwYXItPmNvZGVjX3R5cGUgPSBBVk1FRElBX1RZUEVfVklE RU87Cj4gPiArICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBjb2RlY19pZDsKPiA+ICsgICAg c3QtPmNvZGVjcGFyLT53aWR0aCA9IHdpZHRoOwo+ID4gKyAgICBzdC0+Y29kZWNwYXItPmhlaWdo dCA9IGhlaWdodDsKPiA+ICsgICAgc3QtPmNvZGVjcGFyLT5mb3JtYXQgPSBEVkRWSURFT19QSVhF TF9GT1JNQVQ7Cj4gPiArCj4gPiArICAgIHN0LT5jb2RlY3Bhci0+ZnJhbWVyYXRlID0gZnJhbWVy YXRlOwo+ID4gKyNpZiBGRl9BUElfUl9GUkFNRV9SQVRFCj4gPiArICAgIHN0LT5yX2ZyYW1lX3Jh dGUgPSBmcmFtZXJhdGU7Cj4gPiArI2VuZGlmCj4gPiArICAgIHN0LT5hdmdfZnJhbWVfcmF0ZSA9 IGZyYW1lcmF0ZTsKPiA+ICsKPiA+ICsgICAgYXZwcml2X3NldF9wdHNfaW5mbyhzdCwgRFZEVklE RU9fUFRTX1dSQVBfQklUUywKPiA+ICsgICAgICAgIERWRFZJREVPX1RJTUVfQkFTRV9RLm51bSwg RFZEVklERU9fVElNRV9CQVNFX1EuZGVuKTsKPiA+ICsKPiA+ICsgICAgc3RpID0gZmZzdHJlYW0o c3QpOwo+ID4gKyAgICBzdGktPnJlcXVlc3RfcHJvYmUgPSAwOwo+ID4gKyAgICBzdGktPm5lZWRf cGFyc2luZyA9IG5lZWRfcGFyc2luZzsKPiA+ICsgICAgc3RpLT5hdmN0eC0+ZnJhbWVyYXRlID0g ZnJhbWVyYXRlOwo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIGludCBkdmR2aWRlb192aWRlb19zdHJlYW1fcmVnaXN0ZXIoQVZGb3JtYXRDb250ZXh0ICpz KQo+ID4gK3sKPiA+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7 Cj4gPiArCj4gPiArICAgIGVudW0gQVZDb2RlY0lEIGNvZGVjX2lkOwo+ID4gKyAgICBBVlJhdGlv bmFsIGZyYW1lcmF0ZTsKPiA+ICsgICAgaW50IGhlaWdodDsKPiA+ICsgICAgaW50IHdpZHRoOwo+ ID4gKwo+ID4gKyAgICBpbnQgcmV0Owo+ID4gKwo+ID4gKyAgICBpZiAoKHJldCA9Cj4gZHZkdmlk ZW9fdmlkZW9fc3RyZWFtX2FuYWx5emUoYy0+cGxheV92dHNfaWZvLT52dHNpX21hdC0+dnRzX3Zp ZGVvX2F0dHIsCj4gJmNvZGVjX2lkLAo+ID4gKyAgICAgICAgICAgICZmcmFtZXJhdGUsICZoZWln aHQsICZ3aWR0aCkpICE9IDApIHsKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1Is ICJJbnZhbGlkIHZpZGVvIHBhcmFtZXRlcnMgaW4gVlRTCj4gSUZPXG4iKTsKPiA+ICsKPiA+ICsg ICAgICAgIHJldHVybiByZXQ7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKChyZXQgPSBk dmR2aWRlb192aWRlb19zdHJlYW1fdG9fYXZzdHJlYW0oYy0+bXBlZ19jdHgsIGNvZGVjX2lkLAo+ ID4gKyAgICAgICAgICAgIGZyYW1lcmF0ZSwgaGVpZ2h0LCB3aWR0aCwgQVZTVFJFQU1fUEFSU0Vf RlVMTCkpICE9IDApIHsKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFi bGUgdG8gYWxsb2NhdGUgdmlkZW8gc3RyZWFtCj4gKHN1YmRlbXV4KVxuIik7Cj4gPiArCj4gPiAr ICAgICAgICByZXR1cm4gcmV0Owo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmICgocmV0ID0g ZHZkdmlkZW9fdmlkZW9fc3RyZWFtX3RvX2F2c3RyZWFtKHMsIGNvZGVjX2lkLAo+ID4gKyAgICAg ICAgICAgIGZyYW1lcmF0ZSwgaGVpZ2h0LCB3aWR0aCwgQVZTVFJFQU1fUEFSU0VfTk9ORSkpICE9 IDApIHsKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gYWxs b2NhdGUgdmlkZW8gc3RyZWFtXG4iKTsKPiA+ICsKPiA+ICsgICAgICAgIHJldHVybiByZXQ7Cj4g PiArICAgIH0KPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBpbnQgZHZkdmlkZW9fYXVkaW9fc3RyZWFtX2FuYWx5emUoYXVkaW9fYXR0cl90IGF1ZGlvX2F0 dHIsCj4gPiArICAgICAgICB1aW50MTZfdCBhdWRpb19jb250cm9sLCBlbnVtIEFWQ29kZWNJRCAq cF9jb2RlY19pZCwgaW50Cj4gKnBfc3RhcnRjb2RlLAo+ID4gKyAgICAgICAgaW50ICpwX3NhbXBs ZV9yYXRlLCBpbnQgKnBfc2FtcGxlX2JpdHMsCj4gPiArICAgICAgICBpbnQgKnBfbmJfY2hhbm5l bHMsIGNoYXIgKipsYW5nX2lzbzYzOV9fMikKPiA+ICt7Cj4gPiArICAgIGVudW0gQVZDb2RlY0lE IGNvZGVjX2lkID0gQVZfQ09ERUNfSURfTk9ORTsKPiA+ICsgICAgaW50IHN0YXJ0Y29kZSA9IDA7 Cj4gPiArICAgIGludCBzYW1wbGVfcmF0ZSA9IDA7Cj4gPiArICAgIGludCBzYW1wbGVfYml0cyA9 IDA7Cj4gPiArICAgIGludCBuYl9jaGFubmVscyA9IDA7Cj4gPiArCj4gPiArICAgIGludCBwb3Np dGlvbiA9IChhdWRpb19jb250cm9sICYgMHg3RjAwKSA+PiA4Owo+ID4gKwo+ID4gKyAgICBzd2l0 Y2ggKGF1ZGlvX2F0dHIuYXVkaW9fZm9ybWF0KSB7Cj4gPiArICAgICAgICBjYXNlIERWRFZJREVP X1ZUU19BVURJT19GT1JNQVRfQUMzOgo+ID4gKyAgICAgICAgICAgIGNvZGVjX2lkID0gQVZfQ09E RUNfSURfQUMzOwo+ID4gKyAgICAgICAgICAgIHNhbXBsZV9yYXRlID0gNDgwMDA7Cj4gPiArICAg ICAgICAgICAgc3RhcnRjb2RlID0gRFZEVklERU9fU1RBUlRDT0RFX09GRlNFVF9BVURJT19BQzMg KyBwb3NpdGlvbjsKPiA+ICsgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgIGNhc2UgRFZE VklERU9fVlRTX0FVRElPX0ZPUk1BVF9NUDE6Cj4gPiArICAgICAgICAgICAgY29kZWNfaWQgPSBB Vl9DT0RFQ19JRF9NUDE7Cj4gPiArICAgICAgICAgICAgc2FtcGxlX3JhdGUgPSA0ODAwMDsKPiA+ ICsgICAgICAgICAgICBzdGFydGNvZGUgPSBEVkRWSURFT19TVEFSVENPREVfT0ZGU0VUX0FVRElP X01QMSArIHBvc2l0aW9uOwo+ID4gKyAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgY2Fz ZSBEVkRWSURFT19WVFNfQVVESU9fRk9STUFUX01QMjoKPiA+ICsgICAgICAgICAgICBjb2RlY19p ZCA9IEFWX0NPREVDX0lEX01QMjsKPiA+ICsgICAgICAgICAgICBzYW1wbGVfcmF0ZSA9IDQ4MDAw Owo+ID4gKyAgICAgICAgICAgIHN0YXJ0Y29kZSA9IERWRFZJREVPX1NUQVJUQ09ERV9PRkZTRVRf QVVESU9fTVAyICsgcG9zaXRpb247Cj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAg ICBjYXNlIERWRFZJREVPX1ZUU19BVURJT19GT1JNQVRfUENNOgo+ID4gKyAgICAgICAgICAgIGNv ZGVjX2lkID0gQVZfQ09ERUNfSURfUENNX0RWRDsKPiA+ICsKPiA+ICsgICAgICAgICAgICBzd2l0 Y2ggKGF1ZGlvX2F0dHIuc2FtcGxlX2ZyZXF1ZW5jeSkgewo+ID4gKyAgICAgICAgICAgICAgICBj YXNlIERWRFZJREVPX1ZUU19BVURJT19TQU1QTEVfUkFURV80OEs6Cj4gPiArICAgICAgICAgICAg ICAgICAgICBzYW1wbGVfcmF0ZSA9IDQ4MDAwOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgYnJl YWs7Cj4gPiArICAgICAgICAgICAgICAgIGNhc2UgRFZEVklERU9fVlRTX0FVRElPX1NBTVBMRV9S QVRFXzk2SzoKPiA+ICsgICAgICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRlID0gOTYwMDA7Cj4g PiArICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgICAgICB9Cj4gPiArCj4g PiArICAgICAgICAgICAgc3dpdGNoIChhdWRpb19hdHRyLnF1YW50aXphdGlvbikgewo+ID4gKyAg ICAgICAgICAgICAgICBjYXNlIERWRFZJREVPX1ZUU19BVURJT19RVUFOVElaQVRJT05fMTY6Cj4g PiArICAgICAgICAgICAgICAgICAgICBzYW1wbGVfYml0cyA9IDE2Owo+ID4gKyAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICAgICAgICAgIGNhc2UgRFZEVklERU9fVlRTX0FV RElPX1FVQU5USVpBVElPTl8yMDoKPiA+ICsgICAgICAgICAgICAgICAgICAgIHNhbXBsZV9iaXRz ID0gMjA7Cj4gPiArICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgICAgICAg ICAgY2FzZSBEVkRWSURFT19WVFNfQVVESU9fUVVBTlRJWkFUSU9OXzI0Ogo+ID4gKyAgICAgICAg ICAgICAgICAgICAgc2FtcGxlX2JpdHMgPSAyNDsKPiA+ICsgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwo+ID4gKyAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAgICBzdGFydGNvZGUg PSBEVkRWSURFT19TVEFSVENPREVfT0ZGU0VUX0FVRElPX1BDTSArIHBvc2l0aW9uOwo+ID4gKyAg ICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgY2FzZSBEVkRWSURFT19WVFNfQVVESU9fRk9S TUFUX0RUUzoKPiA+ICsgICAgICAgICAgICBjb2RlY19pZCA9IEFWX0NPREVDX0lEX0RUUzsKPiA+ ICsgICAgICAgICAgICBzYW1wbGVfcmF0ZSA9IDQ4MDAwOwo+ID4gKyAgICAgICAgICAgIHN0YXJ0 Y29kZSA9IERWRFZJREVPX1NUQVJUQ09ERV9PRkZTRVRfQVVESU9fRFRTICsgcG9zaXRpb247Cj4g PiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgbmJfY2hhbm5l bHMgPSBhdWRpb19hdHRyLmNoYW5uZWxzICsgMTsKPiA+ICsKPiA+ICsgICAgaWYgKGNvZGVjX2lk ID09IEFWX0NPREVDX0lEX05PTkUgfHwgc3RhcnRjb2RlID09IDAKPiA+ICsgICAgICAgICAgICB8 fCBzYW1wbGVfcmF0ZSA9PSAwIHx8IG5iX2NoYW5uZWxzID09IDApIHsKPiA+ICsgICAgICAgIHJl dHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgICgqcF9j b2RlY19pZCkgPSBjb2RlY19pZDsKPiA+ICsgICAgKCpwX3N0YXJ0Y29kZSkgPSBzdGFydGNvZGU7 Cj4gPiArICAgICgqcF9zYW1wbGVfcmF0ZSkgPSBzYW1wbGVfcmF0ZTsKPiA+ICsgICAgKCpwX3Nh bXBsZV9iaXRzKSA9IHNhbXBsZV9iaXRzOwo+ID4gKyAgICAoKnBfbmJfY2hhbm5lbHMpID0gbmJf Y2hhbm5lbHM7Cj4gPiArICAgICgqbGFuZ19pc282MzlfXzIpID0KPiBkdmR2aWRlb19sYW5nX2Nv ZGVfdG9faXNvNjM5X18yKGF1ZGlvX2F0dHIubGFuZ19jb2RlKTsKPiA+ICsKPiA+ICsgICAgcmV0 dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fYXVkaW9fc3RyZWFt X3RvX2F2c3RyZWFtKEFWRm9ybWF0Q29udGV4dCAqcywKPiA+ICsgICAgICAgIGVudW0gQVZDb2Rl Y0lEIGNvZGVjX2lkLCBpbnQgc3RhcnRjb2RlLCBpbnQgc2FtcGxlX3JhdGUsCj4gPiArICAgICAg ICBpbnQgc2FtcGxlX2JpdHMsIGludCBuYl9jaGFubmVscywgY2hhciAqbGFuZ19pc282MzlfXzIs Cj4gPiArICAgICAgICBlbnVtIEFWU3RyZWFtUGFyc2VUeXBlIG5lZWRfcGFyc2luZykKPiA+ICt7 Cj4gPiArICAgIEFWU3RyZWFtICpzdDsKPiA+ICsgICAgRkZTdHJlYW0gKnN0aTsKPiA+ICsKPiA+ ICsgICAgc3QgPSBhdmZvcm1hdF9uZXdfc3RyZWFtKHMsIE5VTEwpOwo+ID4gKyAgICBpZiAoIXN0 KSB7Cj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ID4gKyAgICB9Cj4gPiAr Cj4gPiArICAgIHN0LT5pZCA9IHN0YXJ0Y29kZTsKPiA+ICsgICAgc3QtPmNvZGVjcGFyLT5jb2Rl Y190eXBlID0gQVZNRURJQV9UWVBFX0FVRElPOwo+ID4gKyAgICBzdC0+Y29kZWNwYXItPmNvZGVj X2lkID0gY29kZWNfaWQ7Cj4gPiArICAgIHN0LT5jb2RlY3Bhci0+c2FtcGxlX3JhdGUgPSBzYW1w bGVfcmF0ZTsKPiA+ICsgICAgc3QtPmNvZGVjcGFyLT5jaF9sYXlvdXQubmJfY2hhbm5lbHMgPSBu Yl9jaGFubmVsczsKPiA+ICsKPiA+ICsgICAgaWYgKHNhbXBsZV9iaXRzID4gMCkgewo+ID4gKyAg ICAgICAgc3QtPmNvZGVjcGFyLT5mb3JtYXQgPSBzYW1wbGVfYml0cyA9PSAxNiA/Cj4gPiArICAg ICAgICAgICAgICAgIEFWX1NBTVBMRV9GTVRfUzE2Cj4gPiArICAgICAgICAgICAgICAgIDogQVZf U0FNUExFX0ZNVF9TMzI7Cj4gPiArICAgICAgICBzdC0+Y29kZWNwYXItPmJpdHNfcGVyX2NvZGVk X3NhbXBsZSA9IHNhbXBsZV9iaXRzOwo+ID4gKyAgICAgICAgc3QtPmNvZGVjcGFyLT5iaXRzX3Bl cl9yYXdfc2FtcGxlID0gc2FtcGxlX2JpdHM7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYg KGxhbmdfaXNvNjM5X18yKSB7Cj4gPiArICAgICAgICBhdl9kaWN0X3NldCgmc3QtPm1ldGFkYXRh LCAibGFuZ3VhZ2UiLCBsYW5nX2lzbzYzOV9fMiwgMCk7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsg ICAgYXZwcml2X3NldF9wdHNfaW5mbyhzdCwgRFZEVklERU9fUFRTX1dSQVBfQklUUywKPiA+ICsg ICAgICAgIERWRFZJREVPX1RJTUVfQkFTRV9RLm51bSwgRFZEVklERU9fVElNRV9CQVNFX1EuZGVu KTsKPiA+ICsKPiA+ICsgICAgc3RpID0gZmZzdHJlYW0oc3QpOwo+ID4gKyAgICBzdGktPnJlcXVl c3RfcHJvYmUgPSAwOwo+ID4gKyAgICBzdGktPm5lZWRfcGFyc2luZyA9IG5lZWRfcGFyc2luZzsK PiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZk dmlkZW9fYXVkaW9fc3RyZWFtX3JlZ2lzdGVyX2FsbChBVkZvcm1hdENvbnRleHQgKnMpCj4gPiAr ewo+ID4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiA+ICsK PiA+ICsgICAgZm9yIChpbnQgaSA9IDA7IGkgPAo+IGMtPnBsYXlfdnRzX2lmby0+dnRzaV9tYXQt Pm5yX29mX3Z0c19hdWRpb19zdHJlYW1zOyBpKyspIHsKPiA+ICsgICAgICAgIGVudW0gQVZDb2Rl Y0lEIGNvZGVjX2lkOwo+ID4gKyAgICAgICAgaW50IHN0YXJ0Y29kZTsKPiA+ICsgICAgICAgIGlu dCBzYW1wbGVfcmF0ZTsKPiA+ICsgICAgICAgIGludCBzYW1wbGVfYml0czsKPiA+ICsgICAgICAg IGludCBuYl9jaGFubmVsczsKPiA+ICsgICAgICAgIGNoYXIgKmxhbmdfaXNvNjM5X18yOwo+ID4g KyAgICAgICAgaW50IHJldDsKPiA+ICsKPiA+ICsgICAgICAgIGlmICghKGMtPnBsYXlfcGdjLT5h dWRpb19jb250cm9sW2ldCj4gPiArICAgICAgICAgICAgICAgICYgRFZEVklERU9fQVVESU9fQ09O VFJPTF9FTkFCTEVEX01BU0spKSB7Cj4gPiArICAgICAgICAgICAgY29udGludWU7Cj4gPiArICAg ICAgICB9Cj4gPiArCj4gPiArICAgICAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX2F1ZGlvX3N0cmVh bV9hbmFseXplKAo+ID4gKyAgICAgICAgICAgICAgICBjLT5wbGF5X3Z0c19pZm8tPnZ0c2lfbWF0 LT52dHNfYXVkaW9fYXR0cltpXSwKPiA+ICsgICAgICAgICAgICAgICAgYy0+cGxheV9wZ2MtPmF1 ZGlvX2NvbnRyb2xbaV0sICZjb2RlY19pZCwgJnN0YXJ0Y29kZSwKPiA+ICsgICAgICAgICAgICAg ICAgJnNhbXBsZV9yYXRlLCAmc2FtcGxlX2JpdHMsICZuYl9jaGFubmVscywKPiA+ICsgICAgICAg ICAgICAgICAgJmxhbmdfaXNvNjM5X18yKSkgIT0gMCkgewo+ID4gKyAgICAgICAgICAgIGF2X2xv ZyhzLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIGF1ZGlvIHBhcmFtZXRlcnMgaW4gVlRTCj4gSUZP XG4iKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gKyAgICAgICAgfQo+ ID4gKwo+ID4gKyAgICAgICAgaWYgKGMtPnBsYXlfdnRzX2lmby0+dnRzaV9tYXQtPgo+ID4gKyAg ICAgICAgICAgICAgICB2dHNfYXVkaW9fYXR0cltpXS5hcHBsaWNhdGlvbl9tb2RlID09IDEpIHsK PiA+ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLAo+ID4gKyAgICAgICAgICAg ICAgICAiQXVkaW8gc3RyZWFtIHVzZXMga2FyYW9rZSBleHRlbnNpb24gd2hpY2ggaXMKPiB1bnN1 cHBvcnRlZFxuIik7Cj4gPiArCj4gPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hX RUxDT01FOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgZm9yIChpbnQgaiA9IDA7 IGogPCBzLT5uYl9zdHJlYW1zOyBqKyspIHsKPiA+ICsgICAgICAgICAgICBpZiAocy0+c3RyZWFt c1tqXS0+aWQgPT0gc3RhcnRjb2RlKSB7Cj4gPiArICAgICAgICAgICAgICAgIGF2X2xvZyhzLCBB Vl9MT0dfV0FSTklORywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAiQXVkaW8gc3RyZWFt IGhhcyBkdXBsaWNhdGUgZW50cnkgaW4gVlRTCj4gSUZPXG4iKTsKPiA+ICsKPiA+ICsgICAgICAg ICAgICAgICAgY29udGludWU7Cj4gPiArICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgfQo+ID4g Kwo+ID4gKyAgICAgICAgaWYgKChyZXQgPSBkdmR2aWRlb19hdWRpb19zdHJlYW1fdG9fYXZzdHJl YW0oYy0+bXBlZ19jdHgsCj4gY29kZWNfaWQsCj4gPiArICAgICAgICAgICAgICAgIHN0YXJ0Y29k ZSwgc2FtcGxlX3JhdGUsIHNhbXBsZV9iaXRzLCBuYl9jaGFubmVscywKPiA+ICsgICAgICAgICAg ICAgICAgbGFuZ19pc282MzlfXzIsIEFWU1RSRUFNX1BBUlNFX0ZVTEwpKSAhPSAwKSB7Cj4gPiAr ICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBhbGxvY2F0ZSB2 aWRlbyBzdHJlYW0KPiAoc3ViZGVtdXgpXG4iKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICByZXR1 cm4gcmV0Owo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgaWYgKChyZXQgPSBkdmR2 aWRlb19hdWRpb19zdHJlYW1fdG9fYXZzdHJlYW0ocywgY29kZWNfaWQsCj4gPiArICAgICAgICAg ICAgICAgIHN0YXJ0Y29kZSwgc2FtcGxlX3JhdGUsIHNhbXBsZV9iaXRzLCBuYl9jaGFubmVscywK PiA+ICsgICAgICAgICAgICAgICAgbGFuZ19pc282MzlfXzIsIEFWU1RSRUFNX1BBUlNFX05PTkUp KSAhPSAwKSB7Cj4gPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJs ZSB0byBhbGxvY2F0ZSBhdWRpbwo+IHN0cmVhbVxuIik7Cj4gPiArCj4gPiArICAgICAgICAgICAg cmV0dXJuIHJldDsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICByZXR1 cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb19zdWJ0aXRsZV9jbHV0 X3JnYl9leHRyYWRhdGFfY2F0KAo+ID4gKyAgICAgICAgY29uc3QgdWludDMyX3QgKmNsdXRfcmdi LCBzaXplX3QgY2x1dF9yZ2Jfc2l6ZSwKPiA+ICsgICAgICAgIGNoYXIgKmRzdCwgc2l6ZV90IGRz dF9zaXplKQo+ID4gK3sKPiA+ICsgICAgaWYgKGRzdF9zaXplIDwgRFZEVklERU9fU1VCUF9DTFVU X1JHQl9FWFRSQURBVEFfU0laRSkgewo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTtUaGlzIGlzIHRoZSBlcnJvciBjb2RlIGZvciBhbiBhbGxvY2F0aW9uCj4gZmFpbHVyZSwgd2hp Y2ggaXMgbm90IHdoYXQgaXMKPiBoYXBwZW5pbmcgaGVyZS4gSXQncyBhbiBpbGxlZ2FsIGFyZ3Vt ZW50IHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCj4KPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBp ZiAoY2x1dF9yZ2Jfc2l6ZSAhPSBEVkRWSURFT19TVUJQX0NMVVRfU0laRSkgewo+ID4gKyAgICAg ICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBzbnBy aW50Zihkc3QsIGRzdF9zaXplLCAicGFsZXR0ZTogIik7Cj4gPiArCj4gPiArICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgRFZEVklERU9fU1VCUF9DTFVUX0xFTjsgaSsrKSB7Cj4gPiArICAgICAgICBh dl9zdHJsY2F0Zihkc3QsIGRzdF9zaXplLAo+ID4gKyAgICAgICAgICAgICAgICAiJTA2IlBSSXgz MiIlcyIsIGNsdXRfcmdiW2ldLCBpICE9IDE1ID8gIiwgIiA6ICIiKTsKPiA+ICsgICAgfQo+ID4g Kwo+ID4gKyAgICBhdl9zdHJsY2F0KGRzdCwgIlxuIiwgMSk7Cj4gPiArCj4gWW91IHNob3VsZCBi ZSB1c2luZyB0aGUgQVZCUHJpbnQgYXBpIGhlcmUgdG8gY29uc3RydWN0IGEgc3RyaW5nLCBub3QK PiBhdl9zdHJsY2F0Lgo+Cj4KPiA+ICsgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBpbnQgZHZkdmlkZW9fc3VidGl0bGVfY2x1dF95dXZfdG9fcmdiKHVpbnQzMl90ICpjbHV0 LAo+ID4gKyAgICAgICAgY29uc3Qgc2l6ZV90IGNsdXRfc2l6ZSkKPiBXaGF0IGlzIGEgeXV2LXRv LXJnYiBmdW5jdGlvbiBkb2luZyBpbnNpZGUgYSBkdmQtdmlkZW8gZGVtdXhlcj8KPgo+ID4gK3sK PiA+ICsgICAgY29uc3QgdWludDhfdCAqY20gPSBkdmR2aWRlb195dXZfY3JvcF90YWIgKwo+IERW RFZJREVPX1lVVl9ORUdfQ1JPUF9NQVg7Cj4gPiArCj4gPiArICAgIGludCBpLCB5LCBjYiwgY3I7 Cj4gPiArICAgIHVpbnQ4X3QgciwgZywgYjsKPiA+ICsgICAgaW50IHJfYWRkLCBnX2FkZCwgYl9h ZGQ7Cj4gPiArCj4gPiArICAgIGlmIChjbHV0X3NpemUgIT0gRFZEVklERU9fU1VCUF9DTFVUX1NJ WkUpIHtXaHkgZXZlbiBoYXZlIGFuCj4gYXJndW1lbnQgdG8gdGhlIGZ1bmN0aW9uIGlmIGl0IG11 c3QgZXF1YWwgc29tZSBleGFjdAo+IGludGVnZXI/IEF0IHRoYXQgcG9pbnQganVzdCByZW1vdmUg Y2x1dF9zaXplIGZyb20gdGhlIGZ1bmN0aW9uIGFyZ3VtZW50Cj4gYW5kIGp1c3QgdXNlIERWRFZJ REVPX1NVQlBfQ0xVVF9TSVpFIGluIGl0cyBwbGFjZS4KPgo+Cj4gPiArICAgICAgICByZXR1cm4g QVZFUlJPUihFSU5WQUwpOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGZvciAoaSA9IDA7IGkg PCBEVkRWSURFT19TVUJQX0NMVVRfTEVOOyBpKyspIHsKPiA+ICsgICAgICAgIHkgID0gKGNsdXRb aV0gPj4gMTYpICYgMHhGRjsKPiA+ICsgICAgICAgIGNyID0gKGNsdXRbaV0gPj4gOCkgICYgMHhG RjsKPiA+ICsgICAgICAgIGNiID0gY2x1dFtpXSAgICAgICAgICYgMHhGRjsKPiA+ICsKPiA+ICsg ICAgICAgIFlVVl9UT19SR0IxX0NDSVIoY2IsIGNyKTsKPiA+ICsgICAgICAgIFlVVl9UT19SR0Iy X0NDSVIociwgZywgYiwgeSk7Cj4gPiArCj4gPiArICAgICAgICBjbHV0W2ldID0gKHIgPDwgMTYp IHwgKGcgPDwgOCkgfCBiOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJldHVybiAwOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3N1YnRpdGxlX3N0cmVhbV90b19hdnN0 cmVhbShBVkZvcm1hdENvbnRleHQgKnMsCj4gPiArICAgICAgICBpbnQgc3RhcnRjb2RlLAo+ID4g KyAgICAgICAgY2hhciAqY2x1dF9yZ2JfZXh0cmFkYXRhX2J1ZiwgaW50IGNsdXRfcmdiX2V4dHJh ZGF0YV9idWZfc2l6ZSwKPiA+ICsgICAgICAgIGNoYXIgKmxhbmdfaXNvNjM5X18yLCBlbnVtIEFW U3RyZWFtUGFyc2VUeXBlIG5lZWRfcGFyc2luZykKPiA+ICt7Cj4gPiArICAgIEFWU3RyZWFtICpz dDsKPiA+ICsgICAgRkZTdHJlYW0gKnN0aTsKPiA+ICsgICAgaW50IHJldDsKPiA+ICsKPiA+ICsg ICAgc3QgPSBhdmZvcm1hdF9uZXdfc3RyZWFtKHMsIE5VTEwpOwo+ID4gKyAgICBpZiAoIXN0KSB7 Cj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ID4gKyAgICB9Cj4gPiArCj4g PiArICAgIHN0LT5pZCA9IHN0YXJ0Y29kZTsKPiA+ICsgICAgc3QtPmNvZGVjcGFyLT5jb2RlY190 eXBlID0gQVZNRURJQV9UWVBFX1NVQlRJVExFOwo+ID4gKyAgICBzdC0+Y29kZWNwYXItPmNvZGVj X2lkID0gQVZfQ09ERUNfSURfRFZEX1NVQlRJVExFOwo+ID4gKwo+ID4gKyAgICBpZiAoKHJldCA9 IGZmX2FsbG9jX2V4dHJhZGF0YShzdC0+Y29kZWNwYXIsCj4gPiArICAgICAgICAgICAgY2x1dF9y Z2JfZXh0cmFkYXRhX2J1Zl9zaXplKSkgIT0gMCkgewo+ID4gKyAgICAgICAgcmV0dXJuIHJldDsK PiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBtZW1jcHkoc3QtPmNvZGVjcGFyLT5leHRyYWRhdGEs IGNsdXRfcmdiX2V4dHJhZGF0YV9idWYsCj4gPiArICAgICAgICAgICAgc3QtPmNvZGVjcGFyLT5l eHRyYWRhdGFfc2l6ZSk7Cj4gPiArCj4gPiArICAgIGlmIChsYW5nX2lzbzYzOV9fMikgewo+ID4g KyAgICAgICAgYXZfZGljdF9zZXQoJnN0LT5tZXRhZGF0YSwgImxhbmd1YWdlIiwgbGFuZ19pc282 MzlfXzIsIDApOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGF2cHJpdl9zZXRfcHRzX2luZm8o c3QsIERWRFZJREVPX1BUU19XUkFQX0JJVFMsCj4gPiArICAgICAgICBEVkRWSURFT19USU1FX0JB U0VfUS5udW0sIERWRFZJREVPX1RJTUVfQkFTRV9RLmRlbik7Cj4gPiArCj4gPiArICAgIHN0aSA9 IGZmc3RyZWFtKHN0KTsKPiA+ICsgICAgc3RpLT5yZXF1ZXN0X3Byb2JlID0gMDsKPiA+ICsgICAg c3RpLT5uZWVkX3BhcnNpbmcgPSBuZWVkX3BhcnNpbmc7Cj4gPiArCj4gPiArICAgIHJldHVybiAw Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3N1YnRpdGxlX3N0cmVhbV9y ZWdpc3RlcihBVkZvcm1hdENvbnRleHQgKnMsCj4gPiArICAgICAgICBpbnQgcG9zaXRpb24sCj4g PiArICAgICAgICBjaGFyICpjbHV0X3JnYl9leHRyYWRhdGFfYnVmLCBpbnQgY2x1dF9yZ2JfZXh0 cmFkYXRhX2J1Zl9zaXplLAo+ID4gKyAgICAgICAgY2hhciAqbGFuZ19pc282MzlfXzIpCj4gPiAr ewo+ID4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiA+ICsK PiA+ICsgICAgaW50IHJldDsKPiA+ICsKPiA+ICsgICAgaW50IHN0YXJ0Y29kZSA9IERWRFZJREVP X1NUQVJUQ09ERV9PRkZTRVRfU1VCUCArIHBvc2l0aW9uOwo+ID4gKwo+ID4gKyAgICBmb3IgKGlu dCBpID0gMDsgaSA8IHMtPm5iX3N0cmVhbXM7IGkrKykgewo+ID4gKyAgICAgICAgLyogZG9uJ3Qg bmVlZCB0byB3YXJuIHRoZSB1c2VyIGFib3V0IHRoaXMsIHNpbmNlIHBhcmFtcyB3b24ndAo+IGNo YW5nZSAqLwo+ID4gKyAgICAgICAgaWYgKHMtPnN0cmVhbXNbaV0tPmlkID09IHN0YXJ0Y29kZSkg ewo+ID4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfVFJBQ0UsCj4gPiArICAgICAgICAg ICAgICAgICAgICAiU3VidGl0bGUgc3RyZWFtIGhhcyBkdXBsaWNhdGUgZW50cnkgaW4gVlRTIElG T1xuIik7Cj4gPiArICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPiArICAgICAgICB9Cj4gPiArICAg IH0KPiA+ICsKPiA+ICsgICAgaWYgKChyZXQgPSBkdmR2aWRlb19zdWJ0aXRsZV9zdHJlYW1fdG9f YXZzdHJlYW0oYy0+bXBlZ19jdHgsCj4gc3RhcnRjb2RlLAo+ID4gKyAgICAgICAgICAgIGNsdXRf cmdiX2V4dHJhZGF0YV9idWYsIGNsdXRfcmdiX2V4dHJhZGF0YV9idWZfc2l6ZSwKPiA+ICsgICAg ICAgICAgICBsYW5nX2lzbzYzOV9fMiwgQVZTVFJFQU1fUEFSU0VfRlVMTCkpICE9IDApIHsKPiA+ ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gYWxsb2NhdGUgc3Vi dGl0bGUgc3RyZWFtCj4gKHN1YmRlbXV4KVxuIik7Cj4gPiArCj4gPiArICAgICAgICByZXR1cm4g cmV0Owo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmICgocmV0ID0gZHZkdmlkZW9fc3VidGl0 bGVfc3RyZWFtX3RvX2F2c3RyZWFtKHMsIHN0YXJ0Y29kZSwKPiA+ICsgICAgICAgICAgICBjbHV0 X3JnYl9leHRyYWRhdGFfYnVmLCBjbHV0X3JnYl9leHRyYWRhdGFfYnVmX3NpemUsCj4gPiArICAg ICAgICAgICAgbGFuZ19pc282MzlfXzIsIEFWU1RSRUFNX1BBUlNFX05PTkUpKSAhPSAwKSB7Cj4g PiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGFsbG9jYXRlIHN1 YnRpdGxlIHN0cmVhbVxuIik7Cj4gPiArCj4gPiArICAgICAgICByZXR1cm4gcmV0Owo+ID4gKyAg ICB9Cj4gPiArCj4gPiArICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50 IGR2ZHZpZGVvX3N1YnRpdGxlX3N0cmVhbV9yZWdpc3Rlcl9hbGwoQVZGb3JtYXRDb250ZXh0ICpz KQo+ID4gK3sKPiA+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7 Cj4gPiArCj4gPiArICAgIGludCByZXQ7Cj4gPiArICAgIHVpbnQzMl90IGNsdXRfcmdiW0RWRFZJ REVPX1NVQlBfQ0xVVF9TSVpFXSA9IHswfTsKPiA+ICsgICAgY2hhciBjbHV0X3JnYl9leHRyYWRh dGFfYnVmW0RWRFZJREVPX1NVQlBfQ0xVVF9SR0JfRVhUUkFEQVRBX1NJWkVdCj4gPSB7MH07Cj4g PiArCj4gPiArICAgIGlmIChjLT5wbGF5X3Z0c19pZm8tPnZ0c2lfbWF0LT5ucl9vZl92dHNfc3Vi cF9zdHJlYW1zIDwgMSkgewo+ID4gKyAgICAgICAgcmV0dXJuIDA7Cj4gPiArICAgIH0KPiA+ICsK PiA+ICsgICAgLyogaW5pdGlhbGl6ZSB0aGUgcGFsZXR0ZSAoc2FtZSBmb3IgYWxsIHN0cmVhbXMg aW4gdGhpcyBQR0MpICovCj4gPiArICAgIG1lbWNweShjbHV0X3JnYiwgYy0+cGxheV9wZ2MtPnBh bGV0dGUsIERWRFZJREVPX1NVQlBfQ0xVVF9TSVpFKTsKPiA+ICsKPiA+ICsgICAgaWYgKChyZXQg PSBkdmR2aWRlb19zdWJ0aXRsZV9jbHV0X3l1dl90b19yZ2IoCj4gPiArICAgICAgICAgICAgY2x1 dF9yZ2IsIERWRFZJREVPX1NVQlBfQ0xVVF9TSVpFKSkgIT0gMCkgewo+ID4gKyAgICAgICAgYXZf bG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBjb252ZXJ0IHN1YnRpdGxlCj4gcGFsZXR0 ZVxuIik7V2h5IGFyZSB5b3UgY29udmVydGluZyB0aGUgc3VidGl0bGUgcGFsZXR0ZT8KPgo+ID4g Kwo+ID4gKyAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZiAo KHJldCA9IGR2ZHZpZGVvX3N1YnRpdGxlX2NsdXRfcmdiX2V4dHJhZGF0YV9jYXQoCj4gPiArICAg ICAgICAgICAgY2x1dF9yZ2IsIERWRFZJREVPX1NVQlBfQ0xVVF9TSVpFLAo+ID4gKyAgICAgICAg ICAgIGNsdXRfcmdiX2V4dHJhZGF0YV9idWYsCj4gRFZEVklERU9fU1VCUF9DTFVUX1JHQl9FWFRS QURBVEFfU0laRSkpICE9IDApIHsKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1Is ICJVbmFibGUgdG8gc2V0IHVwIHN1YnRpdGxlCj4gZXh0cmFkYXRhXG4iKTsKPiA+ICsKPiA+ICsg ICAgICAgIHJldHVybiByZXQ7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBjLT5wbGF5X3Z0c19pZm8tPgo+ID4gKyAgICAgICAgICAgIHZ0c2lfbWF0LT5ucl9v Zl92dHNfc3VicF9zdHJlYW1zOyBpKyspIHsKPiA+ICsgICAgICAgIHVpbnQzMl90IHN1YnBfY29u dHJvbDsKPiA+ICsgICAgICAgIHN1YnBfYXR0cl90IHN1YnBfYXR0cjsKPiA+ICsgICAgICAgIHZp ZGVvX2F0dHJfdCB2aWRlb19hdHRyOwo+ID4gKyAgICAgICAgY2hhciAqbGFuZ19pc282MzlfXzI7 Cj4gPiArCj4gPiArICAgICAgICBzdWJwX2NvbnRyb2wgPSBjLT5wbGF5X3BnYy0+c3VicF9jb250 cm9sW2ldOwo+ID4gKwo+ID4gKyAgICAgICAgaWYgKCEoc3VicF9jb250cm9sICYgRFZEVklERU9f U1VCUF9DT05UUk9MX0VOQUJMRURfTUFTSykpIHsKPiA+ICsgICAgICAgICAgICBjb250aW51ZTsK PiA+ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIHN1YnBfYXR0ciA9IGMtPnBsYXlfdnRz X2lmby0+dnRzaV9tYXQtPnZ0c19zdWJwX2F0dHJbaV07Cj4gPiArICAgICAgICB2aWRlb19hdHRy ID0gYy0+cGxheV92dHNfaWZvLT52dHNpX21hdC0+dnRzX3ZpZGVvX2F0dHI7Cj4gPiArICAgICAg ICBsYW5nX2lzbzYzOV9fMiA9Cj4gZHZkdmlkZW9fbGFuZ19jb2RlX3RvX2lzbzYzOV9fMihzdWJw X2F0dHIubGFuZ19jb2RlKTsKPiA+ICsKPiA+ICsgICAgICAgIC8qIHRoZXJlIGNhbiBiZSBzZXZl cmFsIHByZXNlbnRhdGlvbnMgZm9yIG9uZSBTUFUgKi8KPiA+ICsgICAgICAgIC8qIGZvciBub3cs IGJlIGZsZXhpYmxlIHdpdGggdGhlIERBUiBjaGVjayBkdWUgdG8gd2VpcmQKPiBhdXRob3Jpbmcg Ki8KPiA+ICsgICAgICAgIGlmICh2aWRlb19hdHRyLmRpc3BsYXlfYXNwZWN0X3JhdGlvID4gMCkg ewo+ID4gKyAgICAgICAgICAgIC8qIDE2OjkgKi8KPiA+ICsgICAgICAgICAgICByZXQgPSBkdmR2 aWRlb19zdWJ0aXRsZV9zdHJlYW1fcmVnaXN0ZXIocywKPiA+ICsgICAgICAgICAgICAgICAgKChz dWJwX2NvbnRyb2wgPj4gMTYpICYgMHgxRiksCj4gPiArICAgICAgICAgICAgICAgIGNsdXRfcmdi X2V4dHJhZGF0YV9idWYsCj4gPiArICAgICAgICAgICAgICAgIERWRFZJREVPX1NVQlBfQ0xVVF9S R0JfRVhUUkFEQVRBX1NJWkUsCj4gPiArICAgICAgICAgICAgICAgIGxhbmdfaXNvNjM5X18yKTsK PiA+ICsgICAgICAgICAgICBpZiAocmV0ICE9IDApIHsKPiA+ICsgICAgICAgICAgICAgICAgcmV0 dXJuIHJldDsKPiA+ICsgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgaWYgKHZp ZGVvX2F0dHIucGVybWl0dGVkX2RmID09Cj4gRFZEVklERU9fVlRTX1NQVV9QRkRfTEVUVEVSQk9Y X09OTFkKPiA+ICsgICAgICAgICAgICAgICAgICAgIHx8IHZpZGVvX2F0dHIucGVybWl0dGVkX2Rm ID09Cj4gRFZEVklERU9fVlRTX1NQVV9QRkRfQU5ZKSB7Cj4gPiArICAgICAgICAgICAgICAgIHJl dCA9IGR2ZHZpZGVvX3N1YnRpdGxlX3N0cmVhbV9yZWdpc3RlcihzLAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgKChzdWJwX2NvbnRyb2wgPj4gOCkgJiAweDFGKSwKPiA+ICsgICAgICAgICAgICAg ICAgICAgIGNsdXRfcmdiX2V4dHJhZGF0YV9idWYsCj4gPiArICAgICAgICAgICAgICAgICAgICBE VkRWSURFT19TVUJQX0NMVVRfUkdCX0VYVFJBREFUQV9TSVpFLAo+ID4gKyAgICAgICAgICAgICAg ICAgICAgbGFuZ19pc282MzlfXzIpOwo+ID4gKyAgICAgICAgICAgICAgICBpZiAocmV0ICE9IDAp IHsKPiA+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiArICAgICAgICAgICAg ICAgIH0KPiA+ICsgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgaWYgKHZpZGVv X2F0dHIucGVybWl0dGVkX2RmID09Cj4gRFZEVklERU9fVlRTX1NQVV9QRkRfUEFOU0NBTl9PTkxZ Cj4gPiArICAgICAgICAgICAgICAgICAgICB8fCB2aWRlb19hdHRyLnBlcm1pdHRlZF9kZiA9PQo+ IERWRFZJREVPX1ZUU19TUFVfUEZEX0FOWSkgewo+ID4gKyAgICAgICAgICAgICAgICByZXQgPSBk dmR2aWRlb19zdWJ0aXRsZV9zdHJlYW1fcmVnaXN0ZXIocywKPiA+ICsgICAgICAgICAgICAgICAg ICAgIChzdWJwX2NvbnRyb2wgJiAweDFGKSwKPiA+ICsgICAgICAgICAgICAgICAgICAgIGNsdXRf cmdiX2V4dHJhZGF0YV9idWYsCj4gPiArICAgICAgICAgICAgICAgICAgICBEVkRWSURFT19TVUJQ X0NMVVRfUkdCX0VYVFJBREFUQV9TSVpFLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgbGFuZ19p c282MzlfXzIpOwo+ID4gKyAgICAgICAgICAgICAgICBpZiAocmV0ICE9IDApIHsKPiA+ICsgICAg ICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiArICAgICAgICAgICAgICAgIH0KPiA+ICsg ICAgICAgICAgICB9Cj4gPiArICAgICAgICB9IGVsc2Ugewo+ID4gKyAgICAgICAgICAgIC8qIDQ6 MyAqLwo+ID4gKyAgICAgICAgICAgIHJldCA9IGR2ZHZpZGVvX3N1YnRpdGxlX3N0cmVhbV9yZWdp c3RlcihzLAo+ID4gKyAgICAgICAgICAgICAgICAoKHN1YnBfY29udHJvbCA+PiAyNCkgJiAweDFG KSwKPiA+ICsgICAgICAgICAgICAgICAgY2x1dF9yZ2JfZXh0cmFkYXRhX2J1ZiwKPiA+ICsgICAg ICAgICAgICAgICAgRFZEVklERU9fU1VCUF9DTFVUX1JHQl9FWFRSQURBVEFfU0laRSwKPiA+ICsg ICAgICAgICAgICAgICAgbGFuZ19pc282MzlfXzIpOwo+ID4gKyAgICAgICAgICAgIGlmIChyZXQg IT0gMCkgewo+ID4gKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gKyAgICAgICAgICAg IH0KPiA+ICsgICAgICAgIH0KPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb19zdWJkZW11eF9uZXN0ZWRfaW9fb3Bl bihBVkZvcm1hdENvbnRleHQgKnMsCj4gPiArICAgICAgICBBVklPQ29udGV4dCAqKnBiLCBjb25z dCBjaGFyICp1cmwsIGludCBmbGFncywgQVZEaWN0aW9uYXJ5Cj4gKipvcHRzKQo+ID4gK3sKPiBU aGlzIGZ1bmN0aW9uIGlzIHBvaW50bGVzcy4KPgo+ID4gKyAgICBhdl9sb2cocywgQVZfTE9HX0VS Uk9SLCAiTmVzdGVkIGlvX29wZW4gbm90IHN1cHBvcnRlZCBmb3IgdGhpcwo+IGZvcm1hdFxuIik7 Cj4gPiArCj4gPiArICAgIHJldHVybiBBVkVSUk9SKEVQRVJNKTsKPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIGludCBkdmR2aWRlb19zdWJkZW11eF9yZWFkX2RhdGEodm9pZCAqb3BhcXVlLCB1aW50 OF90ICpidWYsCj4gPiArICAgICAgICBpbnQgYnVmX3NpemUpCj4gPiArewo+ID4gKyAgICBBVkZv cm1hdENvbnRleHQgKnMgPSBvcGFxdWU7Cj4gPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpj ID0gcy0+cHJpdl9kYXRhOwo+ID4gKwo+ID4gKyAgICBpZiAoYnVmX3NpemUgIT0gRFZEVklERU9f QkxPQ0tfU0laRSkgewo+ID4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkludmFs aWQgYnVmZmVyIHNpemVcbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5P TUVNKTsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBmb3IgKGludCBpID0gMDsgaSA8IERWRFZJ REVPX1BTX01BWF9TRUFSQ0hfQkxPQ0tTOyBpKyspIHsKPiA+ICsgICAgICAgIGludCBuYXZfZXZl bnQ7Cj4gPiArICAgICAgICBpbnQgbmF2X2xlbjsKPiA+ICsKPiA+ICsgICAgICAgIGludCBjaGVj a190aXRsZTsKPiA+ICsgICAgICAgIGludCBjaGVja19wZ2NuOwo+ID4gKyAgICAgICAgaW50IGNo ZWNrX3BnbjsKPiA+ICsgICAgICAgIGludCBjaGVja19hbmdsZTsKPiA+ICsgICAgICAgIGludCBj aGVja19uYl9hbmdsZXM7Cj4gPiArCj4gPiArICAgICAgICB1aW50OF90IG5hdl9idWZbRFZEVklE RU9fQkxPQ0tfU0laRV0gPSB7MH07Cj4gPiArCj4gPiArICAgICAgICBpZiAoZmZfY2hlY2tfaW50 ZXJydXB0KCZzLT5pbnRlcnJ1cHRfY2FsbGJhY2spKSB7Cj4gPiArICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfRVhJVDsKPiA+ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIGlmIChkdmRu YXZfZ2V0X25leHRfYmxvY2soYy0+cGxheV9kdmRuYXYsCj4gPiArICAgICAgICAgICAgICAgIG5h dl9idWYsICZuYXZfZXZlbnQsICZuYXZfbGVuKSAhPSBEVkROQVZfU1RBVFVTX09LKSB7Cj4gPiAr ICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkVycm9yIHJlYWRpbmcgYmxvY2tc biIpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgIGdvdG8gZW5kX2R2ZG5hdl9lcnJvcjsKPiA+ICsg ICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIGlmIChuYXZfbGVuID4gRFZEVklERU9fQkxPQ0tf U0laRSkgewo+ID4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJJbnZhbGlk IGJsb2NrICh0b28gYmlnKVxuIik7Cj4gPiArCj4gVGhpcyBpcyBub3Qgd2hhdCBFTk9NRU0gbWVh bnMuCj4KPiA+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ID4gKyAgICAg ICAgfQo+ID4gKwo+ID4gKyAgICAgICAgaWYgKG5hdl9ldmVudCAhPSBEVkROQVZfQkxPQ0tfT0sg JiYgbmF2X2V2ZW50ICE9Cj4gRFZETkFWX05BVl9QQUNLRVQpIHsKPiA+ICsgICAgICAgICAgICBh dl9sb2cocywgQVZfTE9HX1RSQUNFLCAibmF2IGV2ZW50PSVkIGxlbj0lZFxuIiwgbmF2X2V2ZW50 LAo+IG5hdl9sZW4pOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgaWYgKGR2ZG5h dl9jdXJyZW50X3RpdGxlX3Byb2dyYW0oYy0+cGxheV9kdmRuYXYsICZjaGVja190aXRsZSwKPiA+ ICsgICAgICAgICAgICAgICAgJmNoZWNrX3BnY24sICZjaGVja19wZ24pICE9IERWRE5BVl9TVEFU VVNfT0spIHsKPiA+ICsgICAgICAgICAgICBnb3RvIGVuZF9kdmRuYXZfZXJyb3I7Cj4gPiArICAg ICAgICB9Cj4gPiArCj4gPiArICAgICAgICBpZiAoY2hlY2tfdGl0bGUgIT0gYy0+b3B0X3RpdGxl IHx8IGNoZWNrX3BnY24gIT0gYy0+cGxheV9wZ2NuCj4gPiArICAgICAgICAgICAgICAgIHx8ICFk dmRuYXZfaXNfZG9tYWluX3Z0cyhjLT5wbGF5X2R2ZG5hdikpIHsKPiA+ICsgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUl9FT0Y7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICBpZiAo ZHZkbmF2X2dldF9hbmdsZV9pbmZvKGMtPnBsYXlfZHZkbmF2LCAmY2hlY2tfYW5nbGUsCj4gPiAr ICAgICAgICAgICAgICAgICZjaGVja19uYl9hbmdsZXMpICE9IERWRE5BVl9TVEFUVVNfT0spIHsK PiA+ICsgICAgICAgICAgICBnb3RvIGVuZF9kdmRuYXZfZXJyb3I7Cj4gPiArICAgICAgICB9Cj4g PiArCj4gPiArICAgICAgICBpZiAoY2hlY2tfYW5nbGUgIT0gYy0+b3B0X2FuZ2xlKSB7Cj4gPiAr ICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuZXhwZWN0ZWQgYW5nbGUgY2hh bmdlXG4iKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlBVVF9DSEFO R0VEOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgc3dpdGNoIChuYXZfZXZlbnQp IHsKPiA+ICsgICAgICAgICAgICBjYXNlIERWRE5BVl9CTE9DS19PSzoKPiA+ICsgICAgICAgICAg ICAgICAgaWYgKG5hdl9sZW4gIT0gRFZEVklERU9fQkxPQ0tfU0laRSkgewo+ID4gKyAgICAgICAg ICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgYmxvY2tcbiIpOwo+ ID4gKwo+ID4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7 Cj4gPiArICAgICAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgbWVtY3B5 KGJ1ZiwgJm5hdl9idWYsIG5hdl9sZW4pOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICByZXR1 cm4gbmF2X2xlbjsKPiA+ICsgICAgICAgICAgICBjYXNlIERWRE5BVl9ISUdITElHSFQ6Cj4gPiAr ICAgICAgICAgICAgY2FzZSBEVkROQVZfVlRTX0NIQU5HRToKPiA+ICsgICAgICAgICAgICBjYXNl IERWRE5BVl9TVElMTF9GUkFNRToKPiA+ICsgICAgICAgICAgICBjYXNlIERWRE5BVl9TVE9QOgo+ ID4gKyAgICAgICAgICAgIGNhc2UgRFZETkFWX1dBSVQ6Cj4gPiArICAgICAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SX0VPRjsKPiA+ICsgICAgICAgICAgICBkZWZhdWx0Ogo+ID4gKyAgICAgICAg ICAgICAgICBjb250aW51ZTsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAg ICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGZpbmQgbmV4dCBNUEVHIGJsb2Nr XG4iKTsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIEFWRVJST1JfVU5LTk9XTjsKPiA+ICsKPiA+ICtl bmRfZHZkbmF2X2Vycm9yOgo+ID4gKyAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAibGliZHZk bmF2OiAlc1xuIiwKPiBkdmRuYXZfZXJyX3RvX3N0cmluZyhjLT5wbGF5X2R2ZG5hdikpOwo+ID4g Kwo+ID4gKyAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIGludDY0X3QgZHZkdmlkZW9fc3ViZGVtdXhfc2Vla19kYXRhKHZvaWQgKm9wYXF1ZSwgaW50 NjRfdCBvZmZzZXQsCj4gPiArICAgICAgICBpbnQgd2hlbmNlKQo+ID4gK3sKPiA+ICsgICAgQVZG b3JtYXRDb250ZXh0ICpzID0gb3BhcXVlOwo+ID4gKwo+ID4gKyAgICBhdl9sb2cocywgQVZfTE9H X0VSUk9SLAo+ID4gKyAgICAgICAgICAgICJkdmR2aWRlb19zdWJkZW11eF9zZWVrX2RhdGEoKTog bm90IGltcGxlbWVudGVkXG4iKTsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hX RUxDT01FOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3N1YmRlbXV4X29w ZW4oQVZGb3JtYXRDb250ZXh0ICpzKQo+ID4gK3sKPiA+ICsgICAgRFZEVmlkZW9EZW11eENvbnRl eHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gPiArCj4gPiArICAgIGludCByZXQ7Cj4gPiArCj4gPiAr ICAgIGNvbnN0IEFWSW5wdXRGb3JtYXQgKm1wZWdfZm10Owo+ID4gKyAgICBBVkZvcm1hdENvbnRl eHQgKm1wZWdfY3R4Owo+ID4gKyAgICB1aW50OF90ICptcGVnX2J1ZjsKPiA+ICsKPiA+ICsgICAg aWYgKCEobXBlZ19mbXQgPSBhdl9maW5kX2lucHV0X2Zvcm1hdCgibXBlZyIpKSkgewo+ID4gKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfREVNVVhFUl9OT1RfRk9VTkQ7Cj4gPiArICAgIH0KPiA+ICsK PiA+ICsgICAgaWYgKCEobXBlZ19jdHggPSBhdmZvcm1hdF9hbGxvY19jb250ZXh0KCkpKSB7Cj4g PiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ID4gKyAgICB9Cj4gPiArCj4gPiAr ICAgIGlmICghKG1wZWdfYnVmID0gYXZfbWFsbG9jKERWRFZJREVPX0JMT0NLX1NJWkUpKSkgewo+ ID4gKyAgICAgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KG1wZWdfY3R4KTsKPiA+ICsKPiA+ICsg ICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gPiArICAgIH0KPiBXaHkgYXJlIHlvdSBk b2luZyB0aGlzIGluc3RlYWQgb2YganVzdCBkZWNsYXJpbmcgaXQgdG8gYmUgYSBwcm90b2NvbAo+ IHRoYXQgcHJvZHVjZXMgYSBtcGVnLXBzIHN0cmVhbT8gVGhhdCB3YXkgaXQgc3RvcHMgYmVpbmcg eW91cgo+IHJlc3BvbnNpYmlsaXR5Lgo+Cj4KPiA+ICsKPiA+ICsgICAgZmZpb19pbml0X2NvbnRl eHQoJmMtPm1wZWdfcGIsIG1wZWdfYnVmLCBEVkRWSURFT19CTE9DS19TSVpFLCAwLAo+ID4gKyAg ICAgICAgICAgIHMsIGR2ZHZpZGVvX3N1YmRlbXV4X3JlYWRfZGF0YSwgTlVMTCwKPiBkdmR2aWRl b19zdWJkZW11eF9zZWVrX2RhdGEpOwo+ID4gKyAgICBjLT5tcGVnX3BiLnB1Yi5zZWVrYWJsZSA9 IDA7Cj4gPiArCj4gPiArICAgIGlmICgocmV0ID0gZmZfY29weV93aGl0ZWJsYWNrbGlzdHMobXBl Z19jdHgsIHMpKSAhPSAwKSB7Cj4gPiArICAgICAgICBhdmZvcm1hdF9mcmVlX2NvbnRleHQobXBl Z19jdHgpOwo+ID4gKwo+ID4gKyAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsgICAgfQo+ID4gKwo+ ID4gKyAgICAvKiBUT0RPOiBmaXggdGhlIFBUUyBpc3N1ZXMgKGFzayBhYm91dCB0aGlzIGluIE1M KSAqLwo+ID4gKyAgICAvKiBBVkZNVF9GTEFHX0dFTlBUUyB3b3JrcyBpbiBzb21lIHNjZW5hcmlv cywgYnV0IGluIG90aGVycywgdGhlCj4gcmVhZGluZyBwcm9jZXNzIGhhbmdzICovCj4gPiArICAg IG1wZWdfY3R4LT5mbGFncyA9IEFWRk1UX0ZMQUdfQ1VTVE9NX0lPIHwgQVZGTVRfRkxBR19HRU5Q VFM7Cj4gTVBFRy1QUyBjb250YWlucyBwdHMgaW5mbywgd2h5IG5vdCBqdXN0IHVzZSB0aGF0PyBO b3QgYW1hemluZyBQVFMgaW5mbywKPiBidXQgdXNhYmxlIFBUUyBpbmZvLgo+Cj4gPiArCj4gPiAr ICAgIG1wZWdfY3R4LT5wcm9iZXNpemUgPSAwOwo+ID4gKyAgICBtcGVnX2N0eC0+bWF4X2FuYWx5 emVfZHVyYXRpb24gPSAwOwo+ID4gKwo+ID4gKyAgICBtcGVnX2N0eC0+aW50ZXJydXB0X2NhbGxi YWNrID0gcy0+aW50ZXJydXB0X2NhbGxiYWNrOwo+ID4gKyAgICBtcGVnX2N0eC0+cGIgPSAmYy0+ bXBlZ19wYi5wdWI7Cj4gPiArICAgIG1wZWdfY3R4LT5pb19vcGVuID0gZHZkdmlkZW9fc3ViZGVt dXhfbmVzdGVkX2lvX29wZW47Cj4gPiArCj4gPiArICAgIGlmICgocmV0ID0gYXZmb3JtYXRfb3Bl bl9pbnB1dCgmbXBlZ19jdHgsICIiLCBtcGVnX2ZtdCwgTlVMTCkpICE9Cj4gMCkgewo+ID4gKyAg ICAgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KG1wZWdfY3R4KTsKPiA+ICsKPiA+ICsgICAgICAg IHJldHVybiByZXQ7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgYy0+bXBlZ19mbXQgPSBtcGVn X2ZtdDsKPiA+ICsgICAgYy0+bXBlZ19jdHggPSBtcGVnX2N0eDsKPiA+ICsgICAgYy0+bXBlZ19i dWYgPSBtcGVnX2J1ZjsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyB2b2lkIGR2ZHZpZGVvX3N1YmRlbXV4X2Nsb3NlKEFWRm9ybWF0Q29udGV4dCAqcykK PiA+ICt7Cj4gPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ ID4gKwo+ID4gKyAgICBhdl9mcmVlcCgmYy0+bXBlZ19wYi5wdWIuYnVmZmVyKTsKPiA+ICsgICAg bWVtc2V0KCZjLT5tcGVnX3BiLCAweDAwLCBzaXplb2YoYy0+bXBlZ19wYikpOwo+ID4gKyAgICBh dl9mcmVlcCgmYy0+bXBlZ19wYik7V2h5IGFyZSB5b3UgemVyb2luZyBpdCBiZWZvcmUgeW91IGZy ZWUgaXQ/IElmCj4gdGhpcyBpcyBhIHNlY3VyaXR5IGlzc3VlCj4geW91IGNhbid0IHVzZSBtZW1z ZXQgYW55d2F5IGFzIHRoZSBjb21waWxlciBtYXkgdGhyb3cgaXQgYXdheS4gVGhhdCdzCj4gd2h5 IGV4cGxpY2l0X2J6ZXJvIHdhcyBjcmVhdGVkLgo+Cj4gPiArCj4gPiArICAgIGF2Zm9ybWF0X2Ns b3NlX2lucHV0KCZjLT5tcGVnX2N0eCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZk dmlkZW9fY2hhcHRlcnNfcmVnaXN0ZXIoQVZGb3JtYXRDb250ZXh0ICpzKQo+ID4gK3sKPiA+ICsg ICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gPiArICAgIGludCBz dGFydF90aW1lID0gMDsKPiA+ICsgICAgaW50IGNlbGwgPSAwOwo+ID4gKwo+ID4gKyAgICBmb3Ig KGludCBpID0gMDsgaSA8IGMtPnBsYXlfcGdjLT5ucl9vZl9wcm9ncmFtczsgaSsrKSB7Cj4gPiAr ICAgICAgICBpbnQ2NF90IG1zID0gMDsKPiA+ICsgICAgICAgIGludCBuZXh0ID0gYy0+cGxheV9w Z2MtPnByb2dyYW1fbWFwW2kgKyAxXTsKPiBJbiB0aGUgbGFzdCBpdGVyYXRpb24gb2YgdGhlIGxv b3AsIHdpbGwgdGhpcyBwb3NzaWJseSBnaXZlIHlvdSBhbgo+IG91dC1vZi1ib3VuZHMgcmVhZD8K Pgo+ID4gKwo+ID4gKyAgICAgICAgaWYgKGkgPT0gYy0+cGxheV9wZ2MtPm5yX29mX3Byb2dyYW1z IC0gMSkgewo+ID4gKyAgICAgICAgICAgIG5leHQgPSBjLT5wbGF5X3BnYy0+bnJfb2ZfY2VsbHMg KyAxOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgd2hpbGUgKGNlbGwgPCBuZXh0 IC0gMSkgewo+ID4gKyAgICAgICAgICAgIC8qIG9ubHkgY29uc2lkZXIgZmlyc3QgY2VsbCBvZiBt dWx0aS1hbmdsZSBjZWxscyAqLwo+ID4gKyAgICAgICAgICAgIGlmIChjLT5wbGF5X3BnYy0+Y2Vs bF9wbGF5YmFja1tjZWxsXS5ibG9ja19tb2RlIDw9IDEpIHsKPiA+ICsgICAgICAgICAgICAgICAg bXMgPSBtcyArIGR2ZHZpZGVvX3RpbWVfdG9fbWlsbGlzKAo+ID4gKwo+ICZjLT5wbGF5X3BnYy0+ Y2VsbF9wbGF5YmFja1tjZWxsXS5wbGF5YmFja190aW1lKTsKPiA+ICsgICAgICAgICAgICB9Cj4g PiArICAgICAgICAgICAgY2VsbCsrOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAg aWYgKCFhdnByaXZfbmV3X2NoYXB0ZXIocywgaSwgRFZEVklERU9fVElNRV9CQVNFX01JTExJU19R LAo+ID4gKyAgICAgICAgICAgICAgICBzdGFydF90aW1lLCBzdGFydF90aW1lICsgbXMsIE5VTEwp KSB7Cj4gPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBh bGxvY2F0ZSBjaGFwdGVyIik7Cj4gPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKPiA+ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIHN0YXJ0X3RpbWUgKz0gbXM7Cj4g PiArICAgIH0KPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBpbnQgZHZkdmlkZW9fcmVhZF9oZWFkZXIoQVZGb3JtYXRDb250ZXh0ICpzKQo+ID4gK3sKPiA+ ICsgICAgaW50IHJldDsKPiA+ICsKPiA+ICsgICAgaWYgKChyZXQgPSBkdmR2aWRlb192b2x1bWVf b3BlbihzKSkgIT0gMCkgewo+ID4gKyAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsgICAgfQo+ID4g Kwo+ID4gKyAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX3BsYXliYWNrX29wZW4ocykpICE9IDApIHsK PiA+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKChy ZXQgPSBkdmR2aWRlb19zdWJkZW11eF9vcGVuKHMpKSAhPSAwKSB7Cj4gPiArICAgICAgICByZXR1 cm4gcmV0Owo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmICgocmV0ID0gZHZkdmlkZW9fdmlk ZW9fc3RyZWFtX3JlZ2lzdGVyKHMpKSAhPSAwKSB7Cj4gPiArICAgICAgICByZXR1cm4gcmV0Owo+ ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmICgocmV0ID0gZHZkdmlkZW9fYXVkaW9fc3RyZWFt X3JlZ2lzdGVyX2FsbChzKSkgIT0gMCkgewo+ID4gKyAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsg ICAgfQo+ID4gKwo+ID4gKyAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX3N1YnRpdGxlX3N0cmVhbV9y ZWdpc3Rlcl9hbGwocykpICE9IDApIHsKPiA+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gPiArICAg IH0KPiA+ICsKPiA+ICsgICAgaWYgKChyZXQgPSBkdmR2aWRlb19jaGFwdGVyc19yZWdpc3Rlcihz KSkgIT0gMCkgewo+ID4gKyAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsgICAgfQo+ID4gKwo+ID4g KyAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb19yZWFk X3BhY2tldChBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpCj4gPiArewo+ID4gKyAg ICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiA+ICsKPiA+ICsgICAg d2hpbGUgKCFmZl9jaGVja19pbnRlcnJ1cHQoJnMtPmludGVycnVwdF9jYWxsYmFjaykpIHsKPiA+ ICsgICAgICAgIGludCBzdWJkZW11eF9yZXQ7Cj4gPiArICAgICAgICBBVlBhY2tldCAqc3ViZGVt dXhfcGt0Owo+ID4gKwo+ID4gKyAgICAgICAgc3ViZGVtdXhfcGt0ID0gYXZfcGFja2V0X2FsbG9j KCk7Cj4gPiArICAgICAgICBpZiAoIXN1YmRlbXV4X3BrdCkgewo+ID4gKyAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICBz dWJkZW11eF9yZXQgPSBhdl9yZWFkX2ZyYW1lKGMtPm1wZWdfY3R4LCBzdWJkZW11eF9wa3QpOwo+ ID4gKyAgICAgICAgaWYgKHN1YmRlbXV4X3JldCA+PSAwKSB7Cj4gPiArICAgICAgICAgICAgaWYg KGMtPm1wZWdfY3R4LT5uYl9zdHJlYW1zICE9IHMtPm5iX3N0cmVhbXMpIHsKPiA+ICsgICAgICAg ICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuZXhwZWN0ZWQgc3RyZWFtIGR1cmlu Zwo+IHBsYXliYWNrXG4iKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgYXZfcGFja2V0X3Vu cmVmKHN1YmRlbXV4X3BrdCk7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SX0lOUFVUX0NIQU5HRUQ7Cj4gPiArICAgICAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAg ICAgIGF2X3BhY2tldF9tb3ZlX3JlZihwa3QsIHN1YmRlbXV4X3BrdCk7Cj4gVGhpcyBzZWVtcyBs aWtlIGFuIHVubmVjZXNzYXJ5IG1lbWNweS4KPgo+ID4gKwo+ID4gKyAgICAgICAgICAgIHJldHVy biAwOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgcmV0dXJuIHN1YmRlbXV4X3Jl dDsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICByZXR1cm4gQVZFUlJPUl9FT0Y7Cj4gPiArfQo+ ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fcmVhZF9zZWVrKEFWRm9ybWF0Q29udGV4dCAq cywgaW50IHN0cmVhbV9pbmRleCwKPiA+ICsgICAgICAgIGludDY0X3QgdGltZXN0YW1wLCBpbnQg ZmxhZ3MpCj4gPiArewo+ID4gKyAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiZHZkdmlkZW9f cmVhZF9zZWVrKCk6IG5vdCBpbXBsZW1lbnRlZFxuIik7Cj4gPiArCj4gPiArICAgIHJldHVybiBB VkVSUk9SX1BBVENIV0VMQ09NRTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRl b19jbG9zZShBVkZvcm1hdENvbnRleHQgKnMpCj4gPiArewo+ID4gKyAgICBkdmR2aWRlb19zdWJk ZW11eF9jbG9zZShzKTsKPiA+ICsgICAgZHZkdmlkZW9fcGxheWJhY2tfY2xvc2Uocyk7Cj4gPiAr ICAgIGR2ZHZpZGVvX3ZvbHVtZV9jbG9zZShzKTsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fcHJvYmUoY29uc3QgQVZQcm9iZURh dGEgKnApCj4gPiArewo+ID4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiZHZkdmlk ZW9fcHJvYmUoKTogbm90IGltcGxlbWVudGVkXG4iKTsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIEFW RVJST1JfUEFUQ0hXRUxDT01FOwo+ID4gK30KPiA+ICsKPiA+ICsjZGVmaW5lIE9GRlNFVCh4KSBv ZmZzZXRvZihEVkRWaWRlb0RlbXV4Q29udGV4dCwgeCkKPiA+ICtzdGF0aWMgY29uc3QgQVZPcHRp b24gZHZkdmlkZW9fb3B0aW9uc1tdID0gewo+ID4gKyAgICB7InRpdGxlIiwgICAiVGl0bGUgTnVt YmVyIiwgICAgICAgICAgICAgICAgICAgICBPRkZTRVQob3B0X3RpdGxlKSwKPiAgICAgQVZfT1BU X1RZUEVfSU5ULCAgICB7IC5pNjQ9MSB9LCAgICAgMSwKPiBEVkRWSURFT19USVRMRV9OVU1CRVJf TUFYLCAgICAgICAgICBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTSB9LAo+ID4gKyAgICB7InB0 dCIsICAgICAiRW50cnkgUFRUIE51bWJlciIsICAgICAgICAgICAgICAgICBPRkZTRVQob3B0X3B0 dCksCj4gICAgIEFWX09QVF9UWVBFX0lOVCwgICAgeyAuaTY0PTEgfSwgICAgIDEsCj4gRFZEVklE RU9fUFRUX05VTUJFUl9NQVgsICAgICAgICAgICAgQVZfT1BUX0ZMQUdfREVDT0RJTkdfUEFSQU0g fSwKPiA+ICsgICAgeyJwZ2MiLCAgICAgIkVudHJ5IFBHQyBOdW1iZXIgKDA9YXV0bykiLCAgICAg ICAgT0ZGU0VUKG9wdF9wZ2MpLAo+ICAgICBBVl9PUFRfVFlQRV9JTlQsICAgIHsgLmk2ND0wIH0s ICAgICAwLAo+IERWRFZJREVPX1BHQ19OVU1CRVJfTUFYLCAgICAgICAgICAgIEFWX09QVF9GTEFH X0RFQ09ESU5HX1BBUkFNIH0sCj4gPiArICAgIHsicGciLCAgICAgICJFbnRyeSBQRyBOdW1iZXIg KDA9YXV0bykiLCAgICAgICAgIE9GRlNFVChvcHRfcGcpLAo+ICAgICAgQVZfT1BUX1RZUEVfSU5U LCAgICB7IC5pNjQ9MCB9LCAgICAgMCwKPiBEVkRWSURFT19QR19OVU1CRVJfTUFYLCAgICAgICAg ICAgICBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTSB9LAo+ID4gKyAgICB7ImFuZ2xlIiwgICAi VmlkZW8gQW5nbGUgTnVtYmVyIiwgICAgICAgICAgICAgICBPRkZTRVQob3B0X2FuZ2xlKSwKPiAg ICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7IC5pNjQ9MSB9LCAgICAgMSwKPiBEVkRWSURFT19BTkdM RV9OVU1CRVJfTUFYLCAgICAgICAgICBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTSB9LAo+ID4g KyAgICB7InJlZ2lvbiIsICAiUGxheWJhY2sgUmVnaW9uIE51bWJlciAoMD1mcmVlKSIsCj4gT0ZG U0VUKG9wdF9yZWdpb24pLCAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7IC5pNjQ9MCB9LCAgICAg MCwKPiBEVkRWSURFT19SRUdJT05fTlVNQkVSX01BWCwgICAgICAgICBBVl9PUFRfRkxBR19ERUNP RElOR19QQVJBTSB9LAo+ID4gKyAgICB7TlVMTH0KPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBj b25zdCBBVkNsYXNzIGR2ZHZpZGVvX2NsYXNzID0gewo+ID4gKyAgICAuY2xhc3NfbmFtZSA9ICJE VkQtVmlkZW8gZGVtdXhlciIsCj4gPiArICAgIC5pdGVtX25hbWUgID0gYXZfZGVmYXVsdF9pdGVt X25hbWUsCj4gPiArICAgIC5vcHRpb24gICAgID0gZHZkdmlkZW9fb3B0aW9ucywKPiA+ICsgICAg LnZlcnNpb24gICAgPSBMSUJBVlVUSUxfVkVSU0lPTl9JTlQKPiA+ICt9Owo+ID4gKwo+ID4gK2Nv bnN0IEFWSW5wdXRGb3JtYXQgZmZfZHZkdmlkZW9fZGVtdXhlciA9IHsKPiA+ICsgICAgLm5hbWUg ICAgICAgICAgID0gImR2ZHZpZGVvIiwKPiA+ICsgICAgLmxvbmdfbmFtZSAgICAgID0gTlVMTF9J Rl9DT05GSUdfU01BTEwoIkRWRC1WaWRlbyIpLAo+ID4gKyAgICAucHJpdl9jbGFzcyAgICAgPSAm ZHZkdmlkZW9fY2xhc3MsCj4gPiArICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihEVkRWaWRl b0RlbXV4Q29udGV4dCksCj4gPiArICAgIC5mbGFncyAgICAgICAgICA9IEFWRk1UX05PRklMRSB8 IEFWRk1UX05PX0JZVEVfU0VFSyB8Cj4gQVZGTVRfTk9HRU5TRUFSQ0ggfCBBVkZNVF9OT0JJTlNF QVJDSCB8IEFWRk1UX1NIT1dfSURTIHwgQVZGTVRfVFNfRElTQ09OVCwKPiA+ICsgICAgLmZsYWdz X2ludGVybmFsID0gRkZfRk1UX0lOSVRfQ0xFQU5VUCwKPiA+ICsgICAgLnJlYWRfcHJvYmUgICAg ID0gZHZkdmlkZW9fcHJvYmUsCj4gPiArICAgIC5yZWFkX2Nsb3NlICAgICA9IGR2ZHZpZGVvX2Ns b3NlLAo+ID4gKyAgICAucmVhZF9oZWFkZXIgICAgPSBkdmR2aWRlb19yZWFkX2hlYWRlciwKPiA+ ICsgICAgLnJlYWRfcGFja2V0ICAgID0gZHZkdmlkZW9fcmVhZF9wYWNrZXQsCj4gPiArICAgIC5y ZWFkX3NlZWsgICAgICA9IGR2ZHZpZGVvX3JlYWRfc2Vlawo+ID4gK307Cj4KPiBUaGVyZSdzIGEg bnVtYmVyIG9mIG90aGVyIGlzc3VlcyBhbmQgSSBkaWRuJ3Qgd3JpdGUgZWFjaCBvbmUgb2YgZWFj aAo+IHR5cGUsIGJ1dCBteSBiaWdnZXN0IHF1ZXN0aW9uIGlzIHdoeSB0aGlzIGlzIG5vdCBhIHBy b3RvY29sIHRoYXQKPiBwcm9kdWNlcyBhbiBtcGVnLXBzIHN0cmVhbS4KPgo+IC0gTGVvIEl6ZW4g KFRyYW5lcHRvcmEpCj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwo+IGZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKPiBmZm1wZWctZGV2ZWxAZmZtcGVn Lm9yZwo+IGh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAo+ Cj4gVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCj4gZmZtcGVnLWRl dmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4KPgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwg bWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsg YWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJq ZWN0ICJ1bnN1YnNjcmliZSIuCg==