From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 8385F385624C for ; Thu, 8 Jun 2023 18:58:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8385F385624C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1686250686; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type; bh=PqF0D72Kin6eBNb1S3ehzB7gYAv1z/N+T8kARdPcDxY=; b=UpzLe9+a1YtSvgMdD+/oQT/taxWjmPr+K2GjYj+T/767WRFxlR/zNr6KAbKnsOeRw+2eDG W0xj58gdBrH+MhkqYUweHl8T3paOyuBDCuVeDgxVse3cDvm8QEOZc8cv7DRNiz4jPm9nkT cQVbEC+hi9uKhXRiItlS+YxSA5T0sXI= Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-534-BZWXIT0sPTWT-NsAgkEixQ-1; Thu, 08 Jun 2023 14:58:04 -0400 X-MC-Unique: BZWXIT0sPTWT-NsAgkEixQ-1 Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-3f9a7a41baeso9970351cf.1 for ; Thu, 08 Jun 2023 11:58:04 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686250684; x=1688842684; h=subject:from:cc:to:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=LSHWKRKOc0o6Xc8lN3uKHD3T3A+8gIMFWOM+IJfO4+I=; b=GHa+WaII7E9u4JPkJcdksRQMotw95Zp4riPnwGfxFXiGwr0mtYAMjurpC7UNxuP8bE /Z5z53uAHMNdXcVS67/5oXjiBccNxfA3V+dKMctGCXP1DQV1RY9k9/AFJl9syZ1U7qsT FTY0UnpmjeVyj7p8TQx1GSX6rW8oJ6pwt7NaYR3J2iSoh29K/0AcABQhTZ5El4y2PJdr QhSljEuAT62xCGTdFk0RsjX0DArGNhSxp4Gk+/12HJR56Vp8T4Jz6yIdAl8sEiFYics5 4ixZkU0XThjTMCz+icbgjUFpbY7g6HMJ7h8OCBrJNvCD5kOOdg2hgJh7vu7nK9REGVP+ owXA== X-Gm-Message-State: AC+VfDxwjX0L2/wxSopJausYizbLBOXYCN/57POquXYXMz1bBB4H4n+2 l6R/5zbvRlxdgsp7fEsE/UYG+Dd7WmKCCz6uosl8FryIg5/rF9slKs+CRKIRpigMDzeATMP/IdK nUi2cmayrSsnKsi2HS0bUZ40KdBV8ztDr+sxOtkciM2TCvojBYL27XxFKpQdbVVddQNQiQp2d+d 7OrQ== X-Received: by 2002:a05:622a:291:b0:3f1:630:8659 with SMTP id z17-20020a05622a029100b003f106308659mr7514163qtw.53.1686250683786; Thu, 08 Jun 2023 11:58:03 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4mvpTkOfvgRvgZNqPdRVgcPMQbDoCtCmCtTn2FJn2TFGXdWV2nJ86APc1mi4NetH+Ww1sTmg== X-Received: by 2002:a05:622a:291:b0:3f1:630:8659 with SMTP id z17-20020a05622a029100b003f106308659mr7514141qtw.53.1686250683412; Thu, 08 Jun 2023 11:58:03 -0700 (PDT) Received: from ?IPV6:2607:fea8:51df:4200::ca58? ([2607:fea8:51df:4200::ca58]) by smtp.gmail.com with ESMTPSA id z4-20020ac87104000000b003f6be76a5c1sm572266qto.6.2023.06.08.11.58.02 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 08 Jun 2023 11:58:02 -0700 (PDT) Message-ID: Date: Thu, 8 Jun 2023 14:58:01 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 To: gcc-patches Cc: "hernandez, aldy" From: Andrew MacLeod Subject: [COMMITTED 4/4] Provide a new dispatch mechanism for range-ops. X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="------------bT5AjYgYd39yQKKIQ81dhx00" Content-Language: en-US X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------bT5AjYgYd39yQKKIQ81dhx00 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit This patch introduces a new dispatch mechanism for range_op_handler. Instead of ad-hoc if then elses based on is_a and is_a,frange *>, the discriminators in class vrange are used for each operand to create a triplet, ie (III for "LHS = Irange, op1 = Irange, op2 = Irange", and IFI for "Irange Frange Irange") These triplets are then used ina  switch to dispatch the call to the approriate one in range_operator for those types.  And added bonus is that if there is a pattern that is not recognized, we no longer trap.. Tthe dispatch routine simply returns the same thing as a default routine does in range_operator.. either false or VREL_VARYING depending on the signature. This will make adding additional range types much simplier going forward, and aleviates the need to check for supported types before invoking routines like fold_range. As part fo the rework, this patch also simplifies range_op_handler to now only contain a single pointer to a range_operator instead of 2 pointers and a flag.   This is enabled by the previous patch which unifies all range operators to one class. And added bonus is a bit of a compile time improvement for VRP and threading, as well as other clients due to less conditional checks at dispatch time. It only amounts to about a 0.75% improvement in those passes for the moment... but every little bit helps. Bootstraps on x86_64-pc-linux-gnu with no regressions.  Pushed. Andrew --------------bT5AjYgYd39yQKKIQ81dhx00 Content-Type: text/x-patch; charset=UTF-8; name="0004-Provide-a-new-dispatch-mechanism-for-range-ops.patch" Content-Disposition: attachment; filename*0="0004-Provide-a-new-dispatch-mechanism-for-range-ops.patch" Content-Transfer-Encoding: base64 RnJvbSBmMzZmMjU3OTJiM2NiMGI5MDY3ZjMxOGRkNGQ1Yzk2OGY3NWE1YzNkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgTWFjTGVvZCA8YW1hY2xlb2RAcmVkaGF0LmNvbT4K RGF0ZTogV2VkLCAzMSBNYXkgMjAyMyAxMzoxMDozMSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggNC80 XSBQcm92aWRlIGEgbmV3IGRpc3BhdGNoIG1lY2hhbmlzbSBmb3IgcmFuZ2Utb3BzLgoKU2ltcGxp ZnkgcmFuZ2Vfb3BfaGFuZGxlciB0byBoYXZlIGEgc2luZ2xlIHJhbmdlX29wZXJhdG9yIHBvaW50 ZXIgYW5kCnByb3ZpZGUgYSBtb3JlIGZsZXhpYmxlIGRpc3BhdGNoIG1lY2hhbmlzbSBmb3IgY2Fs bHMgdmlhIGdlbmVyaWMgdnJhbmdlCmNsYXNzZXMuICAgVGhpcyBpcyBtb3JlIGV4dGVuc2libGUg Zm9yIGFkZGluZyBuZXcgY2xhc3NlcyBvZiByYW5nZSBzdXBwb3J0LgpBbnkgdW5zdXBwb3J0ZWQg ZGlzcGF0Y2ggcGF0dGVybnMgd2lsbCBzaW1wbHkgcmV0dXJuIEZBTFNFIG5vdyByYXRoZXIKdGhh biBnZW5lcmF0aW5nIGNvbXBpbGUgdGltZSBleGNlcHRpb25zLCBhbGV2aWF0aW5nIHRoZSBuZWVk IHRvCmNvbnN0YW50bHkgY2hlY2sgZm9yIHN1cG9wcnRlZCB0eXBlcy4KCgkqIGdpbXBsZS1yYW5n ZS1vcC5jYwoJKGdpbXBsZV9yYW5nZV9vcF9oYW5kbGVyOjpnaW1wbGVfcmFuZ2Vfb3BfaGFuZGxl cik6IEFkanVzdC4KCShnaW1wbGVfcmFuZ2Vfb3BfaGFuZGxlcjo6bWF5YmVfYnVpbHRpbl9jYWxs KTogQWRqdXN0LgoJKiBnaW1wbGUtcmFuZ2Utb3AuaCAob3BlcmFuZDEsIG9wZXJhbmQyKTogVXNl IG1fb3BlcmF0b3IuCgkqIHJhbmdlLW9wLmNjIChpbnRlZ3JhbF90YWJsZSwgcG9pbnRlcl90YWJs ZSk6IFJlbG9jYXRlLgoJKGdldF9vcF9oYW5kbGVyKTogUmVuYW1lIGZyb20gZ2V0X2hhbmRsZXIg YW5kIGhhbmRsZSBhbGwgdHlwZXMuCgkocmFuZ2Vfb3BfaGFuZGxlcjo6cmFuZ2Vfb3BfaGFuZGxl cik6IFJlbG9jYXRlLgoJKHJhbmdlX29wX2hhbmRsZXI6OnNldF9vcF9oYW5kbGVyKTogUmVsb2Nh dGUgYW5kIGFkanVzdC4KCShyYW5nZV9vcF9oYW5kbGVyOjpyYW5nZV9vcF9oYW5kbGVyKTogUmVs b2NhdGUuCgkoZGlzcGF0Y2hfdHJpbyk6IE5ldy4KCShST19JSUksIFJPX0lGSSwgUk9fSUZGLCBS T19GRkYsIFJPX0ZJRiwgUk9fRklJKTogTmV3IGNvbnN0cy4KCShyYW5nZV9vcF9oYW5kbGVyOjpk aXNwYXRjaF9raW5kKTogTmV3LgoJKHJhbmdlX29wX2hhbmRsZXI6OmZvbGRfcmFuZ2UpOiBSZWxv Y2F0ZSBhbmQgVXNlIG5ldyBkaXNwYXRjaCB2YWx1ZS4KCShyYW5nZV9vcF9oYW5kbGVyOjpvcDFf cmFuZ2UpOiBEaXR0by4KCShyYW5nZV9vcF9oYW5kbGVyOjpvcDJfcmFuZ2UpOiBEaXR0by4KCShy YW5nZV9vcF9oYW5kbGVyOjpsaHNfb3AxX3JlbGF0aW9uKTogRGl0dG8uCgkocmFuZ2Vfb3BfaGFu ZGxlcjo6bGhzX29wMl9yZWxhdGlvbik6IERpdHRvLgoJKHJhbmdlX29wX2hhbmRsZXI6Om9wMV9v cDJfcmVsYXRpb24pOiBEaXR0by4KCShyYW5nZV9vcF9oYW5kbGVyOjpzZXRfb3BfaGFuZGxlcik6 IFVzZSBtX29wZXJhdG9yIG1lbWJlci4KCSogcmFuZ2Utb3AuaCAocmFuZ2Vfb3BfaGFuZGxlcjo6 b3BlcmF0b3IgYm9vbCk6IFVzZSBtX29wZXJhdG9yLgoJKHJhbmdlX29wX2hhbmRsZXI6OmRpc3Bh dGNoX2tpbmQpOiBOZXcuCgkocmFuZ2Vfb3BfaGFuZGxlcjo6bV92YWxpZCk6IERlbGV0ZS4KCShy YW5nZV9vcF9oYW5kbGVyOjptX2ludCk6IERlbGV0ZQoJKHJhbmdlX29wX2hhbmRsZXI6Om1fZmxv YXQpOiBEZWxldGUKCShyYW5nZV9vcF9oYW5kbGVyOjptX29wZXJhdG9yKTogTmV3LgoJKHJhbmdl X29wX3RhYmxlOjpvcGVyYXRvcltdKTogUmVsb2NhdGUgZnJvbSAuY2MgZmlsZS4KCShyYW5nZV9v cF90YWJsZTo6c2V0KTogRGl0dG8uCgkqIHZhbHVlLXJhbmdlLmggKGNsYXNzIHZyYW5nZSk6IE1h a2UgcmFuZ2Vfb3BfaGFuZGxlciBhIGZyaWVuZC4KLS0tCiBnY2MvZ2ltcGxlLXJhbmdlLW9wLmNj IHwgIDg0ICsrKy0tLS0tCiBnY2MvZ2ltcGxlLXJhbmdlLW9wLmggIHwgICA0ICstCiBnY2MvcmFu Z2Utb3AuY2MgICAgICAgIHwgNDcwICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0t LS0tLS0tCiBnY2MvcmFuZ2Utb3AuaCAgICAgICAgIHwgIDI3ICsrLQogZ2NjL3ZhbHVlLXJhbmdl LmggICAgICB8ICAgMSArCiA1IGZpbGVzIGNoYW5nZWQsIDMwNiBpbnNlcnRpb25zKCspLCAyODAg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBsZS1yYW5nZS1vcC5jYyBiL2djYy9n aW1wbGUtcmFuZ2Utb3AuY2MKaW5kZXggMjkzZDc2NDAyZTEuLmI2YjEwZTQ3Yjc4IDEwMDY0NAot LS0gYS9nY2MvZ2ltcGxlLXJhbmdlLW9wLmNjCisrKyBiL2djYy9naW1wbGUtcmFuZ2Utb3AuY2MK QEAgLTE0NCw3ICsxNDQsNyBAQCBnaW1wbGVfcmFuZ2Vfb3BfaGFuZGxlcjo6Z2ltcGxlX3Jhbmdl X29wX2hhbmRsZXIgKGdpbXBsZSAqcykKICAgaWYgKHR5cGUpCiAgICAgc2V0X29wX2hhbmRsZXIg KGNvZGUsIHR5cGUpOwogCi0gIGlmIChtX3ZhbGlkKQorICBpZiAobV9vcGVyYXRvcikKICAgICBz d2l0Y2ggKGdpbXBsZV9jb2RlIChtX3N0bXQpKQogICAgICAgewogCWNhc2UgR0lNUExFX0NPTkQ6 CkBAIC0xNTIsNyArMTUyLDcgQEAgZ2ltcGxlX3JhbmdlX29wX2hhbmRsZXI6OmdpbXBsZV9yYW5n ZV9vcF9oYW5kbGVyIChnaW1wbGUgKnMpCiAJICBtX29wMiA9IGdpbXBsZV9jb25kX3JocyAobV9z dG10KTsKIAkgIC8vIENoZWNrIHRoYXQgb3BlcmFuZHMgYXJlIHN1cHBvcnRlZCB0eXBlcy4gIE9u ZSBjaGVjayBpcyBlbm91Z2guCiAJICBpZiAoIVZhbHVlX1JhbmdlOjpzdXBwb3J0c190eXBlX3Ag KFRSRUVfVFlQRSAobV9vcDEpKSkKLQkgICAgbV92YWxpZCA9IGZhbHNlOworCSAgICBtX29wZXJh dG9yID0gTlVMTDsKIAkgIHJldHVybjsKIAljYXNlIEdJTVBMRV9BU1NJR046CiAJICBtX29wMSA9 IGdpbXBsZV9yYW5nZV9iYXNlX29mX2Fzc2lnbm1lbnQgKG1fc3RtdCk7CkBAIC0xNzEsNyArMTcx LDcgQEAgZ2ltcGxlX3JhbmdlX29wX2hhbmRsZXI6OmdpbXBsZV9yYW5nZV9vcF9oYW5kbGVyIChn aW1wbGUgKnMpCiAJICAgIG1fb3AyID0gZ2ltcGxlX2Fzc2lnbl9yaHMyIChtX3N0bXQpOwogCSAg Ly8gQ2hlY2sgdGhhdCBvcGVyYW5kcyBhcmUgc3VwcG9ydGVkIHR5cGVzLiAgT25lIGNoZWNrIGlz IGVub3VnaC4KIAkgIGlmICgobV9vcDEgJiYgIVZhbHVlX1JhbmdlOjpzdXBwb3J0c190eXBlX3Ag KFRSRUVfVFlQRSAobV9vcDEpKSkpCi0JICAgIG1fdmFsaWQgPSBmYWxzZTsKKwkgICAgbV9vcGVy YXRvciA9IE5VTEw7CiAJICByZXR1cm47CiAJZGVmYXVsdDoKIAkgIGdjY191bnJlYWNoYWJsZSAo KTsKQEAgLTExOTMsNyArMTE5Myw2IEBAIGdpbXBsZV9yYW5nZV9vcF9oYW5kbGVyOjptYXliZV9u b25fc3RhbmRhcmQgKCkKICAgICAgIHsKIAljYXNlIFdJREVOX01VTFRfRVhQUjoKIAl7Ci0JICBt X3ZhbGlkID0gZmFsc2U7CiAJICBtX29wMSA9IGdpbXBsZV9hc3NpZ25fcmhzMSAobV9zdG10KTsK IAkgIG1fb3AyID0gZ2ltcGxlX2Fzc2lnbl9yaHMyIChtX3N0bXQpOwogCSAgdHJlZSByZXQgPSBn aW1wbGVfYXNzaWduX2xocyAobV9zdG10KTsKQEAgLTEyMTAsMTQgKzEyMDksMTMgQEAgZ2ltcGxl X3JhbmdlX29wX2hhbmRsZXI6Om1heWJlX25vbl9zdGFuZGFyZCAoKQogCSAgaWYgKChzaWduZWQx IF4gc2lnbmVkMikgJiYgc2lnbmVkX3JldCkKIAkgICAgcmV0dXJuOwogCi0JICBtX3ZhbGlkID0g dHJ1ZTsKIAkgIGlmIChzaWduZWQyICYmICFzaWduZWQxKQogCSAgICBzdGQ6OnN3YXAgKG1fb3Ax LCBtX29wMik7CiAKIAkgIGlmIChzaWduZWQxIHx8IHNpZ25lZDIpCi0JICAgIG1faW50ID0gc2ln bmVkX29wOworCSAgICBtX29wZXJhdG9yID0gc2lnbmVkX29wOwogCSAgZWxzZQotCSAgICBtX2lu dCA9IHVuc2lnbmVkX29wOworCSAgICBtX29wZXJhdG9yID0gdW5zaWduZWRfb3A7CiAJICBicmVh azsKIAl9CiAJZGVmYXVsdDoKQEAgLTEyNDYsNDcgKzEyNDQsNDEgQEAgZ2ltcGxlX3JhbmdlX29w X2hhbmRsZXI6Om1heWJlX2J1aWx0aW5fY2FsbCAoKQogICAgIHsKICAgICBjYXNlIENGTl9CVUlM VF9JTl9DT05TVEFOVF9QOgogICAgICAgbV9vcDEgPSBnaW1wbGVfY2FsbF9hcmcgKGNhbGwsIDAp OwotICAgICAgbV92YWxpZCA9IHRydWU7CiAgICAgICBpZiAoaXJhbmdlOjpzdXBwb3J0c19wIChU UkVFX1RZUEUgKG1fb3AxKSkpCi0JbV9pbnQgPSAmb3BfY2ZuX2NvbnN0YW50X3A7CisJbV9vcGVy YXRvciA9ICZvcF9jZm5fY29uc3RhbnRfcDsKICAgICAgIGVsc2UgaWYgKGZyYW5nZTo6c3VwcG9y dHNfcCAoVFJFRV9UWVBFIChtX29wMSkpKQotCW1fZmxvYXQgPSAmb3BfY2ZuX2NvbnN0YW50X2Zs b2F0X3A7CisJbV9vcGVyYXRvciA9ICZvcF9jZm5fY29uc3RhbnRfZmxvYXRfcDsKICAgICAgIGVs c2UKLQltX3ZhbGlkID0gZmFsc2U7CisJbV9vcGVyYXRvciA9IE5VTEw7CiAgICAgICBicmVhazsK IAogICAgIENBU0VfRkxUX0ZOIChDRk5fQlVJTFRfSU5fU0lHTkJJVCk6CiAgICAgICBtX29wMSA9 IGdpbXBsZV9jYWxsX2FyZyAoY2FsbCwgMCk7Ci0gICAgICBtX2Zsb2F0ID0gJm9wX2Nmbl9zaWdu Yml0OwotICAgICAgbV92YWxpZCA9IHRydWU7CisgICAgICBtX29wZXJhdG9yID0gJm9wX2Nmbl9z aWduYml0OwogICAgICAgYnJlYWs7CiAKICAgICBDQVNFX0NGTl9DT1BZU0lHTl9BTEw6CiAgICAg ICBtX29wMSA9IGdpbXBsZV9jYWxsX2FyZyAoY2FsbCwgMCk7CiAgICAgICBtX29wMiA9IGdpbXBs ZV9jYWxsX2FyZyAoY2FsbCwgMSk7Ci0gICAgICBtX2Zsb2F0ID0gJm9wX2Nmbl9jb3B5c2lnbjsK LSAgICAgIG1fdmFsaWQgPSB0cnVlOworICAgICAgbV9vcGVyYXRvciA9ICZvcF9jZm5fY29weXNp Z247CiAgICAgICBicmVhazsKIAogICAgIENBU0VfQ0ZOX1NRUlQ6CiAgICAgQ0FTRV9DRk5fU1FS VF9GTjoKICAgICAgIG1fb3AxID0gZ2ltcGxlX2NhbGxfYXJnIChjYWxsLCAwKTsKLSAgICAgIG1f ZmxvYXQgPSAmb3BfY2ZuX3NxcnQ7Ci0gICAgICBtX3ZhbGlkID0gdHJ1ZTsKKyAgICAgIG1fb3Bl cmF0b3IgPSAmb3BfY2ZuX3NxcnQ7CiAgICAgICBicmVhazsKIAogICAgIENBU0VfQ0ZOX1NJTjoK ICAgICBDQVNFX0NGTl9TSU5fRk46CiAgICAgICBtX29wMSA9IGdpbXBsZV9jYWxsX2FyZyAoY2Fs bCwgMCk7Ci0gICAgICBtX2Zsb2F0ID0gJm9wX2Nmbl9zaW47Ci0gICAgICBtX3ZhbGlkID0gdHJ1 ZTsKKyAgICAgIG1fb3BlcmF0b3IgPSAmb3BfY2ZuX3NpbjsKICAgICAgIGJyZWFrOwogCiAgICAg Q0FTRV9DRk5fQ09TOgogICAgIENBU0VfQ0ZOX0NPU19GTjoKICAgICAgIG1fb3AxID0gZ2ltcGxl X2NhbGxfYXJnIChjYWxsLCAwKTsKLSAgICAgIG1fZmxvYXQgPSAmb3BfY2ZuX2NvczsKLSAgICAg IG1fdmFsaWQgPSB0cnVlOworICAgICAgbV9vcGVyYXRvciA9ICZvcF9jZm5fY29zOwogICAgICAg YnJlYWs7CiAKICAgICBjYXNlIENGTl9CVUlMVF9JTl9UT1VQUEVSOgpAQCAtMTI5NCw2OCArMTI4 Niw1NyBAQCBnaW1wbGVfcmFuZ2Vfb3BfaGFuZGxlcjo6bWF5YmVfYnVpbHRpbl9jYWxsICgpCiAg ICAgICAvLyBPbmx5IHByb2NlZWQgSWYgdGhlIGFyZ3VtZW50IGlzIGNvbXBhdGlibGUgd2l0aCB0 aGUgTEhTLgogICAgICAgbV9vcDEgPSBnaW1wbGVfY2FsbF9hcmcgKGNhbGwsIDApOwogICAgICAg aWYgKHJhbmdlX2NvbXBhdGlibGVfcCAodHlwZSwgVFJFRV9UWVBFIChtX29wMSkpKQotCXsKLQkg IG1fdmFsaWQgPSB0cnVlOwotCSAgbV9pbnQgPSAoZnVuYyA9PSBDRk5fQlVJTFRfSU5fVE9MT1dF UikgPyAmb3BfY2ZuX3RvbG93ZXIKLQkJCQkJCSA6ICZvcF9jZm5fdG91cHBlcjsKLQl9CisJbV9v cGVyYXRvciA9IChmdW5jID09IENGTl9CVUlMVF9JTl9UT0xPV0VSKSA/ICZvcF9jZm5fdG9sb3dl cgorCQkJCQkJICAgIDogJm9wX2Nmbl90b3VwcGVyOwogICAgICAgYnJlYWs7CiAKICAgICBDQVNF X0NGTl9GRlM6CiAgICAgICBtX29wMSA9IGdpbXBsZV9jYWxsX2FyZyAoY2FsbCwgMCk7Ci0gICAg ICBtX2ludCA9ICZvcF9jZm5fZmZzOwotICAgICAgbV92YWxpZCA9IHRydWU7CisgICAgICBtX29w ZXJhdG9yID0gJm9wX2Nmbl9mZnM7CiAgICAgICBicmVhazsKIAogICAgIENBU0VfQ0ZOX1BPUENP VU5UOgogICAgICAgbV9vcDEgPSBnaW1wbGVfY2FsbF9hcmcgKGNhbGwsIDApOwotICAgICAgbV9p bnQgPSAmb3BfY2ZuX3BvcGNvdW50OwotICAgICAgbV92YWxpZCA9IHRydWU7CisgICAgICBtX29w ZXJhdG9yID0gJm9wX2Nmbl9wb3Bjb3VudDsKICAgICAgIGJyZWFrOwogCiAgICAgQ0FTRV9DRk5f Q0xaOgogICAgICAgbV9vcDEgPSBnaW1wbGVfY2FsbF9hcmcgKGNhbGwsIDApOwotICAgICAgbV92 YWxpZCA9IHRydWU7CiAgICAgICBpZiAoZ2ltcGxlX2NhbGxfaW50ZXJuYWxfcCAoY2FsbCkpCi0J bV9pbnQgPSAmb3BfY2ZuX2Nsel9pbnRlcm5hbDsKKwltX29wZXJhdG9yID0gJm9wX2Nmbl9jbHpf aW50ZXJuYWw7CiAgICAgICBlbHNlCi0JbV9pbnQgPSAmb3BfY2ZuX2NsejsKKwltX29wZXJhdG9y ID0gJm9wX2Nmbl9jbHo7CiAgICAgICBicmVhazsKIAogICAgIENBU0VfQ0ZOX0NUWjoKICAgICAg IG1fb3AxID0gZ2ltcGxlX2NhbGxfYXJnIChjYWxsLCAwKTsKLSAgICAgIG1fdmFsaWQgPSB0cnVl OwogICAgICAgaWYgKGdpbXBsZV9jYWxsX2ludGVybmFsX3AgKGNhbGwpKQotCW1faW50ID0gJm9w X2Nmbl9jdHpfaW50ZXJuYWw7CisJbV9vcGVyYXRvciA9ICZvcF9jZm5fY3R6X2ludGVybmFsOwog ICAgICAgZWxzZQotCW1faW50ID0gJm9wX2Nmbl9jdHo7CisJbV9vcGVyYXRvciA9ICZvcF9jZm5f Y3R6OwogICAgICAgYnJlYWs7CiAKICAgICBDQVNFX0NGTl9DTFJTQjoKICAgICAgIG1fb3AxID0g Z2ltcGxlX2NhbGxfYXJnIChjYWxsLCAwKTsKLSAgICAgIG1fdmFsaWQgPSB0cnVlOwotICAgICAg bV9pbnQgPSAmb3BfY2ZuX2NscnNiOworICAgICAgbV9vcGVyYXRvciA9ICZvcF9jZm5fY2xyc2I7 CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ0ZOX1VCU0FOX0NIRUNLX0FERDoKICAgICAgIG1f b3AxID0gZ2ltcGxlX2NhbGxfYXJnIChjYWxsLCAwKTsKICAgICAgIG1fb3AyID0gZ2ltcGxlX2Nh bGxfYXJnIChjYWxsLCAxKTsKLSAgICAgIG1fdmFsaWQgPSB0cnVlOwotICAgICAgbV9pbnQgPSAm b3BfY2ZuX3Vic2FuX2FkZDsKKyAgICAgIG1fb3BlcmF0b3IgPSAmb3BfY2ZuX3Vic2FuX2FkZDsK ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDRk5fVUJTQU5fQ0hFQ0tfU1VCOgogICAgICAgbV9v cDEgPSBnaW1wbGVfY2FsbF9hcmcgKGNhbGwsIDApOwogICAgICAgbV9vcDIgPSBnaW1wbGVfY2Fs bF9hcmcgKGNhbGwsIDEpOwotICAgICAgbV92YWxpZCA9IHRydWU7Ci0gICAgICBtX2ludCA9ICZv cF9jZm5fdWJzYW5fc3ViOworICAgICAgbV9vcGVyYXRvciA9ICZvcF9jZm5fdWJzYW5fc3ViOwog ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENGTl9VQlNBTl9DSEVDS19NVUw6CiAgICAgICBtX29w MSA9IGdpbXBsZV9jYWxsX2FyZyAoY2FsbCwgMCk7CiAgICAgICBtX29wMiA9IGdpbXBsZV9jYWxs X2FyZyAoY2FsbCwgMSk7Ci0gICAgICBtX3ZhbGlkID0gdHJ1ZTsKLSAgICAgIG1faW50ID0gJm9w X2Nmbl91YnNhbl9tdWw7CisgICAgICBtX29wZXJhdG9yID0gJm9wX2Nmbl91YnNhbl9tdWw7CiAg ICAgICBicmVhazsKIAogICAgIGNhc2UgQ0ZOX0JVSUxUX0lOX1NUUkxFTjoKQEAgLTEzNjUsOCAr MTM0Niw3IEBAIGdpbXBsZV9yYW5nZV9vcF9oYW5kbGVyOjptYXliZV9idWlsdGluX2NhbGwgKCkK IAkJCQkJID09IFRZUEVfUFJFQ0lTSU9OIChUUkVFX1RZUEUgKGxocykpKSkKIAkgIHsKIAkgICAg bV9vcDEgPSBnaW1wbGVfY2FsbF9hcmcgKGNhbGwsIDApOwotCSAgICBtX3ZhbGlkID0gdHJ1ZTsK LQkgICAgbV9pbnQgPSAmb3BfY2ZuX3N0cmxlbjsKKwkgICAgbV9vcGVyYXRvciA9ICZvcF9jZm5f c3RybGVuOwogCSAgfQogCWJyZWFrOwogICAgICAgfQpAQCAtMTM3OCwyMSArMTM1OCwxOCBAQCBn aW1wbGVfcmFuZ2Vfb3BfaGFuZGxlcjo6bWF5YmVfYnVpbHRpbl9jYWxsICgpCiAgICAgICAvLyBU aGlzIGNhbGwgd2lsbCBlbnN1cmUgYWxsIHRoZSBhc3NlcnRzIGFyZSB0cmlnZ2VyZWQuCiAgICAg ICBvYWNjX2dldF9pZm5fZGltX2FyZyAoY2FsbCk7CiAgICAgICBtX29wMSA9IGdpbXBsZV9jYWxs X2FyZyAoY2FsbCwgMCk7Ci0gICAgICBtX3ZhbGlkID0gdHJ1ZTsKLSAgICAgIG1faW50ID0gJm9w X2Nmbl9nb2FjY19kaW1fc2l6ZTsKKyAgICAgIG1fb3BlcmF0b3IgPSAmb3BfY2ZuX2dvYWNjX2Rp bV9zaXplOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENGTl9HT0FDQ19ESU1fUE9TOgogICAg ICAgLy8gVGhpcyBjYWxsIHdpbGwgZW5zdXJlIGFsbCB0aGUgYXNzZXJ0cyBhcmUgdHJpZ2dlcmVk LgogICAgICAgb2FjY19nZXRfaWZuX2RpbV9hcmcgKGNhbGwpOwogICAgICAgbV9vcDEgPSBnaW1w bGVfY2FsbF9hcmcgKGNhbGwsIDApOwotICAgICAgbV92YWxpZCA9IHRydWU7Ci0gICAgICBtX2lu dCA9ICZvcF9jZm5fZ29hY2NfZGltX3BvczsKKyAgICAgIG1fb3BlcmF0b3IgPSAmb3BfY2ZuX2dv YWNjX2RpbV9wb3M7CiAgICAgICBicmVhazsKIAogICAgIENBU0VfQ0ZOX1BBUklUWToKLSAgICAg IG1fdmFsaWQgPSB0cnVlOwotICAgICAgbV9pbnQgPSAmb3BfY2ZuX3Bhcml0eTsKKyAgICAgIG1f b3BlcmF0b3IgPSAmb3BfY2ZuX3Bhcml0eTsKICAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDoK QEAgLTE0MDAsOSArMTM3Nyw4IEBAIGdpbXBsZV9yYW5nZV9vcF9oYW5kbGVyOjptYXliZV9idWls dGluX2NhbGwgKCkKIAl1bnNpZ25lZCBhcmc7CiAJaWYgKGdpbXBsZV9jYWxsX2Zuc3BlYyAoY2Fs bCkucmV0dXJuc19hcmcgKCZhcmcpICYmIGFyZyA9PSAwKQogCSAgewotCSAgICBtX3ZhbGlkID0g dHJ1ZTsKIAkgICAgbV9vcDEgPSBnaW1wbGVfY2FsbF9hcmcgKGNhbGwsIDApOwotCSAgICBtX2lu dCA9ICZvcF9jZm5fcGFzc190aHJvdWdoX2FyZzE7CisJICAgIG1fb3BlcmF0b3IgPSAmb3BfY2Zu X3Bhc3NfdGhyb3VnaF9hcmcxOwogCSAgfQogCWJyZWFrOwogICAgICAgfQpkaWZmIC0tZ2l0IGEv Z2NjL2dpbXBsZS1yYW5nZS1vcC5oIGIvZ2NjL2dpbXBsZS1yYW5nZS1vcC5oCmluZGV4IDFiZjYz YzVjZTZmLi5lN2JiMDA5NTQ0MCAxMDA2NDQKLS0tIGEvZ2NjL2dpbXBsZS1yYW5nZS1vcC5oCisr KyBiL2djYy9naW1wbGUtcmFuZ2Utb3AuaApAQCAtMzIsOCArMzIsOCBAQCBwdWJsaWM6CiAgIGdp bXBsZV9yYW5nZV9vcF9oYW5kbGVyIChnaW1wbGUgKnMpOwogICBpbmxpbmUgZ2ltcGxlICpzdG10 ICgpIGNvbnN0IHsgcmV0dXJuIG1fc3RtdDsgfQogICBpbmxpbmUgdHJlZSBsaHMgKCkgY29uc3Qg eyByZXR1cm4gZ2ltcGxlX2dldF9saHMgKG1fc3RtdCk7IH0KLSAgdHJlZSBvcGVyYW5kMSAoKSBj b25zdCB7IGdjY19jaGVja2luZ19hc3NlcnQgKG1fdmFsaWQpOyByZXR1cm4gbV9vcDE7IH0KLSAg dHJlZSBvcGVyYW5kMiAoKSBjb25zdCB7IGdjY19jaGVja2luZ19hc3NlcnQgKG1fdmFsaWQpOyBy ZXR1cm4gbV9vcDI7IH0KKyAgdHJlZSBvcGVyYW5kMSAoKSBjb25zdCB7IGdjY19jaGVja2luZ19h c3NlcnQgKG1fb3BlcmF0b3IpOyByZXR1cm4gbV9vcDE7IH0KKyAgdHJlZSBvcGVyYW5kMiAoKSBj b25zdCB7IGdjY19jaGVja2luZ19hc3NlcnQgKG1fb3BlcmF0b3IpOyByZXR1cm4gbV9vcDI7IH0K ICAgYm9vbCBjYWxjX29wMSAodnJhbmdlICZyLCBjb25zdCB2cmFuZ2UgJmxoc19yYW5nZSk7CiAg IGJvb2wgY2FsY19vcDEgKHZyYW5nZSAmciwgY29uc3QgdnJhbmdlICZsaHNfcmFuZ2UsIGNvbnN0 IHZyYW5nZSAmb3AyX3JhbmdlLAogCQkgcmVsYXRpb25fdHJpbyA9IFRSSU9fVkFSWUlORyk7CmRp ZmYgLS1naXQgYS9nY2MvcmFuZ2Utb3AuY2MgYi9nY2MvcmFuZ2Utb3AuY2MKaW5kZXggMjAzYzMw ZjZlOTQuLjRkMTIyZGUzMDI2IDEwMDY0NAotLS0gYS9nY2MvcmFuZ2Utb3AuY2MKKysrIGIvZ2Nj L3JhbmdlLW9wLmNjCkBAIC00OCw2ICs0OCwyNTYgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUg ZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJyYW5nZS1vcC5oIgogI2luY2x1 ZGUgInRyZWUtc3NhLWNjcC5oIgogCisvLyBJbnN0YW50aWF0ZSBhIHJhbmdlIG9wIHRhYmxlIGZv ciBpbnRlZ3JhbCBvcGVyYXRpb25zLgorCitjbGFzcyBpbnRlZ3JhbF90YWJsZSA6IHB1YmxpYyBy YW5nZV9vcF90YWJsZQoreworcHVibGljOgorICBpbnRlZ3JhbF90YWJsZSAoKTsKK30gaW50ZWdy YWxfdHJlZV90YWJsZTsKKworLy8gSW5zdGFudGlhdGUgYSByYW5nZSBvcCB0YWJsZSBmb3IgcG9p bnRlciBvcGVyYXRpb25zLgorCitjbGFzcyBwb2ludGVyX3RhYmxlIDogcHVibGljIHJhbmdlX29w X3RhYmxlCit7CitwdWJsaWM6CisgIHBvaW50ZXJfdGFibGUgKCk7Cit9IHBvaW50ZXJfdHJlZV90 YWJsZTsKKworCisvLyBUaGUgdGFibGVzIGFyZSBoaWRkZW4gYW5kIGFjY2Vzc2VkIHZpYSBhIHNp bXBsZSBleHRlcm4gZnVuY3Rpb24uCisKK3JhbmdlX29wZXJhdG9yICoKK2dldF9vcF9oYW5kbGVy IChlbnVtIHRyZWVfY29kZSBjb2RlLCB0cmVlIHR5cGUpCit7CisgIC8vIEZpcnN0IGNoZWNrIGlm IHRoZXJlIGlzIGEgcG9pbnRlciBzcGVjaWFsaXphdGlvbi4KKyAgaWYgKFBPSU5URVJfVFlQRV9Q ICh0eXBlKSkKKyAgICByZXR1cm4gcG9pbnRlcl90cmVlX3RhYmxlW2NvZGVdOworICBpZiAoSU5U RUdSQUxfVFlQRV9QICh0eXBlKSkKKyAgICByZXR1cm4gaW50ZWdyYWxfdHJlZV90YWJsZVtjb2Rl XTsKKyAgaWYgKGZyYW5nZTo6c3VwcG9ydHNfcCAodHlwZSkpCisgICAgcmV0dXJuICgqZmxvYXRp bmdfdHJlZV90YWJsZSlbY29kZV07CisgIHJldHVybiBOVUxMOworfQorCityYW5nZV9vcF9oYW5k bGVyOjpyYW5nZV9vcF9oYW5kbGVyICgpCit7CisgIG1fb3BlcmF0b3IgPSBOVUxMOworfQorCit2 b2lkCityYW5nZV9vcF9oYW5kbGVyOjpzZXRfb3BfaGFuZGxlciAodHJlZV9jb2RlIGNvZGUsIHRy ZWUgdHlwZSkKK3sKKyAgbV9vcGVyYXRvciA9IGdldF9vcF9oYW5kbGVyIChjb2RlLCB0eXBlKTsK K30KKworcmFuZ2Vfb3BfaGFuZGxlcjo6cmFuZ2Vfb3BfaGFuZGxlciAodHJlZV9jb2RlIGNvZGUs IHRyZWUgdHlwZSkKK3sKKyAgc2V0X29wX2hhbmRsZXIgKGNvZGUsIHR5cGUpOworfQorCisvLyBD cmVhdGUgYSBkaXNwYXRjaCBwYXR0ZXJuIGZvciB2YWx1ZSByYW5nZSBkaXNjcmltaW5hdG9ycyBM SFMsIE9QMSwgYW5kIE9QMi4KKy8vIFRoaXMgaXMgdXNlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHZh bHVlIGZvciBlYWNoIGRpc3BhdGNoIHBhdHRlcm4uICBTaGlmdAorLy8gdmFsdWVzIGFyZSBiYXNl ZCBvbiB0aGUgc2l6ZSBvZiB0aGUgbV9kaXNjcmltaW5hdG9yIGZpZWxkIGluIHZhbHVlX3Jhbmdl LmguCisKK2NvbnN0ZXhwciB1bnNpZ25lZAorZGlzcGF0Y2hfdHJpbyAodW5zaWduZWQgbGhzLCB1 bnNpZ25lZCBvcDEsIHVuc2lnbmVkIG9wMikKK3sKKyAgcmV0dXJuICgobGhzIDw8IDgpICsgKG9w MSA8PCA0KSArIChvcDIpKTsKK30KKworLy8gVGhlc2UgYXJlIHRoZSBzdXBwb3J0ZWQgZGlzcGF0 Y2ggcGF0dGVybnMuIFRoZXNlIG1hcCB0byB0aGUgcGFyYW1ldGVyIGxpc3QKKy8vIG9mIHRoZSBy b3V0aW5lcyBpbiByYW5nZV9vcGVyYXRvci4gIE5vdGUgdGhlIGxhc3QgMyBjaGFyYWN0ZXJzIGFy ZQorLy8gc2hvcnRoYW5kIGZvciB0aGUgTEhTLCBPUDEsIGFuZCBPUDIgcmFuZ2UgZGlzY3JpbWlu YXRvciBjbGFzcy4KKworY29uc3QgdW5zaWduZWQgUk9fSUlJID0JZGlzcGF0Y2hfdHJpbyAoVlJf SVJBTkdFLCBWUl9JUkFOR0UsIFZSX0lSQU5HRSk7Citjb25zdCB1bnNpZ25lZCBST19JRkkgPSBk aXNwYXRjaF90cmlvIChWUl9JUkFOR0UsIFZSX0ZSQU5HRSwgVlJfSVJBTkdFKTsKK2NvbnN0IHVu c2lnbmVkIFJPX0lGRiA9IGRpc3BhdGNoX3RyaW8gKFZSX0lSQU5HRSwgVlJfRlJBTkdFLCBWUl9G UkFOR0UpOworY29uc3QgdW5zaWduZWQgUk9fRkZGID0gZGlzcGF0Y2hfdHJpbyAoVlJfRlJBTkdF LCBWUl9GUkFOR0UsIFZSX0ZSQU5HRSk7Citjb25zdCB1bnNpZ25lZCBST19GSUYgPSBkaXNwYXRj aF90cmlvIChWUl9GUkFOR0UsIFZSX0lSQU5HRSwgVlJfRlJBTkdFKTsKK2NvbnN0IHVuc2lnbmVk IFJPX0ZJSSA9IGRpc3BhdGNoX3RyaW8gKFZSX0ZSQU5HRSwgVlJfSVJBTkdFLCBWUl9JUkFOR0Up OworCisvLyBSZXR1cm4gYSBkaXNwYXRjaCB2YWx1ZSBmb3IgcGFyYW1ldGVyIHR5cGVzIExIUywg T1AxIGFuZCBPUDIuCisKK3Vuc2lnbmVkCityYW5nZV9vcF9oYW5kbGVyOjpkaXNwYXRjaF9raW5k IChjb25zdCB2cmFuZ2UgJmxocywgY29uc3QgdnJhbmdlICZvcDEsCisJCQkJIGNvbnN0IHZyYW5n ZSYgb3AyKSBjb25zdAoreworICByZXR1cm4gZGlzcGF0Y2hfdHJpbyAobGhzLm1fZGlzY3JpbWlu YXRvciwgb3AxLm1fZGlzY3JpbWluYXRvciwKKwkJCW9wMi5tX2Rpc2NyaW1pbmF0b3IpOworfQor CisvLyBEaXNwYXRjaCBhIGNhbGwgdG8gZm9sZF9yYW5nZSBiYXNlZCBvbiB0aGUgdHlwZXMgb2Yg UiwgTEggYW5kIFJILgorCitib29sCityYW5nZV9vcF9oYW5kbGVyOjpmb2xkX3JhbmdlICh2cmFu Z2UgJnIsIHRyZWUgdHlwZSwKKwkJCSAgICAgIGNvbnN0IHZyYW5nZSAmbGgsCisJCQkgICAgICBj b25zdCB2cmFuZ2UgJnJoLAorCQkJICAgICAgcmVsYXRpb25fdHJpbyByZWwpIGNvbnN0Cit7Cisg IGdjY19jaGVja2luZ19hc3NlcnQgKG1fb3BlcmF0b3IpOworICBzd2l0Y2ggKGRpc3BhdGNoX2tp bmQgKHIsIGxoLCByaCkpCisgICAgeworICAgICAgY2FzZSBST19JSUk6CisJcmV0dXJuIG1fb3Bl cmF0b3ItPmZvbGRfcmFuZ2UgKGFzX2EgPGlyYW5nZT4gKHIpLCB0eXBlLAorCQkJCSAgICAgICBh c19hIDxpcmFuZ2U+IChsaCksCisJCQkJICAgICAgIGFzX2EgPGlyYW5nZT4gKHJoKSwgcmVsKTsK KyAgICAgIGNhc2UgUk9fSUZJOgorCXJldHVybiBtX29wZXJhdG9yLT5mb2xkX3JhbmdlIChhc19h IDxpcmFuZ2U+IChyKSwgdHlwZSwKKwkJCQkgICAgICAgYXNfYSA8ZnJhbmdlPiAobGgpLAorCQkJ CSAgICAgICBhc19hIDxpcmFuZ2U+IChyaCksIHJlbCk7CisgICAgICBjYXNlIFJPX0lGRjoKKwly ZXR1cm4gbV9vcGVyYXRvci0+Zm9sZF9yYW5nZSAoYXNfYSA8aXJhbmdlPiAociksIHR5cGUsCisJ CQkJICAgICAgIGFzX2EgPGZyYW5nZT4gKGxoKSwKKwkJCQkgICAgICAgYXNfYSA8ZnJhbmdlPiAo cmgpLCByZWwpOworICAgICAgY2FzZSBST19GRkY6CisJcmV0dXJuIG1fb3BlcmF0b3ItPmZvbGRf cmFuZ2UgKGFzX2EgPGZyYW5nZT4gKHIpLCB0eXBlLAorCQkJCSAgICAgICBhc19hIDxmcmFuZ2U+ IChsaCksCisJCQkJICAgICAgIGFzX2EgPGZyYW5nZT4gKHJoKSwgcmVsKTsKKyAgICAgIGRlZmF1 bHQ6CisJcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLy8gRGlzcGF0Y2ggYSBjYWxsIHRvIG9w MV9yYW5nZSBiYXNlZCBvbiB0aGUgdHlwZXMgb2YgUiwgTEhTIGFuZCBPUDIuCisKK2Jvb2wKK3Jh bmdlX29wX2hhbmRsZXI6Om9wMV9yYW5nZSAodnJhbmdlICZyLCB0cmVlIHR5cGUsCisJCQkgICAg IGNvbnN0IHZyYW5nZSAmbGhzLAorCQkJICAgICBjb25zdCB2cmFuZ2UgJm9wMiwKKwkJCSAgICAg cmVsYXRpb25fdHJpbyByZWwpIGNvbnN0Cit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKG1fb3Bl cmF0b3IpOworCisgIGlmIChsaHMudW5kZWZpbmVkX3AgKCkpCisgICAgcmV0dXJuIGZhbHNlOwor ICBzd2l0Y2ggKGRpc3BhdGNoX2tpbmQgKHIsIGxocywgb3AyKSkKKyAgICB7CisgICAgICBjYXNl IFJPX0lJSToKKwlyZXR1cm4gbV9vcGVyYXRvci0+b3AxX3JhbmdlIChhc19hIDxpcmFuZ2U+IChy KSwgdHlwZSwKKwkJCQkgICAgICBhc19hIDxpcmFuZ2U+IChsaHMpLAorCQkJCSAgICAgIGFzX2Eg PGlyYW5nZT4gKG9wMiksIHJlbCk7CisgICAgICBjYXNlIFJPX0ZJRjoKKwlyZXR1cm4gbV9vcGVy YXRvci0+b3AxX3JhbmdlIChhc19hIDxmcmFuZ2U+IChyKSwgdHlwZSwKKwkJCQkgICAgICBhc19h IDxpcmFuZ2U+IChsaHMpLAorCQkJCSAgICAgIGFzX2EgPGZyYW5nZT4gKG9wMiksIHJlbCk7Cisg ICAgICBjYXNlIFJPX0ZGRjoKKwlyZXR1cm4gbV9vcGVyYXRvci0+b3AxX3JhbmdlIChhc19hIDxm cmFuZ2U+IChyKSwgdHlwZSwKKwkJCQkgICAgICBhc19hIDxmcmFuZ2U+IChsaHMpLAorCQkJCSAg ICAgIGFzX2EgPGZyYW5nZT4gKG9wMiksIHJlbCk7CisgICAgICBkZWZhdWx0OgorCXJldHVybiBm YWxzZTsKKyAgICB9Cit9CisKKy8vIERpc3BhdGNoIGEgY2FsbCB0byBvcDJfcmFuZ2UgYmFzZWQg b24gdGhlIHR5cGVzIG9mIFIsIExIUyBhbmQgT1AxLgorCitib29sCityYW5nZV9vcF9oYW5kbGVy OjpvcDJfcmFuZ2UgKHZyYW5nZSAmciwgdHJlZSB0eXBlLAorCQkJICAgICBjb25zdCB2cmFuZ2Ug JmxocywKKwkJCSAgICAgY29uc3QgdnJhbmdlICZvcDEsCisJCQkgICAgIHJlbGF0aW9uX3RyaW8g cmVsKSBjb25zdAoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChtX29wZXJhdG9yKTsKKyAgaWYg KGxocy51bmRlZmluZWRfcCAoKSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgc3dpdGNoIChkaXNw YXRjaF9raW5kIChyLCBsaHMsIG9wMSkpCisgICAgeworICAgICAgY2FzZSBST19JSUk6CisJcmV0 dXJuIG1fb3BlcmF0b3ItPm9wMl9yYW5nZSAoYXNfYSA8aXJhbmdlPiAociksIHR5cGUsCisJCQkJ ICAgICAgYXNfYSA8aXJhbmdlPiAobGhzKSwKKwkJCQkgICAgICBhc19hIDxpcmFuZ2U+IChvcDEp LCByZWwpOworICAgICAgY2FzZSBST19GSUY6CisJcmV0dXJuIG1fb3BlcmF0b3ItPm9wMl9yYW5n ZSAoYXNfYSA8ZnJhbmdlPiAociksIHR5cGUsCisJCQkJICAgICAgYXNfYSA8aXJhbmdlPiAobGhz KSwKKwkJCQkgICAgICBhc19hIDxmcmFuZ2U+IChvcDEpLCByZWwpOworICAgICAgY2FzZSBST19G RkY6CisJcmV0dXJuIG1fb3BlcmF0b3ItPm9wMl9yYW5nZSAoYXNfYSA8ZnJhbmdlPiAociksIHR5 cGUsCisJCQkJICAgICAgYXNfYSA8ZnJhbmdlPiAobGhzKSwKKwkJCQkgICAgICBhc19hIDxmcmFu Z2U+IChvcDEpLCByZWwpOworICAgICAgZGVmYXVsdDoKKwlyZXR1cm4gZmFsc2U7CisgICAgfQor fQorCisvLyBEaXNwYXRjaCBhIGNhbGwgdG8gbGhzX29wMV9yZWxhdGlvbiBiYXNlZCBvbiB0aGUg dHlwZXMgb2YgTEhTLCBPUDEgYW5kIE9QMi4KKworcmVsYXRpb25fa2luZAorcmFuZ2Vfb3BfaGFu ZGxlcjo6bGhzX29wMV9yZWxhdGlvbiAoY29uc3QgdnJhbmdlICZsaHMsCisJCQkJICAgIGNvbnN0 IHZyYW5nZSAmb3AxLAorCQkJCSAgICBjb25zdCB2cmFuZ2UgJm9wMiwKKwkJCQkgICAgcmVsYXRp b25fa2luZCByZWwpIGNvbnN0Cit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKG1fb3BlcmF0b3Ip OworCisgIHN3aXRjaCAoZGlzcGF0Y2hfa2luZCAobGhzLCBvcDEsIG9wMikpCisgICAgeworICAg ICAgY2FzZSBST19JSUk6CisJcmV0dXJuIG1fb3BlcmF0b3ItPmxoc19vcDFfcmVsYXRpb24gKGFz X2EgPGlyYW5nZT4gKGxocyksCisJCQkJCSAgICAgYXNfYSA8aXJhbmdlPiAob3AxKSwKKwkJCQkJ ICAgICBhc19hIDxpcmFuZ2U+IChvcDIpLCByZWwpOworICAgICAgY2FzZSBST19JRkY6CisJcmV0 dXJuIG1fb3BlcmF0b3ItPmxoc19vcDFfcmVsYXRpb24gKGFzX2EgPGlyYW5nZT4gKGxocyksCisJ CQkJCSAgICAgYXNfYSA8ZnJhbmdlPiAob3AxKSwKKwkJCQkJICAgICBhc19hIDxmcmFuZ2U+IChv cDIpLCByZWwpOworICAgICAgY2FzZSBST19GRkY6CisJcmV0dXJuIG1fb3BlcmF0b3ItPmxoc19v cDFfcmVsYXRpb24gKGFzX2EgPGZyYW5nZT4gKGxocyksCisJCQkJCSAgICAgYXNfYSA8ZnJhbmdl PiAob3AxKSwKKwkJCQkJICAgICBhc19hIDxmcmFuZ2U+IChvcDIpLCByZWwpOworICAgICAgZGVm YXVsdDoKKwlyZXR1cm4gVlJFTF9WQVJZSU5HOworICAgIH0KK30KKworLy8gRGlzcGF0Y2ggYSBj YWxsIHRvIGxoc19vcDJfcmVsYXRpb24gYmFzZWQgb24gdGhlIHR5cGVzIG9mIExIUywgT1AxIGFu ZCBPUDIuCisKK3JlbGF0aW9uX2tpbmQKK3JhbmdlX29wX2hhbmRsZXI6Omxoc19vcDJfcmVsYXRp b24gKGNvbnN0IHZyYW5nZSAmbGhzLAorCQkJCSAgICBjb25zdCB2cmFuZ2UgJm9wMSwKKwkJCQkg ICAgY29uc3QgdnJhbmdlICZvcDIsCisJCQkJICAgIHJlbGF0aW9uX2tpbmQgcmVsKSBjb25zdAor eworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChtX29wZXJhdG9yKTsKKyAgc3dpdGNoIChkaXNwYXRj aF9raW5kIChsaHMsIG9wMSwgb3AyKSkKKyAgICB7CisgICAgICBjYXNlIFJPX0lJSToKKwlyZXR1 cm4gbV9vcGVyYXRvci0+bGhzX29wMl9yZWxhdGlvbiAoYXNfYSA8aXJhbmdlPiAobGhzKSwKKwkJ CQkJICAgICBhc19hIDxpcmFuZ2U+IChvcDEpLAorCQkJCQkgICAgIGFzX2EgPGlyYW5nZT4gKG9w MiksIHJlbCk7CisgICAgICBjYXNlIFJPX0lGRjoKKwlyZXR1cm4gbV9vcGVyYXRvci0+bGhzX29w Ml9yZWxhdGlvbiAoYXNfYSA8aXJhbmdlPiAobGhzKSwKKwkJCQkJICAgICBhc19hIDxmcmFuZ2U+ IChvcDEpLAorCQkJCQkgICAgIGFzX2EgPGZyYW5nZT4gKG9wMiksIHJlbCk7CisgICAgICBjYXNl IFJPX0ZGRjoKKwlyZXR1cm4gbV9vcGVyYXRvci0+bGhzX29wMl9yZWxhdGlvbiAoYXNfYSA8ZnJh bmdlPiAobGhzKSwKKwkJCQkJICAgICBhc19hIDxmcmFuZ2U+IChvcDEpLAorCQkJCQkgICAgIGFz X2EgPGZyYW5nZT4gKG9wMiksIHJlbCk7CisgICAgICBkZWZhdWx0OgorCXJldHVybiBWUkVMX1ZB UllJTkc7CisgICAgfQorfQorCisvLyBEaXNwYXRjaCBhIGNhbGwgdG8gb3AxX29wMl9yZWxhdGlv biBiYXNlZCBvbiB0aGUgdHlwZSBvZiBMSFMuCisKK3JlbGF0aW9uX2tpbmQKK3JhbmdlX29wX2hh bmRsZXI6Om9wMV9vcDJfcmVsYXRpb24gKGNvbnN0IHZyYW5nZSAmbGhzKSBjb25zdAoreworICBn Y2NfY2hlY2tpbmdfYXNzZXJ0IChtX29wZXJhdG9yKTsKKyAgc3dpdGNoIChkaXNwYXRjaF9raW5k IChsaHMsIGxocywgbGhzKSkKKyAgICB7CisgICAgICBjYXNlIFJPX0lJSToKKwlyZXR1cm4gbV9v cGVyYXRvci0+b3AxX29wMl9yZWxhdGlvbiAoYXNfYSA8aXJhbmdlPiAobGhzKSk7CisKKyAgICAg IGNhc2UgUk9fRkZGOgorCXJldHVybiBtX29wZXJhdG9yLT5vcDFfb3AyX3JlbGF0aW9uIChhc19h IDxmcmFuZ2U+IChsaHMpKTsKKworICAgICAgZGVmYXVsdDoKKwlyZXR1cm4gVlJFTF9WQVJZSU5H OworICAgIH0KK30KKworCiAvLyBDb252ZXJ0IGlyYW5nZSBiaXRtYXNrcyBpbnRvIGEgVkFMVUUg TUFTSyBwYWlyIHN1aXRhYmxlIGZvciBjYWxsaW5nIENDUC4KIAogc3RhdGljIHZvaWQKQEAgLTQ2 MTIsMzMgKzQ4NjIsNiBAQCBwb2ludGVyX29yX29wZXJhdG9yOjp3aV9mb2xkIChpcmFuZ2UgJnIs IHRyZWUgdHlwZSwKICAgICByLnNldF92YXJ5aW5nICh0eXBlKTsKIH0KIAwKLS8vIFJldHVybiBh IHBvaW50ZXIgdG8gdGhlIHJhbmdlX29wZXJhdG9yIGluc3RhbmNlLCBpZiB0aGVyZSBpcyBvbmUK LS8vIGFzc29jaWF0ZWQgd2l0aCB0cmVlX2NvZGUgQ09ERS4KLQotcmFuZ2Vfb3BlcmF0b3IgKgot cmFuZ2Vfb3BfdGFibGU6Om9wZXJhdG9yW10gKGVudW0gdHJlZV9jb2RlIGNvZGUpCi17Ci0gIGdj Y19jaGVja2luZ19hc3NlcnQgKGNvZGUgPiAwICYmIGNvZGUgPCBNQVhfVFJFRV9DT0RFUyk7Ci0g IHJldHVybiBtX3JhbmdlX3RyZWVbY29kZV07Ci19Ci0KLS8vIEFkZCBPUCB0byB0aGUgaGFuZGxl ciB0YWJsZSBmb3IgQ09ERS4KLQotdm9pZAotcmFuZ2Vfb3BfdGFibGU6OnNldCAoZW51bSB0cmVl X2NvZGUgY29kZSwgcmFuZ2Vfb3BlcmF0b3IgJm9wKQotewotICBnY2NfY2hlY2tpbmdfYXNzZXJ0 IChtX3JhbmdlX3RyZWVbY29kZV0gPT0gTlVMTCk7Ci0gIG1fcmFuZ2VfdHJlZVtjb2RlXSA9ICZv cDsKLX0KLQotLy8gSW5zdGFudGlhdGUgYSByYW5nZSBvcCB0YWJsZSBmb3IgaW50ZWdyYWwgb3Bl cmF0aW9ucy4KLQotY2xhc3MgaW50ZWdyYWxfdGFibGUgOiBwdWJsaWMgcmFuZ2Vfb3BfdGFibGUK LXsKLXB1YmxpYzoKLSAgaW50ZWdyYWxfdGFibGUgKCk7Ci19IGludGVncmFsX3RyZWVfdGFibGU7 Ci0KIGludGVncmFsX3RhYmxlOjppbnRlZ3JhbF90YWJsZSAoKQogewogICBzZXQgKEVRX0VYUFIs IG9wX2VxdWFsKTsKQEAgLTQ2ODIsMTQgKzQ5MDUsNiBAQCBpbnRlZ3JhbF90YWJsZTo6aW50ZWdy YWxfdGFibGUgKCkKICAgc2V0IChBRERSX0VYUFIsIG9wX2FkZHIpOwogfQogCi0vLyBJbnN0YW50 aWF0ZSBhIHJhbmdlIG9wIHRhYmxlIGZvciBwb2ludGVyIG9wZXJhdGlvbnMuCi0KLWNsYXNzIHBv aW50ZXJfdGFibGUgOiBwdWJsaWMgcmFuZ2Vfb3BfdGFibGUKLXsKLXB1YmxpYzoKLSAgcG9pbnRl cl90YWJsZSAoKTsKLX0gcG9pbnRlcl90cmVlX3RhYmxlOwotCiBwb2ludGVyX3RhYmxlOjpwb2lu dGVyX3RhYmxlICgpCiB7CiAgIHNldCAoQklUX0FORF9FWFBSLCBvcF9wb2ludGVyX2FuZCk7CkBA IC00NzE0LDE5MSArNDkyOSw2IEBAIHBvaW50ZXJfdGFibGU6OnBvaW50ZXJfdGFibGUgKCkKICAg c2V0IChCSVRfWE9SX0VYUFIsIG9wX2JpdHdpc2VfeG9yKTsKIH0KIAotLy8gVGhlIHRhYmxlcyBh cmUgaGlkZGVuIGFuZCBhY2Nlc3NlZCB2aWEgYSBzaW1wbGUgZXh0ZXJuIGZ1bmN0aW9uLgotCi1z dGF0aWMgaW5saW5lIHJhbmdlX29wZXJhdG9yICoKLWdldF9oYW5kbGVyIChlbnVtIHRyZWVfY29k ZSBjb2RlLCB0cmVlIHR5cGUpCi17Ci0gIC8vIEZpcnN0IGNoZWNrIGlmIHRoZXJlIGlzIGEgcG9p bnRlciBzcGVjaWFsaXphdGlvbi4KLSAgaWYgKFBPSU5URVJfVFlQRV9QICh0eXBlKSkKLSAgICBy ZXR1cm4gcG9pbnRlcl90cmVlX3RhYmxlW2NvZGVdOwotICBpZiAoSU5URUdSQUxfVFlQRV9QICh0 eXBlKSkKLSAgICByZXR1cm4gaW50ZWdyYWxfdHJlZV90YWJsZVtjb2RlXTsKLSAgcmV0dXJuIE5V TEw7Ci19Ci0KLS8vIFJldHVybiB0aGUgZmxvYXRpbmcgcG9pbnQgb3BlcmF0b3IgZm9yIENPREUg b3IgTlVMTCBpZiBub25lIGF2YWlsYWJsZS4KLQotc3RhdGljIGlubGluZSByYW5nZV9vcGVyYXRv ciAqCi1nZXRfZmxvYXRfaGFuZGxlciAoZW51bSB0cmVlX2NvZGUgY29kZSwgdHJlZSkKLXsKLSAg cmV0dXJuICgqZmxvYXRpbmdfdHJlZV90YWJsZSlbY29kZV07Ci19Ci0KLXZvaWQKLXJhbmdlX29w X2hhbmRsZXI6OnNldF9vcF9oYW5kbGVyICh0cmVlX2NvZGUgY29kZSwgdHJlZSB0eXBlKQotewot ICBpZiAoaXJhbmdlOjpzdXBwb3J0c19wICh0eXBlKSkKLSAgICB7Ci0gICAgICBtX2Zsb2F0ID0g TlVMTDsKLSAgICAgIG1faW50ID0gZ2V0X2hhbmRsZXIgKGNvZGUsIHR5cGUpOwotICAgICAgbV92 YWxpZCA9IG1faW50ICE9IE5VTEw7Ci0gICAgfQotICBlbHNlIGlmIChmcmFuZ2U6OnN1cHBvcnRz X3AgKHR5cGUpKQotICAgIHsKLSAgICAgIG1faW50ID0gTlVMTDsKLSAgICAgIG1fZmxvYXQgPSBn ZXRfZmxvYXRfaGFuZGxlciAoY29kZSwgdHlwZSk7Ci0gICAgICBtX3ZhbGlkID0gbV9mbG9hdCAh PSBOVUxMOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIG1faW50ID0gTlVMTDsKLSAgICAg IG1fZmxvYXQgPSBOVUxMOwotICAgICAgbV92YWxpZCA9IGZhbHNlOwotICAgIH0KLX0KLQotcmFu Z2Vfb3BfaGFuZGxlcjo6cmFuZ2Vfb3BfaGFuZGxlciAoKQotewotICBtX2ludCA9IE5VTEw7Ci0g IG1fZmxvYXQgPSBOVUxMOwotICBtX3ZhbGlkID0gZmFsc2U7Ci19Ci0KLXJhbmdlX29wX2hhbmRs ZXI6OnJhbmdlX29wX2hhbmRsZXIgKHRyZWVfY29kZSBjb2RlLCB0cmVlIHR5cGUpCi17Ci0gIHNl dF9vcF9oYW5kbGVyIChjb2RlLCB0eXBlKTsKLX0KLQotCi1ib29sCi1yYW5nZV9vcF9oYW5kbGVy Ojpmb2xkX3JhbmdlICh2cmFuZ2UgJnIsIHRyZWUgdHlwZSwKLQkJCSAgICAgIGNvbnN0IHZyYW5n ZSAmbGgsCi0JCQkgICAgICBjb25zdCB2cmFuZ2UgJnJoLAotCQkJICAgICAgcmVsYXRpb25fdHJp byByZWwpIGNvbnN0Ci17Ci0gIGdjY19jaGVja2luZ19hc3NlcnQgKG1fdmFsaWQpOwotICBpZiAo bV9pbnQpCi0gICAgcmV0dXJuIG1faW50LT5mb2xkX3JhbmdlIChhc19hIDxpcmFuZ2U+IChyKSwg dHlwZSwKLQkJCSAgIGFzX2EgPGlyYW5nZT4gKGxoKSwKLQkJCSAgIGFzX2EgPGlyYW5nZT4gKHJo KSwgcmVsKTsKLQotICBpZiAoaXNfYSA8aXJhbmdlPiAocikpCi0gICAgewotICAgICAgaWYgKGlz X2EgPGlyYW5nZT4gKHJoKSkKLQlyZXR1cm4gbV9mbG9hdC0+Zm9sZF9yYW5nZSAoYXNfYSA8aXJh bmdlPiAociksIHR5cGUsCi0JCQkJICAgIGFzX2EgPGZyYW5nZT4gKGxoKSwKLQkJCQkgICAgYXNf YSA8aXJhbmdlPiAocmgpLCByZWwpOwotICAgICAgZWxzZQotCXJldHVybiBtX2Zsb2F0LT5mb2xk X3JhbmdlIChhc19hIDxpcmFuZ2U+IChyKSwgdHlwZSwKLQkJCQkgICAgYXNfYSA8ZnJhbmdlPiAo bGgpLAotCQkJCSAgICBhc19hIDxmcmFuZ2U+IChyaCksIHJlbCk7Ci0gICAgfQotICByZXR1cm4g bV9mbG9hdC0+Zm9sZF9yYW5nZSAoYXNfYSA8ZnJhbmdlPiAociksIHR5cGUsCi0JCQkgICAgICBh c19hIDxmcmFuZ2U+IChsaCksCi0JCQkgICAgICBhc19hIDxmcmFuZ2U+IChyaCksIHJlbCk7Ci19 Ci0KLWJvb2wKLXJhbmdlX29wX2hhbmRsZXI6Om9wMV9yYW5nZSAodnJhbmdlICZyLCB0cmVlIHR5 cGUsCi0JCQkgICAgIGNvbnN0IHZyYW5nZSAmbGhzLAotCQkJICAgICBjb25zdCB2cmFuZ2UgJm9w MiwKLQkJCSAgICAgcmVsYXRpb25fdHJpbyByZWwpIGNvbnN0Ci17Ci0gIGdjY19jaGVja2luZ19h c3NlcnQgKG1fdmFsaWQpOwotCi0gIGlmIChsaHMudW5kZWZpbmVkX3AgKCkpCi0gICAgcmV0dXJu IGZhbHNlOwotICBpZiAobV9pbnQpCi0gICAgcmV0dXJuIG1faW50LT5vcDFfcmFuZ2UgKGFzX2Eg PGlyYW5nZT4gKHIpLCB0eXBlLAotCQkJICAgICBhc19hIDxpcmFuZ2U+IChsaHMpLAotCQkJICAg ICBhc19hIDxpcmFuZ2U+IChvcDIpLCByZWwpOwotCi0gIGlmIChpc19hIDxpcmFuZ2U+IChsaHMp KQotICAgIHJldHVybiBtX2Zsb2F0LT5vcDFfcmFuZ2UgKGFzX2EgPGZyYW5nZT4gKHIpLCB0eXBl LAotCQkJICAgICAgIGFzX2EgPGlyYW5nZT4gKGxocyksCi0JCQkgICAgICAgYXNfYSA8ZnJhbmdl PiAob3AyKSwgcmVsKTsKLSAgcmV0dXJuIG1fZmxvYXQtPm9wMV9yYW5nZSAoYXNfYSA8ZnJhbmdl PiAociksIHR5cGUsCi0JCQkgICAgIGFzX2EgPGZyYW5nZT4gKGxocyksCi0JCQkgICAgIGFzX2Eg PGZyYW5nZT4gKG9wMiksIHJlbCk7Ci19Ci0KLWJvb2wKLXJhbmdlX29wX2hhbmRsZXI6Om9wMl9y YW5nZSAodnJhbmdlICZyLCB0cmVlIHR5cGUsCi0JCQkgICAgIGNvbnN0IHZyYW5nZSAmbGhzLAot CQkJICAgICBjb25zdCB2cmFuZ2UgJm9wMSwKLQkJCSAgICAgcmVsYXRpb25fdHJpbyByZWwpIGNv bnN0Ci17Ci0gIGdjY19jaGVja2luZ19hc3NlcnQgKG1fdmFsaWQpOwotICBpZiAobGhzLnVuZGVm aW5lZF9wICgpKQotICAgIHJldHVybiBmYWxzZTsKLSAgaWYgKG1faW50KQotICAgIHJldHVybiBt X2ludC0+b3AyX3JhbmdlIChhc19hIDxpcmFuZ2U+IChyKSwgdHlwZSwKLQkJCSAgICAgYXNfYSA8 aXJhbmdlPiAobGhzKSwKLQkJCSAgICAgYXNfYSA8aXJhbmdlPiAob3AxKSwgcmVsKTsKLQotICBp ZiAoaXNfYSA8aXJhbmdlPiAobGhzKSkKLSAgICByZXR1cm4gbV9mbG9hdC0+b3AyX3JhbmdlIChh c19hIDxmcmFuZ2U+IChyKSwgdHlwZSwKLQkJCSAgICAgICBhc19hIDxpcmFuZ2U+IChsaHMpLAot CQkJICAgICAgIGFzX2EgPGZyYW5nZT4gKG9wMSksIHJlbCk7Ci0gIHJldHVybiBtX2Zsb2F0LT5v cDJfcmFuZ2UgKGFzX2EgPGZyYW5nZT4gKHIpLCB0eXBlLAotCQkJICAgICBhc19hIDxmcmFuZ2U+ IChsaHMpLAotCQkJICAgICBhc19hIDxmcmFuZ2U+IChvcDEpLCByZWwpOwotfQotCi1yZWxhdGlv bl9raW5kCi1yYW5nZV9vcF9oYW5kbGVyOjpsaHNfb3AxX3JlbGF0aW9uIChjb25zdCB2cmFuZ2Ug JmxocywKLQkJCQkgICAgY29uc3QgdnJhbmdlICZvcDEsCi0JCQkJICAgIGNvbnN0IHZyYW5nZSAm b3AyLAotCQkJCSAgICByZWxhdGlvbl9raW5kIHJlbCkgY29uc3QKLXsKLSAgZ2NjX2NoZWNraW5n X2Fzc2VydCAobV92YWxpZCk7Ci0gIGlmIChtX2ludCkKLSAgICByZXR1cm4gbV9pbnQtPmxoc19v cDFfcmVsYXRpb24gKGFzX2EgPGlyYW5nZT4gKGxocyksCi0JCQkJICAgIGFzX2EgPGlyYW5nZT4g KG9wMSksCi0JCQkJICAgIGFzX2EgPGlyYW5nZT4gKG9wMiksIHJlbCk7Ci0KLSAgaWYgKGlzX2Eg PGlyYW5nZT4gKGxocykpCi0gICAgcmV0dXJuIG1fZmxvYXQtPmxoc19vcDFfcmVsYXRpb24gKGFz X2EgPGlyYW5nZT4gKGxocyksCi0JCQkJIGFzX2EgPGZyYW5nZT4gKG9wMSksCi0JCQkJIGFzX2Eg PGZyYW5nZT4gKG9wMiksIHJlbCk7Ci0gIHJldHVybiBtX2Zsb2F0LT5saHNfb3AxX3JlbGF0aW9u IChhc19hIDxmcmFuZ2U+IChsaHMpLAotCQkJICAgICAgIGFzX2EgPGZyYW5nZT4gKG9wMSksCi0J CQkgICAgICAgYXNfYSA8ZnJhbmdlPiAob3AyKSwgcmVsKTsKLX0KLQotcmVsYXRpb25fa2luZAot cmFuZ2Vfb3BfaGFuZGxlcjo6bGhzX29wMl9yZWxhdGlvbiAoY29uc3QgdnJhbmdlICZsaHMsCi0J CQkJICAgIGNvbnN0IHZyYW5nZSAmb3AxLAotCQkJCSAgICBjb25zdCB2cmFuZ2UgJm9wMiwKLQkJ CQkgICAgcmVsYXRpb25fa2luZCByZWwpIGNvbnN0Ci17Ci0gIGdjY19jaGVja2luZ19hc3NlcnQg KG1fdmFsaWQpOwotICBpZiAobV9pbnQpCi0gICAgcmV0dXJuIG1faW50LT5saHNfb3AyX3JlbGF0 aW9uIChhc19hIDxpcmFuZ2U+IChsaHMpLAotCQkJCSAgICBhc19hIDxpcmFuZ2U+IChvcDEpLAot CQkJCSAgICBhc19hIDxpcmFuZ2U+IChvcDIpLCByZWwpOwotCi0gIGlmIChpc19hIDxpcmFuZ2U+ IChsaHMpKQotICAgIHJldHVybiBtX2Zsb2F0LT5saHNfb3AyX3JlbGF0aW9uIChhc19hIDxpcmFu Z2U+IChsaHMpLAotCQkJCSAgICAgIGFzX2EgPGZyYW5nZT4gKG9wMSksCi0JCQkJICAgICAgYXNf YSA8ZnJhbmdlPiAob3AyKSwgcmVsKTsKLSAgcmV0dXJuIG1fZmxvYXQtPmxoc19vcDJfcmVsYXRp b24gKGFzX2EgPGZyYW5nZT4gKGxocyksCi0JCQkJICAgICAgYXNfYSA8ZnJhbmdlPiAob3AxKSwK LQkJCQkgICAgICBhc19hIDxmcmFuZ2U+IChvcDIpLCByZWwpOwotfQotCi1yZWxhdGlvbl9raW5k Ci1yYW5nZV9vcF9oYW5kbGVyOjpvcDFfb3AyX3JlbGF0aW9uIChjb25zdCB2cmFuZ2UgJmxocykg Y29uc3QKLXsKLSAgZ2NjX2NoZWNraW5nX2Fzc2VydCAobV92YWxpZCk7Ci0gIGlmIChtX2ludCkK LSAgICByZXR1cm4gbV9pbnQtPm9wMV9vcDJfcmVsYXRpb24gKGFzX2EgPGlyYW5nZT4gKGxocykp OwotICBpZiAoaXNfYSA8aXJhbmdlPiAobGhzKSkKLSAgICByZXR1cm4gbV9mbG9hdC0+b3AxX29w Ml9yZWxhdGlvbiAoYXNfYSA8aXJhbmdlPiAobGhzKSk7Ci0gIHJldHVybiBtX2Zsb2F0LT5vcDFf b3AyX3JlbGF0aW9uIChhc19hIDxmcmFuZ2U+IChsaHMpKTsKLX0KLQogLy8gQ2FzdCB0aGUgcmFu Z2UgaW4gUiB0byBUWVBFLgogCiBib29sCmRpZmYgLS1naXQgYS9nY2MvcmFuZ2Utb3AuaCBiL2dj Yy9yYW5nZS1vcC5oCmluZGV4IGNhZDE2ZjRjZDIwLi43YWY1ODczNmMzZiAxMDA2NDQKLS0tIGEv Z2NjL3JhbmdlLW9wLmgKKysrIGIvZ2NjL3JhbmdlLW9wLmgKQEAgLTE4Niw3ICsxODYsNyBAQCBj bGFzcyByYW5nZV9vcF9oYW5kbGVyCiBwdWJsaWM6CiAgIHJhbmdlX29wX2hhbmRsZXIgKCk7CiAg IHJhbmdlX29wX2hhbmRsZXIgKGVudW0gdHJlZV9jb2RlIGNvZGUsIHRyZWUgdHlwZSk7Ci0gIGlu bGluZSBvcGVyYXRvciBib29sICgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsaWQ7IH0KKyAgaW5saW5l IG9wZXJhdG9yIGJvb2wgKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRvciAhPSBOVUxMOyB9CiAK ICAgYm9vbCBmb2xkX3JhbmdlICh2cmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJICAgY29uc3QgdnJh bmdlICZsaCwKQEAgLTIxMCwxMCArMjEwLDEwIEBAIHB1YmxpYzoKIAkJCQkgIHJlbGF0aW9uX2tp bmQgPSBWUkVMX1ZBUllJTkcpIGNvbnN0OwogICByZWxhdGlvbl9raW5kIG9wMV9vcDJfcmVsYXRp b24gKGNvbnN0IHZyYW5nZSAmbGhzKSBjb25zdDsKIHByb3RlY3RlZDoKKyAgdW5zaWduZWQgZGlz cGF0Y2hfa2luZCAoY29uc3QgdnJhbmdlICZsaHMsIGNvbnN0IHZyYW5nZSAmb3AxLAorCQkJICBj b25zdCB2cmFuZ2UmIG9wMikgY29uc3Q7CiAgIHZvaWQgc2V0X29wX2hhbmRsZXIgKGVudW0gdHJl ZV9jb2RlIGNvZGUsIHRyZWUgdHlwZSk7Ci0gIGJvb2wgbV92YWxpZDsKLSAgcmFuZ2Vfb3BlcmF0 b3IgKm1faW50OwotICByYW5nZV9vcGVyYXRvciAqbV9mbG9hdDsKKyAgcmFuZ2Vfb3BlcmF0b3Ig Km1fb3BlcmF0b3I7CiB9OwogCiBleHRlcm4gYm9vbCByYW5nZV9jYXN0ICh2cmFuZ2UgJiwgdHJl ZSB0eXBlKTsKQEAgLTI5Niw2ICsyOTYsMjUgQEAgcHJpdmF0ZToKIH07CiAKIAorLy8gUmV0dXJu IGEgcG9pbnRlciB0byB0aGUgcmFuZ2Vfb3BlcmF0b3IgaW5zdGFuY2UsIGlmIHRoZXJlIGlzIG9u ZQorLy8gYXNzb2NpYXRlZCB3aXRoIHRyZWVfY29kZSBDT0RFLgorCitpbmxpbmUgcmFuZ2Vfb3Bl cmF0b3IgKgorcmFuZ2Vfb3BfdGFibGU6Om9wZXJhdG9yW10gKGVudW0gdHJlZV9jb2RlIGNvZGUp Cit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKGNvZGUgPiAwICYmIGNvZGUgPCBNQVhfVFJFRV9D T0RFUyk7CisgIHJldHVybiBtX3JhbmdlX3RyZWVbY29kZV07Cit9CisKKy8vIEFkZCBPUCB0byB0 aGUgaGFuZGxlciB0YWJsZSBmb3IgQ09ERS4KKworaW5saW5lIHZvaWQKK3JhbmdlX29wX3RhYmxl OjpzZXQgKGVudW0gdHJlZV9jb2RlIGNvZGUsIHJhbmdlX29wZXJhdG9yICZvcCkKK3sKKyAgZ2Nj X2NoZWNraW5nX2Fzc2VydCAobV9yYW5nZV90cmVlW2NvZGVdID09IE5VTEwpOworICBtX3Jhbmdl X3RyZWVbY29kZV0gPSAmb3A7Cit9CisKIC8vIFRoaXMgaG9sZHMgdGhlIHJhbmdlIG9wIHRhYmxl IGZvciBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zLgogZXh0ZXJuIHJhbmdlX29wX3RhYmxlICpm bG9hdGluZ190cmVlX3RhYmxlOwogCmRpZmYgLS1naXQgYS9nY2MvdmFsdWUtcmFuZ2UuaCBiL2dj Yy92YWx1ZS1yYW5nZS5oCmluZGV4IDJiNGViYWJlN2M4Li45MTAzZTljNDFjNyAxMDA2NDQKLS0t IGEvZ2NjL3ZhbHVlLXJhbmdlLmgKKysrIGIvZ2NjL3ZhbHVlLXJhbmdlLmgKQEAgLTc3LDYgKzc3 LDcgQEAgY2xhc3MgR1RZKCh1c2VyKSkgdnJhbmdlCiAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBm cmllbmQgYm9vbCBpc19hICh2cmFuZ2UgJik7CiAgIGZyaWVuZCBjbGFzcyBWYWx1ZV9SYW5nZTsK ICAgZnJpZW5kIHZvaWQgc3RyZWFtZXJfd3JpdGVfdnJhbmdlIChzdHJ1Y3Qgb3V0cHV0X2Jsb2Nr ICosIGNvbnN0IHZyYW5nZSAmKTsKKyAgZnJpZW5kIGNsYXNzIHJhbmdlX29wX2hhbmRsZXI7CiBw dWJsaWM6CiAgIHZpcnR1YWwgdm9pZCBhY2NlcHQgKGNvbnN0IGNsYXNzIHZyYW5nZV92aXNpdG9y ICZ2KSBjb25zdCA9IDA7CiAgIHZpcnR1YWwgdm9pZCBzZXQgKHRyZWUsIHRyZWUsIHZhbHVlX3Jh bmdlX2tpbmQgPSBWUl9SQU5HRSk7Ci0tIAoyLjQwLjEKCg== --------------bT5AjYgYd39yQKKIQ81dhx00--