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 9D8CB4231A for ; Fri, 17 Dec 2021 15:59:04 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 90FE968AB82; Fri, 17 Dec 2021 17:59:03 +0200 (EET) Received: from mail-qt1-f174.google.com (mail-qt1-f174.google.com [209.85.160.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2670068AB82 for ; Fri, 17 Dec 2021 17:58:57 +0200 (EET) Received: by mail-qt1-f174.google.com with SMTP id n15so3105658qta.0 for ; Fri, 17 Dec 2021 07:58:57 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:content-transfer-encoding:mime-version :subject:message-id:date:to; bh=mxyKbd5gZZGgzb9+s66+Ev7cS5u8scxOyzpTb64K2as=; b=TTbkR9QD3PoiD+NuEVUIUEOnaOLnuswx/XZexboQ4OAz4t/J8vVVYeKf+HMllcCVEU s6p1UpeqjfAU4cghiw+NwKXH9J/bHSBgUdfu9dDzyUQSANc4tGV9tK7DnqHXFpiDGM4T CIZrSvDHA449xkAxa8+zfsmdlF6i4/IDDAfnmovlLEN5XH6tdXwkidSN5bi4QrB0FNaR fYaavfyb/W1kdB8MpjDUwy8bwd8+VpqXdEVCL5vLqvCwG8qESecfn6lc80rSrvoo3p07 6gkmkzxyhj8WCdmvI68dZi+shQqv5d620aDIrUdnRlyu+xtjk/Y2NzrGYPvoZNE+91nO NmwA== X-Gm-Message-State: AOAM530vJKLGaxZn5qpc4XICNQaW0RILHvIZy3pKmjLdQz7cSo0BA+zD lIsBVUSercO7S8ahaNNOejQXBMkPkyD/nA== X-Google-Smtp-Source: ABdhPJxUE89/X8afOqjQKKbe1+36UPWAEo5U4UQGOvW/0mJfA8GvWLkql43N9EMNB0SFk7blY6S89Q== X-Received: by 2002:a05:622a:1901:: with SMTP id w1mr2937644qtc.134.1639756735425; Fri, 17 Dec 2021 07:58:55 -0800 (PST) Received: from smtpclient.apple ([172.58.6.224]) by smtp.gmail.com with ESMTPSA id f18sm4876026qko.34.2021.12.17.07.58.54 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 17 Dec 2021 07:58:55 -0800 (PST) From: Romain Beauxis Mime-Version: 1.0 (Mac OS X Mail 15.0 \(3693.40.0.1.81\)) Message-Id: <6F92079B-7B1A-4DE4-B660-BC1947BBAD8B@rastageeks.org> Date: Fri, 17 Dec 2021 09:58:54 -0600 To: ffmpeg-devel@ffmpeg.org X-Mailer: Apple Mail (2.3693.40.0.1.81) Subject: [FFmpeg-devel] [PATCH v5 2/3] libavdevice/avfoundation.m: Replace mutex-based concurrency handling in avfoundation.m by a thread-safe fifo queue with maximum length 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: KEFwb2xvZ2llcyBmb3IgdGhlIHByZXZpb3VzbHkgbWFuZ2xlZCBtZXNzYWdlLCBJ4oCZbSBzdGls bCBob25pbmcgbXkgdG9vbHMgaGVyZSEpCgpUaGlzIGlzIHRoZSBzZWNvbmQgcGF0Y2ggb2YgYSBz ZXJpZXMgb2YgMyB0aGF0IGNsZWFudXAgYW5kIGVuaGFuY2UgdGhlCmF2Zm91bmRhdGlvbiBpbXBs ZW1lbnRhdGlvbiBmb3IgbGliYXZkZXZpY2UuCgpDaGFuZ2VzOgp2MjogTm9uZQp2MzogU3dpdGNo ZWQgcXVldWUgaW1wbGVtZW50YXRpb24gdG8gQ01TaW1wbGVRdWV1ZQp2NDogTm9uZQp2NTogRml4 IGluZGVudGF0aW9uL3dyYXBwaW5nCgpUaGlzIHBhdGNoIGZpeGVzIHRoZSBjb25jdXJyZW5jeSBt b2RlbC4gQXZmb3VuZGF0aW9uIHJ1bnMgaXRzIG93bgpwcm9kdWNpbmcgdGhyZWFkIHRvIHNlbmQg cHJvZHVjZWQgZnJhbWVzIGFuZCBmZm1wZWcgcnVucyBpdHMgb3duIHRocmVhZAp0byBjb25zdW1l IHRoZW0uCgpUaGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24gc3RvcmVzIHRoZSBsYXN0IHRyYW5z bWl0dGVkIGZyYW1lIGFuZCB1c2VzIGEKbXV0ZXggdG8gYXZvaWQgY29uY3VycmVudCBhY2Nlc3Mu IEhvd2V2ZXIsIHRoaXMgbGVhZHMgdG8gc2l0dWF0aW9ucwp3aGVyZSB1cGNvbWluZyBmcmFtZXMg Y2FuIGJlIGRyb3BwZWQgaWYgdGhlIGZmbXBlZyB0aHJlYWQgaXMgYWNlc3NpbmcKdGhlIGxhdGVz dCBmcmFtZS4gVGhpcyBoYXBwZW5zIGV2ZW4gd2hlbiB0aGUgdGhyZWFkIHdvdWxkIG90aGVyd2lz ZQpjYXRjaCB1cCBhbmQgcHJvY2VzcyBmcmFtZXMgZmFzdCBlbm91Z2h0LgoKVGhpcyBwYXRjaGVz IGNoYW5nZXMgdGhpcyBpbXBsZW1lbnRhdGlvbiB0byB1c2UgYSBidWZmZXIgcXVldWUgd2l0aCBh Cm1heCBxdWV1ZSBsZW5ndGggYW5kIGVuY2Fwc3VsYXRlZCB0aHJlYWQtc2FmZXR5LiBUaGlzIGdy ZWF0bHkgc2ltcGxpZmllcwp0aGUgbG9naWMgb2YgdGhlIGNhbGxpbmcgY29kZSBhbmQgZ2l2ZXMg dGhlIGNvbnN1bWluZyB0aHJlYWQgYSBjaGFuY2UgdG8KcHJvY2VzcyBhbGwgZnJhbWVzIGNvbmN1 cnJlbnRseSB0byB0aGUgcHJvZHVjaW5nIHRocmVhZCB3aGlsZSBhdm9pZGluZwptZW1vcnkgbGVh a3MuCgpTaWduZWQtb2ZmLWJ5OiBSb21haW4gQmVhdXhpcyA8dG9vdHNAcmFzdGFnZWVrcy5vcmc+ Ci0tLQpsaWJhdmRldmljZS9hdmZvdW5kYXRpb24ubSB8IDE2OSArKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tLS0tCjEgZmlsZSBjaGFuZ2VkLCA3NiBpbnNlcnRpb25zKCspLCA5MyBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWJhdmRldmljZS9hdmZvdW5kYXRpb24ubSBiL2xp YmF2ZGV2aWNlL2F2Zm91bmRhdGlvbi5tCmluZGV4IDc5YzkyMDdjZmEuLmI2MDJjZmJlOTUgMTAw NjQ0Ci0tLSBhL2xpYmF2ZGV2aWNlL2F2Zm91bmRhdGlvbi5tCisrKyBiL2xpYmF2ZGV2aWNlL2F2 Zm91bmRhdGlvbi5tCkBAIC0yNiw3ICsyNiw3IEBACiAqLwoKI2ltcG9ydCA8QVZGb3VuZGF0aW9u L0FWRm91bmRhdGlvbi5oPgotI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbXBvcnQgPENvcmVNZWRp YS9Db3JlTWVkaWEuaD4KCiNpbmNsdWRlICJsaWJhdnV0aWwvY2hhbm5lbF9sYXlvdXQuaCIKI2lu Y2x1ZGUgImxpYmF2dXRpbC9waXhkZXNjLmgiCkBAIC04MCwxMyArODAsMTIgQEAKICAgIHsgQVZf UElYX0ZNVF9OT05FLCAwIH0KfTsKCisjZGVmaW5lIE1BWF9RVUVVRURfRlJBTUVTIDEwCisKdHlw ZWRlZiBzdHJ1Y3QKewogICAgQVZDbGFzcyogICAgICAgIGNsYXNzOwoKLSAgICBpbnQgICAgICAg ICAgICAgZnJhbWVzX2NhcHR1cmVkOwotICAgIGludCAgICAgICAgICAgICBhdWRpb19mcmFtZXNf Y2FwdHVyZWQ7Ci0gICAgcHRocmVhZF9tdXRleF90IGZyYW1lX2xvY2s7CiAgICBpZCAgICAgICAg ICAgICAgYXZmX2RlbGVnYXRlOwogICAgaWQgICAgICAgICAgICAgIGF2Zl9hdWRpb19kZWxlZ2F0 ZTsKCkBAIC0xMjEsOCArMTIwLDggQEAKICAgIEFWQ2FwdHVyZVNlc3Npb24gICAgICAgICAqY2Fw dHVyZV9zZXNzaW9uOwogICAgQVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0ICp2aWRlb19vdXRwdXQ7 CiAgICBBVkNhcHR1cmVBdWRpb0RhdGFPdXRwdXQgKmF1ZGlvX291dHB1dDsKLSAgICBDTVNhbXBs ZUJ1ZmZlclJlZiAgICAgICAgIGN1cnJlbnRfZnJhbWU7Ci0gICAgQ01TYW1wbGVCdWZmZXJSZWYg ICAgICAgICBjdXJyZW50X2F1ZGlvX2ZyYW1lOworICAgIENNU2ltcGxlUXVldWVSZWYgICAgICAg ICAgYXVkaW9fZnJhbWVzX3F1ZXVlOworICAgIENNU2ltcGxlUXVldWVSZWYgICAgICAgICAgdmlk ZW9fZnJhbWVzX3F1ZXVlOwoKICAgIEFWQ2FwdHVyZURldmljZSAgICAgICAgICAqb2JzZXJ2ZWRf ZGV2aWNlOwojaWYgIVRBUkdFVF9PU19JUEhPTkUgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S RVFVSVJFRCA+PSAxMDcwCkBAIC0xMzEsMTYgKzEzMCw2IEBACiAgICBpbnQgICAgICAgICAgICAg ICAgICAgICAgb2JzZXJ2ZWRfcXVpdDsKfSBBVkZDb250ZXh0OwoKLXN0YXRpYyB2b2lkIGxvY2tf ZnJhbWVzKEFWRkNvbnRleHQqIGN0eCkKLXsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soJmN0eC0+ ZnJhbWVfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVubG9ja19mcmFtZXMoQVZGQ29udGV4dCog Y3R4KQotewotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZjdHgtPmZyYW1lX2xvY2spOwotfQot Ci8qKiBGcmFtZVJlY2lldmVyIGNsYXNzIC0gZGVsZWdhdGUgZm9yIEFWQ2FwdHVyZVNlc3Npb24K ICovCkBpbnRlcmZhY2UgQVZGRnJhbWVSZWNlaXZlciA6IE5TT2JqZWN0CkBAIC0yMTgsMTcgKzIw Nyw4IEBAIC0gKHZvaWQpICBjYXB0dXJlT3V0cHV0OihBVkNhcHR1cmVPdXRwdXQgKiljYXB0dXJl T3V0cHV0CiAgZGlkT3V0cHV0U2FtcGxlQnVmZmVyOihDTVNhbXBsZUJ1ZmZlclJlZil2aWRlb0Zy YW1lCiAgICAgICAgIGZyb21Db25uZWN0aW9uOihBVkNhcHR1cmVDb25uZWN0aW9uICopY29ubmVj dGlvbgp7Ci0gICAgbG9ja19mcmFtZXMoX2NvbnRleHQpOwotCi0gICAgaWYgKF9jb250ZXh0LT5j dXJyZW50X2ZyYW1lICE9IG5pbCkgewotICAgICAgICBDRlJlbGVhc2UoX2NvbnRleHQtPmN1cnJl bnRfZnJhbWUpOwotICAgIH0KLQotICAgIF9jb250ZXh0LT5jdXJyZW50X2ZyYW1lID0gKENNU2Ft cGxlQnVmZmVyUmVmKUNGUmV0YWluKHZpZGVvRnJhbWUpOwotCi0gICAgdW5sb2NrX2ZyYW1lcyhf Y29udGV4dCk7Ci0KLSAgICArK19jb250ZXh0LT5mcmFtZXNfY2FwdHVyZWQ7CisgICAgQ0ZSZXRh aW4odmlkZW9GcmFtZSk7CisgICAgQ01TaW1wbGVRdWV1ZUVucXVldWUoX2NvbnRleHQtPnZpZGVv X2ZyYW1lc19xdWV1ZSwgdmlkZW9GcmFtZSk7Cn0KCkBlbmQKQEAgLTI2MiwxNyArMjQyLDggQEAg LSAodm9pZCkgIGNhcHR1cmVPdXRwdXQ6KEFWQ2FwdHVyZU91dHB1dCAqKWNhcHR1cmVPdXRwdXQK ICBkaWRPdXRwdXRTYW1wbGVCdWZmZXI6KENNU2FtcGxlQnVmZmVyUmVmKWF1ZGlvRnJhbWUKICAg ICAgICAgZnJvbUNvbm5lY3Rpb246KEFWQ2FwdHVyZUNvbm5lY3Rpb24gKiljb25uZWN0aW9uCnsK LSAgICBsb2NrX2ZyYW1lcyhfY29udGV4dCk7Ci0KLSAgICBpZiAoX2NvbnRleHQtPmN1cnJlbnRf YXVkaW9fZnJhbWUgIT0gbmlsKSB7Ci0gICAgICAgIENGUmVsZWFzZShfY29udGV4dC0+Y3VycmVu dF9hdWRpb19mcmFtZSk7Ci0gICAgfQotCi0gICAgX2NvbnRleHQtPmN1cnJlbnRfYXVkaW9fZnJh bWUgPSAoQ01TYW1wbGVCdWZmZXJSZWYpQ0ZSZXRhaW4oYXVkaW9GcmFtZSk7Ci0KLSAgICB1bmxv Y2tfZnJhbWVzKF9jb250ZXh0KTsKLQotICAgICsrX2NvbnRleHQtPmF1ZGlvX2ZyYW1lc19jYXB0 dXJlZDsKKyAgICBDRlJldGFpbihhdWRpb0ZyYW1lKTsKKyAgICBDTVNpbXBsZVF1ZXVlRW5xdWV1 ZShfY29udGV4dC0+YXVkaW9fZnJhbWVzX3F1ZXVlLCBhdWRpb0ZyYW1lKTsKfQoKQGVuZApAQCAt Mjg3LDYgKzI1OCwzMCBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X2NvbnRleHQoQVZGQ29udGV4dCog Y3R4KQogICAgW2N0eC0+YXZmX2RlbGVnYXRlICAgIHJlbGVhc2VdOwogICAgW2N0eC0+YXZmX2F1 ZGlvX2RlbGVnYXRlIHJlbGVhc2VdOwoKKyAgICBDTVNhbXBsZUJ1ZmZlclJlZiBmcmFtZTsKKwor ICAgIGlmIChjdHgtPnZpZGVvX2ZyYW1lc19xdWV1ZSkgeworICAgICAgICBmcmFtZSA9IChDTVNh bXBsZUJ1ZmZlclJlZilDTVNpbXBsZVF1ZXVlRGVxdWV1ZShjdHgtPnZpZGVvX2ZyYW1lc19xdWV1 ZSk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICBDRlJlbGVhc2UoZnJhbWUpOworICAgICAgICAg IGZyYW1lID0gKENNU2FtcGxlQnVmZmVyUmVmKUNNU2ltcGxlUXVldWVEZXF1ZXVlKGN0eC0+dmlk ZW9fZnJhbWVzX3F1ZXVlKTsKKyAgICAgICAgfSB3aGlsZSAoZnJhbWUpOworCisgICAgICAgIENG UmVsZWFzZShjdHgtPnZpZGVvX2ZyYW1lc19xdWV1ZSk7CisgICAgICAgIGN0eC0+dmlkZW9fZnJh bWVzX3F1ZXVlID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoY3R4LT5hdWRpb19mcmFtZXNfcXVl dWUpIHsKKyAgICAgICAgZnJhbWUgPSAoQ01TYW1wbGVCdWZmZXJSZWYpQ01TaW1wbGVRdWV1ZURl cXVldWUoY3R4LT5hdWRpb19mcmFtZXNfcXVldWUpOworICAgICAgICBkbyB7CisgICAgICAgICAg Q0ZSZWxlYXNlKGZyYW1lKTsKKyAgICAgICAgICBmcmFtZSA9IChDTVNhbXBsZUJ1ZmZlclJlZilD TVNpbXBsZVF1ZXVlRGVxdWV1ZShjdHgtPmF1ZGlvX2ZyYW1lc19xdWV1ZSk7CisgICAgICAgIH0g d2hpbGUgKGZyYW1lKTsKKworICAgICAgICBDRlJlbGVhc2UoY3R4LT5hdWRpb19mcmFtZXNfcXVl dWUpOworICAgICAgICBjdHgtPmF1ZGlvX2ZyYW1lc19xdWV1ZSA9IE5VTEw7CisgICAgfQorCiAg ICBjdHgtPmNhcHR1cmVfc2Vzc2lvbiA9IE5VTEw7CiAgICBjdHgtPnZpZGVvX291dHB1dCAgICA9 IE5VTEw7CiAgICBjdHgtPmF1ZGlvX291dHB1dCAgICA9IE5VTEw7CkBAIC0yOTcsMTIgKzI5Miw2 IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfY29udGV4dChBVkZDb250ZXh0KiBjdHgpCiAgICAgIEF1 ZGlvQ29udmVydGVyRGlzcG9zZShjdHgtPmF1ZGlvX2NvbnZlcnRlcik7CiAgICAgIGN0eC0+YXVk aW9fY29udmVydGVyID0gTlVMTDsKICAgIH0KLQotICAgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgm Y3R4LT5mcmFtZV9sb2NrKTsKLQotICAgIGlmIChjdHgtPmN1cnJlbnRfZnJhbWUpIHsKLSAgICAg ICAgQ0ZSZWxlYXNlKGN0eC0+Y3VycmVudF9mcmFtZSk7Ci0gICAgfQp9CgpzdGF0aWMgdm9pZCBw YXJzZV9kZXZpY2VfbmFtZShBVkZvcm1hdENvbnRleHQgKnMpCkBAIC02MzAsMTggKzYxOSwxOCBA QCBzdGF0aWMgaW50IGdldF92aWRlb19jb25maWcoQVZGb3JtYXRDb250ZXh0ICpzKQogICAgfQoK ICAgIC8vIFRha2Ugc3RyZWFtIGluZm8gZnJvbSB0aGUgZmlyc3QgZnJhbWUuCi0gICAgd2hpbGUg KGN0eC0+ZnJhbWVzX2NhcHR1cmVkIDwgMSkgeworICAgIHdoaWxlIChDTVNpbXBsZVF1ZXVlR2V0 Q291bnQoY3R4LT52aWRlb19mcmFtZXNfcXVldWUpIDwgMSkgewogICAgICAgIENGUnVuTG9vcFJ1 bkluTW9kZShrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUsIDAuMSwgWUVTKTsKICAgIH0KCi0gICAgbG9j a19mcmFtZXMoY3R4KTsKKyAgICBDTVNhbXBsZUJ1ZmZlclJlZiBmcmFtZSA9IChDTVNhbXBsZUJ1 ZmZlclJlZilDTVNpbXBsZVF1ZXVlRGVxdWV1ZShjdHgtPnZpZGVvX2ZyYW1lc19xdWV1ZSk7Cgog ICAgY3R4LT52aWRlb19zdHJlYW1faW5kZXggPSBzdHJlYW0tPmluZGV4OwoKICAgIGF2cHJpdl9z ZXRfcHRzX2luZm8oc3RyZWFtLCA2NCwgMSwgYXZmX3RpbWVfYmFzZSk7CgotICAgIGltYWdlX2J1 ZmZlciA9IENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZmZXIoY3R4LT5jdXJyZW50X2ZyYW1lKTsK LSAgICBibG9ja19idWZmZXIgPSBDTVNhbXBsZUJ1ZmZlckdldERhdGFCdWZmZXIoY3R4LT5jdXJy ZW50X2ZyYW1lKTsKKyAgICBpbWFnZV9idWZmZXIgPSBDTVNhbXBsZUJ1ZmZlckdldEltYWdlQnVm ZmVyKGZyYW1lKTsKKyAgICBibG9ja19idWZmZXIgPSBDTVNhbXBsZUJ1ZmZlckdldERhdGFCdWZm ZXIoZnJhbWUpOwoKICAgIGlmIChpbWFnZV9idWZmZXIpIHsKICAgICAgICBpbWFnZV9idWZmZXJf c2l6ZSA9IENWSW1hZ2VCdWZmZXJHZXRFbmNvZGVkU2l6ZShpbWFnZV9idWZmZXIpOwpAQCAtNjU3 LDEwICs2NDYsNyBAQCBzdGF0aWMgaW50IGdldF92aWRlb19jb25maWcoQVZGb3JtYXRDb250ZXh0 ICpzKQogICAgICAgIHN0cmVhbS0+Y29kZWNwYXItPmZvcm1hdCAgICAgPSBjdHgtPnBpeGVsX2Zv cm1hdDsKICAgIH0KCi0gICAgQ0ZSZWxlYXNlKGN0eC0+Y3VycmVudF9mcmFtZSk7Ci0gICAgY3R4 LT5jdXJyZW50X2ZyYW1lID0gbmlsOwotCi0gICAgdW5sb2NrX2ZyYW1lcyhjdHgpOworICAgIENG UmVsZWFzZShmcmFtZSk7CgogICAgcmV0dXJuIDA7Cn0KQEAgLTY4MCwyNyArNjY2LDI3IEBAIHN0 YXRpYyBpbnQgZ2V0X2F1ZGlvX2NvbmZpZyhBVkZvcm1hdENvbnRleHQgKnMpCiAgICB9CgogICAg Ly8gVGFrZSBzdHJlYW0gaW5mbyBmcm9tIHRoZSBmaXJzdCBmcmFtZS4KLSAgICB3aGlsZSAoY3R4 LT5hdWRpb19mcmFtZXNfY2FwdHVyZWQgPCAxKSB7CisgICAgd2hpbGUgKENNU2ltcGxlUXVldWVH ZXRDb3VudChjdHgtPmF1ZGlvX2ZyYW1lc19xdWV1ZSkgPCAxKSB7CiAgICAgICAgQ0ZSdW5Mb29w UnVuSW5Nb2RlKGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSwgMC4xLCBZRVMpOwogICAgfQoKLSAgICBs b2NrX2ZyYW1lcyhjdHgpOworICAgIENNU2FtcGxlQnVmZmVyUmVmIGZyYW1lID0gKENNU2FtcGxl QnVmZmVyUmVmKUNNU2ltcGxlUXVldWVEZXF1ZXVlKGN0eC0+YXVkaW9fZnJhbWVzX3F1ZXVlKTsK CiAgICBjdHgtPmF1ZGlvX3N0cmVhbV9pbmRleCA9IHN0cmVhbS0+aW5kZXg7CgogICAgYXZwcml2 X3NldF9wdHNfaW5mbyhzdHJlYW0sIDY0LCAxLCBhdmZfdGltZV9iYXNlKTsKCi0gICAgZm9ybWF0 X2Rlc2MgPSBDTVNhbXBsZUJ1ZmZlckdldEZvcm1hdERlc2NyaXB0aW9uKGN0eC0+Y3VycmVudF9h dWRpb19mcmFtZSk7CisgICAgZm9ybWF0X2Rlc2MgPSBDTVNhbXBsZUJ1ZmZlckdldEZvcm1hdERl c2NyaXB0aW9uKGZyYW1lKTsKICAgIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiAq aW5wdXRfZm9ybWF0ID0gQ01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNEZXNj cmlwdGlvbihmb3JtYXRfZGVzYyk7CgogICAgaWYgKCFpbnB1dF9mb3JtYXQpIHsKLSAgICAgICAg dW5sb2NrX2ZyYW1lcyhjdHgpOworICAgICAgICBDRlJlbGVhc2UoZnJhbWUpOwogICAgICAgIGF2 X2xvZyhzLCBBVl9MT0dfRVJST1IsICJhdWRpbyBmb3JtYXQgbm90IGF2YWlsYWJsZVxuIik7CiAg ICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgaWYgKGlucHV0X2Zvcm1hdC0+bUZvcm1hdElEICE9 IGtBdWRpb0Zvcm1hdExpbmVhclBDTSkgewotICAgICAgICB1bmxvY2tfZnJhbWVzKGN0eCk7Cisg ICAgICAgIENGUmVsZWFzZShmcmFtZSk7CiAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwg Im9ubHkgUENNIGF1ZGlvIGZvcm1hdCBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnRcbiIpOwog ICAgICAgIHJldHVybiAxOwogICAgfQpAQCAtNzc4LDE2ICs3NjQsMTMgQEAgc3RhdGljIGludCBn ZXRfYXVkaW9fY29uZmlnKEFWRm9ybWF0Q29udGV4dCAqcykKICAgIGlmIChtdXN0X2NvbnZlcnQp IHsKICAgICAgICBPU1N0YXR1cyByZXQgPSBBdWRpb0NvbnZlcnRlck5ldyhpbnB1dF9mb3JtYXQs ICZvdXRwdXRfZm9ybWF0LCAmY3R4LT5hdWRpb19jb252ZXJ0ZXIpOwogICAgICAgIGlmIChyZXQg IT0gbm9FcnIpIHsKLSAgICAgICAgICAgIHVubG9ja19mcmFtZXMoY3R4KTsKKyAgICAgICAgICAg IENGUmVsZWFzZShmcmFtZSk7CiAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJF cnJvciB3aGlsZSBhbGxvY2F0aW5nIGF1ZGlvIGNvbnZlcnRlclxuIik7CiAgICAgICAgICAgIHJl dHVybiAxOwogICAgICAgIH0KICAgIH0KCi0gICAgQ0ZSZWxlYXNlKGN0eC0+Y3VycmVudF9hdWRp b19mcmFtZSk7Ci0gICAgY3R4LT5jdXJyZW50X2F1ZGlvX2ZyYW1lID0gbmlsOwotCi0gICAgdW5s b2NrX2ZyYW1lcyhjdHgpOworICAgIENGUmVsZWFzZShmcmFtZSk7CgogICAgcmV0dXJuIDA7Cn0K QEAgLTgwNSw4ICs3ODgsNiBAQCBzdGF0aWMgaW50IGF2Zl9yZWFkX2hlYWRlcihBVkZvcm1hdENv bnRleHQgKnMpCgogICAgY3R4LT5udW1fdmlkZW9fZGV2aWNlcyA9IFtkZXZpY2VzIGNvdW50XSAr IFtkZXZpY2VzX211eGVkIGNvdW50XTsKCi0gICAgcHRocmVhZF9tdXRleF9pbml0KCZjdHgtPmZy YW1lX2xvY2ssIE5VTEwpOwotCiNpZiAhVEFSR0VUX09TX0lQSE9ORSAmJiBfX01BQ19PU19YX1ZF UlNJT05fTUlOX1JFUVVJUkVEID49IDEwNzAKICAgIENHR2V0QWN0aXZlRGlzcGxheUxpc3QoMCwg TlVMTCwgJm51bV9zY3JlZW5zKTsKI2VuZGlmCkBAIC0xMDA3LDYgKzk4OCwxOSBAQCBzdGF0aWMg aW50IGF2Zl9yZWFkX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMpCiAgICAvLyBJbml0aWFsaXpl IGNhcHR1cmUgc2Vzc2lvbgogICAgY3R4LT5jYXB0dXJlX3Nlc3Npb24gPSBbW0FWQ2FwdHVyZVNl c3Npb24gYWxsb2NdIGluaXRdOwoKKyAgICBPU1N0YXR1cyByZXQ7CisgICAgcmV0ID0gQ01TaW1w bGVRdWV1ZUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBNQVhfUVVFVUVEX0ZSQU1FUywgJmN0 eC0+dmlkZW9fZnJhbWVzX3F1ZXVlKTsKKyAgIAorICAgIGlmIChyZXQgIT0gbm9FcnIpIHsKKyAg ICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHJldCA9IENNU2ltcGxlUXVldWVDcmVhdGUo a0NGQWxsb2NhdG9yRGVmYXVsdCwgTUFYX1FVRVVFRF9GUkFNRVMsICZjdHgtPmF1ZGlvX2ZyYW1l c19xdWV1ZSk7IAorCisgICAgaWYgKHJldCAhPSBub0VycikgeworICAgICAgICBnb3RvIGZhaWw7 CisgICAgfQorCiAgICBpZiAodmlkZW9fZGV2aWNlICYmIGFkZF92aWRlb19kZXZpY2Uocywgdmlk ZW9fZGV2aWNlKSkgewogICAgICAgIGdvdG8gZmFpbDsKICAgIH0KQEAgLTEwODgsMzUgKzEwODIs MzEgQEAgc3RhdGljIGludCBhdmZfcmVhZF9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBh Y2tldCAqcGt0KQogICAgQVZGQ29udGV4dCogY3R4ID0gKEFWRkNvbnRleHQqKXMtPnByaXZfZGF0 YTsKCiAgICBkbyB7Ci0gICAgICAgIENWSW1hZ2VCdWZmZXJSZWYgaW1hZ2VfYnVmZmVyOwotICAg ICAgICBDTUJsb2NrQnVmZmVyUmVmIGJsb2NrX2J1ZmZlcjsKLSAgICAgICAgbG9ja19mcmFtZXMo Y3R4KTsKLQotICAgICAgICBpZiAoY3R4LT5jdXJyZW50X2ZyYW1lICE9IG5pbCkgeworICAgICAg ICBpZiAoMSA8PSBDTVNpbXBsZVF1ZXVlR2V0Q291bnQoY3R4LT52aWRlb19mcmFtZXNfcXVldWUp KSB7CiAgICAgICAgICAgIGludCBzdGF0dXM7CiAgICAgICAgICAgIGludCBsZW5ndGggPSAwOwot Ci0gICAgICAgICAgICBpbWFnZV9idWZmZXIgPSBDTVNhbXBsZUJ1ZmZlckdldEltYWdlQnVmZmVy KGN0eC0+Y3VycmVudF9mcmFtZSk7Ci0gICAgICAgICAgICBibG9ja19idWZmZXIgPSBDTVNhbXBs ZUJ1ZmZlckdldERhdGFCdWZmZXIoY3R4LT5jdXJyZW50X2ZyYW1lKTsKKyAgICAgICAgICAgIENN U2FtcGxlQnVmZmVyUmVmIHZpZGVvX2ZyYW1lID0gKENNU2FtcGxlQnVmZmVyUmVmKUNNU2ltcGxl UXVldWVEZXF1ZXVlKGN0eC0+dmlkZW9fZnJhbWVzX3F1ZXVlKTsKKyAgICAgICAgICAgIENWSW1h Z2VCdWZmZXJSZWYgaW1hZ2VfYnVmZmVyID0gQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcih2 aWRlb19mcmFtZSk7OworICAgICAgICAgICAgQ01CbG9ja0J1ZmZlclJlZiBibG9ja19idWZmZXIg PSBDTVNhbXBsZUJ1ZmZlckdldERhdGFCdWZmZXIodmlkZW9fZnJhbWUpOwoKICAgICAgICAgICAg aWYgKGltYWdlX2J1ZmZlciAhPSBuaWwpIHsKICAgICAgICAgICAgICAgIGxlbmd0aCA9IChpbnQp Q1ZQaXhlbEJ1ZmZlckdldERhdGFTaXplKGltYWdlX2J1ZmZlcik7CiAgICAgICAgICAgIH0gZWxz ZSBpZiAoYmxvY2tfYnVmZmVyICE9IG5pbCkgewogICAgICAgICAgICAgICAgbGVuZ3RoID0gKGlu dClDTUJsb2NrQnVmZmVyR2V0RGF0YUxlbmd0aChibG9ja19idWZmZXIpOwogICAgICAgICAgICB9 IGVsc2UgIHsKLSAgICAgICAgICAgICAgICB1bmxvY2tfZnJhbWVzKGN0eCk7CisgICAgICAgICAg ICAgICAgQ0ZSZWxlYXNlKHZpZGVvX2ZyYW1lKTsKICAgICAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SKEVJTlZBTCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChhdl9uZXdfcGFja2V0 KHBrdCwgbGVuZ3RoKSA8IDApIHsKLSAgICAgICAgICAgICAgICB1bmxvY2tfZnJhbWVzKGN0eCk7 CisgICAgICAgICAgICAgICAgQ0ZSZWxlYXNlKHZpZGVvX2ZyYW1lKTsKICAgICAgICAgICAgICAg IHJldHVybiBBVkVSUk9SKEVJTyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIENNSXRlbUNv dW50IGNvdW50OwogICAgICAgICAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nX2luZm87Cgot ICAgICAgICAgICAgaWYgKENNU2FtcGxlQnVmZmVyR2V0T3V0cHV0U2FtcGxlVGltaW5nSW5mb0Fy cmF5KGN0eC0+Y3VycmVudF9mcmFtZSwgMSwgJnRpbWluZ19pbmZvLCAmY291bnQpID09IG5vRXJy KSB7CisgICAgICAgICAgICBpZiAoQ01TYW1wbGVCdWZmZXJHZXRPdXRwdXRTYW1wbGVUaW1pbmdJ bmZvQXJyYXkodmlkZW9fZnJhbWUsIDEsICZ0aW1pbmdfaW5mbywgJmNvdW50KSA9PSBub0Vycikg ewogICAgICAgICAgICAgICAgQVZSYXRpb25hbCB0aW1lYmFzZV9xID0gYXZfbWFrZV9xKDEsIHRp bWluZ19pbmZvLnByZXNlbnRhdGlvblRpbWVTdGFtcC50aW1lc2NhbGUpOwogICAgICAgICAgICAg ICAgcGt0LT5wdHMgPSBwa3QtPmR0cyA9IGF2X3Jlc2NhbGVfcSh0aW1pbmdfaW5mby5wcmVzZW50 YXRpb25UaW1lU3RhbXAudmFsdWUsIHRpbWViYXNlX3EsIGF2Zl90aW1lX2Jhc2VfcSk7CiAgICAg ICAgICAgIH0KQEAgLTExMzMsMTUgKzExMjMsMTQgQEAgc3RhdGljIGludCBhdmZfcmVhZF9wYWNr ZXQoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0KQogICAgICAgICAgICAgICAgICAg IHN0YXR1cyA9IEFWRVJST1IoRUlPKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K LSAgICAgICAgICAgIENGUmVsZWFzZShjdHgtPmN1cnJlbnRfZnJhbWUpOwotICAgICAgICAgICAg Y3R4LT5jdXJyZW50X2ZyYW1lID0gbmlsOworICAgICAgICAgICAgQ0ZSZWxlYXNlKHZpZGVvX2Zy YW1lKTsKCiAgICAgICAgICAgIGlmIChzdGF0dXMgPCAwKSB7Ci0gICAgICAgICAgICAgICAgdW5s b2NrX2ZyYW1lcyhjdHgpOwogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICAgICAg ICAgfQotICAgICAgICB9IGVsc2UgaWYgKGN0eC0+Y3VycmVudF9hdWRpb19mcmFtZSAhPSBuaWwp IHsKLSAgICAgICAgICAgIENNQmxvY2tCdWZmZXJSZWYgYmxvY2tfYnVmZmVyID0gQ01TYW1wbGVC dWZmZXJHZXREYXRhQnVmZmVyKGN0eC0+Y3VycmVudF9hdWRpb19mcmFtZSk7CisgICAgICAgIH0g ZWxzZSBpZiAoMSA8PSBDTVNpbXBsZVF1ZXVlR2V0Q291bnQoY3R4LT5hdWRpb19mcmFtZXNfcXVl dWUpKSB7CisgICAgICAgICAgICBDTVNhbXBsZUJ1ZmZlclJlZiBhdWRpb19mcmFtZSA9IChDTVNh bXBsZUJ1ZmZlclJlZilDTVNpbXBsZVF1ZXVlRGVxdWV1ZShjdHgtPmF1ZGlvX2ZyYW1lc19xdWV1 ZSk7CisgICAgICAgICAgICBDTUJsb2NrQnVmZmVyUmVmIGJsb2NrX2J1ZmZlciA9IENNU2FtcGxl QnVmZmVyR2V0RGF0YUJ1ZmZlcihhdWRpb19mcmFtZSk7CgogICAgICAgICAgICBzaXplX3QgaW5w dXRfc2l6ZSA9IENNQmxvY2tCdWZmZXJHZXREYXRhTGVuZ3RoKGJsb2NrX2J1ZmZlcik7CiAgICAg ICAgICAgIGludCBidWZmZXJfc2l6ZSA9IGlucHV0X3NpemUgLyBjdHgtPmF1ZGlvX2J1ZmZlcnM7 CkBAIC0xMTUxLDEyICsxMTQwLDEyIEBAIHN0YXRpYyBpbnQgYXZmX3JlYWRfcGFja2V0KEFWRm9y bWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKICAgICAgICAgICAgVUludDMyIHNpemUgPSBz aXplb2Yob3V0cHV0X3NpemUpOwogICAgICAgICAgICByZXQgPSBBdWRpb0NvbnZlcnRlckdldFBy b3BlcnR5KGN0eC0+YXVkaW9fY29udmVydGVyLCBrQXVkaW9Db252ZXJ0ZXJQcm9wZXJ0eUNhbGN1 bGF0ZU91dHB1dEJ1ZmZlclNpemUsICZzaXplLCAmb3V0cHV0X3NpemUpOwogICAgICAgICAgICBp ZiAocmV0ICE9IG5vRXJyKSB7Ci0gICAgICAgICAgICAgICAgdW5sb2NrX2ZyYW1lcyhjdHgpOwor ICAgICAgICAgICAgICAgIENGUmVsZWFzZShhdWRpb19mcmFtZSk7CiAgICAgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUihFSU8pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoYXZfbmV3 X3BhY2tldChwa3QsIG91dHB1dF9zaXplKSA8IDApIHsKLSAgICAgICAgICAgICAgICB1bmxvY2tf ZnJhbWVzKGN0eCk7CisgICAgICAgICAgICAgICAgQ0ZSZWxlYXNlKGF1ZGlvX2ZyYW1lKTsKICAg ICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTyk7CiAgICAgICAgICAgIH0KCkBAIC0xMTcz LDcgKzExNjIsNyBAQCBzdGF0aWMgaW50IGF2Zl9yZWFkX3BhY2tldChBVkZvcm1hdENvbnRleHQg KnMsIEFWUGFja2V0ICpwa3QpCgogICAgICAgICAgICAgICAgICAgIGlmIChyZXQgIT0ga0NNQmxv Y2tCdWZmZXJOb0VycikgewogICAgICAgICAgICAgICAgICAgICAgICBhdl9mcmVlKGlucHV0X2J1 ZmZlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bmxvY2tfZnJhbWVzKGN0eCk7CisgICAg ICAgICAgICAgICAgICAgICAgICBDRlJlbGVhc2UoYXVkaW9fZnJhbWUpOwogICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU8pOwogICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgIH0KQEAgLTExOTEsNyArMTE4MCw3IEBAIHN0YXRpYyBpbnQgYXZmX3JlYWRf cGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKICAgICAgICAgICAgICAg IGF2X2ZyZWUoaW5wdXRfYnVmZmVyKTsKCiAgICAgICAgICAgICAgICBpZiAocmV0ICE9IG5vRXJy KSB7Ci0gICAgICAgICAgICAgICAgICAgIHVubG9ja19mcmFtZXMoY3R4KTsKKyAgICAgICAgICAg ICAgICAgICAgQ0ZSZWxlYXNlKGF1ZGlvX2ZyYW1lKTsKICAgICAgICAgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUihFSU8pOwogICAgICAgICAgICAgICAgfQoKQEAgLTExOTksNyArMTE4OCw3IEBA IHN0YXRpYyBpbnQgYXZmX3JlYWRfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQg KnBrdCkKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICByZXQgPSBDTUJsb2Nr QnVmZmVyQ29weURhdGFCeXRlcyhibG9ja19idWZmZXIsIDAsIHBrdC0+c2l6ZSwgcGt0LT5kYXRh KTsKICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpIHsKLSAg ICAgICAgICAgICAgICAgICAgIHVubG9ja19mcmFtZXMoY3R4KTsKKyAgICAgICAgICAgICAgICAg ICAgIENGUmVsZWFzZShhdWRpb19mcmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBB VkVSUk9SKEVJTyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CkBAIC0xMjA3LDcg KzExOTYsNyBAQCBzdGF0aWMgaW50IGF2Zl9yZWFkX3BhY2tldChBVkZvcm1hdENvbnRleHQgKnMs IEFWUGFja2V0ICpwa3QpCiAgICAgICAgICAgIENNSXRlbUNvdW50IGNvdW50OwogICAgICAgICAg ICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nX2luZm87CgotICAgICAgICAgICAgaWYgKENNU2Ft cGxlQnVmZmVyR2V0T3V0cHV0U2FtcGxlVGltaW5nSW5mb0FycmF5KGN0eC0+Y3VycmVudF9hdWRp b19mcmFtZSwgMSwgJnRpbWluZ19pbmZvLCAmY291bnQpID09IG5vRXJyKSB7CisgICAgICAgICAg ICBpZiAoQ01TYW1wbGVCdWZmZXJHZXRPdXRwdXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkoYXVkaW9f ZnJhbWUsIDEsICZ0aW1pbmdfaW5mbywgJmNvdW50KSA9PSBub0VycikgewogICAgICAgICAgICAg ICAgQVZSYXRpb25hbCB0aW1lYmFzZV9xID0gYXZfbWFrZV9xKDEsIHRpbWluZ19pbmZvLnByZXNl bnRhdGlvblRpbWVTdGFtcC50aW1lc2NhbGUpOwogICAgICAgICAgICAgICAgcGt0LT5wdHMgPSBw a3QtPmR0cyA9IGF2X3Jlc2NhbGVfcSh0aW1pbmdfaW5mby5wcmVzZW50YXRpb25UaW1lU3RhbXAu dmFsdWUsIHRpbWViYXNlX3EsIGF2Zl90aW1lX2Jhc2VfcSk7CiAgICAgICAgICAgIH0KQEAgLTEy MTUsMjEgKzEyMDQsMTUgQEAgc3RhdGljIGludCBhdmZfcmVhZF9wYWNrZXQoQVZGb3JtYXRDb250 ZXh0ICpzLCBBVlBhY2tldCAqcGt0KQogICAgICAgICAgICBwa3QtPnN0cmVhbV9pbmRleCAgPSBj dHgtPmF1ZGlvX3N0cmVhbV9pbmRleDsKICAgICAgICAgICAgcGt0LT5mbGFncyAgICAgICAgfD0g QVZfUEtUX0ZMQUdfS0VZOwoKLSAgICAgICAgICAgIENGUmVsZWFzZShjdHgtPmN1cnJlbnRfYXVk aW9fZnJhbWUpOwotICAgICAgICAgICAgY3R4LT5jdXJyZW50X2F1ZGlvX2ZyYW1lID0gbmlsOwot Ci0gICAgICAgICAgICB1bmxvY2tfZnJhbWVzKGN0eCk7CisgICAgICAgICAgICBDRlJlbGVhc2Uo YXVkaW9fZnJhbWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBrdC0+ZGF0YSA9IE5V TEw7Ci0gICAgICAgICAgICB1bmxvY2tfZnJhbWVzKGN0eCk7CiAgICAgICAgICAgIGlmIChjdHgt Pm9ic2VydmVkX3F1aXQpIHsKICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKICAg ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVBR0FJTik7 CiAgICAgICAgICAgIH0KICAgICAgICB9Ci0KLSAgICAgICAgdW5sb2NrX2ZyYW1lcyhjdHgpOwog ICAgfSB3aGlsZSAoIXBrdC0+ZGF0YSk7CgogICAgcmV0dXJuIDA7Ci0tIAoyLjMyLjAgKEFwcGxl IEdpdC0xMzIpCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBz Oi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3Jp YmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBl Zy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==