Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rNZQ9-00DQFJ-BA for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Jan 2024 14:19:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rNZQ8-004XcH-HP for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Jan 2024 14:19:04 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rNZQ7-004Xc8-UR for pgsql-hackers@lists.postgresql.org; Wed, 10 Jan 2024 14:19:04 +0000 Received: from mail-yw1-x1130.google.com ([2607:f8b0:4864:20::1130]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rNZQ4-000r0Q-39 for pgsql-hackers@lists.postgresql.org; Wed, 10 Jan 2024 14:19:02 +0000 Received: by mail-yw1-x1130.google.com with SMTP id 00721157ae682-5f8cf76ef5bso30615747b3.0 for ; Wed, 10 Jan 2024 06:19:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1704896339; x=1705501139; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=XMnxc+lwsIxe+77wNRUUd6i3MjHGurrz8lGi3KUzZE0=; b=Sa4c6JlKzCRCw26n1ZMolUk6c37ip+7OOc8xrrbVz9X5IYTpAoqzOjs3tQXq5fItII DAgF1iiq+/9/okDs2tcDtGOKFGa4/ot9blJQKyW8yNFT9dwrwsFbBllK3yRBoxsySrEf f0ZyWDHozdBaHpLT2cPL+KBEB9W2qJQWOPkwYj2T08V9WxnPcVdJMeuK/x0+i2EOYu+S elS5JNLbq++eyg9FfhfYPimy5Y/R9oUkWfle//Elj4TweBAErJrewf9i7W0qIuGwbMQK 7yM6wH/8BOcgatYGVO4enIqGJBds2+Y8+N7Ikv8m9hFZyCBRa1qy+gv25fvJ3pdptUzm kOZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704896339; x=1705501139; h=cc: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=XMnxc+lwsIxe+77wNRUUd6i3MjHGurrz8lGi3KUzZE0=; b=ZiSUyd6581GyhgaiWHj2aA3gj8hu11niLv1B/o3Ms39DxorCYP3B3EHVmbF0tVEZRG Mvs+Iz7yCagNF3fRrlfWRspnxq+w8o3CxDpUFbY+xhPihYO4XEMvKYyboKNtC6I2BfGV IfPMwo2QZ2CUNpnmWx26aB0ky/uSIO2j+vVjc7e5g96WCl9LbqAPtTw23ZI3c+8V0Jqn CH755Al8XSud50egBcNldApHgSsdf4kbwXxbQpRS4ypCfLGErKzmDDypTfBw2/2ZRivt K6JKaVVhPWnE5H5rEPl8JSyt06yl/rgEvRm6HC73xMzJFnfarejh0fLGVpKzNea+xOwd hjMA== X-Gm-Message-State: AOJu0YzUoOFlX0OIggP4MzKt3tUMs2QN8cKwXOa5WIqgWDPqDDSqUvIP It5jTrbJT4Xs3nuYzXEDNuw6YNI805dJp7+gd5SxYUSIY4g8xW99tyI= X-Google-Smtp-Source: AGHT+IGoXk7SnRO/Zei8zoTrZ0Ffua0kNeNH62DJ3dIzKC2G+lEBNoFVkGwK6isKBTlVPNsTU3DeE/eeaxSBY1FuFVA= X-Received: by 2002:a81:4857:0:b0:5ee:1ca0:b7ef with SMTP id v84-20020a814857000000b005ee1ca0b7efmr1247497ywa.42.1704896339281; Wed, 10 Jan 2024 06:18:59 -0800 (PST) MIME-Version: 1.0 References: <437ccbcf-8f80-2919-411d-a3af88becf6c@cybertec.at> <77f4bacbeb9d223f90b3a0bd55ef7d65407bfddd.camel@oopsware.de> In-Reply-To: From: jian he Date: Wed, 10 Jan 2024 22:18:00 +0800 Message-ID: Subject: Re: [PATCH] Add sortsupport for range types and btree_gist To: Bernd Helmle Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000afcb23060e981c9a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000afcb23060e981c9a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Jan 10, 2024 at 8:00=E2=80=AFAM jian he wrote: > > ` > from the doc, add sortsupport function will only influence index build ti= me? > > +/* > + * GiST sortsupport comparator for ranges. > + * > + * Operates solely on the lower bounds of the ranges, comparing them usi= ng > + * range_cmp_bounds(). > + * Empty ranges are sorted before non-empty ones. > + */ > +static int > +range_gist_cmp(Datum a, Datum b, SortSupport ssup) > +{ > + RangeType *range_a =3D DatumGetRangeTypeP(a); > + RangeType *range_b =3D DatumGetRangeTypeP(b); > + TypeCacheEntry *typcache =3D ssup->ssup_extra; > + RangeBound lower1, > + lower2; > + RangeBound upper1, > + upper2; > + bool empty1, > + empty2; > + int result; > + > + if (typcache =3D=3D NULL) { > + Assert(RangeTypeGetOid(range_a) =3D=3D RangeTypeGetOid(range_b)); > + typcache =3D lookup_type_cache(RangeTypeGetOid(range_a), TYPECACHE_RANG= E_INFO); > + > + /* > + * Cache the range info between calls to avoid having to call > + * lookup_type_cache() for each comparison. > + */ > + ssup->ssup_extra =3D typcache; > + } > + > + range_deserialize(typcache, range_a, &lower1, &upper1, &empty1); > + range_deserialize(typcache, range_b, &lower2, &upper2, &empty2); > + > + /* For b-tree use, empty ranges sort before all else */ > + if (empty1 && empty2) > + result =3D 0; > + else if (empty1) > + result =3D -1; > + else if (empty2) > + result =3D 1; > + else > + result =3D range_cmp_bounds(typcache, &lower1, &lower2); > + > + if ((Datum) range_a !=3D a) > + pfree(range_a); > + > + if ((Datum) range_b !=3D b) > + pfree(range_b); > + > + return result; > +} > > per https://www.postgresql.org/docs/current/gist-extensibility.html > QUOTE: > All the GiST support methods are normally called in short-lived memory > contexts; that is, CurrentMemoryContext will get reset after each > tuple is processed. It is therefore not very important to worry about > pfree'ing everything you palloc. However, in some cases it's useful > for a support method to > ENDOF_QUOTE > > so removing the following part should be OK. > + if ((Datum) range_a !=3D a) > + pfree(range_a); > + > + if ((Datum) range_b !=3D b) > + pfree(range_b); > > comparison solely on the lower bounds looks strange to me. > if lower bound is the same, then compare upper bound, so the > range_gist_cmp function is consistent with function range_compare. > so following change: > > + else > + result =3D range_cmp_bounds(typcache, &lower1, &lower2); > to > ` > else > { > result =3D range_cmp_bounds(typcache, &lower1, &lower2); > if (result =3D=3D 0) > result =3D range_cmp_bounds(typcache, &upper1, &upper2); > } > ` > > does contrib/btree_gist/btree_gist--1.7--1.8.sql function be declared > as strict ? (I am not sure) > other than that, the whole patch looks good. the original author email address (christoph.heiss@cybertec.at) Address not found. so I don't include it. I split the original author's patch into 2. 1. Add GiST sortsupport function for all the btree-gist module data types except anyrange data type (which actually does not in this module) 2. Add GiST sortsupport function for anyrange data type. What changed compared to the original patch: 1. The original patch missed some operator class for all the data types in btree-gist modules. So I added them. now add sortsupport function for all the following data types in btree-gist= : int2,int4,int8,float4,float8,numeric timestamp with time zone, timestamp without time zone, time with time zone, time without time zone, d= ate interval, oid, money, char varchar, text, bytea, bit, varbit macaddr, macaddr8, inet, cidr, uuid, bool, enum 2. range_gist_cmp: the gist range sortsupport function, it looks like range_cmp, but the range typcache is cached, so we don't need to repeatedly call lookup_type_cache. refactor: As mentioned above, if the range lower bound is the same then compare the upper bound. I aslo refactored the comment. what I am confused: In fmgr.h /* * Support for cleaning up detoasted copies of inputs. This must only * be used for pass-by-ref datatypes, and normally would only be used * for toastable types. If the given pointer is different from the * original argument, assume it's a palloc'd detoasted copy, and pfree it. * NOTE: most functions on toastable types do not have to worry about this, * but we currently require that support functions for indexes not leak * memory. */ #define PG_FREE_IF_COPY(ptr,n) \ do { \ if ((Pointer) (ptr) !=3D PG_GETARG_POINTER(n)) \ pfree(ptr); \ } while (0) but the doc (https://www.postgresql.org/docs/current/gist-extensibility.htm= l) says: All the GiST support methods are normally called in short-lived memory contexts; that is, CurrentMemoryContext will get reset after each tuple is processed. It is therefore not very important to worry about pfree'ing everything you palloc. ENDOF_QUOTE so I am not sure in range_gist_cmp, we need the following: ` if ((Datum) range_a !=3D a) pfree(range_a); if ((Datum) range_b !=3D b) pfree(range_b); ` --000000000000afcb23060e981c9a Content-Type: text/x-patch; charset="US-ASCII"; name="v5-0002-Add-GIST-sortsupport-function-for-range_ops.patch" Content-Disposition: attachment; filename="v5-0002-Add-GIST-sortsupport-function-for-range_ops.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lr7g7aqn0 RnJvbSBmYjg1ZjgwZmY0MTZmOTAyZmRlM2Q4MDY1NGRmYjYxYjQ0NzlmNmVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMTAgSmFuIDIwMjQgMTU6MTA6MjkgKzA4MDAKU3ViamVjdDogW1BBVENIIHY1 IDIvMl0gQWRkIEdJU1Qgc29ydHN1cHBvcnQgZnVuY3Rpb24gZm9yIHJhbmdlX29wcwoKSXQgY2Fu IGZhY2lsaXRhdGUgZmFzdCBHSVNUIGluZGV4IGJ1aWxkIGZvciByYW5nZSBkYXRhIHR5cGUuCi0t LQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JhbmdldHlwZXNfZ2lzdC5jIHwgNzAgKysrKysrKysr KysrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hbXByb2MuZGF0ICAgICAg IHwgIDMgKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICB8ICAzICsr CiAzIGZpbGVzIGNoYW5nZWQsIDc2IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvcmFuZ2V0eXBlc19naXN0LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv cmFuZ2V0eXBlc19naXN0LmMKaW5kZXggY2IyOGU5ODUuLmNiMjMwZjM5IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvcmFuZ2V0eXBlc19naXN0LmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3JhbmdldHlwZXNfZ2lzdC5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAi dXRpbHMvZm1ncnByb3Rvcy5oIgogI2luY2x1ZGUgInV0aWxzL211bHRpcmFuZ2V0eXBlcy5oIgog I2luY2x1ZGUgInV0aWxzL3JhbmdldHlwZXMuaCIKKyNpbmNsdWRlICJ1dGlscy9zb3J0c3VwcG9y dC5oIgogCiAvKgogICogUmFuZ2UgY2xhc3MgcHJvcGVydGllcyB1c2VkIHRvIHNlZ3JlZ2F0ZSBk aWZmZXJlbnQgY2xhc3NlcyBvZiByYW5nZXMgaW4KQEAgLTE3Nyw2ICsxNzgsNyBAQCBzdGF0aWMg dm9pZCByYW5nZV9naXN0X2RvdWJsZV9zb3J0aW5nX3NwbGl0KFR5cGVDYWNoZUVudHJ5ICp0eXBj YWNoZSwKIHN0YXRpYyB2b2lkIHJhbmdlX2dpc3RfY29uc2lkZXJfc3BsaXQoQ29uc2lkZXJTcGxp dENvbnRleHQgKmNvbnRleHQsCiAJCQkJCQkJCQkgIFJhbmdlQm91bmQgKnJpZ2h0X2xvd2VyLCBp bnQgbWluX2xlZnRfY291bnQsCiAJCQkJCQkJCQkgIFJhbmdlQm91bmQgKmxlZnRfdXBwZXIsIGlu dCBtYXhfbGVmdF9jb3VudCk7CitzdGF0aWMgaW50CXJhbmdlX2dpc3RfY21wKERhdHVtIGEsIERh dHVtIGIsIFNvcnRTdXBwb3J0IHNzdXApOwogc3RhdGljIGludAlnZXRfZ2lzdF9yYW5nZV9jbGFz cyhSYW5nZVR5cGUgKnJhbmdlKTsKIHN0YXRpYyBpbnQJc2luZ2xlX2JvdW5kX2NtcChjb25zdCB2 b2lkICphLCBjb25zdCB2b2lkICpiLCB2b2lkICphcmcpOwogc3RhdGljIGludAlpbnRlcnZhbF9j bXBfbG93ZXIoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgdm9pZCAqYXJnKTsKQEAgLTc3 Myw2ICs3NzUsMjAgQEAgcmFuZ2VfZ2lzdF9waWNrc3BsaXQoUEdfRlVOQ1RJT05fQVJHUykKIAlQ R19SRVRVUk5fUE9JTlRFUih2KTsKIH0KIAorLyoKKyAqIFNvcnQgc3VwcG9ydCByb3V0aW5lIGZv ciBmYXN0IEdpU1QgaW5kZXggYnVpbGQgYnkgc29ydGluZy4KKyAqLworRGF0dW0KK3JhbmdlX2dp c3Rfc29ydHN1cHBvcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlTb3J0U3VwcG9ydAlzc3VwID0g KFNvcnRTdXBwb3J0KSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKworCXNzdXAtPmNvbXBhcmF0b3Ig PSByYW5nZV9naXN0X2NtcDsKKwlzc3VwLT5zc3VwX2V4dHJhID0gTlVMTDsKKworCVBHX1JFVFVS Tl9WT0lEKCk7Cit9CisKIC8qIGVxdWFsaXR5IGNvbXBhcmF0b3IgZm9yIEdpU1QgKi8KIERhdHVt CiByYW5nZV9naXN0X3NhbWUoUEdfRlVOQ1RJT05fQVJHUykKQEAgLTE2OTMsNiArMTcwOSw2MCBA QCByYW5nZV9naXN0X2NvbnNpZGVyX3NwbGl0KENvbnNpZGVyU3BsaXRDb250ZXh0ICpjb250ZXh0 LAogCX0KIH0KIAorLyoKKyAqIEdpU1Qgc29ydHN1cHBvcnQgY29tcGFyYXRvciBmb3IgcmFuZ2Vz LgorICogc2ltaWxhciB0byByYW5nZV9jbXAsIGJ1dCByYW5nZSB0eXBjYWNoZSBpcyBjYWNoZWQu CisgKi8KK3N0YXRpYyBpbnQKK3JhbmdlX2dpc3RfY21wKERhdHVtIGEsIERhdHVtIGIsIFNvcnRT dXBwb3J0IHNzdXApCit7CisJUmFuZ2VUeXBlICpyYW5nZV9hID0gRGF0dW1HZXRSYW5nZVR5cGVQ KGEpOworCVJhbmdlVHlwZSAqcmFuZ2VfYiA9IERhdHVtR2V0UmFuZ2VUeXBlUChiKTsKKwlUeXBl Q2FjaGVFbnRyeSAqdHlwY2FjaGUgPSBzc3VwLT5zc3VwX2V4dHJhOworCVJhbmdlQm91bmQJbG93 ZXIxLAorCQkJCWxvd2VyMjsKKwlSYW5nZUJvdW5kCXVwcGVyMSwKKwkJCQl1cHBlcjI7CisJYm9v bAkJZW1wdHkxLAorCQkJCWVtcHR5MjsKKwlpbnQJCQlyZXN1bHQ7CisKKwlpZiAodHlwY2FjaGUg PT0gTlVMTCkKKwl7CisJCUFzc2VydChSYW5nZVR5cGVHZXRPaWQocmFuZ2VfYSkgPT0gUmFuZ2VU eXBlR2V0T2lkKHJhbmdlX2IpKTsKKwkJdHlwY2FjaGUgPSBsb29rdXBfdHlwZV9jYWNoZShSYW5n ZVR5cGVHZXRPaWQocmFuZ2VfYSksIFRZUEVDQUNIRV9SQU5HRV9JTkZPKTsKKworCQkvKgorCQkg KiBDYWNoZSB0aGUgcmFuZ2UgaW5mbyBiZXR3ZWVuIGNhbGxzIHRvIGF2b2lkIGhhdmluZyB0byBj YWxsCisJCSAqIGxvb2t1cF90eXBlX2NhY2hlKCkgZm9yIGVhY2ggY29tcGFyaXNvbi4KKwkJICov CisJCXNzdXAtPnNzdXBfZXh0cmEgPSB0eXBjYWNoZTsKKwl9CisKKwlyYW5nZV9kZXNlcmlhbGl6 ZSh0eXBjYWNoZSwgcmFuZ2VfYSwgJmxvd2VyMSwgJnVwcGVyMSwgJmVtcHR5MSk7CisJcmFuZ2Vf ZGVzZXJpYWxpemUodHlwY2FjaGUsIHJhbmdlX2IsICZsb3dlcjIsICZ1cHBlcjIsICZlbXB0eTIp OworCisJaWYgKGVtcHR5MSAmJiBlbXB0eTIpCisJCXJlc3VsdCA9IDA7CisJZWxzZSBpZiAoZW1w dHkxKQorCQlyZXN1bHQgPSAtMTsKKwllbHNlIGlmIChlbXB0eTIpCisJCXJlc3VsdCA9IDE7CisJ ZWxzZQorCXsKKwkJcmVzdWx0ID0gcmFuZ2VfY21wX2JvdW5kcyh0eXBjYWNoZSwgJmxvd2VyMSwg Jmxvd2VyMik7CisJCWlmIChyZXN1bHQgPT0gMCkKKwkJCXJlc3VsdCA9IHJhbmdlX2NtcF9ib3Vu ZHModHlwY2FjaGUsICZ1cHBlcjEsICZ1cHBlcjIpOworCX0KKworCWlmICgoRGF0dW0pIHJhbmdl X2EgIT0gYSkKKwkJcGZyZWUocmFuZ2VfYSk7CisJaWYgKChEYXR1bSkgcmFuZ2VfYiAhPSBiKQor CQlwZnJlZShyYW5nZV9iKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKIC8qCiAgKiBGaW5kIGNs YXNzIG51bWJlciBmb3IgcmFuZ2UuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19hbXByb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hbXByb2MuZGF0CmluZGV4 IGY2MzljM2E2Li43MWQ0YmJhMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19h bXByb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW1wcm9jLmRhdApAQCAtNTk4 LDYgKzU5OCw5IEBACiB7IGFtcHJvY2ZhbWlseSA9PiAnZ2lzdC9yYW5nZV9vcHMnLCBhbXByb2Ns ZWZ0dHlwZSA9PiAnYW55cmFuZ2UnLAogICBhbXByb2NyaWdodHR5cGUgPT4gJ2FueXJhbmdlJywg YW1wcm9jbnVtID0+ICc3JywKICAgYW1wcm9jID0+ICdyYW5nZV9naXN0X3NhbWUnIH0sCit7IGFt cHJvY2ZhbWlseSA9PiAnZ2lzdC9yYW5nZV9vcHMnLCBhbXByb2NsZWZ0dHlwZSA9PiAnYW55cmFu Z2UnLAorICBhbXByb2NyaWdodHR5cGUgPT4gJ2FueXJhbmdlJywgYW1wcm9jbnVtID0+ICcxMScs CisgIGFtcHJvYyA9PiAncmFuZ2VfZ2lzdF9zb3J0c3VwcG9ydCcgfSwKIHsgYW1wcm9jZmFtaWx5 ID0+ICdnaXN0L25ldHdvcmtfb3BzJywgYW1wcm9jbGVmdHR5cGUgPT4gJ2luZXQnLAogICBhbXBy b2NyaWdodHR5cGUgPT4gJ2luZXQnLCBhbXByb2NudW0gPT4gJzEnLAogICBhbXByb2MgPT4gJ2lu ZXRfZ2lzdF9jb25zaXN0ZW50JyB9LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggNzk3OTM5 MjcuLjhiOGFhNWFmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTEwNTc3LDYgKzEwNTc3 LDkgQEAKIHsgb2lkID0+ICczODgxJywgZGVzY3IgPT4gJ0dpU1Qgc3VwcG9ydCcsCiAgIHByb25h bWUgPT4gJ3JhbmdlX2dpc3Rfc2FtZScsIHByb3JldHR5cGUgPT4gJ2ludGVybmFsJywKICAgcHJv YXJndHlwZXMgPT4gJ2FueXJhbmdlIGFueXJhbmdlIGludGVybmFsJywgcHJvc3JjID0+ICdyYW5n ZV9naXN0X3NhbWUnIH0sCit7IG9pZCA9PiAnODg0OScsIGRlc2NyID0+ICdHaVNUIHN1cHBvcnQn LAorICBwcm9uYW1lID0+ICdyYW5nZV9naXN0X3NvcnRzdXBwb3J0JywgcHJvcmV0dHlwZSA9PiAn dm9pZCcsCisgIHByb2FyZ3R5cGVzID0+ICdpbnRlcm5hbCcsIHByb3NyYyA9PiAncmFuZ2VfZ2lz dF9zb3J0c3VwcG9ydCcgfSwKIHsgb2lkID0+ICc2MTU0JywgZGVzY3IgPT4gJ0dpU1Qgc3VwcG9y dCcsCiAgIHByb25hbWUgPT4gJ211bHRpcmFuZ2VfZ2lzdF9jb25zaXN0ZW50JywgcHJvcmV0dHlw ZSA9PiAnYm9vbCcsCiAgIHByb2FyZ3R5cGVzID0+ICdpbnRlcm5hbCBhbnltdWx0aXJhbmdlIGlu dDIgb2lkIGludGVybmFsJywKLS0gCjIuMzQuMQoK --000000000000afcb23060e981c9a Content-Type: text/x-patch; charset="US-ASCII"; name="v5-0001-Add-GIST-sortsupport-function-for-all-the-btree-g.patch" Content-Disposition: attachment; filename="v5-0001-Add-GIST-sortsupport-function-for-all-the-btree-g.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lr7g7aqv1 RnJvbSBjM2YzOTZlMTQ5MDg5MmVhZDZmMzJiNGYwZWFjOGEyNWNiODc3ZGViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMTAgSmFuIDIwMjQgMTM6MjY6MzQgKzA4MDAKU3ViamVjdDogW1BBVENIIHY1 IDEvMl0gQWRkIEdJU1Qgc29ydHN1cHBvcnQgZnVuY3Rpb24gZm9yIGFsbCB0aGUgYnRyZWUtZ2lz dAogbW9kdWxlIGRhdGEgdHlwZXMKClVzaW5nIEdJU1QgcGVuYWx0eSBhbmQgcGlja3NwbGl0IGZ1 bmN0aW9ucyBkb2luZyBpbmRleCBidWlsZApjYW4gYmUgdmVyeSBzbG93ZXIsIGJlY2F1c2Ugb2Yg cmFuZG9tIElPLgpHSVNUIHNvcnRzdXBwb3J0IGZ1bmN0aW9uIGNhbiBtYWtlIEdJU1QgaW5kZXgg YnVpbGQgdmVyeSBmYXN0LgpXaGlsZSBidWlsZCB0aGUgaW5kZXgsIHdpdGggdGhlIHNvcnRzdXBw b3J0IGZ1bmN0aW9uLAp3ZSBjYW4gdGhlIGZpcnN0IHNvcnQgdGhlIGRhdGEsIHRoZW4gYnVpbGQg dGhlIGluZGV4LgoKQWRkIHN1cHBvcnQgZm9yIHRoZSBmb2xsb3dpbmcgIEdpU1QgZGF0YSB0eXBl czoKaW50MgppbnQ0CmludDgKZmxvYXQ0CmZsb2F0OApudW1lcmljCnRpbWVzdGFtcCB3aXRoIHRp bWUgem9uZQp0aW1lc3RhbXAgd2l0aG91dCB0aW1lIHpvbmUKdGltZSB3aXRoIHRpbWUgem9uZQp0 aW1lIHdpdGhvdXQgdGltZSB6b25lCmRhdGUKaW50ZXJ2YWwKb2lkCm1vbmV5CmNoYXIKdmFyY2hh cgp0ZXh0CmJ5dGVhCmJpdAp2YXJiaXQKbWFjYWRkcgptYWNhZGRyOAppbmV0CmNpZHIsCnV1aWQK Ym9vbAplbnVtCi0tLQogY29udHJpYi9idHJlZV9naXN0L01ha2VmaWxlICAgICAgICAgICAgICAg ICB8ICAgMyArLQogY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2JpdC5jICAgICAgICAgICAgICB8 ICAzNiArKysrKysKIGNvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9ib29sLmMgICAgICAgICAgICAg fCAgMjIgKysrKwogY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2Nhc2guYyAgICAgICAgICAgICB8 ICAyMiArKysrCiBjb250cmliL2J0cmVlX2dpc3QvYnRyZWVfZW51bS5jICAgICAgICAgICAgIHwg IDI2ICsrKysKIGNvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9naXN0LS0xLjctLTEuOC5zcWwgfCAx MzIgKysrKysrKysrKysrKysrKysrKysKIGNvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9naXN0LmNv bnRyb2wgICAgICAgfCAgIDIgKy0KIGNvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9pbmV0LmMgICAg ICAgICAgICAgfCAgMTkgKysrCiBjb250cmliL2J0cmVlX2dpc3QvYnRyZWVfaW50ZXJ2YWwuYyAg ICAgICAgIHwgIDE5ICsrKwogY29udHJpYi9idHJlZV9naXN0L2J0cmVlX21hY2FkZHI4LmMgICAg ICAgICB8ICAxOSArKysKIGNvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV90aW1lLmMgICAgICAgICAg ICAgfCAgMzggKysrKysrCiBjb250cmliL2J0cmVlX2dpc3QvbWVzb24uYnVpbGQgICAgICAgICAg ICAgIHwgICAxICsKIDEyIGZpbGVzIGNoYW5nZWQsIDMzNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0 aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9naXN0 LS0xLjctLTEuOC5zcWwKCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvTWFrZWZpbGUg Yi9jb250cmliL2J0cmVlX2dpc3QvTWFrZWZpbGUKaW5kZXggMDczZGNjNzQuLjk2NWYwNTU5IDEw MDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvTWFrZWZpbGUKKysrIGIvY29udHJpYi9idHJl ZV9naXN0L01ha2VmaWxlCkBAIC0zMyw3ICszMyw4IEBAIEVYVEVOU0lPTiA9IGJ0cmVlX2dpc3QK IERBVEEgPSBidHJlZV9naXN0LS0xLjAtLTEuMS5zcWwgXAogICAgICAgIGJ0cmVlX2dpc3QtLTEu MS0tMS4yLnNxbCBidHJlZV9naXN0LS0xLjIuc3FsIGJ0cmVlX2dpc3QtLTEuMi0tMS4zLnNxbCBc CiAgICAgICAgYnRyZWVfZ2lzdC0tMS4zLS0xLjQuc3FsIGJ0cmVlX2dpc3QtLTEuNC0tMS41LnNx bCBcCi0gICAgICAgYnRyZWVfZ2lzdC0tMS41LS0xLjYuc3FsIGJ0cmVlX2dpc3QtLTEuNi0tMS43 LnNxbAorICAgICAgIGJ0cmVlX2dpc3QtLTEuNS0tMS42LnNxbCBidHJlZV9naXN0LS0xLjYtLTEu Ny5zcWwgXAorICAgICAgIGJ0cmVlX2dpc3QtLTEuNy0tMS44LnNxbAogUEdGSUxFREVTQyA9ICJi dHJlZV9naXN0IC0gQi10cmVlIGVxdWl2YWxlbnQgR2lTVCBvcGVyYXRvciBjbGFzc2VzIgogCiBS RUdSRVNTID0gaW5pdCBpbnQyIGludDQgaW50OCBmbG9hdDQgZmxvYXQ4IGNhc2ggb2lkIHRpbWVz dGFtcCB0aW1lc3RhbXB0eiBcCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVf Yml0LmMgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfYml0LmMKaW5kZXggNjc5MGYyMmIuLmJi ZDI4MTY1IDEwMDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfYml0LmMKKysrIGIv Y29udHJpYi9idHJlZV9naXN0L2J0cmVlX2JpdC5jCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUg ImJ0cmVlX3V0aWxzX3Zhci5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVk ZSAidXRpbHMvYnl0ZWEuaCIKKyNpbmNsdWRlICJ1dGlscy9zb3J0c3VwcG9ydC5oIgogI2luY2x1 ZGUgInV0aWxzL3ZhcmJpdC5oIgogCiAKQEAgLTE5LDEwICsyMCwyMyBAQCBQR19GVU5DVElPTl9J TkZPX1YxKGdidF9iaXRfcGlja3NwbGl0KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2JpdF9j b25zaXN0ZW50KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2JpdF9wZW5hbHR5KTsKIFBHX0ZV TkNUSU9OX0lORk9fVjEoZ2J0X2JpdF9zYW1lKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2Jp dF9zb3J0c3VwcG9ydCk7CitQR19GVU5DVElPTl9JTkZPX1YxKGdidF92YXJiaXRfc29ydHN1cHBv cnQpOwogCiAKIC8qIGRlZmluZSBmb3IgY29tcGFyaXNvbiAqLwogCitzdGF0aWMgaW50CitiaXRf ZmFzdF9jbXAoRGF0dW0geCwgRGF0dW0geSwgU29ydFN1cHBvcnQgc3N1cCkKK3sKKwlyZXR1cm4g RGF0dW1HZXRJbnQzMihEaXJlY3RGdW5jdGlvbkNhbGwyKGJ5dGVhY21wLCB4LCB5KSk7Cit9CisK K3N0YXRpYyBpbnQKK3ZhcmJpdF9mYXN0X2NtcChEYXR1bSB4LCBEYXR1bSB5LCBTb3J0U3VwcG9y dCBzc3VwKQoreworCXJldHVybiBEYXR1bUdldEludDMyKERpcmVjdEZ1bmN0aW9uQ2FsbDIoYml0 Y21wLCB4LCB5KSk7Cit9CiBzdGF0aWMgYm9vbAogZ2J0X2JpdGd0KGNvbnN0IHZvaWQgKmEsIGNv bnN0IHZvaWQgKmIsIE9pZCBjb2xsYXRpb24sIEZtZ3JJbmZvICpmbGluZm8pCiB7CkBAIC0yMDgs MyArMjIyLDI1IEBAIGdidF9iaXRfcGVuYWx0eShQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVS Tl9QT0lOVEVSKGdidF92YXJfcGVuYWx0eShyZXN1bHQsIG8sIG4sIFBHX0dFVF9DT0xMQVRJT04o KSwKIAkJCQkJCQkJCSAgJnRpbmZvLCBmY2luZm8tPmZsaW5mbykpOwogfQorCitEYXR1bQorZ2J0 X2JpdF9zb3J0c3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCVNvcnRTdXBwb3J0IHNzdXAg PSAoU29ydFN1cHBvcnQpIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJc3N1cC0+Y29tcGFyYXRv ciA9IGJpdF9mYXN0X2NtcDsKKwlzc3VwLT5zc3VwX2V4dHJhID0gTlVMTDsKKworCVBHX1JFVFVS Tl9WT0lEKCk7Cit9CisKK0RhdHVtCitnYnRfdmFyYml0X3NvcnRzdXBwb3J0KFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJU29ydFN1cHBvcnQgc3N1cCA9IChTb3J0U3VwcG9ydCkgUEdfR0VUQVJHX1BP SU5URVIoMCk7CisKKwlzc3VwLT5jb21wYXJhdG9yID0gdmFyYml0X2Zhc3RfY21wOworCXNzdXAt PnNzdXBfZXh0cmEgPSBOVUxMOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KXCBObyBuZXdsaW5l IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfYm9v bC5jIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2Jvb2wuYwppbmRleCA4YjJhZjEyOS4uM2E5 ZjIzMGUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9ib29sLmMKKysrIGIv Y29udHJpYi9idHJlZV9naXN0L2J0cmVlX2Jvb2wuYwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRl ICJidHJlZV9naXN0LmgiCiAjaW5jbHVkZSAiYnRyZWVfdXRpbHNfbnVtLmgiCiAjaW5jbHVkZSAi Y29tbW9uL2ludC5oIgorI2luY2x1ZGUgInV0aWxzL3NvcnRzdXBwb3J0LmgiCiAKIHR5cGVkZWYg c3RydWN0IGJvb2xrZXkKIHsKQEAgLTIzLDYgKzI0LDE2IEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEo Z2J0X2Jvb2xfcGlja3NwbGl0KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2Jvb2xfY29uc2lz dGVudCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9ib29sX3BlbmFsdHkpOwogUEdfRlVOQ1RJ T05fSU5GT19WMShnYnRfYm9vbF9zYW1lKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2Jvb2xf c29ydHN1cHBvcnQpOworCitzdGF0aWMgaW50Citib29sX2Zhc3RfY21wKERhdHVtIHgsIERhdHVt IHksIFNvcnRTdXBwb3J0IHNzdXApCit7CisJYm9vbAlhcmcxID0gRGF0dW1HZXRCb29sKHgpOwor CWJvb2wJYXJnMiA9IERhdHVtR2V0Qm9vbCh5KTsKKworCXJldHVybiBhcmcxIC0gYXJnMjsKK30K IAogc3RhdGljIGJvb2wKIGdidF9ib29sZ3QoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwg Rm1nckluZm8gKmZsaW5mbykKQEAgLTE2NywzICsxNzgsMTQgQEAgZ2J0X2Jvb2xfc2FtZShQR19G VU5DVElPTl9BUkdTKQogCSpyZXN1bHQgPSBnYnRfbnVtX3NhbWUoKHZvaWQgKikgYjEsICh2b2lk ICopIGIyLCAmdGluZm8sIGZjaW5mby0+ZmxpbmZvKTsKIAlQR19SRVRVUk5fUE9JTlRFUihyZXN1 bHQpOwogfQorCitEYXR1bQorZ2J0X2Jvb2xfc29ydHN1cHBvcnQoUEdfRlVOQ1RJT05fQVJHUykK K3sKKwlTb3J0U3VwcG9ydCBzc3VwID0gKFNvcnRTdXBwb3J0KSBQR19HRVRBUkdfUE9JTlRFUigw KTsKKworCXNzdXAtPmNvbXBhcmF0b3IgPSBib29sX2Zhc3RfY21wOworCXNzdXAtPnNzdXBfZXh0 cmEgPSBOVUxMOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIv YnRyZWVfZ2lzdC9idHJlZV9jYXNoLmMgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfY2FzaC5j CmluZGV4IDU0NmI5NDhlLi5iOWMzMzZlMiAxMDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0 L2J0cmVlX2Nhc2guYworKysgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfY2FzaC5jCkBAIC03 LDYgKzcsNyBAQAogI2luY2x1ZGUgImJ0cmVlX3V0aWxzX251bS5oIgogI2luY2x1ZGUgImNvbW1v bi9pbnQuaCIKICNpbmNsdWRlICJ1dGlscy9jYXNoLmgiCisjaW5jbHVkZSAidXRpbHMvc29ydHN1 cHBvcnQuaCIKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKQEAgLTI1LDYgKzI2LDE2IEBAIFBHX0ZVTkNU SU9OX0lORk9fVjEoZ2J0X2Nhc2hfY29uc2lzdGVudCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdi dF9jYXNoX2Rpc3RhbmNlKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2Nhc2hfcGVuYWx0eSk7 CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9jYXNoX3NhbWUpOworUEdfRlVOQ1RJT05fSU5GT19W MShnYnRfY2FzaF9zb3J0c3VwcG9ydCk7CisKK3N0YXRpYyBpbnQKK2Nhc2hfZmFzdF9jbXAoRGF0 dW0geCwgRGF0dW0geSwgU29ydFN1cHBvcnQgc3N1cCkKK3sKKwlib29sCWFyZzEgPSBEYXR1bUdl dENhc2goeCk7CisJYm9vbAlhcmcyID0gRGF0dW1HZXRDYXNoKHkpOworCisJcmV0dXJuIGFyZzEg LSBhcmcyOworfQogCiBzdGF0aWMgYm9vbAogZ2J0X2Nhc2hndChjb25zdCB2b2lkICphLCBjb25z dCB2b2lkICpiLCBGbWdySW5mbyAqZmxpbmZvKQpAQCAtMjE1LDMgKzIyNiwxNCBAQCBnYnRfY2Fz aF9zYW1lKFBHX0ZVTkNUSU9OX0FSR1MpCiAJKnJlc3VsdCA9IGdidF9udW1fc2FtZSgodm9pZCAq KSBiMSwgKHZvaWQgKikgYjIsICZ0aW5mbywgZmNpbmZvLT5mbGluZm8pOwogCVBHX1JFVFVSTl9Q T0lOVEVSKHJlc3VsdCk7CiB9CisKK0RhdHVtCitnYnRfY2FzaF9zb3J0c3VwcG9ydChQR19GVU5D VElPTl9BUkdTKQoreworCVNvcnRTdXBwb3J0IHNzdXAgPSAoU29ydFN1cHBvcnQpIFBHX0dFVEFS R19QT0lOVEVSKDApOworCisJc3N1cC0+Y29tcGFyYXRvciA9IGNhc2hfZmFzdF9jbXA7CisJc3N1 cC0+c3N1cF9leHRyYSA9IE5VTEw7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQpkaWZmIC0tZ2l0 IGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2VudW0uYyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9i dHJlZV9lbnVtLmMKaW5kZXggZDRkYzM4YTMuLjMzYjlhMzQyIDEwMDY0NAotLS0gYS9jb250cmli L2J0cmVlX2dpc3QvYnRyZWVfZW51bS5jCisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9l bnVtLmMKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSAiYnRyZWVfdXRpbHNfbnVtLmgiCiAjaW5j bHVkZSAiZm1nci5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRp bHMvc29ydHN1cHBvcnQuaCIKIAogLyogZW51bXMgYXJlIHJlYWxseSBPaWRzLCBzbyB3ZSBqdXN0 IHVzZSB0aGUgc2FtZSBzdHJ1Y3R1cmUgKi8KIApAQCAtMjYsOCArMjcsMTYgQEAgUEdfRlVOQ1RJ T05fSU5GT19WMShnYnRfZW51bV9waWNrc3BsaXQpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRf ZW51bV9jb25zaXN0ZW50KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2VudW1fcGVuYWx0eSk7 CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9lbnVtX3NhbWUpOworUEdfRlVOQ1RJT05fSU5GT19W MShnYnRfZW51bV9zb3J0c3VwcG9ydCk7CiAKIAorc3RhdGljIGludAorZW51bV9mYXN0X2NtcChE YXR1bSB4LCBEYXR1bSB5LCBTb3J0U3VwcG9ydCBzc3VwKQoreworCXJldHVybiBEYXR1bUdldElu dDMyKENhbGxlckZJbmZvRnVuY3Rpb25DYWxsMihlbnVtX2NtcCwgc3N1cC0+c3N1cF9leHRyYSwK KwkJCQkJCQkJCQkJCSAgSW52YWxpZE9pZCwgeCwgeSkpOworfQorCiBzdGF0aWMgYm9vbAogZ2J0 X2VudW1ndChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCBGbWdySW5mbyAqZmxpbmZvKQog ewpAQCAtMTgzLDMgKzE5MiwyMCBAQCBnYnRfZW51bV9zYW1lKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ KnJlc3VsdCA9IGdidF9udW1fc2FtZSgodm9pZCAqKSBiMSwgKHZvaWQgKikgYjIsICZ0aW5mbywg ZmNpbmZvLT5mbGluZm8pOwogCVBHX1JFVFVSTl9QT0lOVEVSKHJlc3VsdCk7CiB9CisKK0RhdHVt CitnYnRfZW51bV9zb3J0c3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCVNvcnRTdXBwb3J0 IHNzdXAgPSAoU29ydFN1cHBvcnQpIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJc3N1cC0+Y29t cGFyYXRvciA9IGVudW1fZmFzdF9jbXA7CisKKwkvKgorCSAqIFNpbmNlIGVudW1fZmFzdF9jbXAo KSBhbHNvIHVzZXMgZW51bV9jbXAoKSBsaWtlIHRoZSByZXN0IG9mIHRoZQorCSAqIGNvbXBhcnNp b24gZnVuY3Rpb25zLCBpdCBhbHNvIG5lZWRzIHRvIHBhc3Mgb24gZmxpbmZvIHdoZW4gY2FsbGlu ZworCSAqIGl0LiBUaHVzIHNhdmUgaXQgaW4gLT5zc3VwX2V4dHJhIGFuZCBsYXRlciByZXRyaWV2 ZSBpdCBpbiBlbnVtX2Zhc3RfY21wKCkuCisJICovCisJc3N1cC0+c3N1cF9leHRyYSA9IGZjaW5m by0+ZmxpbmZvOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIv YnRyZWVfZ2lzdC9idHJlZV9naXN0LS0xLjctLTEuOC5zcWwgYi9jb250cmliL2J0cmVlX2dpc3Qv YnRyZWVfZ2lzdC0tMS43LS0xLjguc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwLi5iZDcxZDQ5OAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJl ZV9naXN0LS0xLjctLTEuOC5zcWwKQEAgLTAsMCArMSwxMzIgQEAKKy8qIGNvbnRyaWIvYnRyZWVf Z2lzdC9idHJlZV9naXN0LS0xLjctLTEuOC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0 IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xl Y2hvIFVzZSAiQUxURVIgRVhURU5TSU9OIGJ0cmVlX2dpc3QgVVBEQVRFIFRPICcxLjgnIiB0byBs b2FkIHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9OIGdidF9iaXRfc29ydHN1cHBv cnQoaW50ZXJuYWwpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnCitMQU5HVUFH RSBDIElNTVVUQUJMRSBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBnYnRfdmFyYml0X3NvcnRz dXBwb3J0KGludGVybmFsKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJworTEFO R1VBR0UgQyBJTU1VVEFCTEUgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gZ2J0X2Jvb2xfc29y dHN1cHBvcnQoaW50ZXJuYWwpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnCitM QU5HVUFHRSBDIElNTVVUQUJMRSBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBnYnRfY2FzaF9z b3J0c3VwcG9ydChpbnRlcm5hbCkKK1JFVFVSTlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScK K0xBTkdVQUdFIEMgSU1NVVRBQkxFIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIGdidF9lbnVt X3NvcnRzdXBwb3J0KGludGVybmFsKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1F JworTEFOR1VBR0UgQyBJTU1VVEFCTEUgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gZ2J0X2lu ZXRfc29ydHN1cHBvcnQoaW50ZXJuYWwpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5B TUUnCitMQU5HVUFHRSBDIElNTVVUQUJMRSBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBnYnRf aW50dl9zb3J0c3VwcG9ydChpbnRlcm5hbCkKK1JFVFVSTlMgdm9pZAorQVMgJ01PRFVMRV9QQVRI TkFNRScKK0xBTkdVQUdFIEMgSU1NVVRBQkxFIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIGdi dF9tYWNhZDhfc29ydHN1cHBvcnQoaW50ZXJuYWwpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVf UEFUSE5BTUUnCitMQU5HVUFHRSBDIElNTVVUQUJMRSBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElP TiBnYnRfdGltZV9zb3J0c3VwcG9ydChpbnRlcm5hbCkKK1JFVFVSTlMgdm9pZAorQVMgJ01PRFVM RV9QQVRITkFNRScKK0xBTkdVQUdFIEMgSU1NVVRBQkxFIFNUUklDVDsKKworQ1JFQVRFIEZVTkNU SU9OIGdidF90aW1ldHpfc29ydHN1cHBvcnQoaW50ZXJuYWwpCitSRVRVUk5TIHZvaWQKK0FTICdN T0RVTEVfUEFUSE5BTUUnCitMQU5HVUFHRSBDIElNTVVUQUJMRSBTVFJJQ1Q7CisKK0FMVEVSIE9Q RVJBVE9SIEZBTUlMWSBnaXN0X2JpdF9vcHMgVVNJTkcgZ2lzdCBBREQKKyAgICBGVU5DVElPTiAg ICAxMSAgKHZhcmJpdCwgdmFyYml0KSBnYnRfYml0X3NvcnRzdXBwb3J0IChpbnRlcm5hbCkgOwor CitBTFRFUiBPUEVSQVRPUiBGQU1JTFkgZ2lzdF92Yml0X29wcyBVU0lORyBnaXN0IEFERAorICAg IEZVTkNUSU9OICAgIDExICAoYml0LCBiaXQpIGdidF92YXJiaXRfc29ydHN1cHBvcnQgKGludGVy bmFsKSA7CisKK0FMVEVSIE9QRVJBVE9SIEZBTUlMWSBnaXN0X2Jvb2xfb3BzIFVTSU5HIGdpc3Qg QURECisgICAgRlVOQ1RJT04gICAgMTEgIChib29sLCBib29sKSBnYnRfYm9vbF9zb3J0c3VwcG9y dCAoaW50ZXJuYWwpIDsKKworQUxURVIgT1BFUkFUT1IgRkFNSUxZIGdpc3RfYnl0ZWFfb3BzIFVT SU5HIGdpc3QgQURECisgICAgRlVOQ1RJT04gICAgMTEgIChieXRlYSwgYnl0ZWEpIGJ5dGVhX3Nv cnRzdXBwb3J0IChpbnRlcm5hbCkgOworCitBTFRFUiBPUEVSQVRPUiBGQU1JTFkgZ2lzdF9jYXNo X29wcyBVU0lORyBnaXN0IEFERAorICAgIEZVTkNUSU9OICAgIDExICAobW9uZXksIG1vbmV5KSBn YnRfY2FzaF9zb3J0c3VwcG9ydCAoaW50ZXJuYWwpIDsKKworQUxURVIgT1BFUkFUT1IgRkFNSUxZ IGdpc3RfZGF0ZV9vcHMgVVNJTkcgZ2lzdCBBREQKKyAgICBGVU5DVElPTiAgICAxMSAgKGRhdGUs IGRhdGUpIGRhdGVfc29ydHN1cHBvcnQgKGludGVybmFsKSA7CisKK0FMVEVSIE9QRVJBVE9SIEZB TUlMWSBnaXN0X2VudW1fb3BzIFVTSU5HIGdpc3QgQURECisgICAgRlVOQ1RJT04gICAgMTEgIChh bnllbnVtLCBhbnllbnVtKSBnYnRfZW51bV9zb3J0c3VwcG9ydCAoaW50ZXJuYWwpIDsKKworQUxU RVIgT1BFUkFUT1IgRkFNSUxZIGdpc3RfZmxvYXQ0X29wcyBVU0lORyBnaXN0IEFERAorICAgIEZV TkNUSU9OICAgIDExICAoZmxvYXQ0LCBmbG9hdDQpIGJ0ZmxvYXQ0c29ydHN1cHBvcnQgKGludGVy bmFsKSA7CisKK0FMVEVSIE9QRVJBVE9SIEZBTUlMWSBnaXN0X2Zsb2F0OF9vcHMgVVNJTkcgZ2lz dCBBREQKKyAgICBGVU5DVElPTiAgICAxMSAgKGZsb2F0OCwgZmxvYXQ4KSBidGZsb2F0OHNvcnRz dXBwb3J0IChpbnRlcm5hbCkgOworCitBTFRFUiBPUEVSQVRPUiBGQU1JTFkgZ2lzdF9pbmV0X29w cyBVU0lORyBnaXN0IEFERAorICAgIEZVTkNUSU9OICAgIDExICAoaW5ldCwgaW5ldCkgZ2J0X2lu ZXRfc29ydHN1cHBvcnQgKGludGVybmFsKSA7CisKK0FMVEVSIE9QRVJBVE9SIEZBTUlMWSBnaXN0 X2NpZHJfb3BzIFVTSU5HIGdpc3QgQURECisgICAgRlVOQ1RJT04gICAgMTEgIChpbmV0LCBpbmV0 KSBnYnRfaW5ldF9zb3J0c3VwcG9ydCAoaW50ZXJuYWwpIDsKKworQUxURVIgT1BFUkFUT1IgRkFN SUxZIGdpc3RfaW50Ml9vcHMgVVNJTkcgZ2lzdCBBREQKKyAgICBGVU5DVElPTiAgICAxMSAgKGlu dDIsIGludDIpIGJ0aW50MnNvcnRzdXBwb3J0IChpbnRlcm5hbCkgOworCitBTFRFUiBPUEVSQVRP UiBGQU1JTFkgZ2lzdF9pbnQ0X29wcyBVU0lORyBnaXN0IEFERAorICAgIEZVTkNUSU9OICAgIDEx ICAoaW50NCwgaW50NCkgYnRpbnQ0c29ydHN1cHBvcnQgKGludGVybmFsKSA7CisKK0FMVEVSIE9Q RVJBVE9SIEZBTUlMWSBnaXN0X2ludDhfb3BzIFVTSU5HIGdpc3QgQURECisgICAgRlVOQ1RJT04g ICAgMTEgIChpbnQ4LCBpbnQ4KSBidGludDhzb3J0c3VwcG9ydCAoaW50ZXJuYWwpIDsKKworQUxU RVIgT1BFUkFUT1IgRkFNSUxZIGdpc3RfaW50ZXJ2YWxfb3BzIFVTSU5HIGdpc3QgQURECisgICAg RlVOQ1RJT04gICAgMTEgIChpbnRlcnZhbCwgaW50ZXJ2YWwpIGdidF9pbnR2X3NvcnRzdXBwb3J0 IChpbnRlcm5hbCkgOworCitBTFRFUiBPUEVSQVRPUiBGQU1JTFkgZ2lzdF9tYWNhZGRyX29wcyBV U0lORyBnaXN0IEFERAorICAgIEZVTkNUSU9OICAgIDExICAobWFjYWRkciwgbWFjYWRkcikgbWFj YWRkcl9zb3J0c3VwcG9ydCAoaW50ZXJuYWwpIDsKKworQUxURVIgT1BFUkFUT1IgRkFNSUxZIGdp c3RfbWFjYWRkcjhfb3BzIFVTSU5HIGdpc3QgQURECisgICAgRlVOQ1RJT04gICAgMTEgIChtYWNh ZGRyOCwgbWFjYWRkcjgpIGdidF9tYWNhZDhfc29ydHN1cHBvcnQgKGludGVybmFsKSA7CisKK0FM VEVSIE9QRVJBVE9SIEZBTUlMWSBnaXN0X251bWVyaWNfb3BzIFVTSU5HIGdpc3QgQURECisgICAg RlVOQ1RJT04gICAgMTEgIChudW1lcmljLCBudW1lcmljKSBudW1lcmljX3NvcnRzdXBwb3J0IChp bnRlcm5hbCkgOworCitBTFRFUiBPUEVSQVRPUiBGQU1JTFkgZ2lzdF9vaWRfb3BzIFVTSU5HIGdp c3QgQURECisgICAgRlVOQ1RJT04gICAgMTEgIChvaWQsIG9pZCkgYnRvaWRzb3J0c3VwcG9ydCAo aW50ZXJuYWwpIDsKKworQUxURVIgT1BFUkFUT1IgRkFNSUxZIGdpc3RfdGV4dF9vcHMgVVNJTkcg Z2lzdCBBREQKKyAgICBGVU5DVElPTiAgICAxMSAgKHRleHQsIHRleHQpIGJ0dGV4dHNvcnRzdXBw b3J0IChpbnRlcm5hbCkgOworCitBTFRFUiBPUEVSQVRPUiBGQU1JTFkgZ2lzdF9icGNoYXJfb3Bz IFVTSU5HIGdpc3QgQURECisgICAgRlVOQ1RJT04gICAgMTEgIChicGNoYXIsIGJwY2hhcikgYnBj aGFyX3NvcnRzdXBwb3J0IChpbnRlcm5hbCkgOworCitBTFRFUiBPUEVSQVRPUiBGQU1JTFkgZ2lz dF90aW1lX29wcyBVU0lORyBnaXN0IEFERAorICAgIEZVTkNUSU9OICAgIDExICAodGltZSwgdGlt ZSkgZ2J0X3RpbWVfc29ydHN1cHBvcnQgKGludGVybmFsKSA7CisKK0FMVEVSIE9QRVJBVE9SIEZB TUlMWSBnaXN0X3RpbWVzdGFtcF9vcHMgVVNJTkcgZ2lzdCBBREQKKyAgICBGVU5DVElPTiAgICAx MSAgKHRpbWVzdGFtcCwgdGltZXN0YW1wKSB0aW1lc3RhbXBfc29ydHN1cHBvcnQgKGludGVybmFs KSA7CisKK0FMVEVSIE9QRVJBVE9SIEZBTUlMWSBnaXN0X3RpbWVzdGFtcHR6X29wcyBVU0lORyBn aXN0IEFERAorICAgIEZVTkNUSU9OICAgIDExICAodGltZXN0YW1wdHosIHRpbWVzdGFtcHR6KSB0 aW1lc3RhbXBfc29ydHN1cHBvcnQgKGludGVybmFsKSA7CisKK0FMVEVSIE9QRVJBVE9SIEZBTUlM WSBnaXN0X3RpbWV0el9vcHMgVVNJTkcgZ2lzdCBBREQKKyAgICBGVU5DVElPTiAgICAxMSAgKHRp bWV0eiwgdGltZXR6KSBnYnRfdGltZXR6X3NvcnRzdXBwb3J0IChpbnRlcm5hbCkgOworCitBTFRF UiBPUEVSQVRPUiBGQU1JTFkgZ2lzdF91dWlkX29wcyBVU0lORyBnaXN0IEFERAorICAgIEZVTkNU SU9OICAgIDExICAodXVpZCwgdXVpZCkgdXVpZF9zb3J0c3VwcG9ydCAoaW50ZXJuYWwpIDsKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9naXN0LmNvbnRyb2wgYi9jb250cmli L2J0cmVlX2dpc3QvYnRyZWVfZ2lzdC5jb250cm9sCmluZGV4IGZhOTE3MWE4Li5hYmY2NjUzOCAx MDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2dpc3QuY29udHJvbAorKysgYi9j b250cmliL2J0cmVlX2dpc3QvYnRyZWVfZ2lzdC5jb250cm9sCkBAIC0xLDYgKzEsNiBAQAogIyBi dHJlZV9naXN0IGV4dGVuc2lvbgogY29tbWVudCA9ICdzdXBwb3J0IGZvciBpbmRleGluZyBjb21t b24gZGF0YXR5cGVzIGluIEdpU1QnCi1kZWZhdWx0X3ZlcnNpb24gPSAnMS43JworZGVmYXVsdF92 ZXJzaW9uID0gJzEuOCcKIG1vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL2J0cmVlX2dpc3QnCiBy ZWxvY2F0YWJsZSA9IHRydWUKIHRydXN0ZWQgPSB0cnVlCmRpZmYgLS1naXQgYS9jb250cmliL2J0 cmVlX2dpc3QvYnRyZWVfaW5ldC5jIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2luZXQuYwpp bmRleCAyZmI5NTJkYy4uMWY1MTljZmQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9i dHJlZV9pbmV0LmMKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2luZXQuYwpAQCAtOCw2 ICs4LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJ1dGlscy9i dWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2luZXQuaCIKKyNpbmNsdWRlICJ1dGlscy9zb3J0 c3VwcG9ydC5oIgogCiB0eXBlZGVmIHN0cnVjdCBpbmV0a2V5CiB7CkBAIC0yNCw4ICsyNSwxNSBA QCBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9pbmV0X3BpY2tzcGxpdCk7CiBQR19GVU5DVElPTl9J TkZPX1YxKGdidF9pbmV0X2NvbnNpc3RlbnQpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfaW5l dF9wZW5hbHR5KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2luZXRfc2FtZSk7CitQR19GVU5D VElPTl9JTkZPX1YxKGdidF9pbmV0X3NvcnRzdXBwb3J0KTsKIAogCitzdGF0aWMgaW50CitpbmV0 X2Zhc3RfY21wKERhdHVtIHgsIERhdHVtIHksIFNvcnRTdXBwb3J0IHNzdXApCit7CisJcmV0dXJu IERhdHVtR2V0SW50MzIoRGlyZWN0RnVuY3Rpb25DYWxsMihuZXR3b3JrX2NtcCwgeCwgeSkpOwor fQorCiBzdGF0aWMgYm9vbAogZ2J0X2luZXRndChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpi LCBGbWdySW5mbyAqZmxpbmZvKQogewpAQCAtMTg1LDMgKzE5MywxNCBAQCBnYnRfaW5ldF9zYW1l KFBHX0ZVTkNUSU9OX0FSR1MpCiAJKnJlc3VsdCA9IGdidF9udW1fc2FtZSgodm9pZCAqKSBiMSwg KHZvaWQgKikgYjIsICZ0aW5mbywgZmNpbmZvLT5mbGluZm8pOwogCVBHX1JFVFVSTl9QT0lOVEVS KHJlc3VsdCk7CiB9CisKK0RhdHVtCitnYnRfaW5ldF9zb3J0c3VwcG9ydChQR19GVU5DVElPTl9B UkdTKQoreworCVNvcnRTdXBwb3J0IHNzdXAgPSAoU29ydFN1cHBvcnQpIFBHX0dFVEFSR19QT0lO VEVSKDApOworCisJc3N1cC0+Y29tcGFyYXRvciA9IGluZXRfZmFzdF9jbXA7CisJc3N1cC0+c3N1 cF9leHRyYSA9IE5VTEw7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQpkaWZmIC0tZ2l0IGEvY29u dHJpYi9idHJlZV9naXN0L2J0cmVlX2ludGVydmFsLmMgYi9jb250cmliL2J0cmVlX2dpc3QvYnRy ZWVfaW50ZXJ2YWwuYwppbmRleCBiMGFmZGYwMi4uNDVjMGM3YTQgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvYnRyZWVfZ2lzdC9idHJlZV9pbnRlcnZhbC5jCisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9i dHJlZV9pbnRlcnZhbC5jCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgImJ0cmVlX2dpc3QuaCIK ICNpbmNsdWRlICJidHJlZV91dGlsc19udW0uaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5o IgorI2luY2x1ZGUgInV0aWxzL3NvcnRzdXBwb3J0LmgiCiAjaW5jbHVkZSAidXRpbHMvdGltZXN0 YW1wLmgiCiAKIHR5cGVkZWYgc3RydWN0CkBAIC0yNyw4ICsyOCwxNSBAQCBQR19GVU5DVElPTl9J TkZPX1YxKGdidF9pbnR2X2NvbnNpc3RlbnQpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfaW50 dl9kaXN0YW5jZSk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9pbnR2X3BlbmFsdHkpOwogUEdf RlVOQ1RJT05fSU5GT19WMShnYnRfaW50dl9zYW1lKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0 X2ludHZfc29ydHN1cHBvcnQpOwogCiAKK3N0YXRpYyBpbnQKK2ludHZfZmFzdF9jbXAoRGF0dW0g eCwgRGF0dW0geSwgU29ydFN1cHBvcnQgc3N1cCkKK3sKKwlyZXR1cm4gRGF0dW1HZXRJbnQzMihE aXJlY3RGdW5jdGlvbkNhbGwyKGludGVydmFsX2NtcCwgeCwgeSkpOworfQorCiBzdGF0aWMgYm9v bAogZ2J0X2ludHZndChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCBGbWdySW5mbyAqZmxp bmZvKQogewpAQCAtMjk1LDMgKzMwMywxNCBAQCBnYnRfaW50dl9zYW1lKFBHX0ZVTkNUSU9OX0FS R1MpCiAJKnJlc3VsdCA9IGdidF9udW1fc2FtZSgodm9pZCAqKSBiMSwgKHZvaWQgKikgYjIsICZ0 aW5mbywgZmNpbmZvLT5mbGluZm8pOwogCVBHX1JFVFVSTl9QT0lOVEVSKHJlc3VsdCk7CiB9CisK K0RhdHVtCitnYnRfaW50dl9zb3J0c3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCVNvcnRT dXBwb3J0IHNzdXAgPSAoU29ydFN1cHBvcnQpIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJc3N1 cC0+Y29tcGFyYXRvciA9IGludHZfZmFzdF9jbXA7CisJc3N1cC0+c3N1cF9leHRyYSA9IE5VTEw7 CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0 L2J0cmVlX21hY2FkZHI4LmMgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfbWFjYWRkcjguYwpp bmRleCA3OTZjYzRlZi4uMDM0ZTM0YmYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9i dHJlZV9tYWNhZGRyOC5jCisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9tYWNhZGRyOC5j CkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgImJ0cmVlX3V0aWxzX251bS5oIgogI2luY2x1ZGUg InV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5ldC5oIgorI2luY2x1ZGUgInV0 aWxzL3NvcnRzdXBwb3J0LmgiCiAKIHR5cGVkZWYgc3RydWN0CiB7CkBAIC0yNSw4ICsyNiwxNSBA QCBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9tYWNhZDhfcGlja3NwbGl0KTsKIFBHX0ZVTkNUSU9O X0lORk9fVjEoZ2J0X21hY2FkOF9jb25zaXN0ZW50KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0 X21hY2FkOF9wZW5hbHR5KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X21hY2FkOF9zYW1lKTsK K1BHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X21hY2FkOF9zb3J0c3VwcG9ydCk7CiAKIAorc3RhdGlj IGludAorbWFjYWRkcjhfZmFzdF9jbXAoRGF0dW0geCwgRGF0dW0geSwgU29ydFN1cHBvcnQgc3N1 cCkKK3sKKwlyZXR1cm4gRGF0dW1HZXRJbnQzMihEaXJlY3RGdW5jdGlvbkNhbGwyKG1hY2FkZHI4 X2NtcCwgeCwgeSkpOworfQorCiBzdGF0aWMgYm9vbAogZ2J0X21hY2FkOGd0KGNvbnN0IHZvaWQg KmEsIGNvbnN0IHZvaWQgKmIsIEZtZ3JJbmZvICpmbGluZm8pCiB7CkBAIC0xOTQsMyArMjAyLDE0 IEBAIGdidF9tYWNhZDhfc2FtZShQR19GVU5DVElPTl9BUkdTKQogCSpyZXN1bHQgPSBnYnRfbnVt X3NhbWUoKHZvaWQgKikgYjEsICh2b2lkICopIGIyLCAmdGluZm8sIGZjaW5mby0+ZmxpbmZvKTsK IAlQR19SRVRVUk5fUE9JTlRFUihyZXN1bHQpOwogfQorCitEYXR1bQorZ2J0X21hY2FkOF9zb3J0 c3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCVNvcnRTdXBwb3J0IHNzdXAgPSAoU29ydFN1 cHBvcnQpIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJc3N1cC0+Y29tcGFyYXRvciA9IG1hY2Fk ZHI4X2Zhc3RfY21wOworCXNzdXAtPnNzdXBfZXh0cmEgPSBOVUxMOworCisJUEdfUkVUVVJOX1ZP SUQoKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV90aW1lLmMgYi9j b250cmliL2J0cmVlX2dpc3QvYnRyZWVfdGltZS5jCmluZGV4IGQ4OTQwMWMwLi4yYjMyNDlkNyAx MDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX3RpbWUuYworKysgYi9jb250cmli L2J0cmVlX2dpc3QvYnRyZWVfdGltZS5jCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgImJ0cmVl X3V0aWxzX251bS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRp bHMvZGF0ZS5oIgorI2luY2x1ZGUgInV0aWxzL3NvcnRzdXBwb3J0LmgiCiAjaW5jbHVkZSAidXRp bHMvdGltZXN0YW1wLmgiCiAKIHR5cGVkZWYgc3RydWN0CkBAIC0yOCw2ICsyOSw4IEBAIFBHX0ZV TkNUSU9OX0lORk9fVjEoZ2J0X3RpbWVfZGlzdGFuY2UpOwogUEdfRlVOQ1RJT05fSU5GT19WMShn YnRfdGltZXR6X2NvbnNpc3RlbnQpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfdGltZV9wZW5h bHR5KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X3RpbWVfc2FtZSk7CitQR19GVU5DVElPTl9J TkZPX1YxKGdidF90aW1lX3NvcnRzdXBwb3J0KTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X3Rp bWV0el9zb3J0c3VwcG9ydCk7CiAKIAogI2lmZGVmIFVTRV9GTE9BVDhfQllWQUwKQEAgLTM3LDYg KzQwLDE5IEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X3RpbWVfc2FtZSk7CiAjZW5kaWYKIAog CitzdGF0aWMgaW50Cit0aW1lX2Zhc3RfY21wKERhdHVtIHgsIERhdHVtIHksIFNvcnRTdXBwb3J0 IHNzdXApCit7CisJcmV0dXJuIERhdHVtR2V0SW50MzIoRGlyZWN0RnVuY3Rpb25DYWxsMih0aW1l X2NtcCwgeCwgeSkpOworfQorCitzdGF0aWMgaW50Cit0aW1ldHpfZmFzdF9jbXAoRGF0dW0geCwg RGF0dW0geSwgU29ydFN1cHBvcnQgc3N1cCkKK3sKKwlyZXR1cm4gRGF0dW1HZXRJbnQzMihEaXJl Y3RGdW5jdGlvbkNhbGwyKHRpbWV0el9jbXAsIHgsIHkpKTsKK30KKworCiBzdGF0aWMgYm9vbAog Z2J0X3RpbWVndChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCBGbWdySW5mbyAqZmxpbmZv KQogewpAQCAtMzMyLDMgKzM0OCwyNSBAQCBnYnRfdGltZV9zYW1lKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJKnJlc3VsdCA9IGdidF9udW1fc2FtZSgodm9pZCAqKSBiMSwgKHZvaWQgKikgYjIsICZ0aW5m bywgZmNpbmZvLT5mbGluZm8pOwogCVBHX1JFVFVSTl9QT0lOVEVSKHJlc3VsdCk7CiB9CisKK0Rh dHVtCitnYnRfdGltZV9zb3J0c3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCVNvcnRTdXBw b3J0IHNzdXAgPSAoU29ydFN1cHBvcnQpIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJc3N1cC0+ Y29tcGFyYXRvciA9IHRpbWVfZmFzdF9jbXA7CisJc3N1cC0+c3N1cF9leHRyYSA9IE5VTEw7CisK KwlQR19SRVRVUk5fVk9JRCgpOworfQorCitEYXR1bQorZ2J0X3RpbWV0el9zb3J0c3VwcG9ydChQ R19GVU5DVElPTl9BUkdTKQoreworCVNvcnRTdXBwb3J0IHNzdXAgPSAoU29ydFN1cHBvcnQpIFBH X0dFVEFSR19QT0lOVEVSKDApOworCisJc3N1cC0+Y29tcGFyYXRvciA9IHRpbWV0el9mYXN0X2Nt cDsKKwlzc3VwLT5zc3VwX2V4dHJhID0gTlVMTDsKKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9Clwg Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0 L21lc29uLmJ1aWxkIGIvY29udHJpYi9idHJlZV9naXN0L21lc29uLmJ1aWxkCmluZGV4IGM4OGE2 YWM4Li40YjE0OGVkZSAxMDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0L21lc29uLmJ1aWxk CisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9tZXNvbi5idWlsZApAQCAtNTAsNiArNTAsNyBAQCBp bnN0YWxsX2RhdGEoCiAgICdidHJlZV9naXN0LS0xLjQtLTEuNS5zcWwnLAogICAnYnRyZWVfZ2lz dC0tMS41LS0xLjYuc3FsJywKICAgJ2J0cmVlX2dpc3QtLTEuNi0tMS43LnNxbCcsCisgICdidHJl ZV9naXN0LS0xLjctLTEuOC5zcWwnLAogICBrd2FyZ3M6IGNvbnRyaWJfZGF0YV9hcmdzLAogKQog Ci0tIAoyLjM0LjEKCg== --000000000000afcb23060e981c9a--