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 ESMTPS id 1D7584DD78 for ; Thu, 24 Apr 2025 20:37:33 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 41C8A687D90; Thu, 24 Apr 2025 23:37:30 +0300 (EEST) Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3D5C3687BA0 for ; Thu, 24 Apr 2025 23:37:23 +0300 (EEST) Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-39c266c1389so1041986f8f.1 for ; Thu, 24 Apr 2025 13:37:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jkqxz-net.20230601.gappssmtp.com; s=20230601; t=1745527042; x=1746131842; darn=ffmpeg.org; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=D1xajc68KoVxj2ug7NNMDGIuKFQThwgLTph1Dzq1XCw=; b=j+fMTqLQWZR4YdvBLRm64924ZXIj9Bn+2DUQZ8n/iYuzbM71fi5pxQyw879dlNm7zN IQdpdGoyclbgOgNqLlb2b+ZvE+EUzLsgrENnL2mAHJjbCCGW1H173qFFBKv7Z8SwNrvD 9dboc+tz2skhMuZYcJrD/hAbyPe/7SLg1Kn2qaotZZIC2iQL0pfdO45WpO/UNf9VX2nx qfq1qBGWMMDPjVrxCghfzm/G8W2lf9UhO9hy9QJ4dnyp0zDHybrDWmTzQOZPIZkBxTaZ krSycTz6XwL5W0W4njKERspzU1apmCSVjMyFUb8Gyk8wq7uqfnL8Nc8GzTpK3txhPJ9r S/tA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745527042; x=1746131842; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=D1xajc68KoVxj2ug7NNMDGIuKFQThwgLTph1Dzq1XCw=; b=KPEr9EkL0rWROfHjyuI8xKyFfZLQD5DYPqUmSpUAYWE/y/ZcGaxZhf5LjJf4mnLVso xIdYKOFS7vh+l8AMcYaHubeVCqM4FzVnzlybEu7EfyieVch6OxUHKBPdt5jAwLFPcu8S Jp539SkFOXW6R2orAL6LN1GsZjzp5MC7AMylnICtcYOslAp7YU/tPI8jxcgIl6Kj1zmC Ic6uDSLpd3j0NcNUNEABsXHNAAiT/+/snZufZfaV0//UAH+cCna32jiBiMrSOdkaOGfX F0ZMMxLiKGGOgWDu2yvTePwMZ/aPKPlG51X7p3GJnj47SnTUz+L3Wr2zMAdoxi7pKfKD txJg== X-Gm-Message-State: AOJu0Yze6mLgZwVWJWa2HHpS0kljE2tp6ALmtfPibDHp2ab7MULhjRVJ bZ096N54JyoYn5xkzO1lJRS+jjJ11VsoSJp4q96bWgPqkfs2tzZVPMMFdDdVALZhS1iQXb3tIay y X-Gm-Gg: ASbGncsmtmW2MYqbn5F16XbVXc/HBnRntad0kscatqOZTyrf0f2h7Rbfsst7g/xTtKo /sT4boAnlPWd8OPr9/Y2AUaIxq2rEL00pOcDbKj0Kr267vEEWmKwHzbEho+m+5iKcCZfCkUAvdk BuYgK8+BvH2B4eSEp2jG6nRQu876FaEnkcU0Rr4lk+21mYALGFwoHXha/LXzg3a4KPJFDOLxn6e ldjAxw7JJaVzJ/p25Df6W/WqDHZ5o/Q0xmN+7P8mk8wKA1aW3RzewvnYyJkfMzjjdqhWFZd/5Ag a/WWjZlVlenunO2LoGMF7D23oyuTpOfTY6iSDbmI4Zirwidn5fvRRq6b60r6ICcMIZvb2X+tc7S FuQVnNwdKmDT18w== X-Google-Smtp-Source: AGHT+IE6QPmzhVXQvjH1eXsTyd2YdL9l7VZ/3CSYLRA2p8JdQDHWxRog3Gbb0+NxQduqq4gw6vwcJw== X-Received: by 2002:a05:6000:290d:b0:3a0:65bc:3543 with SMTP id ffacd0b85a97d-3a072afc393mr536179f8f.35.1745527042261; Thu, 24 Apr 2025 13:37:22 -0700 (PDT) Received: from [192.168.0.15] (cpc92320-cmbg19-2-0-cust719.5-4.cable.virginm.net. [82.13.66.208]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a073ca5debsm318852f8f.38.2025.04.24.13.37.21 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Apr 2025 13:37:21 -0700 (PDT) Message-ID: Date: Thu, 24 Apr 2025 21:37:26 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20250423204531.2432180-1-sw@jkqxz.net> <20250423204531.2432180-6-sw@jkqxz.net> <8866dc90-5281-4a21-9c65-aa634dd64cc1@gmail.com> From: Mark Thompson In-Reply-To: <8866dc90-5281-4a21-9c65-aa634dd64cc1@gmail.com> Subject: Re: [FFmpeg-devel] [PATCH v3 5/7] lavc/apv: AVX2 transquant for x86-64 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: T24gMjQvMDQvMjAyNSAwMzo1NSwgSmFtZXMgQWxtZXIgd3JvdGU6Cj4gT24gNC8yMy8yMDI1IDU6 NDUgUE0sIE1hcmsgVGhvbXBzb24gd3JvdGU6Cj4+IFR5cGljYWwgY2hlY2thc20gcmVzdWx0IG9u IEFsZGVyIExha2U6Cj4+Cj4+IGRlY29kZV90cmFuc3F1YW50XzhfYzrCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDQ2NC4yICgg MS4wMHgpCj4+IGRlY29kZV90cmFuc3F1YW50XzhfYXZ4MjrCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgODYuMiAoIDUuMzh4KQo+PiBk ZWNvZGVfdHJhbnNxdWFudF8xMF9jOsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDQ4MS42ICggMS4wMHgpCj4+IGRlY29kZV90cmFu c3F1YW50XzEwX2F2eDI6wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCA4My41ICggNS43N3gpCj4+IC0tLQo+PiDCoCBsaWJhdmNvZGVjL2Fw dl9kc3AuY8KgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA0ICsKPj4gwqAgbGliYXZjb2RlYy9hcHZf ZHNwLmjCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMiArCj4+IMKgIGxpYmF2Y29kZWMveDg2L01h a2VmaWxlwqDCoMKgwqDCoMKgIHzCoMKgIDIgKwo+PiDCoCBsaWJhdmNvZGVjL3g4Ni9hcHZfZHNw LmFzbcKgwqDCoCB8IDMxMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+IMKg IGxpYmF2Y29kZWMveDg2L2Fwdl9kc3BfaW5pdC5jIHzCoCA0NCArKysrKwo+PiDCoCB0ZXN0cy9j aGVja2FzbS9NYWtlZmlsZcKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPj4gwqAgdGVzdHMvY2hlY2th c20vYXB2X2RzcC5jwqDCoMKgwqDCoCB8IDEwOSArKysrKysrKysrKysKPj4gwqAgdGVzdHMvY2hl Y2thc20vY2hlY2thc20uY8KgwqDCoMKgIHzCoMKgIDMgKwo+PiDCoCB0ZXN0cy9jaGVja2FzbS9j aGVja2FzbS5owqDCoMKgwqAgfMKgwqAgMSArCj4+IMKgIHRlc3RzL2ZhdGUvY2hlY2thc20ubWFr wqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+PiDCoCAxMCBmaWxlcyBjaGFuZ2VkLCA0NzggaW5zZXJ0 aW9ucygrKQo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy94ODYvYXB2X2RzcC5h c20KPj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMveDg2L2Fwdl9kc3BfaW5pdC5j Cj4+IMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9jaGVja2FzbS9hcHZfZHNwLmMKPj4KPj4g Li4uCj4+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3g4Ni9hcHZfZHNwLmFzbSBiL2xpYmF2Y29k ZWMveDg2L2Fwdl9kc3AuYXNtCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAw MDAwMDAuLjEyZDk2NDgxZGUKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9saWJhdmNvZGVjL3g4 Ni9hcHZfZHNwLmFzbQo+PiBAQCAtMCwwICsxLDMxMSBAQAo+PiArOyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+ PiArOyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+PiArOyoKPj4gKzsqIEZGbXBlZyBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPj4gKzsqIG1v ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK Pj4gKzsqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlcgo+PiArOyogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4+ICs7Kgo+PiArOyogRkZtcGVnIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+ICs7KiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ PiArOyogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LsKgIFNlZSB0aGUgR05VCj4+ICs7KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgo+PiArOyoKPj4gKzsqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPj4gKzsqIExpY2Vuc2UgYWxvbmcg d2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPj4gKzsqIDUx LCBJbmMuLCBGb3VuZGF0aW9uIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg TUEgMDIxMTAtMTMwMSBVU0EKPj4gKzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKPj4gKwo+PiArJWlu Y2x1ZGUgImxpYmF2dXRpbC94ODYveDg2dXRpbC5hc20iCj4+ICsKPj4gKyVpZiBBUkNIX1g4Nl82 NAo+PiArCj4+ICtTRUNUSU9OX1JPREFUQSAzMgo+PiArCj4+ICs7IEZ1bGwgbWF0cml4IGZvciBy b3cgdHJhbnNmb3JtLgo+PiArY29uc3QgdG1hdHJpeF9yb3cKPj4gK8KgwqDCoCBkd8KgIDY0LMKg IDg5LMKgIDg0LMKgIDc1LMKgIDY0LMKgIDUwLMKgIDM1LMKgIDE4Cj4+ICvCoMKgwqAgZHfCoCA2 NCwgLTE4LCAtODQswqAgNTAswqAgNjQsIC03NSwgLTM1LMKgIDg5Cj4+ICvCoMKgwqAgZHfCoCA2 NCzCoCA3NSzCoCAzNSwgLTE4LCAtNjQsIC04OSwgLTg0LCAtNTAKPj4gK8KgwqDCoCBkd8KgIDY0 LCAtNTAsIC0zNSzCoCA4OSwgLTY0LCAtMTgswqAgODQsIC03NQo+PiArwqDCoMKgIGR3wqAgNjQs wqAgNTAsIC0zNSwgLTg5LCAtNjQswqAgMTgswqAgODQswqAgNzUKPj4gK8KgwqDCoCBkd8KgIDY0 LCAtNzUswqAgMzUswqAgMTgsIC02NCzCoCA4OSwgLTg0LMKgIDUwCj4+ICvCoMKgwqAgZHfCoCA2 NCzCoCAxOCwgLTg0LCAtNTAswqAgNjQswqAgNzUsIC0zNSwgLTg5Cj4+ICvCoMKgwqAgZHfCoCA2 NCwgLTg5LMKgIDg0LCAtNzUswqAgNjQsIC01MCzCoCAzNSwgLTE4Cj4+ICsKPj4gKzsgQ29uc3Rh bnQgcGFpcnMgZm9yIGJyb2FkY2FzdCBpbiBjb2x1bW4gdHJhbnNmb3JtLgo+PiArY29uc3QgdG1h dHJpeF9jb2xfZXZlbgo+PiArwqDCoMKgIGR3wqAgNjQswqAgNjQswqAgNjQsIC02NAo+PiArwqDC oMKgIGR3wqAgODQswqAgMzUswqAgMzUsIC04NAo+PiArY29uc3QgdG1hdHJpeF9jb2xfb2RkCj4+ ICvCoMKgwqAgZHfCoCA4OSzCoCA3NSzCoCA1MCzCoCAxOAo+PiArwqDCoMKgIGR3wqAgNzUsIC0x OCwgLTg5LCAtNTAKPj4gK8KgwqDCoCBkd8KgIDUwLCAtODkswqAgMTgswqAgNzUKPj4gK8KgwqDC oCBkd8KgIDE4LCAtNTAswqAgNzUsIC04OQo+PiArCj4+ICs7IE1lbW9yeSB0YXJnZXRzIGZvciB2 cGJyb2FkY2FzdGQgKHJlZ2lzdGVyIHZlcnNpb24gcmVxdWlyZXMgQVZYNTEyKS4KPj4gK2NleHRl cm4gcGRfMQo+PiArY29uc3Qgc2l4dHlmb3VyCj4+ICvCoMKgwqAgZGTCoCA2NAo+PiArCj4+ICtT RUNUSU9OIC50ZXh0Cj4+ICsKPj4gKzsgdm9pZCBmZl9hcHZfZGVjb2RlX3RyYW5zcXVhbnRfYXZ4 Mih2b2lkICpvdXRwdXQsCj4+ICs7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwdHJkaWZmX3QgcGl0Y2gsCj4+ICs7 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBjb25zdCBpbnQxNl90ICppbnB1dCwKPj4gKzvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNv bnN0IGludDE2X3QgKnFtYXRyaXgsCj4+ICs7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgYml0X2RlcHRoLAo+ PiArO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaW50IHFwX3NoaWZ0KTsKPj4gKwo+PiArSU5JVF9ZTU0gYXZ4Mgo+ PiArCj4+ICtjZ2xvYmFsIGFwdl9kZWNvZGVfdHJhbnNxdWFudCwgNSwgNywgMTYsIG91dHB1dCwg cGl0Y2gsIGlucHV0LCBxbWF0cml4LCBiaXRfZGVwdGgsIHFwX3NoaWZ0LCB0bXAKPj4gKwo+PiAr wqDCoMKgIDsgTG9hZCBpbnB1dCBhbmQgZGVxdWFudGlzZQo+PiArCj4+ICvCoMKgwqAgdnBicm9h ZGNhc3RkwqAgbTEwLCBbcGRfMV0KPj4gK8KgwqDCoCBsZWHCoMKgwqDCoMKgwqAgdG1wZCwgW2Jp dF9kZXB0aGQgLSAyXQo+PiArwqDCoMKgIG1vdmTCoMKgwqDCoMKgIHhtOCwgcXBfc2hpZnRtCj4+ ICvCoMKgwqAgbW92ZMKgwqDCoMKgwqAgeG05LCB0bXBkCj4+ICvCoMKgwqAgdnBzbGxkwqDCoMKg IG0xMCwgbTEwLCB4bTkKPj4gK8KgwqDCoCB2cHNybGTCoMKgwqAgbTEwLCBtMTAsIDEKPj4gKwo+ PiArwqDCoMKgIDsgbTjCoCA9IHNjYWxhciBxcF9zaGlmdAo+PiArwqDCoMKgIDsgbTnCoCA9IHNj YWxhciBiZF9zaGlmdAo+PiArwqDCoMKgIDsgbTEwID0gdmVjdG9yIDEgPDwgKGJkX3NoaWZ0IC0g MSkKPj4gK8KgwqDCoCA7IG0xMSA9IHFtYXRyaXggbG9hZAo+PiArCj4+ICslbWFjcm8gTE9BRF9B TkRfREVRVUFOVCAyIDsgKHhtbSBpbnB1dCwgY29uc3RhbnQgb2Zmc2V0KQo+PiArwqDCoMKgIHZw bW92c3h3ZCBtJTEsIFtpbnB1dHHCoMKgICsgJTJdCj4+ICvCoMKgwqAgdnBtb3ZzeHdkIG0xMSwg W3FtYXRyaXhxICsgJTJdCj4+ICvCoMKgwqAgdnBtYWRkd2TCoCBtJTEsIG0lMSwgbTExCj4+ICvC oMKgwqAgdnBzbGxkwqDCoMKgIG0lMSwgbSUxLCB4bTgKPj4gK8KgwqDCoCB2cGFkZGTCoMKgwqAg bSUxLCBtJTEsIG0xMAo+PiArwqDCoMKgIHZwc3JhZMKgwqDCoCBtJTEsIG0lMSwgeG05Cj4+ICvC oMKgwqAgdnBhY2tzc2R3IG0lMSwgbSUxLCBtJTEKPj4gKyVlbmRtYWNybwo+PiArCj4+ICvCoMKg wqAgTE9BRF9BTkRfREVRVUFOVCAwLCAweDAwCj4+ICvCoMKgwqAgTE9BRF9BTkRfREVRVUFOVCAx LCAweDEwCj4+ICvCoMKgwqAgTE9BRF9BTkRfREVRVUFOVCAyLCAweDIwCj4+ICvCoMKgwqAgTE9B RF9BTkRfREVRVUFOVCAzLCAweDMwCj4+ICvCoMKgwqAgTE9BRF9BTkRfREVRVUFOVCA0LCAweDQw Cj4+ICvCoMKgwqAgTE9BRF9BTkRfREVRVUFOVCA1LCAweDUwCj4+ICvCoMKgwqAgTE9BRF9BTkRf REVRVUFOVCA2LCAweDYwCj4+ICvCoMKgwqAgTE9BRF9BTkRfREVRVUFOVCA3LCAweDcwCj4+ICsK Pj4gK8KgwqDCoCA7IG1OID0gcm93IE4gd29yZHMgMCAxIDIgMyAwIDEgMiAzIDQgNSA2IDcgNCA1 IDYgNwo+PiArCj4+ICvCoMKgwqAgOyBUcmFuc2Zvcm0gY29sdW1ucwo+PiArwqDCoMKgIDsgVGhp cyBhcHBsaWVzIGEgMS1EIERDVCBidXR0ZXJmbHkKPj4gKwo+PiArwqDCoMKgIHZwdW5wY2tsd2TC oCBtMTIsIG0wLMKgIG00Cj4+ICvCoMKgwqAgdnB1bnBja2x3ZMKgIG0xMywgbTIswqAgbTYKPj4g K8KgwqDCoCB2cHVucGNrbHdkwqAgbTE0LCBtMSzCoCBtMwo+PiArwqDCoMKgIHZwdW5wY2tsd2TC oCBtMTUsIG01LMKgIG03Cj4+ICsKPj4gK8KgwqDCoCA7IG0xMiA9IHJvd3MgMCBhbmQgNCBpbnRl cmxlYXZlZAo+PiArwqDCoMKgIDsgbTEzID0gcm93cyAyIGFuZCA2IGludGVybGVhdmVkCj4+ICvC oMKgwqAgOyBtMTQgPSByb3dzIDEgYW5kIDMgaW50ZXJsZWF2ZWQKPj4gK8KgwqDCoCA7IG0xNSA9 IHJvd3MgNSBhbmQgNyBpbnRlcmxlYXZlZAo+PiArCj4+ICvCoMKgwqAgbGVhwqDCoMKgwqDCoMKg wqDCoCB0bXBxLCBbdG1hdHJpeF9jb2xfZXZlbl0KPj4gK8KgwqDCoCB2cGJyb2FkY2FzdGTCoMKg IG0wLCBbdG1wcSArIDB4MDBdCj4+ICvCoMKgwqAgdnBicm9hZGNhc3RkwqDCoCBtMSwgW3RtcHEg KyAweDA0XQo+PiArwqDCoMKgIHZwYnJvYWRjYXN0ZMKgwqAgbTIsIFt0bXBxICsgMHgwOF0KPj4g K8KgwqDCoCB2cGJyb2FkY2FzdGTCoMKgIG0zLCBbdG1wcSArIDB4MGNdCj4gCj4gSG93IGFib3V0 Cj4gCj4gwqDCoMKgIHZicm9hZGNhc3RpMTI4wqDCoCBtMCwgW3RtYXRyaXhfY29sX2V2ZW5dCj4g wqDCoMKgIHBzaHVmZMKgwqAgbTEsIG0wLCBxMTExMQo+IMKgwqDCoCBwc2h1ZmTCoMKgIG0yLCBt MCwgcTIyMjIKPiDCoMKgwqAgcHNodWZkwqDCoCBtMywgbTAsIHEzMzMzCj4gwqDCoMKgIHBzaHVm ZMKgwqAgbTAsIG0wLCBxMDAwMAo+IAo+IFNvIHlvdSByZW1vdmUgdGhlIGxlYSwgYW5kIGRvIGEg c2luZ2xlIGxvYWQgZnJvbSBtZW1vcnkgd2l0aGluIGEgc2luZ2xlIGNyb3NzLWxhbmUgaW50cnVj dGlvbiwgaW5zdGVhZCBvZiBmb3VyIG9mIGVhY2guCj4gCj4gU2FtZSBiZWxvdy4KClRoZSBicm9h ZGNhc3RzIGZyb20gbWVtb3J5IGFyZSBub3Qgc2xvdywgdGhleSBkb24ndCByZWFkIGZyb20gZWl0 aGVyIGxhbmUuCgpJIGNhbid0IG1lYXN1cmUgYSBkaWZmcmVuY2UgYnV0IGluc3RydWN0aW9uIHRh YmxlcyBoYXZlIHZwYnJvYWRjYXN0ZCBhcyAxLzMgYW5kIHBzaHVmZCBhcyAxLzIgc28gSSB0aGlu ayBJJ2xsIHRha2UgdGhhdCBhcyBhIHRpZS1icmVhaz8gIChsZWEgaXMgZnJlZSBhbmQgdGhleSB3 aWxsIGFsbCBsb2FkIHRvZ2V0aGVyLCB0aGUgdmJyb2FkY2FzdGkxMjggbG9hZCBpcyB1bmFsaWdu ZWQgYnV0IHByZXR0eSBzdXJlIHRoYXQgaXMgaXJyZWxldmFudC4pCgo+PiArCj4+ICvCoMKgwqAg dnBtYWRkd2TCoCBtNCzCoCBtMTIsIG0wCj4+ICvCoMKgwqAgdnBtYWRkd2TCoCBtNSzCoCBtMTIs IG0xCj4+ICvCoMKgwqAgdnBtYWRkd2TCoCBtNizCoCBtMTMsIG0yCj4+ICvCoMKgwqAgdnBtYWRk d2TCoCBtNyzCoCBtMTMsIG0zCj4+ICvCoMKgwqAgdnBhZGRkwqDCoMKgIG04LMKgIG00LMKgIG02 Cj4+ICvCoMKgwqAgdnBhZGRkwqDCoMKgIG05LMKgIG01LMKgIG03Cj4+ICvCoMKgwqAgdnBzdWJk wqDCoMKgIG0xMCwgbTUswqAgbTcKPj4gK8KgwqDCoCB2cHN1YmTCoMKgwqAgbTExLCBtNCzCoCBt Ngo+PiArCj4+ICvCoMKgwqAgbGVhwqDCoMKgwqDCoMKgwqDCoCB0bXBxLCBbdG1hdHJpeF9jb2xf b2RkXQo+PiArwqDCoMKgIHZwYnJvYWRjYXN0ZMKgwqAgbTAsIFt0bXBxICsgMHgwMF0KPj4gK8Kg wqDCoCB2cGJyb2FkY2FzdGTCoMKgIG0xLCBbdG1wcSArIDB4MDRdCj4+ICvCoMKgwqAgdnBicm9h ZGNhc3RkwqDCoCBtMiwgW3RtcHEgKyAweDA4XQo+PiArwqDCoMKgIHZwYnJvYWRjYXN0ZMKgwqAg bTMsIFt0bXBxICsgMHgwY10KPj4gKwo+PiArwqDCoMKgIHZwbWFkZHdkwqAgbTQswqAgbTE0LCBt MAo+PiArwqDCoMKgIHZwbWFkZHdkwqAgbTUswqAgbTE1LCBtMQo+PiArwqDCoMKgIHZwbWFkZHdk wqAgbTYswqAgbTE0LCBtMgo+PiArwqDCoMKgIHZwbWFkZHdkwqAgbTcswqAgbTE1LCBtMwo+PiAr wqDCoMKgIHZwYWRkZMKgwqDCoCBtMTIsIG00LMKgIG01Cj4+ICvCoMKgwqAgdnBhZGRkwqDCoMKg IG0xMywgbTYswqAgbTcKPj4gKwo+PiArwqDCoMKgIHZwYnJvYWRjYXN0ZMKgwqAgbTAsIFt0bXBx ICsgMHgxMF0KPj4gK8KgwqDCoCB2cGJyb2FkY2FzdGTCoMKgIG0xLCBbdG1wcSArIDB4MTRdCj4+ ICvCoMKgwqAgdnBicm9hZGNhc3RkwqDCoCBtMiwgW3RtcHEgKyAweDE4XQo+PiArwqDCoMKgIHZw YnJvYWRjYXN0ZMKgwqAgbTMsIFt0bXBxICsgMHgxY10KPj4gKwo+PiArwqDCoMKgIHZwbWFkZHdk wqAgbTQswqAgbTE0LCBtMAo+PiArwqDCoMKgIHZwbWFkZHdkwqAgbTUswqAgbTE1LCBtMQo+PiAr wqDCoMKgIHZwbWFkZHdkwqAgbTYswqAgbTE0LCBtMgo+PiArwqDCoMKgIHZwbWFkZHdkwqAgbTcs wqAgbTE1LCBtMwo+PiArwqDCoMKgIHZwYWRkZMKgwqDCoCBtMTQsIG00LMKgIG01Cj4+ICvCoMKg wqAgdnBhZGRkwqDCoMKgIG0xNSwgbTYswqAgbTcKPj4gKwo+PiArwqDCoMKgIHZwYWRkZMKgwqDC oCBtMCzCoCBtOCzCoCBtMTIKPj4gK8KgwqDCoCB2cGFkZGTCoMKgwqAgbTEswqAgbTkswqAgbTEz Cj4+ICvCoMKgwqAgdnBhZGRkwqDCoMKgIG0yLMKgIG0xMCwgbTE0Cj4+ICvCoMKgwqAgdnBhZGRk wqDCoMKgIG0zLMKgIG0xMSwgbTE1Cj4+ICvCoMKgwqAgdnBzdWJkwqDCoMKgIG00LMKgIG0xMSwg bTE1Cj4+ICvCoMKgwqAgdnBzdWJkwqDCoMKgIG01LMKgIG0xMCwgbTE0Cj4+ICvCoMKgwqAgdnBz dWJkwqDCoMKgIG02LMKgIG05LMKgIG0xMwo+PiArwqDCoMKgIHZwc3ViZMKgwqDCoCBtNyzCoCBt OCzCoCBtMTIKPj4gKwo+PiArwqDCoMKgIDsgTWlkLXRyYW5zZm9ybSBub3JtYWxpc2F0aW9uCj4+ ICvCoMKgwqAgOyBOb3RlIHRoYXQgb3V0cHV0cyBoZXJlIGFyZSBmaXR0ZWQgdG8gMTYgYml0cwo+ PiArCj4+ICvCoMKgwqAgdnBicm9hZGNhc3RkwqAgbTgsIFtzaXh0eWZvdXJdCj4+ICsKPj4gKyVt YWNybyBOT1JNQUxJU0UgMQo+PiArwqDCoMKgIHZwYWRkZMKgwqDCoCBtJTEsIG0lMSwgbTgKPj4g K8KgwqDCoCB2cHNyYWTCoMKgwqAgbSUxLCBtJTEsIDcKPj4gK8KgwqDCoCB2cGFja3NzZHcgbSUx LCBtJTEsIG0lMQo+PiArwqDCoMKgIHZwZXJtccKgwqDCoCBtJTEsIG0lMSwgcTMxMjAKPj4gKyVl bmRtYWNybwo+PiArCj4+ICvCoMKgwqAgTk9STUFMSVNFIDAKPj4gK8KgwqDCoCBOT1JNQUxJU0Ug MQo+PiArwqDCoMKgIE5PUk1BTElTRSAyCj4+ICvCoMKgwqAgTk9STUFMSVNFIDMKPj4gK8KgwqDC oCBOT1JNQUxJU0UgNAo+PiArwqDCoMKgIE5PUk1BTElTRSA1Cj4+ICvCoMKgwqAgTk9STUFMSVNF IDYKPj4gK8KgwqDCoCBOT1JNQUxJU0UgNwo+PiArCj4+ICvCoMKgwqAgOyBtTiA9IHJvdyBOIHdv cmRzIDAgMSAyIDMgNCA1IDYgNyAwIDEgMiAzIDQgNSA2IDcKPj4gKwo+PiArwqDCoMKgIDsgVHJh bnNmb3JtIHJvd3MKPj4gK8KgwqDCoCA7IFRoaXMgbXVsdGlwbGllcyB0aGUgcm93cyBkaXJlY3Rs eSBieSB0aGUgdHJhbnNmb3JtIG1hdHJpeCwKPj4gK8KgwqDCoCA7IGF2b2lkaW5nIHRoZSBuZWVk IHRvIHRyYW5zcG9zZSBhbnl0aGluZwo+PiArCj4+ICvCoMKgwqAgbGVhwqDCoMKgwqDCoMKgIHRt cHEsIFt0bWF0cml4X3Jvd10KPj4gK8KgwqDCoCBtb3ZhwqDCoMKgwqDCoCBtMTIsIFt0bXBxICsg MHgwMF0KPj4gK8KgwqDCoCBtb3ZhwqDCoMKgwqDCoCBtMTMsIFt0bXBxICsgMHgyMF0KPj4gK8Kg wqDCoCBtb3ZhwqDCoMKgwqDCoCBtMTQsIFt0bXBxICsgMHg0MF0KPj4gK8KgwqDCoCBtb3ZhwqDC oMKgwqDCoCBtMTUsIFt0bXBxICsgMHg2MF0KPj4gKwo+PiArJW1hY3JvIFRSQU5TX1JPV19TVEVQ IDEKPj4gK8KgwqDCoCB2cG1hZGR3ZMKgIG04LMKgIG0lMSwgbTEyCj4+ICvCoMKgwqAgdnBtYWRk d2TCoCBtOSzCoCBtJTEsIG0xMwo+PiArwqDCoMKgIHZwbWFkZHdkwqAgbTEwLCBtJTEsIG0xNAo+ PiArwqDCoMKgIHZwbWFkZHdkwqAgbTExLCBtJTEsIG0xNQo+PiArwqDCoMKgIHZwaGFkZGTCoMKg IG04LMKgIG04LMKgIG05Cj4+ICvCoMKgwqAgdnBoYWRkZMKgwqAgbTEwLCBtMTAsIG0xMQo+PiAr wqDCoMKgIHZwaGFkZGTCoMKgIG0lMSwgbTgswqAgbTEwCj4+ICslZW5kbWFjcm8KPj4gKwo+PiAr wqDCoMKgIFRSQU5TX1JPV19TVEVQIDAKPj4gK8KgwqDCoCBUUkFOU19ST1dfU1RFUCAxCj4+ICvC oMKgwqAgVFJBTlNfUk9XX1NURVAgMgo+PiArwqDCoMKgIFRSQU5TX1JPV19TVEVQIDMKPj4gK8Kg wqDCoCBUUkFOU19ST1dfU1RFUCA0Cj4+ICvCoMKgwqAgVFJBTlNfUk9XX1NURVAgNQo+PiArwqDC oMKgIFRSQU5TX1JPV19TVEVQIDYKPj4gK8KgwqDCoCBUUkFOU19ST1dfU1RFUCA3Cj4+ICsKPj4g K8KgwqDCoCA7IFJlbm9ybWFsaXNlLCBjbGlwIGFuZCBzdG9yZSBvdXRwdXQKPj4gKwo+PiArwqDC oMKgIHZwYnJvYWRjYXN0ZMKgIG0xNCwgW3BkXzFdCj4+ICvCoMKgwqAgbW92wqDCoMKgwqDCoMKg IHRtcGQsIDIwCj4+ICvCoMKgwqAgc3ViwqDCoMKgwqDCoMKgIHRtcGQsIGJpdF9kZXB0aGQKPj4g K8KgwqDCoCBtb3ZkwqDCoMKgwqDCoCB4bTksIHRtcGQKPj4gK8KgwqDCoCBkZWPCoMKgwqDCoMKg wqAgdG1wZAo+PiArwqDCoMKgIG1vdmTCoMKgwqDCoMKgIHhtMTMsIHRtcGQKPj4gK8KgwqDCoCBt b3ZkwqDCoMKgwqDCoCB4bTE1LCBiaXRfZGVwdGhkCj4+ICvCoMKgwqAgdnBzbGxkwqDCoMKgIG04 LMKgIG0xNCwgeG0xMwo+PiArwqDCoMKgIHZwc2xsZMKgwqDCoCBtMTIsIG0xNCwgeG0xNQo+PiAr wqDCoMKgIHZwc3JsZMKgwqDCoCBtMTAsIG0xMiwgMQo+PiArwqDCoMKgIHZwc3ViZMKgwqDCoCBt MTIsIG0xMiwgbTE0Cj4+ICvCoMKgwqAgdnB4b3LCoMKgwqDCoCBtMTEsIG0xMSwgbTExCj4+ICsK Pj4gK8KgwqDCoCA7IG04wqAgPSB2ZWN0b3IgMSA8PCAoYmRfc2hpZnQgLSAxKQo+PiArwqDCoMKg IDsgbTnCoCA9IHNjYWxhciBiZF9zaGlmdAo+PiArwqDCoMKgIDsgbTEwID0gdmVjdG9yIDEgPDwg KGJpdF9kZXB0aCAtIDEpCj4+ICvCoMKgwqAgOyBtMTEgPSB6ZXJvCj4+ICvCoMKgwqAgOyBtMTIg PSB2ZWN0b3IgKDEgPDwgYml0X2RlcHRoKSAtIDEKPj4gKwo+PiArwqDCoMKgIGNtcMKgwqDCoMKg wqDCoCBiaXRfZGVwdGhkLCA4Cj4+ICvCoMKgwqAgam5lwqDCoMKgwqDCoMKgIHN0b3JlXzEwCj4+ ICsKPj4gK8KgwqDCoCBsZWHCoMKgwqDCoMKgwqAgdG1wcSwgW3BpdGNocSArIDIqcGl0Y2hxXQo+ PiArJW1hY3JvIE5PUk1BTElTRV9BTkRfU1RPUkVfOCA0Cj4+ICvCoMKgwqAgdnBhZGRkwqDCoMKg IG0lMSwgbSUxLCBtOAo+PiArwqDCoMKgIHZwYWRkZMKgwqDCoCBtJTIsIG0lMiwgbTgKPj4gK8Kg wqDCoCB2cGFkZGTCoMKgwqAgbSUzLCBtJTMsIG04Cj4+ICvCoMKgwqAgdnBhZGRkwqDCoMKgIG0l NCwgbSU0LCBtOAo+PiArwqDCoMKgIHZwc3JhZMKgwqDCoCBtJTEsIG0lMSwgeG05Cj4+ICvCoMKg wqAgdnBzcmFkwqDCoMKgIG0lMiwgbSUyLCB4bTkKPj4gK8KgwqDCoCB2cHNyYWTCoMKgwqAgbSUz LCBtJTMsIHhtOQo+PiArwqDCoMKgIHZwc3JhZMKgwqDCoCBtJTQsIG0lNCwgeG05Cj4+ICvCoMKg wqAgdnBhZGRkwqDCoMKgIG0lMSwgbSUxLCBtMTAKPj4gK8KgwqDCoCB2cGFkZGTCoMKgwqAgbSUy LCBtJTIsIG0xMAo+PiArwqDCoMKgIHZwYWRkZMKgwqDCoCBtJTMsIG0lMywgbTEwCj4+ICvCoMKg wqAgdnBhZGRkwqDCoMKgIG0lNCwgbSU0LCBtMTAKPj4gK8KgwqDCoCA7IG0lMSA9IEEwLTMgQTQt Nwo+PiArwqDCoMKgIDsgbSUyID0gQjAtMyBCNC03Cj4+ICvCoMKgwqAgOyBtJTMgPSBDMC0zIEM0 LTcKPj4gK8KgwqDCoCA7IG0lNCA9IEQwLTMgRDQtNwo+PiArwqDCoMKgIHZwYWNrdXNkdyBtJTEs IG0lMSwgbSUyCj4+ICvCoMKgwqAgdnBhY2t1c2R3IG0lMywgbSUzLCBtJTQKPj4gK8KgwqDCoCA7 IG0lMSA9IEEwLTMgQjAtMyBBNC03IEI0LTcKPj4gK8KgwqDCoCA7IG0lMiA9IEMwLTMgRDAtMyBD NC03IEQ0LTcKPj4gK8KgwqDCoCB2cGVybXHCoMKgwqAgbSUxLCBtJTEsIHEzMTIwCj4+ICvCoMKg wqAgdnBlcm1xwqDCoMKgIG0lMiwgbSUzLCBxMzEyMAo+PiArwqDCoMKgIDsgbSUxID0gQTAtMyBB NC03IEIwLTMgQjQtNwo+PiArwqDCoMKgIDsgbSUyID0gQzAtMyBDNC03IEQwLTMgRDQtNwo+PiAr wqDCoMKgIHZwYWNrdXN3YiBtJTEsIG0lMSwgbSUyCj4+ICvCoMKgwqAgOyBtJTEgPSBBMC0zIEE0 LTcgQzAtMyBDNC03IEIwLTMgQjQtNyBEMC0zIEQ0LTcKPj4gK8KgwqDCoCB2ZXh0cmFjdGkxMjjC oCB4bSUyLCBtJTEsIDEKPj4gK8KgwqDCoCB2cHNybGRxwqDCoCB4bSUzLCB4bSUxLCA4Cj4+ICvC oMKgwqAgdnBzcmxkccKgwqAgeG0lNCwgeG0lMiwgOAo+PiArwqDCoMKgIHZtb3ZxwqDCoMKgwqAg W291dHB1dHFdLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeG0lMQo+PiArwqDCoMKgIHZtb3ZxwqDC oMKgwqAgW291dHB1dHEgKyBwaXRjaHFdLMKgwqAgeG0lMgo+PiArwqDCoMKgIHZtb3ZxwqDCoMKg wqAgW291dHB1dHEgKyAyKnBpdGNocV0sIHhtJTMKPj4gK8KgwqDCoCB2bW92ccKgwqDCoMKgIFtv dXRwdXRxICsgdG1wcV0swqDCoMKgwqAgeG0lNAo+IAo+IMKgwqDCoCB2ZXh0cmFjdGkxMjjCoCB4 bSUyLCBtJTEsIDEKPiDCoMKgwqAgdm1vdnHCoMKgwqDCoCBbb3V0cHV0cV0swqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB4bSUxCj4gwqDCoMKgIHZtb3ZxwqDCoMKgwqAgW291dHB1dHEgKyBwaXRjaHFd LMKgwqAgeG0lMgo+IMKgwqDCoCB2cGV4dHJxwqDCoCBbb3V0cHV0cSArIDIqcGl0Y2hxXSwgeG0l MSwgMQo+IMKgwqDCoCB2cGV4dHJxwqDCoCBbb3V0cHV0cSArIHRtcHFdLMKgwqDCoMKgIHhtJTIs IDEKPiAKPiBTYXZlcyB5b3UgdHdvIHZwc3JsZHEsIGFuZCBtYXkgb3IgbWF5IG5vdCBiZSBmYXN0 ZXIuIEZlZWwgZnJlZSB0byBiZW5jaCBvciBpZ25vcmUuCgpNeSBtZWFzdXJlbWVudHMgYXJlIG5v dCBhY2N1cmF0ZSBlbm91Z2ggdG8gc2VlIGEgZGlmZmVyZW5jZSBidXQgaW5zdHJ1Y3Rpb24gdGFi bGVzIHNheSBpdCBzaG91bGQgd2luLCBzbyBJJ2xsIHRha2UgaXQuCgo+PiArwqDCoMKgIGxlYcKg wqDCoMKgwqDCoCBvdXRwdXRxLCBbb3V0cHV0cSArIDQqcGl0Y2hxXQo+PiArJWVuZG1hY3JvCj4+ ICsKPj4gK8KgwqDCoCBOT1JNQUxJU0VfQU5EX1NUT1JFXzggMCwgMSwgMiwgMwo+PiArwqDCoMKg IE5PUk1BTElTRV9BTkRfU1RPUkVfOCA0LCA1LCA2LCA3Cj4+ICsKPj4gK8KgwqDCoCBSRVQKPj4g Kwo+PiArc3RvcmVfMTA6Cj4+ICsKPj4gKyVtYWNybyBOT1JNQUxJU0VfQU5EX1NUT1JFXzEwIDIK Pj4gK8KgwqDCoCB2cGFkZGTCoMKgwqAgbSUxLCBtJTEsIG04Cj4+ICvCoMKgwqAgdnBhZGRkwqDC oMKgIG0lMiwgbSUyLCBtOAo+PiArwqDCoMKgIHZwc3JhZMKgwqDCoCBtJTEsIG0lMSwgeG05Cj4+ ICvCoMKgwqAgdnBzcmFkwqDCoMKgIG0lMiwgbSUyLCB4bTkKPj4gK8KgwqDCoCB2cGFkZGTCoMKg wqAgbSUxLCBtJTEsIG0xMAo+PiArwqDCoMKgIHZwYWRkZMKgwqDCoCBtJTIsIG0lMiwgbTEwCj4+ ICvCoMKgwqAgdnBtYXhzZMKgwqAgbSUxLCBtJTEsIG0xMQo+PiArwqDCoMKgIHZwbWF4c2TCoMKg IG0lMiwgbSUyLCBtMTEKPj4gK8KgwqDCoCB2cG1pbnNkwqDCoCBtJTEsIG0lMSwgbTEyCj4+ICvC oMKgwqAgdnBtaW5zZMKgwqAgbSUyLCBtJTIsIG0xMgo+PiArwqDCoMKgIDsgbSUxID0gQTAtMyBB NC03Cj4+ICvCoMKgwqAgOyBtJTIgPSBCMC0zIEI0LTcKPj4gK8KgwqDCoCB2cGFja3VzZHcgbSUx LCBtJTEsIG0lMgo+PiArwqDCoMKgIDsgbSUxID0gQTAtMyBCMC0zIEE0LTcgQjQtNwo+PiArwqDC oMKgIHZwZXJtccKgwqDCoCBtJTEsIG0lMSwgcTMxMjAKPj4gK8KgwqDCoCA7IG0lMSA9IEEwLTMg QTQtNyBCMC0zIEI0LTcKPj4gK8KgwqDCoCB2ZXh0cmFjdGkxMjjCoCBbb3V0cHV0cV0swqDCoMKg wqDCoMKgwqDCoMKgIG0lMSwgMAo+IAo+IG1vdmEgW291dHB1dHFdLCB4bSUxCj4gCj4gVGhlcmUn cyBwcmV0dHkgbXVjaCBuZXZlciBhIGdvb2QgcmVhc29uIHRvIHVzZSBleHRyYWN0IGZvciB0aGUg bG93ZXIgYml0cy4KClllcC4gIE5pY2VseSBzeW1tZXRyaWNhbCBjb2RlIGlzIG5vdCBlbm91Z2gg b2YgYSBnb29kIHJlYXNvbiA6KAoKPj4gK8KgwqDCoCB2ZXh0cmFjdGkxMjjCoCBbb3V0cHV0cSAr IHBpdGNocV0sIG0lMSwgMQo+PiArwqDCoMKgIGxlYcKgwqDCoMKgwqDCoCBvdXRwdXRxLCBbb3V0 cHV0cSArIDIqcGl0Y2hxXQo+PiArJWVuZG1hY3JvCj4+ICsKPj4gK8KgwqDCoCBOT1JNQUxJU0Vf QU5EX1NUT1JFXzEwIDAsIDEKPj4gK8KgwqDCoCBOT1JNQUxJU0VfQU5EX1NUT1JFXzEwIDIsIDMK Pj4gK8KgwqDCoCBOT1JNQUxJU0VfQU5EX1NUT1JFXzEwIDQsIDUKPj4gK8KgwqDCoCBOT1JNQUxJ U0VfQU5EX1NUT1JFXzEwIDYsIDcKPj4gKwo+PiArwqDCoMKgIFJFVAo+PiArCj4+ICslZW5kaWYg OyBBUkNIX1g4Nl82NAo+PiAuLi4KPj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrYXNtL2Fwdl9k c3AuYyBiL3Rlc3RzL2NoZWNrYXNtL2Fwdl9kc3AuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ PiBpbmRleCAwMDAwMDAwMDAwLi5iM2FkYjhjYTA2Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIv dGVzdHMvY2hlY2thc20vYXB2X2RzcC5jCj4+IEBAIC0wLDAgKzEsMTA5IEBACj4+ICsvKgo+PiAr ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+PiArICoKPj4gKyAqIEZGbXBlZyBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPj4gKyAqIG1vZGlm eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPj4g KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlcgo+PiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4+ICsgKgo+PiArICogRkZtcGVnIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+ICsgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+PiAr ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLsKg IFNlZSB0aGUgR05VCj4+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgo+PiArICoKPj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0 aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPj4gKyAqIEZvdW5k YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg MDIxMTAtMTMwMSBVU0EKPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVkZSA8c3RkaW50Lmg+Cj4+ICsK Pj4gKyNpbmNsdWRlICJjaGVja2FzbS5oIgo+PiArCj4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2F0 dHJpYnV0ZXMuaCIKPj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvbWVtX2ludGVybmFsLmgiCj4+ICsj aW5jbHVkZSAibGliYXZjb2RlYy9hcHZfZHNwLmgiCj4+ICsKPj4gKwo+PiArc3RhdGljIHZvaWQg Y2hlY2tfZGVjb2RlX3RyYW5zcXVhbnRfOCh2b2lkKQo+PiArewo+PiArwqDCoMKgIExPQ0FMX0FM SUdORURfMTYoaW50MTZfdCwgaW5wdXQswqDCoMKgwqDCoCBbNjRdKTsKPj4gK8KgwqDCoCBMT0NB TF9BTElHTkVEXzE2KGludDE2X3QsIHFtYXRyaXgswqDCoMKgIFs2NF0pOwo+PiArwqDCoMKgIExP Q0FMX0FMSUdORURfMTYodWludDhfdCwgbmV3X291dHB1dCwgWzY0XSk7Cj4+ICvCoMKgwqAgTE9D QUxfQUxJR05FRF8xNih1aW50OF90LCByZWZfb3V0cHV0LCBbNjRdKTsKPj4gKwo+PiArwqDCoMKg IGRlY2xhcmVfZnVuYyh2b2lkLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dWludDhfdCAqb3V0cHV0LAo+IAo+IG5pdDogdGhpcyBwYXJhbWV0ZXIgaXMgdm9pZCosIHNvIG1h eWJlIGp1c3QgdXNlIHRoYXQgaW5zdGVhZC4KCkZhaXIuICBJIHdhcyB3b25kZXJpbmcgd2hldGhl ciB0byB0ZW1wbGF0ZSB0d28gZnVuY3Rpb25zIHdoaWNoIGxldHMgaXQga2VlcCB0aGUgdHlwZSwg YnV0IHRoZSBmYWN0IHRoYXQgdGhlIGJyYW5jaCBpcyBjb21wbGV0ZWx5IHByZWRpY3RhYmxlIG1h a2VzIGl0IHNlZW0gbGlrZSBhIHdhc3RlLAoKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHB0cmRpZmZfdCBwaXRjaCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNvbnN0IGludDE2X3QgKmlucHV0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY29uc3QgaW50MTZfdCAqcW1hdHJpeCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGludCBiaXRfZGVwdGgsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpbnQgcXBfc2hpZnQpOwo+PiArCj4+ICvCoMKgwqAgZm9yIChpbnQgaSA9IDA7IGkgPCA2 NDsgaSsrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAvLyBBbnkgc2lnbmVkIDEyLWJpdCBpbnRlZ2Vy Lgo+PiArwqDCoMKgwqDCoMKgwqAgaW5wdXRbaV0gPSBybmQoKSAlIDIwNDggLSAxMDI0Owo+PiAr Cj4+ICvCoMKgwqDCoMKgwqDCoCAvLyBxbWF0cml4IGlucHV0IGlzIHByZW11bHRpcGxpZWQgYnkg bGV2ZWxfc2NhbGUsIHNvCj4+ICvCoMKgwqDCoMKgwqDCoCAvLyByYW5nZSBpcyAxIHRvIDI1NSAq IDcxLsKgIEludGVyZXN0aW5nIHZhbHVlcyBhcmUgYWxsCj4+ICvCoMKgwqDCoMKgwqDCoCAvLyBh dCB0aGUgbG93IGVuZCBvZiB0aGF0LCB0aG91Z2guCj4+ICvCoMKgwqDCoMKgwqDCoCBxbWF0cml4 W2ldID0gcm5kKCkgJSAxNiArIDE2Owo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGNhbGxf cmVmKHJlZl9vdXRwdXQsIDgsIGlucHV0LCBxbWF0cml4LCA4LCA0KTsKPj4gK8KgwqDCoCBjYWxs X25ldyhuZXdfb3V0cHV0LCA4LCBpbnB1dCwgcW1hdHJpeCwgOCwgNCk7Cj4+ICsKPj4gK8KgwqDC oCBpZiAobWVtY21wKG5ld19vdXRwdXQsIHJlZl9vdXRwdXQsIDY0ICogc2l6ZW9mKCpyZWZfb3V0 cHV0KSkpCj4+ICvCoMKgwqDCoMKgwqDCoCBmYWlsKCk7Cj4+ICsKPj4gK8KgwqDCoCBiZW5jaF9u ZXcobmV3X291dHB1dCwgOCwgaW5wdXQsIHFtYXRyaXgsIDgsIDQpOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgdm9pZCBjaGVja19kZWNvZGVfdHJhbnNxdWFudF8xMCh2b2lkKQo+PiArewo+PiArwqDC oMKgIExPQ0FMX0FMSUdORURfMTYoIGludDE2X3QsIGlucHV0LMKgwqDCoMKgwqAgWzY0XSk7Cj4+ ICvCoMKgwqAgTE9DQUxfQUxJR05FRF8xNiggaW50MTZfdCwgcW1hdHJpeCzCoMKgwqAgWzY0XSk7 Cj4+ICvCoMKgwqAgTE9DQUxfQUxJR05FRF8xNih1aW50MTZfdCwgbmV3X291dHB1dCwgWzY0XSk7 Cj4+ICvCoMKgwqAgTE9DQUxfQUxJR05FRF8xNih1aW50MTZfdCwgcmVmX291dHB1dCwgWzY0XSk7 Cj4+ICsKPj4gK8KgwqDCoCBkZWNsYXJlX2Z1bmModm9pZCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHVpbnQxNl90ICpvdXRwdXQsCj4gCj4gRGl0dG8uCj4gCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwdHJkaWZmX3QgcGl0Y2gsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBpbnQxNl90ICppbnB1dCwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IGludDE2X3QgKnFtYXRyaXgsCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgYml0X2RlcHRoLAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IHFwX3NoaWZ0KTsKPj4gKwo+PiArwqDCoMKg IGZvciAoaW50IGkgPSAwOyBpIDwgNjQ7IGkrKykgewo+PiArwqDCoMKgwqDCoMKgwqAgLy8gQW55 IHNpZ25lZCAxNC1iaXQgaW50ZWdlci4KPj4gK8KgwqDCoMKgwqDCoMKgIGlucHV0W2ldID0gcm5k KCkgJSAxNjM4NCAtIDgxOTI7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIC8vIHFtYXRyaXggaW5w dXQgaXMgcHJlbXVsdGlwbGllZCBieSBsZXZlbF9zY2FsZSwgc28KPj4gK8KgwqDCoMKgwqDCoMKg IC8vIHJhbmdlIGlzIDEgdG8gMjU1ICogNzEuwqAgSW50ZXJlc3RpbmcgdmFsdWVzIGFyZSBhbGwK Pj4gK8KgwqDCoMKgwqDCoMKgIC8vIGF0IHRoZSBsb3cgZW5kIG9mIHRoYXQsIHRob3VnaC4KPj4g K8KgwqDCoMKgwqDCoMKgIHFtYXRyaXhbaV0gPSAxNjsgLy9ybmQoKSAlIDE2ICsgMTY7Cj4+ICvC oMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgY2FsbF9yZWYocmVmX291dHB1dCwgMTYsIGlucHV0LCBx bWF0cml4LCAxMCwgNCk7Cj4+ICvCoMKgwqAgY2FsbF9uZXcobmV3X291dHB1dCwgMTYsIGlucHV0 LCBxbWF0cml4LCAxMCwgNCk7Cj4+ICsKPj4gK8KgwqDCoCBpZiAobWVtY21wKG5ld19vdXRwdXQs IHJlZl9vdXRwdXQsIDY0ICogc2l6ZW9mKCpyZWZfb3V0cHV0KSkpCj4+ICvCoMKgwqDCoMKgwqDC oCBmYWlsKCk7Cj4+ICsKPj4gK8KgwqDCoCBiZW5jaF9uZXcobmV3X291dHB1dCwgMTYsIGlucHV0 LCBxbWF0cml4LCAxMCwgNCk7Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgY2hlY2thc21fY2hlY2tfYXB2 X2RzcCh2b2lkKQo+PiArewo+PiArwqDCoMKgIEFQVkRTUENvbnRleHQgZHNwOwo+PiArCj4+ICvC oMKgwqAgZmZfYXB2X2RzcF9pbml0KCZkc3ApOwo+PiArCj4+ICvCoMKgwqAgaWYgKGNoZWNrX2Z1 bmMoZHNwLmRlY29kZV90cmFuc3F1YW50LCAiZGVjb2RlX3RyYW5zcXVhbnRfOCIpKQo+PiArwqDC oMKgwqDCoMKgwqAgY2hlY2tfZGVjb2RlX3RyYW5zcXVhbnRfOCgpOwo+PiArCj4+ICvCoMKgwqAg aWYgKGNoZWNrX2Z1bmMoZHNwLmRlY29kZV90cmFuc3F1YW50LCAiZGVjb2RlX3RyYW5zcXVhbnRf MTAiKSkKPj4gK8KgwqDCoMKgwqDCoMKgIGNoZWNrX2RlY29kZV90cmFuc3F1YW50XzEwKCk7Cj4+ ICsKPj4gK8KgwqDCoCByZXBvcnQoImFwdl9kc3AiKTsKPiAKPiByZXBvcnQoImRlY29kZV90cmFu c3F1YW50Iik7Cj4gCj4gU28geW91IGdldAo+IAo+IMKgLSBhcHZfZHNwLmRlY29kZV90cmFuc3F1 YW50IFtPS10KPiAKPiBpbnN0ZWFkIG9mCj4gCj4gwqAtIGFwdl9kc3AuYXB2X2RzcCBbT0tdCj4g Cj4gSW4gdGhlIGNoZWNrYXNtIG91dHB1dC4KCkFoLCBJIGhhZG4ndCBjb25uZWN0ZWQgdGhhdCBv dXRwdXQgdG8gdGhlIHN0cmluZyBoZXJlLiAgRml4ZWQuCgo+PiArfQo+PiBkaWZmIC0tZ2l0IGEv dGVzdHMvY2hlY2thc20vY2hlY2thc20uYyBiL3Rlc3RzL2NoZWNrYXNtL2NoZWNrYXNtLmMKPj4g aW5kZXggNDEyYjhiMmNkMS4uM2JiODJlZDBlNSAxMDA2NDQKPj4gLS0tIGEvdGVzdHMvY2hlY2th c20vY2hlY2thc20uYwo+PiArKysgYi90ZXN0cy9jaGVja2FzbS9jaGVja2FzbS5jCj4+IEBAIC0x MjksNiArMTI5LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB7Cj4+IMKgwqDCoMKgwqAgI2lmIENP TkZJR19BTEFDX0RFQ09ERVIKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHsgImFsYWNkc3AiLCBjaGVj a2FzbV9jaGVja19hbGFjZHNwIH0sCj4+IMKgwqDCoMKgwqAgI2VuZGlmCj4+ICvCoMKgwqAgI2lm IENPTkZJR19BUFZfREVDT0RFUgo+PiArwqDCoMKgwqDCoMKgwqAgeyAiYXB2X2RzcCIsIGNoZWNr YXNtX2NoZWNrX2Fwdl9kc3AgfSwKPj4gK8KgwqDCoCAjZW5kaWYKPj4gwqDCoMKgwqDCoCAjaWYg Q09ORklHX0FVRElPRFNQCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB7ICJhdWRpb2RzcCIsIGNoZWNr YXNtX2NoZWNrX2F1ZGlvZHNwIH0sCj4+IMKgwqDCoMKgwqAgI2VuZGlmCj4+IC4uLgoKVGhhbmtz LAoKLSBNYXJrCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBz Oi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3Jp YmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBl Zy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==