<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>105553</bug_id>
          
          <creation_ts>2012-12-20 10:44:09 -0800</creation_ts>
          <short_desc>[chromium] Convert WebTransformOperations into pure virtual</short_desc>
          <delta_ts>2013-01-18 11:10:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Ali Juma">ajuma</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>peter+ews</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>vollick</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>795557</commentid>
    <comment_count>0</comment_count>
    <who name="Ali Juma">ajuma</who>
    <bug_when>2012-12-20 10:44:09 -0800</bug_when>
    <thetext>[chromium] Convert WebTransformOperations into pure virtual</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795562</commentid>
    <comment_count>1</comment_count>
      <attachid>180366</attachid>
    <who name="Ali Juma">ajuma</who>
    <bug_when>2012-12-20 10:50:15 -0800</bug_when>
    <thetext>Created attachment 180366
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795565</commentid>
    <comment_count>2</comment_count>
    <who name="Ali Juma">ajuma</who>
    <bug_when>2012-12-20 10:53:43 -0800</bug_when>
    <thetext>This needs to land after https://codereview.chromium.org/11644004 lands in chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795567</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-20 10:56:44 -0800</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795571</commentid>
    <comment_count>4</comment_count>
      <attachid>180366</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-20 11:02:08 -0800</bug_when>
    <thetext>Comment on attachment 180366
Patch

Attachment 180366 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15455098</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795589</commentid>
    <comment_count>5</comment_count>
      <attachid>180366</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-12-20 11:15:54 -0800</bug_when>
    <thetext>Comment on attachment 180366
Patch

Attachment 180366 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/15449151</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795693</commentid>
    <comment_count>6</comment_count>
      <attachid>180366</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-12-20 12:53:55 -0800</bug_when>
    <thetext>Comment on attachment 180366
Patch

I think this is the wrong direction, see chromium code review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801273</commentid>
    <comment_count>7</comment_count>
      <attachid>181504</attachid>
    <who name="Ali Juma">ajuma</who>
    <bug_when>2013-01-07 07:07:15 -0800</bug_when>
    <thetext>Created attachment 181504
Not for review: combined patch

Posting this patch for discussion. This is combined result of the two WebKit patches described in the plan at https://codereview.chromium.org/11745018/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802711</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-01-08 15:14:25 -0800</bug_when>
    <thetext>I think you&apos;ll want something very much like this patch, but with some tweaks and as a second step in the transition.  See my comments on the chromium codereview.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806353</commentid>
    <comment_count>9</comment_count>
      <attachid>182575</attachid>
    <who name="Ali Juma">ajuma</who>
    <bug_when>2013-01-14 07:56:39 -0800</bug_when>
    <thetext>Created attachment 182575
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806354</commentid>
    <comment_count>10</comment_count>
    <who name="Ali Juma">ajuma</who>
    <bug_when>2013-01-14 07:58:36 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=182575) [details]
&gt; Patch

This patch follows the approach discussed in the chromium codereview (https://chromiumcodereview.appspot.com/11745018). It requires https://chromiumcodereview.appspot.com/11876016 to land first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806355</commentid>
    <comment_count>11</comment_count>
      <attachid>182575</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-14 08:00:58 -0800</bug_when>
    <thetext>Comment on attachment 182575
Patch

Attachment 182575 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15874464</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806360</commentid>
    <comment_count>12</comment_count>
      <attachid>182575</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-01-14 08:09:05 -0800</bug_when>
    <thetext>Comment on attachment 182575
Patch

Attachment 182575 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/15868523</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807990</commentid>
    <comment_count>13</comment_count>
      <attachid>182575</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-01-15 20:03:58 -0800</bug_when>
    <thetext>Comment on attachment 182575
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=182575&amp;action=review

Since this has a chromium-side dep, make sure that lands and is rolled into Source/WebKit/chromium/DEPS and leave a comment on this bug indicating what the dependency is so folks know.  This patch has some minor issues, but is looking close.

&gt; Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.cpp:60
&gt; +WebTransformOperations* toWebTransformOperations(const TransformOperations&amp; transformOperations, const FloatSize&amp; boxSize)

since the caller is going to put this in an OwnPtr&lt;&gt;, you should make the return type of this function PassOwnPtr&lt;&gt; and put the adoptPtr() call in the initialization of the webTransformOperations local (which you should make OwnPtr&lt;&gt;).  whenever using smart pointers you want to put it into the smart pointer as close to the allocation point as you can so less code is dealing with raw pointers

&gt; Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.cpp:63
&gt; +    WebTransformOperations* webTransformOperations = Platform::current()-&gt;compositorSupport()-&gt;createTransformOperations();

you should check if this call returns 0 and, if so, return 0 from this function before proceeding. you can&apos;t promise here that the platform&apos;s compositingSupport will give you something</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808615</commentid>
    <comment_count>14</comment_count>
      <attachid>183018</attachid>
    <who name="Ali Juma">ajuma</who>
    <bug_when>2013-01-16 12:40:26 -0800</bug_when>
    <thetext>Created attachment 183018
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808618</commentid>
    <comment_count>15</comment_count>
    <who name="Ali Juma">ajuma</who>
    <bug_when>2013-01-16 12:42:36 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 182575 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=182575&amp;action=review
&gt; 
&gt; Since this has a chromium-side dep, make sure that lands and is rolled into Source/WebKit/chromium/DEPS and leave a comment on this bug indicating what the dependency is so folks know.  This patch has some minor issues, but is looking close.

Will do once the chromium-side dep (https://chromiumcodereview.appspot.com/11876016) lands in chromium.

&gt; &gt; Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.cpp:60
&gt; &gt; +WebTransformOperations* toWebTransformOperations(const TransformOperations&amp; transformOperations, const FloatSize&amp; boxSize)
&gt; 
&gt; since the caller is going to put this in an OwnPtr&lt;&gt;, you should make the return type of this function PassOwnPtr&lt;&gt; and put the adoptPtr() call in the initialization of the webTransformOperations local (which you should make OwnPtr&lt;&gt;).  whenever using smart pointers you want to put it into the smart pointer as close to the allocation point as you can so less code is dealing with raw pointers

Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.cpp:63
&gt; &gt; +    WebTransformOperations* webTransformOperations = Platform::current()-&gt;compositorSupport()-&gt;createTransformOperations();
&gt; 
&gt; you should check if this call returns 0 and, if so, return 0 from this function before proceeding. you can&apos;t promise here that the platform&apos;s compositingSupport will give you something

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808634</commentid>
    <comment_count>16</comment_count>
      <attachid>183018</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-16 12:56:42 -0800</bug_when>
    <thetext>Comment on attachment 183018
Patch

Attachment 183018 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15907481</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808640</commentid>
    <comment_count>17</comment_count>
      <attachid>183018</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-01-16 13:06:24 -0800</bug_when>
    <thetext>Comment on attachment 183018
Patch

Attachment 183018 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/15913425</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808699</commentid>
    <comment_count>18</comment_count>
      <attachid>183018</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-01-16 14:03:19 -0800</bug_when>
    <thetext>Comment on attachment 183018
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=183018&amp;action=review

R=me

&gt; Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.cpp:65
&gt; +        return PassOwnPtr&lt;WebTransformOperations&gt;();

you can say &quot;nullptr&quot; instead of &quot;PassOwnPtr&lt;Type&gt;()&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809676</commentid>
    <comment_count>19</comment_count>
      <attachid>183252</attachid>
    <who name="Ali Juma">ajuma</who>
    <bug_when>2013-01-17 13:06:30 -0800</bug_when>
    <thetext>Created attachment 183252
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809678</commentid>
    <comment_count>20</comment_count>
      <attachid>183252</attachid>
    <who name="Ali Juma">ajuma</who>
    <bug_when>2013-01-17 13:08:17 -0800</bug_when>
    <thetext>Comment on attachment 183252
Patch for landing

This depends on chromium revision r177290, which has already rolled into Source/WebKit/chromium/DEPS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810855</commentid>
    <comment_count>21</comment_count>
      <attachid>183252</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-18 11:10:10 -0800</bug_when>
    <thetext>Comment on attachment 183252
Patch for landing

Clearing flags on attachment: 183252

Committed r140184: &lt;http://trac.webkit.org/changeset/140184&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810856</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-18 11:10:15 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180366</attachid>
            <date>2012-12-20 10:50:15 -0800</date>
            <delta_ts>2013-01-14 07:56:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105553-20121220134731.patch</filename>
            <type>text/plain</type>
            <size>49471</size>
            <attacher name="Ali Juma">ajuma</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MjQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Y2hyb21pdW0vcHVibGljL1dlYkNvbXBvc2l0b3JTdXBwb3J0LmggYi9Tb3VyY2UvUGxhdGZvcm0v
Y2hyb21pdW0vcHVibGljL1dlYkNvbXBvc2l0b3JTdXBwb3J0LmgKaW5kZXggMWE5ZDM1NTQ4YzEw
MDcxMTE4N2MxZmIyNjc1YWUyYmRlN2RmMGZlMy4uOGFlNjNjODQyNDhjYjBlZTdhZWQ1NGZhNWVj
MTEzZjYwMTZjNzdlYiAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1Ymxp
Yy9XZWJDb21wb3NpdG9yU3VwcG9ydC5oCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9w
dWJsaWMvV2ViQ29tcG9zaXRvclN1cHBvcnQuaApAQCAtNTEsNiArNTEsNyBAQCBjbGFzcyBXZWJT
Y3JvbGxiYXJUaGVtZUdlb21ldHJ5OwogY2xhc3MgV2ViU29saWRDb2xvckxheWVyOwogY2xhc3Mg
V2ViVGhyZWFkOwogY2xhc3MgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU7CitjbGFzcyBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zOwogY2xhc3MgV2ViVmlkZW9GcmFtZVByb3ZpZGVyOwogY2xhc3Mg
V2ViVmlkZW9MYXllcjsKIApAQCAtMTA3LDYgKzEwOCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlKCkgeyByZXR1cm4gMDsgfQogCisgICAgdmlydHVhbCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
KiBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKCkgeyByZXR1cm4gMDsgfQorCiBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCB+V2ViQ29tcG9zaXRvclN1cHBvcnQoKSB7IH0KIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUtleWZyYW1lLmgg
Yi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUtleWZyYW1lLmgK
aW5kZXggYzk5ZWY1NTg3YmEzZDNmNTIzYjBiZmY4ZjczYTE5MzNmMGNhYmFlNC4uMTkwZGFkMmZm
ZjU2YTliNGViOThhOTYwMzhlN2NlZmMzZjI4MTFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRm
b3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oCisrKyBiL1NvdXJjZS9Q
bGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtS2V5ZnJhbWUuaApAQCAtMjUsMTkg
KzI1LDI0IEBACiAjaWZuZGVmIFdlYlRyYW5zZm9ybUtleWZyYW1lX2gKICNkZWZpbmUgV2ViVHJh
bnNmb3JtS2V5ZnJhbWVfaAogCisjaW5jbHVkZSAiV2ViUHJpdmF0ZU93blB0ci5oIgogI2luY2x1
ZGUgIldlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0
cnVjdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSB7Ci0gICAgV2ViVHJhbnNmb3JtS2V5ZnJhbWUoZG91
YmxlIHRpbWUsIGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlKQotICAgICAgICA6
IHRpbWUodGltZSkKLSAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKLSAgICB7Ci0gICAgfQorY2xhc3Mg
V2ViVHJhbnNmb3JtS2V5ZnJhbWUgeworcHVibGljOgorICAgIFdFQktJVF9FWFBPUlQgV2ViVHJh
bnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUsIGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMm
IHZhbHVlKTsKIAotICAgIGRvdWJsZSB0aW1lOwotICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMg
dmFsdWU7CisgICAgV0VCS0lUX0VYUE9SVCB+V2ViVHJhbnNmb3JtS2V5ZnJhbWUoKTsKKworICAg
IFdFQktJVF9FWFBPUlQgZG91YmxlIHRpbWUoKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQg
Y29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgdmFsdWUoKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBkb3VibGUgbV90aW1lOworICAgIFdlYlByaXZhdGVPd25QdHI8V2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucz4gbV92YWx1ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25z
LmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlv
bnMuaAppbmRleCA5ZTMwZjU4Mjg3NTc5ODcyYzJhOWE2ZDVjYTAxMTExMjA1ZjNiYTI2Li5mNjY4
ZmYzYTU2MDg4ZDU5NmY5NDBlM2VjMDAzY2NmOTRlMWVmYTNmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaAorKysgYi9T
b3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaApA
QCAtMjUsMTIgKzI1LDEyIEBACiAjaWZuZGVmIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnNfaAogI2Rl
ZmluZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zX2gKIAorI2RlZmluZSBXRUJLSVRfV0VCX1RSQU5T
Rk9STV9PUEVSQVRJT05TX1VTRV9DUkVBVEUKKwogI2luY2x1ZGUgIldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zUHJpdmF0ZTsKLQogLy8gVHJhbnNmb3JtIG9wZXJhdGlvbnMgYXJlIGEgZGVjb21wb3Nl
ZCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguIEl0IGNhbiBiZQogLy8gYXBwbGllZCB0byBvYnRhaW4g
YSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhdCBhbnkgdGltZSwgYW5kIGNhbiBiZSBibGVuZGVk
CiAvLyBpbnRlbGxpZ2VudGx5IHdpdGggb3RoZXIgdHJhbnNmb3JtIG9wZXJhdGlvbnMsIHNvIGxv
bmcgYXMgdGhleSByZXByZXNlbnQgdGhlCkBAIC00MiwxOCArNDIsMTMgQEAgY2xhc3MgV2ViVHJh
bnNmb3JtT3BlcmF0aW9uc1ByaXZhdGU7CiAvLyBmdW5jdGlvbiBiZWxvdy4KIGNsYXNzIFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnMgewogcHVibGljOgotICAgIH5XZWJUcmFuc2Zvcm1PcGVyYXRpb25z
KCkgeyByZXNldCgpOyB9CisgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucyogY3JlYXRlKCk7CisgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyogY3JlYXRlKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIHByb3RvdHlw
ZSk7CiAKLSAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCkgeyBpbml0aWFsaXplKCk7IH0KLSAg
ICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIG90
aGVyKSB7IGluaXRpYWxpemUob3RoZXIpOyB9Ci0gICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYg
b3BlcmF0b3I9KGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIG90aGVyKQotICAgIHsKLSAg
ICAgICAgaW5pdGlhbGl6ZShvdGhlcik7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Cisg
ICAgdmlydHVhbCB+V2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpIHsgfQogCiAgICAgLy8gUmV0dXJu
cyBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCByZXByZXNlbnRpbmcgdGhlc2UgdHJhbnNmb3JtIG9w
ZXJhdGlvbnMuCi0gICAgV0VCS0lUX0VYUE9SVCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhcHBs
eSgpIGNvbnN0OworICAgIHZpcnR1YWwgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggYXBwbHkoKSBj
b25zdCA9IDA7CiAKICAgICAvLyBHaXZlbiBhbm90aGVyIHNldCBvZiB0cmFuc2Zvcm0gb3BlcmF0
aW9ucyBhbmQgYSBwcm9ncmVzcyBpbiB0aGUgcmFuZ2UKICAgICAvLyBbMCwgMV0sIHJldHVybnMg
YSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggcmVwcmVzZW50aW5nIHRoZSBpbnRlcm1lZGlhdGUKQEAg
LTYyLDM0ICs1NywyNiBAQCBwdWJsaWM6CiAgICAgLy8gdHJhbnNmb3JtcyBhcmUgYmFrZWQgdG8g
bWF0cmljZXMgKHVzaW5nIGFwcGx5KSwgYW5kIHRoZSBtYXRyaWNlcyBhcmUKICAgICAvLyB0aGVu
IGRlY29tcG9zZWQgYW5kIGludGVycG9sYXRlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQog
ICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvV0QtY3NzMy0yZC10cmFuc2Zvcm1zLTIw
MTExMjE1LyNtYXRyaXgtZGVjb21wb3NpdGlvbi4KLSAgICBXRUJLSVRfRVhQT1JUIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IGJsZW5kKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20s
IGRvdWJsZSBwcm9ncmVzcykgY29uc3Q7CisgICAgdmlydHVhbCBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBibGVuZChjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBkb3VibGUgcHJv
Z3Jlc3MpIGNvbnN0ID0gMDsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIG9wZXJhdGlv
biBhbmQgaXRzIGRlc2NlbmRhbnRzIGhhdmUgdGhlIHNhbWUgdHlwZXMKICAgICAvLyBhcyBvdGhl
ciBhbmQgaXRzIGRlc2NlbmRhbnRzLgotICAgIFdFQktJVF9FWFBPUlQgYm9vbCBtYXRjaGVzVHlw
ZXMoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3RoZXIpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBtYXRjaGVzVHlwZXMoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3RoZXIp
IGNvbnN0ID0gMDsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVzZSBvcGVyYXRpb25zIGNh
biBiZSBibGVuZGVkLiBJdCB3aWxsIG9ubHkgcmV0dXJuCiAgICAgLy8gZmFsc2UgaWYgd2UgbXVz
dCByZXNvcnQgdG8gbWF0cml4IGludGVycG9sYXRpb24sIGFuZCBtYXRyaXggaW50ZXJwb2xhdGlv
bgogICAgIC8vIGZhaWxzICh0aGlzIGNhbiBoYXBwZW4gaWYgZWl0aGVyIG1hdHJpeCBjYW5ub3Qg
YmUgZGVjb21wb3NlZCkuCi0gICAgV0VCS0lUX0VYUE9SVCBib29sIGNhbkJsZW5kV2l0aChjb25z
dCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdGhlcikgY29uc3Q7Ci0KLSAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgYXBwZW5kVHJhbnNsYXRlKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopOwot
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhcHBlbmRSb3RhdGUoZG91YmxlIHgsIGRvdWJsZSB5LCBk
b3VibGUgeiwgZG91YmxlIGRlZ3JlZXMpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhcHBlbmRT
Y2FsZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KTsKLSAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgYXBwZW5kU2tldyhkb3VibGUgeCwgZG91YmxlIHkpOwotICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBhcHBlbmRQZXJzcGVjdGl2ZShkb3VibGUgZGVwdGgpOwotICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBhcHBlbmRNYXRyaXgoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICBXRUJL
SVRfRVhQT1JUIHZvaWQgYXBwZW5kSWRlbnRpdHkoKTsKLQotICAgIFdFQktJVF9FWFBPUlQgYm9v
bCBpc0lkZW50aXR5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGNhbkJsZW5kV2l0aChjb25z
dCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdGhlcikgY29uc3QgPSAwOwogCi1wcml2YXRlOgot
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBp
bml0aWFsaXplKCk7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGluaXRpYWxpemUoY29uc3QgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyYgcHJvdG90eXBlKTsKLSAgICBXRUJLSVRfRVhQT1JUIGJvb2wg
YmxlbmRJbnRlcm5hbChjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBkb3VibGUg
cHJvZ3Jlc3MsIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXN1bHQpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBhcHBlbmRUcmFuc2xhdGUoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRSb3RhdGUoZG91YmxlIHgsIGRvdWJsZSB5LCBk
b3VibGUgeiwgZG91YmxlIGRlZ3JlZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kU2Nh
bGUoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBh
cHBlbmRTa2V3KGRvdWJsZSB4LCBkb3VibGUgeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBl
bmRQZXJzcGVjdGl2ZShkb3VibGUgZGVwdGgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5k
TWF0cml4KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBhcHBlbmRJZGVudGl0eSgpID0gMDsKIAotICAgIFdlYlByaXZhdGVPd25QdHI8V2ViVHJh
bnNmb3JtT3BlcmF0aW9uc1ByaXZhdGU+IG1fcHJpdmF0ZTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNJ
ZGVudGl0eSgpIGNvbnN0ID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCmluZGV4IDJjYjMwZDhiZTJiNmJmNzc2YzIxNWYwNzM0MDNlMGE0NDU1MzZkNWEuLjM2
MzM5MDJiYjU1Y2FiOGUyYTU1NTNjNzQ5OGNkMDQ4YWE5NmQ1YTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
QEAgLTcxNDAsNyArNzE0MCw5IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9XZWJTY3JvbGxiYXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVt
L3N1cHBvcnQvV2ViU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRocmVhZFNhZmVEYXRhLmNwcCcsCi0gICAgICAg
ICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1L
ZXlmcmFtZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2Vi
VHJhbnNmb3JtT3BlcmF0aW9uc0ltcGwuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9ybU9wZXJhdGlvbnNJbXBsLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTC5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMRXJyb3IuY3BwJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJh
bnNmb3JtS2V5ZnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2I3YjYwMWZiYjJkYTRl
MzliYzY1ZDdiNTA3NTdmODJlNTJhNzY3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtS2V5ZnJhbWUuY3BwCkBA
IC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworV2ViVHJhbnNmb3JtS2V5ZnJhbWU6OldlYlRyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0
aW1lLCBjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSkKKyAgICA6IG1fdGltZSh0
aW1lKQorICAgICwgbV92YWx1ZShXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjpjcmVhdGUodmFsdWUp
KQoreworfQorCitXZWJUcmFuc2Zvcm1LZXlmcmFtZTo6fldlYlRyYW5zZm9ybUtleWZyYW1lKCkK
K3sKKyAgICBtX3ZhbHVlLnJlc2V0KDApOworfQorCitkb3VibGUgV2ViVHJhbnNmb3JtS2V5ZnJh
bWU6OnRpbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3RpbWU7Cit9CisKK2NvbnN0IFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnMmIFdlYlRyYW5zZm9ybUtleWZyYW1lOjp2YWx1ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuICptX3ZhbHVlLmdldCgpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9X
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDNiNTJkOWM2NjM1ZjUyNDVmMzA4NjUyNDc3Y2JhYTZhNGNlMjViMWMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDM5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oPgot
Ci0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIHsKLWNvbnN0IGRvdWJsZSBFUFNJTE9OID0gMWUt
NDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0cnVjdCBXZWJUcmFuc2Zvcm1PcGVyYXRp
b24gewotICAgIGVudW0gVHlwZSB7Ci0gICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRyYW5z
bGF0ZSwKLSAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uUm90YXRlLAotICAgICAgICBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25TY2FsZSwKLSAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uU2tl
dywKLSAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uUGVyc3BlY3RpdmUsCi0gICAgICAgIFdl
YlRyYW5zZm9ybU9wZXJhdGlvbk1hdHJpeCwKLSAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
SWRlbnRpdHkKLSAgICB9OwotCi0gICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uKCkKLSAgICAgICAg
OiB0eXBlKFdlYlRyYW5zZm9ybU9wZXJhdGlvbklkZW50aXR5KQotICAgIHsKLSAgICB9Ci0KLSAg
ICBUeXBlIHR5cGU7Ci0gICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwotCi0gICAg
dW5pb24gewotICAgICAgICBkb3VibGUgcGVyc3BlY3RpdmVEZXB0aDsKLQotICAgICAgICBzdHJ1
Y3QgewotICAgICAgICAgICAgZG91YmxlIHgsIHk7Ci0gICAgICAgIH0gc2tldzsKLQotICAgICAg
ICBzdHJ1Y3QgewotICAgICAgICAgICAgIGRvdWJsZSB4LCB5LCB6OwotICAgICAgICB9IHNjYWxl
OwotCi0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBkb3VibGUgeCwgeSwgejsKLSAgICAg
ICAgfSB0cmFuc2xhdGU7Ci0KLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHN0cnVjdCB7
Ci0gICAgICAgICAgICAgICAgZG91YmxlIHgsIHksIHo7Ci0gICAgICAgICAgICB9IGF4aXM7Ci0K
LSAgICAgICAgICAgIGRvdWJsZSBhbmdsZTsKLSAgICAgICAgfSByb3RhdGU7Ci0gICAgfTsKLQot
ICAgIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1hdHJpeC5pc0lkZW50aXR5KCk7
IH0KLX07Ci0KLWNsYXNzIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnNQcml2YXRlIHsKLXB1YmxpYzoK
LSAgICBWZWN0b3I8V2ViVHJhbnNmb3JtT3BlcmF0aW9uPiBvcGVyYXRpb25zOwotfTsKLQotV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwbHkoKSBjb25z
dAotewotICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRvUmV0dXJuOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9wcml2YXRlLT5vcGVyYXRpb25zLnNpemUoKTsgKytpKQotICAgICAg
ICB0b1JldHVybi5tdWx0aXBseShtX3ByaXZhdGUtPm9wZXJhdGlvbnNbaV0ubWF0cml4KTsKLSAg
ICByZXR1cm4gdG9SZXR1cm47Ci19Ci0KLXN0YXRpYyBib29sIGlzSWRlbnRpdHkoY29uc3QgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9uKiBvcGVyYXRpb24pCi17Ci0gICAgcmV0dXJuICFvcGVyYXRpb24g
fHwgb3BlcmF0aW9uLT5pc0lkZW50aXR5KCk7Ci19Ci0KLXN0YXRpYyBib29sIHNoYXJlU2FtZUF4
aXMoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBXZWJUcmFuc2Zvcm1P
cGVyYXRpb24qIHRvLCBkb3VibGUmIGF4aXNYLCBkb3VibGUmIGF4aXNZLCBkb3VibGUmIGF4aXNa
LCBkb3VibGUmIGFuZ2xlRnJvbSkKLXsKLSAgICBpZiAoaXNJZGVudGl0eShmcm9tKSAmJiBpc0lk
ZW50aXR5KHRvKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGlzSWRlbnRpdHko
ZnJvbSkgJiYgIWlzSWRlbnRpdHkodG8pKSB7Ci0gICAgICAgIGF4aXNYID0gdG8tPnJvdGF0ZS5h
eGlzLng7Ci0gICAgICAgIGF4aXNZID0gdG8tPnJvdGF0ZS5heGlzLnk7Ci0gICAgICAgIGF4aXNa
ID0gdG8tPnJvdGF0ZS5heGlzLno7Ci0gICAgICAgIGFuZ2xlRnJvbSA9IDA7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICghaXNJZGVudGl0eShmcm9tKSAmJiBpc0lkZW50
aXR5KHRvKSkgewotICAgICAgICBheGlzWCA9IGZyb20tPnJvdGF0ZS5heGlzLng7Ci0gICAgICAg
IGF4aXNZID0gZnJvbS0+cm90YXRlLmF4aXMueTsKLSAgICAgICAgYXhpc1ogPSBmcm9tLT5yb3Rh
dGUuYXhpcy56OwotICAgICAgICBhbmdsZUZyb20gPSBmcm9tLT5yb3RhdGUuYW5nbGU7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGRvdWJsZSBsZW5ndGgyID0gZnJvbS0+cm90
YXRlLmF4aXMueCAqIGZyb20tPnJvdGF0ZS5heGlzLnggKyBmcm9tLT5yb3RhdGUuYXhpcy55ICog
ZnJvbS0+cm90YXRlLmF4aXMueSArIGZyb20tPnJvdGF0ZS5heGlzLnogKiBmcm9tLT5yb3RhdGUu
YXhpcy56OwotICAgIGRvdWJsZSBvdGhlckxlbmd0aDIgPSB0by0+cm90YXRlLmF4aXMueCAqIHRv
LT5yb3RhdGUuYXhpcy54ICsgdG8tPnJvdGF0ZS5heGlzLnkgKiB0by0+cm90YXRlLmF4aXMueSAr
IHRvLT5yb3RhdGUuYXhpcy56ICogdG8tPnJvdGF0ZS5heGlzLno7Ci0KLSAgICBpZiAobGVuZ3Ro
MiA8PSBFUFNJTE9OIHx8IG90aGVyTGVuZ3RoMiA8PSBFUFNJTE9OKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBkb3VibGUgZG90ID0gdG8tPnJvdGF0ZS5heGlzLnggKiBmcm9tLT5yb3Rh
dGUuYXhpcy54ICsgdG8tPnJvdGF0ZS5heGlzLnkgKiBmcm9tLT5yb3RhdGUuYXhpcy55ICsgdG8t
PnJvdGF0ZS5heGlzLnogKiBmcm9tLT5yb3RhdGUuYXhpcy56OwotICAgIGRvdWJsZSBlcnJvciA9
IGZhYnMoMS4wIC0gKGRvdCAqIGRvdCkgLyAobGVuZ3RoMiAqIG90aGVyTGVuZ3RoMikpOwotICAg
IGJvb2wgcmVzdWx0ID0gZXJyb3IgPCBFUFNJTE9OOwotICAgIGlmIChyZXN1bHQpIHsKLSAgICAg
ICAgYXhpc1ggPSB0by0+cm90YXRlLmF4aXMueDsKLSAgICAgICAgYXhpc1kgPSB0by0+cm90YXRl
LmF4aXMueTsKLSAgICAgICAgYXhpc1ogPSB0by0+cm90YXRlLmF4aXMuejsKLSAgICAgICAgLy8g
SWYgdGhlIGF4ZXMgYXJlIHBvaW50aW5nIGluIG9wcG9zaXRlIGRpcmVjdGlvbnMsIHdlIG5lZWQg
dG8gcmV2ZXJzZQotICAgICAgICAvLyB0aGUgYW5nbGUuCi0gICAgICAgIGFuZ2xlRnJvbSA9IGRv
dCA+IDAgPyBmcm9tLT5yb3RhdGUuYW5nbGUgOiAtZnJvbS0+cm90YXRlLmFuZ2xlOwotICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZG91YmxlIGJsZW5kRG91Ymxlcyhkb3Vi
bGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgcmV0dXJuIGZyb20g
KiAoMSAtIHByb2dyZXNzKSArIHRvICogcHJvZ3Jlc3M7Ci19Ci0KLXN0YXRpYyBib29sIGJsZW5k
VHJhbnNmb3JtT3BlcmF0aW9ucyhjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGNv
bnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiogdG8sIGRvdWJsZSBwcm9ncmVzcywgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHJlc3VsdCkKLXsKLSAgICBpZiAoaXNJZGVudGl0eShmcm9tKSAmJiBp
c0lkZW50aXR5KHRvKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBXZWJUcmFuc2Zvcm1P
cGVyYXRpb246OlR5cGUgaW50ZXJwb2xhdGlvblR5cGUgPSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246
OldlYlRyYW5zZm9ybU9wZXJhdGlvbklkZW50aXR5OwotICAgIGlmIChpc0lkZW50aXR5KHRvKSkK
LSAgICAgICAgaW50ZXJwb2xhdGlvblR5cGUgPSBmcm9tLT50eXBlOwotICAgIGVsc2UKLSAgICAg
ICAgaW50ZXJwb2xhdGlvblR5cGUgPSB0by0+dHlwZTsKLQotICAgIHN3aXRjaCAoaW50ZXJwb2xh
dGlvblR5cGUpIHsKLSAgICBjYXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3Jt
T3BlcmF0aW9uVHJhbnNsYXRlOiB7Ci0gICAgICAgIGRvdWJsZSBmcm9tWCA9IGlzSWRlbnRpdHko
ZnJvbSkgPyAwIDogZnJvbS0+dHJhbnNsYXRlLng7Ci0gICAgICAgIGRvdWJsZSBmcm9tWSA9IGlz
SWRlbnRpdHkoZnJvbSkgPyAwIDogZnJvbS0+dHJhbnNsYXRlLnk7Ci0gICAgICAgIGRvdWJsZSBm
cm9tWiA9IGlzSWRlbnRpdHkoZnJvbSkgPyAwIDogZnJvbS0+dHJhbnNsYXRlLno7Ci0gICAgICAg
IGRvdWJsZSB0b1ggPSBpc0lkZW50aXR5KHRvKSA/IDAgOiB0by0+dHJhbnNsYXRlLng7Ci0gICAg
ICAgIGRvdWJsZSB0b1kgPSBpc0lkZW50aXR5KHRvKSA/IDAgOiB0by0+dHJhbnNsYXRlLnk7Ci0g
ICAgICAgIGRvdWJsZSB0b1ogPSBpc0lkZW50aXR5KHRvKSA/IDAgOiB0by0+dHJhbnNsYXRlLno7
Ci0gICAgICAgIHJlc3VsdC50cmFuc2xhdGUzZChibGVuZERvdWJsZXMoZnJvbVgsIHRvWCwgcHJv
Z3Jlc3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmREb3VibGVzKGZyb21ZLCB0
b1ksIHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kRG91Ymxlcyhm
cm9tWiwgdG9aLCBwcm9ncmVzcykpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvblJvdGF0ZTogewotICAg
ICAgICBkb3VibGUgYXhpc1ggPSAwOwotICAgICAgICBkb3VibGUgYXhpc1kgPSAwOwotICAgICAg
ICBkb3VibGUgYXhpc1ogPSAxOwotICAgICAgICBkb3VibGUgZnJvbUFuZ2xlID0gMDsKLSAgICAg
ICAgZG91YmxlIHRvQW5nbGUgPSBpc0lkZW50aXR5KHRvKSA/IDAgOiB0by0+cm90YXRlLmFuZ2xl
OwotICAgICAgICBpZiAoc2hhcmVTYW1lQXhpcyhmcm9tLCB0bywgYXhpc1gsIGF4aXNZLCBheGlz
WiwgZnJvbUFuZ2xlKSkKLSAgICAgICAgICAgIHJlc3VsdC5yb3RhdGUzZChheGlzWCwgYXhpc1ks
IGF4aXNaLCBibGVuZERvdWJsZXMoZnJvbUFuZ2xlLCB0b0FuZ2xlLCBwcm9ncmVzcykpOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRvTWF0cml4
OwotICAgICAgICAgICAgaWYgKCFpc0lkZW50aXR5KHRvKSkKLSAgICAgICAgICAgICAgICB0b01h
dHJpeCA9IHRvLT5tYXRyaXg7Ci0gICAgICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBm
cm9tTWF0cml4OwotICAgICAgICAgICAgaWYgKCFpc0lkZW50aXR5KGZyb20pKQotICAgICAgICAg
ICAgICAgIGZyb21NYXRyaXggPSBmcm9tLT5tYXRyaXg7Ci0gICAgICAgICAgICByZXN1bHQgPSB0
b01hdHJpeDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmJsZW5kKGZyb21NYXRyaXgsIHByb2dy
ZXNzKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zv
cm1PcGVyYXRpb25TY2FsZTogewotICAgICAgICBkb3VibGUgZnJvbVggPSBpc0lkZW50aXR5KGZy
b20pID8gMSA6IGZyb20tPnNjYWxlLng7Ci0gICAgICAgIGRvdWJsZSBmcm9tWSA9IGlzSWRlbnRp
dHkoZnJvbSkgPyAxIDogZnJvbS0+c2NhbGUueTsKLSAgICAgICAgZG91YmxlIGZyb21aID0gaXNJ
ZGVudGl0eShmcm9tKSA/IDEgOiBmcm9tLT5zY2FsZS56OwotICAgICAgICBkb3VibGUgdG9YID0g
aXNJZGVudGl0eSh0bykgPyAxIDogdG8tPnNjYWxlLng7Ci0gICAgICAgIGRvdWJsZSB0b1kgPSBp
c0lkZW50aXR5KHRvKSA/IDEgOiB0by0+c2NhbGUueTsKLSAgICAgICAgZG91YmxlIHRvWiA9IGlz
SWRlbnRpdHkodG8pID8gMSA6IHRvLT5zY2FsZS56OwotICAgICAgICByZXN1bHQuc2NhbGUzZChi
bGVuZERvdWJsZXMoZnJvbVgsIHRvWCwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgICAgICAgICAg
ICBibGVuZERvdWJsZXMoZnJvbVksIHRvWSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgICAgICAg
ICAgICBibGVuZERvdWJsZXMoZnJvbVosIHRvWiwgcHJvZ3Jlc3MpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVy
YXRpb25Ta2V3OiB7Ci0gICAgICAgIGRvdWJsZSBmcm9tWCA9IGlzSWRlbnRpdHkoZnJvbSkgPyAw
IDogZnJvbS0+c2tldy54OwotICAgICAgICBkb3VibGUgZnJvbVkgPSBpc0lkZW50aXR5KGZyb20p
ID8gMCA6IGZyb20tPnNrZXcueTsKLSAgICAgICAgZG91YmxlIHRvWCA9IGlzSWRlbnRpdHkodG8p
ID8gMCA6IHRvLT5za2V3Lng7Ci0gICAgICAgIGRvdWJsZSB0b1kgPSBpc0lkZW50aXR5KHRvKSA/
IDAgOiB0by0+c2tldy55OwotICAgICAgICByZXN1bHQuc2tld1goYmxlbmREb3VibGVzKGZyb21Y
LCB0b1gsIHByb2dyZXNzKSk7Ci0gICAgICAgIHJlc3VsdC5za2V3WShibGVuZERvdWJsZXMoZnJv
bVksIHRvWSwgcHJvZ3Jlc3MpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25QZXJzcGVjdGl2ZTogewot
ICAgICAgICBkb3VibGUgZnJvbVBlcnNwZWN0aXZlRGVwdGggPSBpc0lkZW50aXR5KGZyb20pID8g
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkgOiBmcm9tLT5wZXJzcGVjdGl2ZURlcHRoOwot
ICAgICAgICBkb3VibGUgdG9QZXJzcGVjdGl2ZURlcHRoID0gaXNJZGVudGl0eSh0bykgPyBudW1l
cmljX2xpbWl0czxkb3VibGU+OjptYXgoKSA6IHRvLT5wZXJzcGVjdGl2ZURlcHRoOwotICAgICAg
ICByZXN1bHQuYXBwbHlQZXJzcGVjdGl2ZShibGVuZERvdWJsZXMoZnJvbVBlcnNwZWN0aXZlRGVw
dGgsIHRvUGVyc3BlY3RpdmVEZXB0aCwgcHJvZ3Jlc3MpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25N
YXRyaXg6IHsKLSAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggdG9NYXRyaXg7Ci0gICAg
ICAgIGlmICghaXNJZGVudGl0eSh0bykpCi0gICAgICAgICAgICB0b01hdHJpeCA9IHRvLT5tYXRy
aXg7Ci0gICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGZyb21NYXRyaXg7Ci0gICAgICAg
IGlmICghaXNJZGVudGl0eShmcm9tKSkKLSAgICAgICAgICAgIGZyb21NYXRyaXggPSBmcm9tLT5t
YXRyaXg7Ci0gICAgICAgIHJlc3VsdCA9IHRvTWF0cml4OwotICAgICAgICBpZiAoIXJlc3VsdC5i
bGVuZChmcm9tTWF0cml4LCBwcm9ncmVzcykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2Vi
VHJhbnNmb3JtT3BlcmF0aW9uSWRlbnRpdHk6Ci0gICAgICAgIC8vIERvIG5vdGhpbmcuCi0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1XZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjpibGVuZChjb25zdCBXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zJiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0Ci17Ci0gICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggdG9SZXR1cm47Ci0gICAgYmxlbmRJbnRlcm5hbChmcm9tLCBwcm9n
cmVzcywgdG9SZXR1cm4pOwotICAgIHJldHVybiB0b1JldHVybjsKLX0KLQotYm9vbCBXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zOjptYXRjaGVzVHlwZXMoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
cyYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYgKGlzSWRlbnRpdHkoKSB8fCBvdGhlci5pc0lkZW50
aXR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKG1fcHJpdmF0ZS0+b3BlcmF0
aW9ucy5zaXplKCkgIT0gb3RoZXIubV9wcml2YXRlLT5vcGVyYXRpb25zLnNpemUoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByaXZhdGUt
Pm9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fcHJpdmF0ZS0+b3BlcmF0
aW9uc1tpXS50eXBlICE9IG90aGVyLm1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS50eXBlCi0gICAg
ICAgICAgICAmJiAhbV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLmlzSWRlbnRpdHkoKQotICAgICAg
ICAgICAgJiYgIW90aGVyLm1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS5pc0lkZW50aXR5KCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6Y2FuQmxlbmRXaXRoKGNvbnN0IFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMmIG90aGVyKSBjb25zdAotewotICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IGR1bW15OwotICAgIHJldHVybiBibGVuZEludGVybmFsKG90aGVyLCAwLjUsIGR1bW15KTsK
LX0KLQotdm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRUcmFuc2xhdGUoZG91Ymxl
IHgsIGRvdWJsZSB5LCBkb3VibGUgeikKLXsKLSAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gdG9B
ZGQ7Ci0gICAgdG9BZGQubWF0cml4LnRyYW5zbGF0ZTNkKHgsIHksIHopOwotICAgIHRvQWRkLnR5
cGUgPSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvblRyYW5zbGF0
ZTsKLSAgICB0b0FkZC50cmFuc2xhdGUueCA9IHg7Ci0gICAgdG9BZGQudHJhbnNsYXRlLnkgPSB5
OwotICAgIHRvQWRkLnRyYW5zbGF0ZS56ID0gejsKLSAgICBtX3ByaXZhdGUtPm9wZXJhdGlvbnMu
YXBwZW5kKHRvQWRkKTsKLX0KLQotdm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRS
b3RhdGUoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeiwgZG91YmxlIGRlZ3JlZXMpCi17Ci0g
ICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHRvQWRkOwotICAgIHRvQWRkLm1hdHJpeC5yb3RhdGUz
ZCh4LCB5LCB6LCBkZWdyZWVzKTsKLSAgICB0b0FkZC50eXBlID0gV2ViVHJhbnNmb3JtT3BlcmF0
aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25Sb3RhdGU7Ci0gICAgdG9BZGQucm90YXRlLmF4aXMu
eCA9IHg7Ci0gICAgdG9BZGQucm90YXRlLmF4aXMueSA9IHk7Ci0gICAgdG9BZGQucm90YXRlLmF4
aXMueiA9IHo7Ci0gICAgdG9BZGQucm90YXRlLmFuZ2xlID0gZGVncmVlczsKLSAgICBtX3ByaXZh
dGUtPm9wZXJhdGlvbnMuYXBwZW5kKHRvQWRkKTsKLX0KLQotdm9pZCBXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zOjphcHBlbmRTY2FsZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KQotewotICAg
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsKLSAgICB0b0FkZC5tYXRyaXguc2NhbGUzZCh4
LCB5LCB6KTsKLSAgICB0b0FkZC50eXBlID0gV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25TY2FsZTsKLSAgICB0b0FkZC5zY2FsZS54ID0geDsKLSAgICB0b0FkZC5z
Y2FsZS55ID0geTsKLSAgICB0b0FkZC5zY2FsZS56ID0gejsKLSAgICBtX3ByaXZhdGUtPm9wZXJh
dGlvbnMuYXBwZW5kKHRvQWRkKTsKLX0KLQotdm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjph
cHBlbmRTa2V3KGRvdWJsZSB4LCBkb3VibGUgeSkKLXsKLSAgICBXZWJUcmFuc2Zvcm1PcGVyYXRp
b24gdG9BZGQ7Ci0gICAgdG9BZGQubWF0cml4LnNrZXdYKHgpOwotICAgIHRvQWRkLm1hdHJpeC5z
a2V3WSh5KTsKLSAgICB0b0FkZC50eXBlID0gV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25Ta2V3OwotICAgIHRvQWRkLnNrZXcueCA9IHg7Ci0gICAgdG9BZGQuc2tl
dy55ID0geTsKLSAgICBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuYXBwZW5kKHRvQWRkKTsKLX0KLQot
dm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRQZXJzcGVjdGl2ZShkb3VibGUgZGVw
dGgpCi17Ci0gICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHRvQWRkOwotICAgIHRvQWRkLm1hdHJp
eC5hcHBseVBlcnNwZWN0aXZlKGRlcHRoKTsKLSAgICB0b0FkZC50eXBlID0gV2ViVHJhbnNmb3Jt
T3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25QZXJzcGVjdGl2ZTsKLSAgICB0b0FkZC5w
ZXJzcGVjdGl2ZURlcHRoID0gZGVwdGg7Ci0gICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVu
ZCh0b0FkZCk7Ci19Ci0KLXZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kTWF0cml4
KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCi17Ci0gICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9uIHRvQWRkOwotICAgIHRvQWRkLm1hdHJpeCA9IG1hdHJpeDsKLSAgICB0b0Fk
ZC50eXBlID0gV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25NYXRy
aXg7Ci0gICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7Ci19Ci0KLXZvaWQg
V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kSWRlbnRpdHkoKQotewotICAgIG1fcHJpdmF0
ZS0+b3BlcmF0aW9ucy5hcHBlbmQoV2ViVHJhbnNmb3JtT3BlcmF0aW9uKCkpOwotfQotCi1ib29s
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmlzSWRlbnRpdHkoKSBjb25zdAotewotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9wcml2YXRlLT5vcGVyYXRpb25zLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGlmICghbV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLmlzSWRlbnRpdHkoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6cmVzZXQoKQotewotICAgIG1fcHJpdmF0ZS5yZXNldCgw
KTsKLX0KLQotdm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjppbml0aWFsaXplKCkKLXsKLSAg
ICBtX3ByaXZhdGUucmVzZXQobmV3IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnNQcml2YXRlKTsKLX0K
LQotdm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjppbml0aWFsaXplKGNvbnN0IFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMmIG90aGVyKQotewotICAgIGlmIChtX3ByaXZhdGUuZ2V0KCkgIT0gb3Ro
ZXIubV9wcml2YXRlLmdldCgpKQotICAgICAgICBtX3ByaXZhdGUucmVzZXQobmV3IFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnNQcml2YXRlKCpvdGhlci5tX3ByaXZhdGUuZ2V0KCkpKTsKLSAgICBlbHNl
Ci0gICAgICAgIGluaXRpYWxpemUoKTsKLX0KLQotYm9vbCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
OjpibGVuZEludGVybmFsKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGRvdWJs
ZSBwcm9ncmVzcywgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHJlc3VsdCkgY29uc3QKLXsKLSAg
ICBib29sIGZyb21JZGVudGl0eSA9IGZyb20uaXNJZGVudGl0eSgpOwotICAgIGJvb2wgdG9JZGVu
dGl0eSA9IGlzSWRlbnRpdHkoKTsKLSAgICBpZiAoZnJvbUlkZW50aXR5ICYmIHRvSWRlbnRpdHkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKG1hdGNoZXNUeXBlcyhmcm9tKSkgewot
ICAgICAgICBzaXplX3QgbnVtT3BlcmF0aW9ucyA9IG1heChmcm9tSWRlbnRpdHkgPyAwIDogZnJv
bS5tX3ByaXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b0lkZW50aXR5ID8gMCA6IG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5zaXplKCkp
OwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9wZXJhdGlvbnM7ICsraSkgewot
ICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggYmxlbmRlZDsKLSAgICAgICAgICAg
IGlmICghYmxlbmRUcmFuc2Zvcm1PcGVyYXRpb25zKGZyb21JZGVudGl0eSA/IDAgOiAmZnJvbS5t
X3ByaXZhdGUtPm9wZXJhdGlvbnNbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b0lkZW50aXR5ID8gMCA6ICZtX3ByaXZhdGUtPm9wZXJhdGlvbnNbaV0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kZWQpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJlc3VsdC5tdWx0aXBseShibGVuZGVk
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXN1bHQg
PSBhcHBseSgpOwotICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGZyb21UcmFuc2Zvcm0gPSBm
cm9tLmFwcGx5KCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5ibGVuZChmcm9tVHJhbnNmb3JtLCBwcm9n
cmVzcyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5z
Zm9ybU9wZXJhdGlvbnNJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYzE2ODk2MDg4MTBlMDkyMTVjOWQ0
NTg5ZWRhMzU0OGVlZjA1MDRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zSW1wbC5jcHAKQEAg
LTAsMCArMSw0MDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJUcmFuc2Zvcm1PcGVyYXRpb25zSW1wbC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGht
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFt
ZXNwYWNlIHsKK2NvbnN0IGRvdWJsZSBFUFNJTE9OID0gMWUtNDsKK30KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3N0cnVjdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb24geworICAgIGVudW0gVHlwZSB7
CisgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRyYW5zbGF0ZSwKKyAgICAgICAgV2ViVHJh
bnNmb3JtT3BlcmF0aW9uUm90YXRlLAorICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25TY2Fs
ZSwKKyAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uU2tldywKKyAgICAgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9uUGVyc3BlY3RpdmUsCisgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbk1h
dHJpeCwKKyAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uSWRlbnRpdHkKKyAgICB9OworCisg
ICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uKCkKKyAgICAgICAgOiB0eXBlKFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbklkZW50aXR5KQorICAgIHsKKyAgICB9CisKKyAgICBUeXBlIHR5cGU7CisgICAgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworCisgICAgdW5pb24geworICAgICAgICBkb3Vi
bGUgcGVyc3BlY3RpdmVEZXB0aDsKKworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgZG91
YmxlIHgsIHk7CisgICAgICAgIH0gc2tldzsKKworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAg
ICAgZG91YmxlIHgsIHksIHo7CisgICAgICAgIH0gc2NhbGU7CisKKyAgICAgICAgc3RydWN0IHsK
KyAgICAgICAgICAgIGRvdWJsZSB4LCB5LCB6OworICAgICAgICB9IHRyYW5zbGF0ZTsKKworICAg
ICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICBkb3Vi
bGUgeCwgeSwgejsKKyAgICAgICAgICAgIH0gYXhpczsKKworICAgICAgICAgICAgZG91YmxlIGFu
Z2xlOworICAgICAgICB9IHJvdGF0ZTsKKyAgICB9OworCisgICAgYm9vbCBpc0lkZW50aXR5KCkg
Y29uc3QgeyByZXR1cm4gbWF0cml4LmlzSWRlbnRpdHkoKTsgfQorfTsKKworV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyogV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6Y3JlYXRlKCkKK3sKKyAgICByZXR1
cm4gbmV3IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnNJbXBsKCk7Cit9CisKK1dlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMqIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmNyZWF0ZShjb25zdCBXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zJiBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIG5ldyBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zSW1wbChwcm90b3R5cGUpOworfQorCitjbGFzcyBXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zUHJpdmF0ZSB7CitwdWJsaWM6CisgICAgVmVjdG9yPFdlYlRyYW5zZm9ybU9wZXJhdGlvbj4g
b3BlcmF0aW9uczsKK307CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4IFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnNJbXBsOjphcHBseSgpIGNvbnN0Cit7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggdG9SZXR1cm47CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByaXZhdGUtPm9wZXJh
dGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgIHRvUmV0dXJuLm11bHRpcGx5KG1fcHJpdmF0ZS0+
b3BlcmF0aW9uc1tpXS5tYXRyaXgpOworICAgIHJldHVybiB0b1JldHVybjsKK30KKworc3RhdGlj
IGJvb2wgaXNJZGVudGl0eShjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb24qIG9wZXJhdGlvbikK
K3sKKyAgICByZXR1cm4gIW9wZXJhdGlvbiB8fCBvcGVyYXRpb24tPmlzSWRlbnRpdHkoKTsKK30K
Kworc3RhdGljIGJvb2wgc2hhcmVTYW1lQXhpcyhjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb24q
IGZyb20sIGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiogdG8sIGRvdWJsZSYgYXhpc1gsIGRv
dWJsZSYgYXhpc1ksIGRvdWJsZSYgYXhpc1osIGRvdWJsZSYgYW5nbGVGcm9tKQoreworICAgIGlm
IChpc0lkZW50aXR5KGZyb20pICYmIGlzSWRlbnRpdHkodG8pKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoaXNJZGVudGl0eShmcm9tKSAmJiAhaXNJZGVudGl0eSh0bykpIHsKKyAg
ICAgICAgYXhpc1ggPSB0by0+cm90YXRlLmF4aXMueDsKKyAgICAgICAgYXhpc1kgPSB0by0+cm90
YXRlLmF4aXMueTsKKyAgICAgICAgYXhpc1ogPSB0by0+cm90YXRlLmF4aXMuejsKKyAgICAgICAg
YW5nbGVGcm9tID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCFp
c0lkZW50aXR5KGZyb20pICYmIGlzSWRlbnRpdHkodG8pKSB7CisgICAgICAgIGF4aXNYID0gZnJv
bS0+cm90YXRlLmF4aXMueDsKKyAgICAgICAgYXhpc1kgPSBmcm9tLT5yb3RhdGUuYXhpcy55Owor
ICAgICAgICBheGlzWiA9IGZyb20tPnJvdGF0ZS5heGlzLno7CisgICAgICAgIGFuZ2xlRnJvbSA9
IGZyb20tPnJvdGF0ZS5hbmdsZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
ZG91YmxlIGxlbmd0aDIgPSBmcm9tLT5yb3RhdGUuYXhpcy54ICogZnJvbS0+cm90YXRlLmF4aXMu
eCArIGZyb20tPnJvdGF0ZS5heGlzLnkgKiBmcm9tLT5yb3RhdGUuYXhpcy55ICsgZnJvbS0+cm90
YXRlLmF4aXMueiAqIGZyb20tPnJvdGF0ZS5heGlzLno7CisgICAgZG91YmxlIG90aGVyTGVuZ3Ro
MiA9IHRvLT5yb3RhdGUuYXhpcy54ICogdG8tPnJvdGF0ZS5heGlzLnggKyB0by0+cm90YXRlLmF4
aXMueSAqIHRvLT5yb3RhdGUuYXhpcy55ICsgdG8tPnJvdGF0ZS5heGlzLnogKiB0by0+cm90YXRl
LmF4aXMuejsKKworICAgIGlmIChsZW5ndGgyIDw9IEVQU0lMT04gfHwgb3RoZXJMZW5ndGgyIDw9
IEVQU0lMT04pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRvdWJsZSBkb3QgPSB0by0+
cm90YXRlLmF4aXMueCAqIGZyb20tPnJvdGF0ZS5heGlzLnggKyB0by0+cm90YXRlLmF4aXMueSAq
IGZyb20tPnJvdGF0ZS5heGlzLnkgKyB0by0+cm90YXRlLmF4aXMueiAqIGZyb20tPnJvdGF0ZS5h
eGlzLno7CisgICAgZG91YmxlIGVycm9yID0gZmFicygxLjAgLSAoZG90ICogZG90KSAvIChsZW5n
dGgyICogb3RoZXJMZW5ndGgyKSk7CisgICAgYm9vbCByZXN1bHQgPSBlcnJvciA8IEVQU0lMT047
CisgICAgaWYgKHJlc3VsdCkgeworICAgICAgICBheGlzWCA9IHRvLT5yb3RhdGUuYXhpcy54Owor
ICAgICAgICBheGlzWSA9IHRvLT5yb3RhdGUuYXhpcy55OworICAgICAgICBheGlzWiA9IHRvLT5y
b3RhdGUuYXhpcy56OworICAgICAgICAvLyBJZiB0aGUgYXhlcyBhcmUgcG9pbnRpbmcgaW4gb3Bw
b3NpdGUgZGlyZWN0aW9ucywgd2UgbmVlZCB0byByZXZlcnNlCisgICAgICAgIC8vIHRoZSBhbmds
ZS4KKyAgICAgICAgYW5nbGVGcm9tID0gZG90ID4gMCA/IGZyb20tPnJvdGF0ZS5hbmdsZSA6IC1m
cm9tLT5yb3RhdGUuYW5nbGU7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBkb3VibGUgYmxlbmREb3VibGVzKGRvdWJsZSBmcm9tLCBkb3VibGUgdG8sIGRvdWJsZSBwcm9n
cmVzcykKK3sKKyAgICByZXR1cm4gZnJvbSAqICgxIC0gcHJvZ3Jlc3MpICsgdG8gKiBwcm9ncmVz
czsKK30KKworc3RhdGljIGJvb2wgYmxlbmRUcmFuc2Zvcm1PcGVyYXRpb25zKGNvbnN0IFdlYlRy
YW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiB0bywg
ZG91YmxlIHByb2dyZXNzLCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcmVzdWx0KQoreworICAg
IGlmIChpc0lkZW50aXR5KGZyb20pICYmIGlzSWRlbnRpdHkodG8pKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6VHlwZSBpbnRlcnBvbGF0aW9uVHlw
ZSA9IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uSWRlbnRpdHk7
CisgICAgaWYgKGlzSWRlbnRpdHkodG8pKQorICAgICAgICBpbnRlcnBvbGF0aW9uVHlwZSA9IGZy
b20tPnR5cGU7CisgICAgZWxzZQorICAgICAgICBpbnRlcnBvbGF0aW9uVHlwZSA9IHRvLT50eXBl
OworCisgICAgc3dpdGNoIChpbnRlcnBvbGF0aW9uVHlwZSkgeworICAgIGNhc2UgV2ViVHJhbnNm
b3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25UcmFuc2xhdGU6IHsKKyAgICAgICAg
ZG91YmxlIGZyb21YID0gaXNJZGVudGl0eShmcm9tKSA/IDAgOiBmcm9tLT50cmFuc2xhdGUueDsK
KyAgICAgICAgZG91YmxlIGZyb21ZID0gaXNJZGVudGl0eShmcm9tKSA/IDAgOiBmcm9tLT50cmFu
c2xhdGUueTsKKyAgICAgICAgZG91YmxlIGZyb21aID0gaXNJZGVudGl0eShmcm9tKSA/IDAgOiBm
cm9tLT50cmFuc2xhdGUuejsKKyAgICAgICAgZG91YmxlIHRvWCA9IGlzSWRlbnRpdHkodG8pID8g
MCA6IHRvLT50cmFuc2xhdGUueDsKKyAgICAgICAgZG91YmxlIHRvWSA9IGlzSWRlbnRpdHkodG8p
ID8gMCA6IHRvLT50cmFuc2xhdGUueTsKKyAgICAgICAgZG91YmxlIHRvWiA9IGlzSWRlbnRpdHko
dG8pID8gMCA6IHRvLT50cmFuc2xhdGUuejsKKyAgICAgICAgcmVzdWx0LnRyYW5zbGF0ZTNkKGJs
ZW5kRG91Ymxlcyhmcm9tWCwgdG9YLCBwcm9ncmVzcyksCisgICAgICAgICAgICBibGVuZERvdWJs
ZXMoZnJvbVksIHRvWSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgYmxlbmREb3VibGVzKGZyb21a
LCB0b1osIHByb2dyZXNzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdlYlRy
YW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uUm90YXRlOiB7CisgICAgICAg
IGRvdWJsZSBheGlzWCA9IDA7CisgICAgICAgIGRvdWJsZSBheGlzWSA9IDA7CisgICAgICAgIGRv
dWJsZSBheGlzWiA9IDE7CisgICAgICAgIGRvdWJsZSBmcm9tQW5nbGUgPSAwOworICAgICAgICBk
b3VibGUgdG9BbmdsZSA9IGlzSWRlbnRpdHkodG8pID8gMCA6IHRvLT5yb3RhdGUuYW5nbGU7Cisg
ICAgICAgIGlmIChzaGFyZVNhbWVBeGlzKGZyb20sIHRvLCBheGlzWCwgYXhpc1ksIGF4aXNaLCBm
cm9tQW5nbGUpKQorICAgICAgICAgICAgcmVzdWx0LnJvdGF0ZTNkKGF4aXNYLCBheGlzWSwgYXhp
c1osIGJsZW5kRG91Ymxlcyhmcm9tQW5nbGUsIHRvQW5nbGUsIHByb2dyZXNzKSk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggdG9NYXRyaXg7Cisg
ICAgICAgICAgICBpZiAoIWlzSWRlbnRpdHkodG8pKQorICAgICAgICAgICAgICAgIHRvTWF0cml4
ID0gdG8tPm1hdHJpeDsKKyAgICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGZyb21N
YXRyaXg7CisgICAgICAgICAgICBpZiAoIWlzSWRlbnRpdHkoZnJvbSkpCisgICAgICAgICAgICAg
ICAgZnJvbU1hdHJpeCA9IGZyb20tPm1hdHJpeDsKKyAgICAgICAgICAgIHJlc3VsdCA9IHRvTWF0
cml4OworICAgICAgICAgICAgaWYgKCFyZXN1bHQuYmxlbmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3Mp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9w
ZXJhdGlvblNjYWxlOiB7CisgICAgICAgIGRvdWJsZSBmcm9tWCA9IGlzSWRlbnRpdHkoZnJvbSkg
PyAxIDogZnJvbS0+c2NhbGUueDsKKyAgICAgICAgZG91YmxlIGZyb21ZID0gaXNJZGVudGl0eShm
cm9tKSA/IDEgOiBmcm9tLT5zY2FsZS55OworICAgICAgICBkb3VibGUgZnJvbVogPSBpc0lkZW50
aXR5KGZyb20pID8gMSA6IGZyb20tPnNjYWxlLno7CisgICAgICAgIGRvdWJsZSB0b1ggPSBpc0lk
ZW50aXR5KHRvKSA/IDEgOiB0by0+c2NhbGUueDsKKyAgICAgICAgZG91YmxlIHRvWSA9IGlzSWRl
bnRpdHkodG8pID8gMSA6IHRvLT5zY2FsZS55OworICAgICAgICBkb3VibGUgdG9aID0gaXNJZGVu
dGl0eSh0bykgPyAxIDogdG8tPnNjYWxlLno7CisgICAgICAgIHJlc3VsdC5zY2FsZTNkKGJsZW5k
RG91Ymxlcyhmcm9tWCwgdG9YLCBwcm9ncmVzcyksCisgICAgICAgICAgICBibGVuZERvdWJsZXMo
ZnJvbVksIHRvWSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgYmxlbmREb3VibGVzKGZyb21aLCB0
b1osIHByb2dyZXNzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uU2tldzogeworICAgICAgICBkb3Vi
bGUgZnJvbVggPSBpc0lkZW50aXR5KGZyb20pID8gMCA6IGZyb20tPnNrZXcueDsKKyAgICAgICAg
ZG91YmxlIGZyb21ZID0gaXNJZGVudGl0eShmcm9tKSA/IDAgOiBmcm9tLT5za2V3Lnk7CisgICAg
ICAgIGRvdWJsZSB0b1ggPSBpc0lkZW50aXR5KHRvKSA/IDAgOiB0by0+c2tldy54OworICAgICAg
ICBkb3VibGUgdG9ZID0gaXNJZGVudGl0eSh0bykgPyAwIDogdG8tPnNrZXcueTsKKyAgICAgICAg
cmVzdWx0LnNrZXdYKGJsZW5kRG91Ymxlcyhmcm9tWCwgdG9YLCBwcm9ncmVzcykpOworICAgICAg
ICByZXN1bHQuc2tld1koYmxlbmREb3VibGVzKGZyb21ZLCB0b1ksIHByb2dyZXNzKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJh
bnNmb3JtT3BlcmF0aW9uUGVyc3BlY3RpdmU6IHsKKyAgICAgICAgZG91YmxlIGZyb21QZXJzcGVj
dGl2ZURlcHRoID0gaXNJZGVudGl0eShmcm9tKSA/IG51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1h
eCgpIDogZnJvbS0+cGVyc3BlY3RpdmVEZXB0aDsKKyAgICAgICAgZG91YmxlIHRvUGVyc3BlY3Rp
dmVEZXB0aCA9IGlzSWRlbnRpdHkodG8pID8gbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkg
OiB0by0+cGVyc3BlY3RpdmVEZXB0aDsKKyAgICAgICAgcmVzdWx0LmFwcGx5UGVyc3BlY3RpdmUo
YmxlbmREb3VibGVzKGZyb21QZXJzcGVjdGl2ZURlcHRoLCB0b1BlcnNwZWN0aXZlRGVwdGgsIHBy
b2dyZXNzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uTWF0cml4OiB7CisgICAgICAgIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IHRvTWF0cml4OworICAgICAgICBpZiAoIWlzSWRlbnRpdHkodG8pKQor
ICAgICAgICAgICAgdG9NYXRyaXggPSB0by0+bWF0cml4OworICAgICAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBmcm9tTWF0cml4OworICAgICAgICBpZiAoIWlzSWRlbnRpdHkoZnJvbSkpCisg
ICAgICAgICAgICBmcm9tTWF0cml4ID0gZnJvbS0+bWF0cml4OworICAgICAgICByZXN1bHQgPSB0
b01hdHJpeDsKKyAgICAgICAgaWYgKCFyZXN1bHQuYmxlbmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3Mp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvbklkZW50aXR5
OgorICAgICAgICAvLyBEbyBub3RoaW5nLgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uc0ltcGw6OmJsZW5kKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGRv
dWJsZSBwcm9ncmVzcykgY29uc3QKK3sKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b1Jl
dHVybjsKKyAgICBibGVuZEludGVybmFsKGZyb20sIHByb2dyZXNzLCB0b1JldHVybik7CisgICAg
cmV0dXJuIHRvUmV0dXJuOworfQorCitib29sIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnNJbXBsOjpt
YXRjaGVzVHlwZXMoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3RoZXIpIGNvbnN0Cit7
CisgICAgY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9uc0ltcGwmIG90aGVySW1wbCA9IHN0YXRp
Y19jYXN0PGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnNJbXBsJj4ob3RoZXIpOworICAgIGlm
IChpc0lkZW50aXR5KCkgfHwgb3RoZXJJbXBsLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBpZiAobV9wcml2YXRlLT5vcGVyYXRpb25zLnNpemUoKSAhPSBvdGhlcklt
cGwubV9wcml2YXRlLT5vcGVyYXRpb25zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKG1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS50eXBlICE9IG90
aGVySW1wbC5tX3ByaXZhdGUtPm9wZXJhdGlvbnNbaV0udHlwZQorICAgICAgICAgICAgJiYgIW1f
cHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS5pc0lkZW50aXR5KCkKKyAgICAgICAgICAgICYmICFvdGhl
ckltcGwubV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zSW1wbDo6Y2FuQmxlbmRXaXRoKGNvbnN0IFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMmIG90aGVyKSBjb25zdAoreworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGR1
bW15OworICAgIHJldHVybiBibGVuZEludGVybmFsKG90aGVyLCAwLjUsIGR1bW15KTsKK30KKwor
dm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zSW1wbDo6YXBwZW5kVHJhbnNsYXRlKGRvdWJsZSB4
LCBkb3VibGUgeSwgZG91YmxlIHopCit7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHRvQWRk
OworICAgIHRvQWRkLm1hdHJpeC50cmFuc2xhdGUzZCh4LCB5LCB6KTsKKyAgICB0b0FkZC50eXBl
ID0gV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25UcmFuc2xhdGU7
CisgICAgdG9BZGQudHJhbnNsYXRlLnggPSB4OworICAgIHRvQWRkLnRyYW5zbGF0ZS55ID0geTsK
KyAgICB0b0FkZC50cmFuc2xhdGUueiA9IHo7CisgICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFw
cGVuZCh0b0FkZCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uc0ltcGw6OmFwcGVu
ZFJvdGF0ZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6LCBkb3VibGUgZGVncmVlcykKK3sK
KyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gdG9BZGQ7CisgICAgdG9BZGQubWF0cml4LnJvdGF0
ZTNkKHgsIHksIHosIGRlZ3JlZXMpOworICAgIHRvQWRkLnR5cGUgPSBXZWJUcmFuc2Zvcm1PcGVy
YXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvblJvdGF0ZTsKKyAgICB0b0FkZC5yb3RhdGUuYXhp
cy54ID0geDsKKyAgICB0b0FkZC5yb3RhdGUuYXhpcy55ID0geTsKKyAgICB0b0FkZC5yb3RhdGUu
YXhpcy56ID0gejsKKyAgICB0b0FkZC5yb3RhdGUuYW5nbGUgPSBkZWdyZWVzOworICAgIG1fcHJp
dmF0ZS0+b3BlcmF0aW9ucy5hcHBlbmQodG9BZGQpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnNJbXBsOjphcHBlbmRTY2FsZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KQor
eworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsKKyAgICB0b0FkZC5tYXRyaXguc2Nh
bGUzZCh4LCB5LCB6KTsKKyAgICB0b0FkZC50eXBlID0gV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25TY2FsZTsKKyAgICB0b0FkZC5zY2FsZS54ID0geDsKKyAgICB0
b0FkZC5zY2FsZS55ID0geTsKKyAgICB0b0FkZC5zY2FsZS56ID0gejsKKyAgICBtX3ByaXZhdGUt
Pm9wZXJhdGlvbnMuYXBwZW5kKHRvQWRkKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zSW1wbDo6YXBwZW5kU2tldyhkb3VibGUgeCwgZG91YmxlIHkpCit7CisgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9uIHRvQWRkOworICAgIHRvQWRkLm1hdHJpeC5za2V3WCh4KTsKKyAgICB0b0Fk
ZC5tYXRyaXguc2tld1koeSk7CisgICAgdG9BZGQudHlwZSA9IFdlYlRyYW5zZm9ybU9wZXJhdGlv
bjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uU2tldzsKKyAgICB0b0FkZC5za2V3LnggPSB4OworICAg
IHRvQWRkLnNrZXcueSA9IHk7CisgICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVuZCh0b0Fk
ZCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uc0ltcGw6OmFwcGVuZFBlcnNwZWN0
aXZlKGRvdWJsZSBkZXB0aCkKK3sKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gdG9BZGQ7Cisg
ICAgdG9BZGQubWF0cml4LmFwcGx5UGVyc3BlY3RpdmUoZGVwdGgpOworICAgIHRvQWRkLnR5cGUg
PSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvblBlcnNwZWN0aXZl
OworICAgIHRvQWRkLnBlcnNwZWN0aXZlRGVwdGggPSBkZXB0aDsKKyAgICBtX3ByaXZhdGUtPm9w
ZXJhdGlvbnMuYXBwZW5kKHRvQWRkKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
SW1wbDo6YXBwZW5kTWF0cml4KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgp
Cit7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHRvQWRkOworICAgIHRvQWRkLm1hdHJpeCA9
IG1hdHJpeDsKKyAgICB0b0FkZC50eXBlID0gV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25NYXRyaXg7CisgICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVuZCh0
b0FkZCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uc0ltcGw6OmFwcGVuZElkZW50
aXR5KCkKK3sKKyAgICBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuYXBwZW5kKFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbigpKTsKK30KKworYm9vbCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zSW1wbDo6aXNJZGVu
dGl0eSgpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByaXZhdGUtPm9w
ZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFtX3ByaXZhdGUtPm9wZXJhdGlv
bnNbaV0uaXNJZGVudGl0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zSW1wbDo6cmVz
ZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgwKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zSW1wbDo6aW5pdGlhbGl6ZSgpCit7CisgICAgbV9wcml2YXRlLnJlc2V0KG5ldyBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zUHJpdmF0ZSk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uc0ltcGw6OmluaXRpYWxpemUoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3Ro
ZXIpCit7CisgICAgY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9uc0ltcGwmIG90aGVySW1wbCA9
IHN0YXRpY19jYXN0PGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnNJbXBsJj4ob3RoZXIpOwor
ICAgIGlmIChtX3ByaXZhdGUuZ2V0KCkgIT0gb3RoZXJJbXBsLm1fcHJpdmF0ZS5nZXQoKSkKKyAg
ICAgICAgbV9wcml2YXRlLnJlc2V0KG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zUHJpdmF0ZSgq
b3RoZXJJbXBsLm1fcHJpdmF0ZS5nZXQoKSkpOworICAgIGVsc2UKKyAgICAgICAgaW5pdGlhbGl6
ZSgpOworfQorCitib29sIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnNJbXBsOjpibGVuZEludGVybmFs
KGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBjb25zdCBXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zSW1wbCYgZnJvbUltcGwgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zSW1wbCY+KGZyb20pOworICAgIGJvb2wgZnJvbUlkZW50aXR5ID0gZnJv
bUltcGwuaXNJZGVudGl0eSgpOworICAgIGJvb2wgdG9JZGVudGl0eSA9IGlzSWRlbnRpdHkoKTsK
KyAgICBpZiAoZnJvbUlkZW50aXR5ICYmIHRvSWRlbnRpdHkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKG1hdGNoZXNUeXBlcyhmcm9tSW1wbCkpIHsKKyAgICAgICAgc2l6ZV90IG51
bU9wZXJhdGlvbnMgPSBtYXgoZnJvbUlkZW50aXR5ID8gMCA6IGZyb21JbXBsLm1fcHJpdmF0ZS0+
b3BlcmF0aW9ucy5zaXplKCksCisgICAgICAgICAgICB0b0lkZW50aXR5ID8gMCA6IG1fcHJpdmF0
ZS0+b3BlcmF0aW9ucy5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bU9wZXJhdGlvbnM7ICsraSkgeworICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
YmxlbmRlZDsKKyAgICAgICAgICAgIGlmICghYmxlbmRUcmFuc2Zvcm1PcGVyYXRpb25zKGZyb21J
ZGVudGl0eSA/IDAgOiAmZnJvbUltcGwubV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLAorICAgICAg
ICAgICAgICAgIHRvSWRlbnRpdHkgPyAwIDogJm1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXSwKKyAg
ICAgICAgICAgICAgICBwcm9ncmVzcywKKyAgICAgICAgICAgICAgICBibGVuZGVkKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXN1bHQubXVsdGlwbHkoYmxl
bmRlZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmVz
dWx0ID0gYXBwbHkoKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9tVHJhbnNmb3Jt
ID0gZnJvbUltcGwuYXBwbHkoKTsKKyAgICByZXR1cm4gcmVzdWx0LmJsZW5kKGZyb21UcmFuc2Zv
cm0sIHByb2dyZXNzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9ybU9wZXJh
dGlvbnNJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dl
YlRyYW5zZm9ybU9wZXJhdGlvbnNJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzc1ZDU5ZDdlYWE1N2RkOTQ5
MmUxN2Q2Mzg0MjZhYTFkOWYzZDM0MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtT3BlcmF0aW9uc0ltcGwuaApA
QCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlRyYW5zZm9ybU9wZXJh
dGlvbnNJbXBsX2gKKyNkZWZpbmUgV2ViVHJhbnNmb3JtT3BlcmF0aW9uc0ltcGxfaAorCisjaW5j
bHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnNQcml2YXRlOworCitjbGFzcyBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zSW1wbCA6IHB1YmxpYyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJUcmFuc2Zvcm1PcGVyYXRpb25zSW1wbCgpIHsgcmVz
ZXQoKTsgfQorCisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uc0ltcGwoKSB7IGluaXRpYWxpemUo
KTsgfQorICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnNJbXBsKGNvbnN0IFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMmIG90aGVyKSB7IGluaXRpYWxpemUob3RoZXIpOyB9CisgICAgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9uc0ltcGwmIG9wZXJhdG9yPShjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBv
dGhlcikKKyAgICB7CisgICAgICAgIGluaXRpYWxpemUob3RoZXIpOworICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgfQorCisgICAgLy8gSW1wbGVtZW50IFdlYktpdDo6V2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucyBtZXRob2RzCisgICAgdmlydHVhbCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhcHBs
eSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
YmxlbmQoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgZG91YmxlIHByb2dyZXNz
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgbWF0Y2hlc1R5cGVzKGNvbnN0IFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnMmIG90aGVyKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IGJvb2wgY2FuQmxlbmRXaXRoKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIG90aGVyKSBj
b25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVHJhbnNsYXRlKGRvdWJsZSB4
LCBkb3VibGUgeSwgZG91YmxlIHopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRS
b3RhdGUoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeiwgZG91YmxlIGRlZ3JlZXMpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTY2FsZShkb3VibGUgeCwgZG91YmxlIHksIGRv
dWJsZSB6KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kU2tldyhkb3VibGUgeCwg
ZG91YmxlIHkpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRQZXJzcGVjdGl2ZShk
b3VibGUgZGVwdGgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRNYXRyaXgoY29u
c3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
YXBwZW5kSWRlbnRpdHkoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgp
IGNvbnN0IE9WRVJSSURFOworCitwcml2YXRlOgorICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2b2lk
IGluaXRpYWxpemUoKTsKKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucyYgcHJvdG90eXBlKTsKKyAgICBib29sIGJsZW5kSW50ZXJuYWwoY29uc3QgV2ViVHJh
bnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgZG91YmxlIHByb2dyZXNzLCBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgcmVzdWx0KSBjb25zdDsKKworICAgIFdlYlByaXZhdGVPd25QdHI8V2ViVHJhbnNm
b3JtT3BlcmF0aW9uc1ByaXZhdGU+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gV2ViVHJhbnNmb3JtT3BlcmF0aW9uc0ltcGxfaAorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25U
cmFuc2xhdGlvblV0aWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmNwcAppbmRleCAxZWU4ZWEwNTMwNTZjNWFm
MmZiNTU0Njc0ODQyMWZkZTFiMDk0YThjLi5mYzI3NzgyMmRmZmNmNzkzNGI5YjcxYmU3NGIxNGE1
NmIzNTIyMjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5jcHAK
QEAgLTU3LDEwICs1NywxMCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgdG9XZWJUcmFuc2Zvcm1PcGVyYXRp
b25zKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRyYW5zZm9ybU9wZXJhdGlvbnMsIGNvbnN0
IEZsb2F0U2l6ZSYgYm94U2l6ZSkKK1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMqIHRvV2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyhjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0cmFuc2Zvcm1PcGVyYXRp
b25zLCBjb25zdCBGbG9hdFNpemUmIGJveFNpemUpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBkbyBh
IGRlZXAgY29weSB0aGUgdHJhbnNmb3JtT3BlcmF0aW9ucyBtYXkgY29udGFpbiByZWYgcG9pbnRl
cnMgdG8gVHJhbnNmb3JtT3BlcmF0aW9uIG9iamVjdHMuCi0gICAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zOworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMq
IHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgPSBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjpjcmVhdGUo
KTsKICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHRyYW5zZm9ybU9wZXJhdGlvbnMuc2l6ZSgp
OyArK2opIHsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJh
dGlvblR5cGUgPSB0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS0+Z2V0T3BlcmF0
aW9uVHlwZSgpOwogICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvblR5cGUpIHsKQEAgLTcwLDcgKzcw
LDcgQEAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoY29u
c3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdHJhbnMKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVy
YXRpb246OlNDQUxFXzNEOgogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6
IHsKICAgICAgICAgICAgIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0
aWNfY2FzdDxTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3Bl
cmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMu
YXBwZW5kU2NhbGUodHJhbnNmb3JtLT54KCksIHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnoo
KSk7CisgICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLT5hcHBlbmRTY2FsZSh0cmFu
c2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9ybS0+eigpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFO
U0xBVEVfWDoKQEAgLTc5LDcgKzc5LDcgQEAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB0b1dlYlRy
YW5zZm9ybU9wZXJhdGlvbnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdHJhbnMKICAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV8zRDoKICAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURTogewogICAgICAgICAgICAgVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7
Ci0gICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZFRyYW5zbGF0ZShmbG9h
dFZhbHVlRm9yTGVuZ3RoKHRyYW5zZm9ybS0+eCgpLCBib3hTaXplLndpZHRoKCkpLCBmbG9hdFZh
bHVlRm9yTGVuZ3RoKHRyYW5zZm9ybS0+eSgpLCBib3hTaXplLmhlaWdodCgpKSwgZmxvYXRWYWx1
ZUZvckxlbmd0aCh0cmFuc2Zvcm0tPnooKSwgMSkpOworICAgICAgICAgICAgd2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucy0+YXBwZW5kVHJhbnNsYXRlKGZsb2F0VmFsdWVGb3JMZW5ndGgodHJhbnNmb3Jt
LT54KCksIGJveFNpemUud2lkdGgoKSksIGZsb2F0VmFsdWVGb3JMZW5ndGgodHJhbnNmb3JtLT55
KCksIGJveFNpemUuaGVpZ2h0KCkpLCBmbG9hdFZhbHVlRm9yTGVuZ3RoKHRyYW5zZm9ybS0+eigp
LCAxKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g6CkBAIC04NywzNSArODcsMzUgQEAgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0
aW9ucyYgdHJhbnMKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV8zRDoK
ICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURTogewogICAgICAgICAgICAg
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxSb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS5n
ZXQoKSk7Ci0gICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZFJvdGF0ZSh0
cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9ybS0+eigpLCB0cmFuc2Zvcm0t
PmFuZ2xlKCkpOworICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy0+YXBwZW5kUm90
YXRlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56KCksIHRyYW5z
Zm9ybS0+YW5nbGUoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19YOgogICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6U0tFV19ZOgogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFVzog
ewogICAgICAgICAgICAgU2tld1RyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGlj
X2Nhc3Q8U2tld1RyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0
aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBw
ZW5kU2tldyh0cmFuc2Zvcm0tPmFuZ2xlWCgpLCB0cmFuc2Zvcm0tPmFuZ2xlWSgpKTsKKyAgICAg
ICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMtPmFwcGVuZFNrZXcodHJhbnNmb3JtLT5hbmds
ZVgoKSwgdHJhbnNmb3JtLT5hbmdsZVkoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYOiB7CiAgICAgICAgICAg
ICBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PE1hdHJp
eFRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pd
LmdldCgpKTsKICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG0gPSB0cmFuc2Zvcm0t
Pm1hdHJpeCgpOwotICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRNYXRy
aXgoV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgobSkpOworICAgICAgICAgICAgd2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucy0+YXBwZW5kTWF0cml4KFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KG0pKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0
aW9uOjpNQVRSSVhfM0Q6IHsKICAgICAgICAgICAgIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9u
KiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbio+KHRy
YW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKICAgICAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG0gPSB0cmFuc2Zvcm0tPm1hdHJpeCgpOwotICAgICAgICAgICAg
d2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRNYXRyaXgoV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgobSkpOworICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy0+YXBwZW5kTWF0cml4
KFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KG0pKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpQRVJTUEVDVElWRTogewogICAg
ICAgICAgICAgUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRp
Y19jYXN0PFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKj4odHJhbnNmb3JtT3BlcmF0aW9u
cy5vcGVyYXRpb25zKClbal0uZ2V0KCkpOwotICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0
aW9ucy5hcHBlbmRQZXJzcGVjdGl2ZShmbG9hdFZhbHVlRm9yTGVuZ3RoKHRyYW5zZm9ybS0+cGVy
c3BlY3RpdmUoKSwgMCkpOworICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy0+YXBw
ZW5kUGVyc3BlY3RpdmUoZmxvYXRWYWx1ZUZvckxlbmd0aCh0cmFuc2Zvcm0tPnBlcnNwZWN0aXZl
KCksIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpJREVOVElUWToKLSAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJh
dGlvbnMuYXBwZW5kSWRlbnRpdHkoKTsKKyAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlv
bnMtPmFwcGVuZElkZW50aXR5KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246Ok5PTkU6CiAgICAgICAgICAgICAvLyBEbyBub3RoaW5nLgpAQCAt
MTUzLDEzICsxNTMsMTMgQEAgdGVtcGxhdGUgPD4KIGJvb2wgYXBwZW5kS2V5ZnJhbWVXaXRoU3Rh
bmRhcmRUaW1pbmdGdW5jdGlvbjxUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSwgV2ViVHJhbnNmb3Jt
S2V5ZnJhbWUsIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPihXZWJUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZSogY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25W
YWx1ZSogdmFsdWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiBsYXN0VmFsdWUsIFdl
YktpdDo6V2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZSB0aW1pbmdGdW5jdGlv
blR5cGUsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSkKIHsKICAgICBib29sIGNhbkJsZW5kID0g
IWxhc3RWYWx1ZTsKLSAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMgPSB0b1dl
YlRyYW5zZm9ybU9wZXJhdGlvbnMoKnZhbHVlLT52YWx1ZSgpLCBib3hTaXplKTsKKyAgICBPd25Q
dHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gb3BlcmF0aW9ucyA9IGFkb3B0UHRyKHRvV2ViVHJh
bnNmb3JtT3BlcmF0aW9ucygqdmFsdWUtPnZhbHVlKCksIGJveFNpemUpKTsKICAgICBpZiAoIWNh
bkJsZW5kKSB7Ci0gICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgbGFzdE9wZXJhdGlvbnMg
PSB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKmxhc3RWYWx1ZS0+dmFsdWUoKSwgYm94U2l6ZSk7
Ci0gICAgICAgIGNhbkJsZW5kID0gbGFzdE9wZXJhdGlvbnMuY2FuQmxlbmRXaXRoKG9wZXJhdGlv
bnMpOworICAgICAgICBPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gbGFzdE9wZXJhdGlv
bnMgPSBhZG9wdFB0cih0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKmxhc3RWYWx1ZS0+dmFsdWUo
KSwgYm94U2l6ZSkpOworICAgICAgICBjYW5CbGVuZCA9IGxhc3RPcGVyYXRpb25zLT5jYW5CbGVu
ZFdpdGgoKm9wZXJhdGlvbnMpOwogICAgIH0KICAgICBpZiAoY2FuQmxlbmQpIHsKLSAgICAgICAg
Y3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZShrZXlUaW1lLCBvcGVyYXRpb25zKSwgdGlt
aW5nRnVuY3Rpb25UeXBlKTsKKyAgICAgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFt
ZShrZXlUaW1lLCAqb3BlcmF0aW9ucyksIHRpbWluZ0Z1bmN0aW9uVHlwZSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNjksMTMgKzE2OSwxMyBA
QCB0ZW1wbGF0ZSA8PgogYm9vbCBhcHBlbmRLZXlmcmFtZVdpdGhDdXN0b21CZXppZXJUaW1pbmdG
dW5jdGlvbjxUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSwgV2ViVHJhbnNmb3JtS2V5ZnJhbWUsIFdl
YlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPihXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3Vy
dmUsIGRvdWJsZSBrZXlUaW1lLCBjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogdmFsdWUs
IGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiBsYXN0VmFsdWUsIGRvdWJsZSB4MSwgZG91
YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MiwgY29uc3QgRmxvYXRTaXplJiBib3hTaXplKQog
ewogICAgIGJvb2wgY2FuQmxlbmQgPSAhbGFzdFZhbHVlOwotICAgIFdlYlRyYW5zZm9ybU9wZXJh
dGlvbnMgb3BlcmF0aW9ucyA9IHRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygqdmFsdWUtPnZhbHVl
KCksIGJveFNpemUpOworICAgIE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiBvcGVyYXRp
b25zID0gYWRvcHRQdHIodG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCp2YWx1ZS0+dmFsdWUoKSwg
Ym94U2l6ZSkpOwogICAgIGlmICghY2FuQmxlbmQpIHsKLSAgICAgICAgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucyBsYXN0T3BlcmF0aW9ucyA9IHRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygqbGFzdFZh
bHVlLT52YWx1ZSgpLCBib3hTaXplKTsKLSAgICAgICAgY2FuQmxlbmQgPSBsYXN0T3BlcmF0aW9u
cy5jYW5CbGVuZFdpdGgob3BlcmF0aW9ucyk7CisgICAgICAgIE93blB0cjxXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zPiBsYXN0T3BlcmF0aW9ucyA9IGFkb3B0UHRyKHRvV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucygqbGFzdFZhbHVlLT52YWx1ZSgpLCBib3hTaXplKSk7CisgICAgICAgIGNhbkJsZW5kID0g
bGFzdE9wZXJhdGlvbnMtPmNhbkJsZW5kV2l0aCgqb3BlcmF0aW9ucyk7CiAgICAgfQogICAgIGlm
IChjYW5CbGVuZCkgewotICAgICAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKGtl
eVRpbWUsIG9wZXJhdGlvbnMpLCB4MSwgeTEsIHgyLCB5Mik7CisgICAgICAgIGN1cnZlLT5hZGQo
V2ViVHJhbnNmb3JtS2V5ZnJhbWUoa2V5VGltZSwgKm9wZXJhdGlvbnMpLCB4MSwgeTEsIHgyLCB5
Mik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181504</attachid>
            <date>2013-01-07 07:07:15 -0800</date>
            <delta_ts>2013-01-14 07:56:35 -0800</delta_ts>
            <desc>Not for review: combined patch</desc>
            <filename>combinedWebKit</filename>
            <type>text/plain</type>
            <size>30517</size>
            <attacher name="Ali Juma">ajuma</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tcG9zaXRv
clN1cHBvcnQuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tcG9zaXRv
clN1cHBvcnQuaAppbmRleCAxYTlkMzU1Li5hYTU5NzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkNvbXBvc2l0b3JTdXBwb3J0LmgKKysrIGIvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJDb21wb3NpdG9yU3VwcG9ydC5oCkBAIC01MSw2
ICs1MSw3IEBAIGNsYXNzIFdlYlNjcm9sbGJhclRoZW1lR2VvbWV0cnk7CiBjbGFzcyBXZWJTb2xp
ZENvbG9yTGF5ZXI7CiBjbGFzcyBXZWJUaHJlYWQ7CiBjbGFzcyBXZWJUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZTsKK2NsYXNzIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM7CiBjbGFzcyBXZWJWaWRlb0Zy
YW1lUHJvdmlkZXI7CiBjbGFzcyBXZWJWaWRlb0xheWVyOwogCkBAIC0xMDcsNiArMTA4LDEwIEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGNyZWF0
ZVRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCkgeyByZXR1cm4gMDsgfQogCisgICAgdmlydHVhbCBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zKiBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKCkgeyByZXR1
cm4gMDsgfQorCisgICAgdmlydHVhbCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKiBjcmVhdGVUcmFu
c2Zvcm1PcGVyYXRpb25zKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmKSB7IHJldHVybiAw
OyB9CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5XZWJDb21wb3NpdG9yU3VwcG9ydCgpIHsg
fQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJh
bnNmb3JtS2V5ZnJhbWUuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJh
bnNmb3JtS2V5ZnJhbWUuaAppbmRleCBjOTllZjU1Li4xOTBkYWQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUtleWZyYW1lLmgKKysrIGIv
U291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oCkBA
IC0yNSwxOSArMjUsMjQgQEAKICNpZm5kZWYgV2ViVHJhbnNmb3JtS2V5ZnJhbWVfaAogI2RlZmlu
ZSBXZWJUcmFuc2Zvcm1LZXlmcmFtZV9oCiAKKyNpbmNsdWRlICJXZWJQcml2YXRlT3duUHRyLmgi
CiAjaW5jbHVkZSAiV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotc3RydWN0IFdlYlRyYW5zZm9ybUtleWZyYW1lIHsKLSAgICBXZWJUcmFuc2Zvcm1LZXlm
cmFtZShkb3VibGUgdGltZSwgY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgdmFsdWUpCi0g
ICAgICAgIDogdGltZSh0aW1lKQotICAgICAgICAsIHZhbHVlKHZhbHVlKQotICAgIHsKLSAgICB9
CitjbGFzcyBXZWJUcmFuc2Zvcm1LZXlmcmFtZSB7CitwdWJsaWM6CisgICAgV0VCS0lUX0VYUE9S
VCBXZWJUcmFuc2Zvcm1LZXlmcmFtZShkb3VibGUgdGltZSwgY29uc3QgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucyYgdmFsdWUpOwogCi0gICAgZG91YmxlIHRpbWU7Ci0gICAgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucyB2YWx1ZTsKKyAgICBXRUJLSVRfRVhQT1JUIH5XZWJUcmFuc2Zvcm1LZXlmcmFtZSgp
OworCisgICAgV0VCS0lUX0VYUE9SVCBkb3VibGUgdGltZSgpIGNvbnN0OworCisgICAgV0VCS0lU
X0VYUE9SVCBjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSgpIGNvbnN0OworCitw
cml2YXRlOgorICAgIGRvdWJsZSBtX3RpbWU7CisgICAgV2ViUHJpdmF0ZU93blB0cjxXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zPiBtX3ZhbHVlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucy5oCmluZGV4IDllMzBmNTguLjNiNDhkMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9Q
bGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oCkBA
IC0yOSw4ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zUHJpdmF0ZTsKLQogLy8gVHJhbnNmb3JtIG9wZXJhdGlvbnMgYXJlIGEgZGVj
b21wb3NlZCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguIEl0IGNhbiBiZQogLy8gYXBwbGllZCB0byBv
YnRhaW4gYSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhdCBhbnkgdGltZSwgYW5kIGNhbiBiZSBi
bGVuZGVkCiAvLyBpbnRlbGxpZ2VudGx5IHdpdGggb3RoZXIgdHJhbnNmb3JtIG9wZXJhdGlvbnMs
IHNvIGxvbmcgYXMgdGhleSByZXByZXNlbnQgdGhlCkBAIC00MiwxOCArNDAsMTAgQEAgY2xhc3Mg
V2ViVHJhbnNmb3JtT3BlcmF0aW9uc1ByaXZhdGU7CiAvLyBmdW5jdGlvbiBiZWxvdy4KIGNsYXNz
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgewogcHVibGljOgotICAgIH5XZWJUcmFuc2Zvcm1PcGVy
YXRpb25zKCkgeyByZXNldCgpOyB9Ci0KLSAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCkgeyBp
bml0aWFsaXplKCk7IH0KLSAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKGNvbnN0IFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMmIG90aGVyKSB7IGluaXRpYWxpemUob3RoZXIpOyB9Ci0gICAgV2ViVHJh
bnNmb3JtT3BlcmF0aW9ucyYgb3BlcmF0b3I9KGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMm
IG90aGVyKQotICAgIHsKLSAgICAgICAgaW5pdGlhbGl6ZShvdGhlcik7Ci0gICAgICAgIHJldHVy
biAqdGhpczsKLSAgICB9CisgICAgdmlydHVhbCB+V2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpIHsg
fQogCiAgICAgLy8gUmV0dXJucyBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCByZXByZXNlbnRpbmcg
dGhlc2UgdHJhbnNmb3JtIG9wZXJhdGlvbnMuCi0gICAgV0VCS0lUX0VYUE9SVCBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBhcHBseSgpIGNvbnN0OworICAgIHZpcnR1YWwgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggYXBwbHkoKSBjb25zdCA9IDA7CiAKICAgICAvLyBHaXZlbiBhbm90aGVyIHNldCBv
ZiB0cmFuc2Zvcm0gb3BlcmF0aW9ucyBhbmQgYSBwcm9ncmVzcyBpbiB0aGUgcmFuZ2UKICAgICAv
LyBbMCwgMV0sIHJldHVybnMgYSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggcmVwcmVzZW50aW5nIHRo
ZSBpbnRlcm1lZGlhdGUKQEAgLTYyLDM0ICs1MiwyNiBAQCBwdWJsaWM6CiAgICAgLy8gdHJhbnNm
b3JtcyBhcmUgYmFrZWQgdG8gbWF0cmljZXMgKHVzaW5nIGFwcGx5KSwgYW5kIHRoZSBtYXRyaWNl
cyBhcmUKICAgICAvLyB0aGVuIGRlY29tcG9zZWQgYW5kIGludGVycG9sYXRlZC4gRm9yIG1vcmUg
aW5mb3JtYXRpb24sIHNlZQogICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvV0QtY3Nz
My0yZC10cmFuc2Zvcm1zLTIwMTExMjE1LyNtYXRyaXgtZGVjb21wb3NpdGlvbi4KLSAgICBXRUJL
SVRfRVhQT1JUIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGJsZW5kKGNvbnN0IFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnMmIGZyb20sIGRvdWJsZSBwcm9ncmVzcykgY29uc3Q7CisgICAgdmlydHVhbCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBibGVuZChjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
JiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0ID0gMDsKIAogICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGlzIG9wZXJhdGlvbiBhbmQgaXRzIGRlc2NlbmRhbnRzIGhhdmUgdGhlIHNhbWUgdHlw
ZXMKICAgICAvLyBhcyBvdGhlciBhbmQgaXRzIGRlc2NlbmRhbnRzLgotICAgIFdFQktJVF9FWFBP
UlQgYm9vbCBtYXRjaGVzVHlwZXMoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3RoZXIp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBtYXRjaGVzVHlwZXMoY29uc3QgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyYgb3RoZXIpIGNvbnN0ID0gMDsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGVzZSBvcGVyYXRpb25zIGNhbiBiZSBibGVuZGVkLiBJdCB3aWxsIG9ubHkgcmV0dXJuCiAgICAg
Ly8gZmFsc2UgaWYgd2UgbXVzdCByZXNvcnQgdG8gbWF0cml4IGludGVycG9sYXRpb24sIGFuZCBt
YXRyaXggaW50ZXJwb2xhdGlvbgogICAgIC8vIGZhaWxzICh0aGlzIGNhbiBoYXBwZW4gaWYgZWl0
aGVyIG1hdHJpeCBjYW5ub3QgYmUgZGVjb21wb3NlZCkuCi0gICAgV0VCS0lUX0VYUE9SVCBib29s
IGNhbkJsZW5kV2l0aChjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdGhlcikgY29uc3Q7
Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXBwZW5kVHJhbnNsYXRlKGRvdWJsZSB4LCBkb3Vi
bGUgeSwgZG91YmxlIHopOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhcHBlbmRSb3RhdGUoZG91
YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeiwgZG91YmxlIGRlZ3JlZXMpOwotICAgIFdFQktJVF9F
WFBPUlQgdm9pZCBhcHBlbmRTY2FsZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KTsKLSAg
ICBXRUJLSVRfRVhQT1JUIHZvaWQgYXBwZW5kU2tldyhkb3VibGUgeCwgZG91YmxlIHkpOwotICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBhcHBlbmRQZXJzcGVjdGl2ZShkb3VibGUgZGVwdGgpOwotICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBhcHBlbmRNYXRyaXgoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgmKTsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXBwZW5kSWRlbnRpdHkoKTsKLQotICAg
IFdFQktJVF9FWFBPUlQgYm9vbCBpc0lkZW50aXR5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGNhbkJsZW5kV2l0aChjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdGhlcikgY29uc3Qg
PSAwOwogCi1wcml2YXRlOgotICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOwotICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKCk7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGlu
aXRpYWxpemUoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgcHJvdG90eXBlKTsKLSAgICBX
RUJLSVRfRVhQT1JUIGJvb2wgYmxlbmRJbnRlcm5hbChjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zJiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXN1
bHQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUcmFuc2xhdGUoZG91YmxlIHgsIGRv
dWJsZSB5LCBkb3VibGUgeikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRSb3RhdGUoZG91
YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeiwgZG91YmxlIGRlZ3JlZXMpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwZW5kU2NhbGUoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTa2V3KGRvdWJsZSB4LCBkb3VibGUgeSkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmRQZXJzcGVjdGl2ZShkb3VibGUgZGVwdGgpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwZW5kTWF0cml4KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRJZGVudGl0eSgpID0gMDsKIAotICAgIFdlYlBy
aXZhdGVPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9uc1ByaXZhdGU+IG1fcHJpdmF0ZTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0ID0gMDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDM2ODVhOTguLjNiM2FhZjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTcxNDIsNyArNzE0Miw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hy
b21pdW0vc3VwcG9ydC9XZWJTY3JvbGxiYXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2Nocm9taXVtL3N1cHBvcnQvV2ViU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRocmVhZFNhZmVEYXRhLmNwcCcs
Ci0gICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1PcGVy
YXRpb25zLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJU
cmFuc2Zvcm1LZXlmcmFtZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1
cHBvcnQvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2No
cm9taXVtL3N1cHBvcnQvV2ViVVJMRXJyb3IuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtS2V5ZnJhbWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1LZXlm
cmFtZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYzOWUxZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
V2ViVHJhbnNmb3JtS2V5ZnJhbWUuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgorI2lu
Y2x1ZGUgPHB1YmxpYy9XZWJDb21wb3NpdG9yU3VwcG9ydC5oPgorI2luY2x1ZGUgPHB1YmxpYy9X
ZWJUcmFuc2Zvcm1LZXlmcmFtZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViVHJhbnNm
b3JtS2V5ZnJhbWU6OldlYlRyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0aW1lLCBjb25zdCBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSkKKyAgICA6IG1fdGltZSh0aW1lKQorICAgICwgbV92
YWx1ZShQbGF0Zm9ybTo6Y3VycmVudCgpLT5jb21wb3NpdG9yU3VwcG9ydCgpLT5jcmVhdGVUcmFu
c2Zvcm1PcGVyYXRpb25zKHZhbHVlKSkKK3sKK30KKworV2ViVHJhbnNmb3JtS2V5ZnJhbWU6On5X
ZWJUcmFuc2Zvcm1LZXlmcmFtZSgpCit7CisgICAgbV92YWx1ZS5yZXNldCgwKTsKK30KKworZG91
YmxlIFdlYlRyYW5zZm9ybUtleWZyYW1lOjp0aW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90
aW1lOworfQorCitjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBXZWJUcmFuc2Zvcm1LZXlm
cmFtZTo6dmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiAqbV92YWx1ZS5nZXQoKTsKK30KKwor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjUyZDljLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOTQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
LSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMuaD4KLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSB7Ci1jb25zdCBkb3VibGUg
RVBTSUxPTiA9IDFlLTQ7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdHJ1Y3QgV2ViVHJh
bnNmb3JtT3BlcmF0aW9uIHsKLSAgICBlbnVtIFR5cGUgewotICAgICAgICBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25UcmFuc2xhdGUsCi0gICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblJvdGF0ZSwK
LSAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uU2NhbGUsCi0gICAgICAgIFdlYlRyYW5zZm9y
bU9wZXJhdGlvblNrZXcsCi0gICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblBlcnNwZWN0aXZl
LAotICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25NYXRyaXgsCi0gICAgICAgIFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbklkZW50aXR5Ci0gICAgfTsKLQotICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlv
bigpCi0gICAgICAgIDogdHlwZShXZWJUcmFuc2Zvcm1PcGVyYXRpb25JZGVudGl0eSkKLSAgICB7
Ci0gICAgfQotCi0gICAgVHlwZSB0eXBlOwotICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1h
dHJpeDsKLQotICAgIHVuaW9uIHsKLSAgICAgICAgZG91YmxlIHBlcnNwZWN0aXZlRGVwdGg7Ci0K
LSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIGRvdWJsZSB4LCB5OwotICAgICAgICB9IHNr
ZXc7Ci0KLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgICBkb3VibGUgeCwgeSwgejsKLSAg
ICAgICAgfSBzY2FsZTsKLQotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgZG91YmxlIHgs
IHksIHo7Ci0gICAgICAgIH0gdHJhbnNsYXRlOwotCi0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAg
ICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgICAgIGRvdWJsZSB4LCB5LCB6OwotICAgICAgICAg
ICAgfSBheGlzOwotCi0gICAgICAgICAgICBkb3VibGUgYW5nbGU7Ci0gICAgICAgIH0gcm90YXRl
OwotICAgIH07Ci0KLSAgICBib29sIGlzSWRlbnRpdHkoKSBjb25zdCB7IHJldHVybiBtYXRyaXgu
aXNJZGVudGl0eSgpOyB9Ci19OwotCi1jbGFzcyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zUHJpdmF0
ZSB7Ci1wdWJsaWM6Ci0gICAgVmVjdG9yPFdlYlRyYW5zZm9ybU9wZXJhdGlvbj4gb3BlcmF0aW9u
czsKLX07Ci0KLVdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6
OmFwcGx5KCkgY29uc3QKLXsKLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b1JldHVybjsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5zaXplKCk7
ICsraSkKLSAgICAgICAgdG9SZXR1cm4ubXVsdGlwbHkobV9wcml2YXRlLT5vcGVyYXRpb25zW2ld
Lm1hdHJpeCk7Ci0gICAgcmV0dXJuIHRvUmV0dXJuOwotfQotCi1zdGF0aWMgYm9vbCBpc0lkZW50
aXR5KGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiogb3BlcmF0aW9uKQotewotICAgIHJldHVy
biAhb3BlcmF0aW9uIHx8IG9wZXJhdGlvbi0+aXNJZGVudGl0eSgpOwotfQotCi1zdGF0aWMgYm9v
bCBzaGFyZVNhbWVBeGlzKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3Qg
V2ViVHJhbnNmb3JtT3BlcmF0aW9uKiB0bywgZG91YmxlJiBheGlzWCwgZG91YmxlJiBheGlzWSwg
ZG91YmxlJiBheGlzWiwgZG91YmxlJiBhbmdsZUZyb20pCi17Ci0gICAgaWYgKGlzSWRlbnRpdHko
ZnJvbSkgJiYgaXNJZGVudGl0eSh0bykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChpc0lkZW50aXR5KGZyb20pICYmICFpc0lkZW50aXR5KHRvKSkgewotICAgICAgICBheGlzWCA9
IHRvLT5yb3RhdGUuYXhpcy54OwotICAgICAgICBheGlzWSA9IHRvLT5yb3RhdGUuYXhpcy55Owot
ICAgICAgICBheGlzWiA9IHRvLT5yb3RhdGUuYXhpcy56OwotICAgICAgICBhbmdsZUZyb20gPSAw
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWlzSWRlbnRpdHkoZnJv
bSkgJiYgaXNJZGVudGl0eSh0bykpIHsKLSAgICAgICAgYXhpc1ggPSBmcm9tLT5yb3RhdGUuYXhp
cy54OwotICAgICAgICBheGlzWSA9IGZyb20tPnJvdGF0ZS5heGlzLnk7Ci0gICAgICAgIGF4aXNa
ID0gZnJvbS0+cm90YXRlLmF4aXMuejsKLSAgICAgICAgYW5nbGVGcm9tID0gZnJvbS0+cm90YXRl
LmFuZ2xlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBkb3VibGUgbGVuZ3Ro
MiA9IGZyb20tPnJvdGF0ZS5heGlzLnggKiBmcm9tLT5yb3RhdGUuYXhpcy54ICsgZnJvbS0+cm90
YXRlLmF4aXMueSAqIGZyb20tPnJvdGF0ZS5heGlzLnkgKyBmcm9tLT5yb3RhdGUuYXhpcy56ICog
ZnJvbS0+cm90YXRlLmF4aXMuejsKLSAgICBkb3VibGUgb3RoZXJMZW5ndGgyID0gdG8tPnJvdGF0
ZS5heGlzLnggKiB0by0+cm90YXRlLmF4aXMueCArIHRvLT5yb3RhdGUuYXhpcy55ICogdG8tPnJv
dGF0ZS5heGlzLnkgKyB0by0+cm90YXRlLmF4aXMueiAqIHRvLT5yb3RhdGUuYXhpcy56OwotCi0g
ICAgaWYgKGxlbmd0aDIgPD0gRVBTSUxPTiB8fCBvdGhlckxlbmd0aDIgPD0gRVBTSUxPTikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZG91YmxlIGRvdCA9IHRvLT5yb3RhdGUuYXhpcy54
ICogZnJvbS0+cm90YXRlLmF4aXMueCArIHRvLT5yb3RhdGUuYXhpcy55ICogZnJvbS0+cm90YXRl
LmF4aXMueSArIHRvLT5yb3RhdGUuYXhpcy56ICogZnJvbS0+cm90YXRlLmF4aXMuejsKLSAgICBk
b3VibGUgZXJyb3IgPSBmYWJzKDEuMCAtIChkb3QgKiBkb3QpIC8gKGxlbmd0aDIgKiBvdGhlckxl
bmd0aDIpKTsKLSAgICBib29sIHJlc3VsdCA9IGVycm9yIDwgRVBTSUxPTjsKLSAgICBpZiAocmVz
dWx0KSB7Ci0gICAgICAgIGF4aXNYID0gdG8tPnJvdGF0ZS5heGlzLng7Ci0gICAgICAgIGF4aXNZ
ID0gdG8tPnJvdGF0ZS5heGlzLnk7Ci0gICAgICAgIGF4aXNaID0gdG8tPnJvdGF0ZS5heGlzLno7
Ci0gICAgICAgIC8vIElmIHRoZSBheGVzIGFyZSBwb2ludGluZyBpbiBvcHBvc2l0ZSBkaXJlY3Rp
b25zLCB3ZSBuZWVkIHRvIHJldmVyc2UKLSAgICAgICAgLy8gdGhlIGFuZ2xlLgotICAgICAgICBh
bmdsZUZyb20gPSBkb3QgPiAwID8gZnJvbS0+cm90YXRlLmFuZ2xlIDogLWZyb20tPnJvdGF0ZS5h
bmdsZTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGRvdWJsZSBibGVu
ZERvdWJsZXMoZG91YmxlIGZyb20sIGRvdWJsZSB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAg
IHJldHVybiBmcm9tICogKDEgLSBwcm9ncmVzcykgKyB0byAqIHByb2dyZXNzOwotfQotCi1zdGF0
aWMgYm9vbCBibGVuZFRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uKiBmcm9tLCBjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb24qIHRvLCBkb3VibGUgcHJvZ3Jl
c3MsIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXN1bHQpCi17Ci0gICAgaWYgKGlzSWRlbnRp
dHkoZnJvbSkgJiYgaXNJZGVudGl0eSh0bykpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
V2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpUeXBlIGludGVycG9sYXRpb25UeXBlID0gV2ViVHJhbnNm
b3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25JZGVudGl0eTsKLSAgICBpZiAoaXNJ
ZGVudGl0eSh0bykpCi0gICAgICAgIGludGVycG9sYXRpb25UeXBlID0gZnJvbS0+dHlwZTsKLSAg
ICBlbHNlCi0gICAgICAgIGludGVycG9sYXRpb25UeXBlID0gdG8tPnR5cGU7Ci0KLSAgICBzd2l0
Y2ggKGludGVycG9sYXRpb25UeXBlKSB7Ci0gICAgY2FzZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246
OldlYlRyYW5zZm9ybU9wZXJhdGlvblRyYW5zbGF0ZTogewotICAgICAgICBkb3VibGUgZnJvbVgg
PSBpc0lkZW50aXR5KGZyb20pID8gMCA6IGZyb20tPnRyYW5zbGF0ZS54OwotICAgICAgICBkb3Vi
bGUgZnJvbVkgPSBpc0lkZW50aXR5KGZyb20pID8gMCA6IGZyb20tPnRyYW5zbGF0ZS55OwotICAg
ICAgICBkb3VibGUgZnJvbVogPSBpc0lkZW50aXR5KGZyb20pID8gMCA6IGZyb20tPnRyYW5zbGF0
ZS56OwotICAgICAgICBkb3VibGUgdG9YID0gaXNJZGVudGl0eSh0bykgPyAwIDogdG8tPnRyYW5z
bGF0ZS54OwotICAgICAgICBkb3VibGUgdG9ZID0gaXNJZGVudGl0eSh0bykgPyAwIDogdG8tPnRy
YW5zbGF0ZS55OwotICAgICAgICBkb3VibGUgdG9aID0gaXNJZGVudGl0eSh0bykgPyAwIDogdG8t
PnRyYW5zbGF0ZS56OwotICAgICAgICByZXN1bHQudHJhbnNsYXRlM2QoYmxlbmREb3VibGVzKGZy
b21YLCB0b1gsIHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kRG91
Ymxlcyhmcm9tWSwgdG9ZLCBwcm9ncmVzcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBi
bGVuZERvdWJsZXMoZnJvbVosIHRvWiwgcHJvZ3Jlc3MpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25S
b3RhdGU6IHsKLSAgICAgICAgZG91YmxlIGF4aXNYID0gMDsKLSAgICAgICAgZG91YmxlIGF4aXNZ
ID0gMDsKLSAgICAgICAgZG91YmxlIGF4aXNaID0gMTsKLSAgICAgICAgZG91YmxlIGZyb21Bbmds
ZSA9IDA7Ci0gICAgICAgIGRvdWJsZSB0b0FuZ2xlID0gaXNJZGVudGl0eSh0bykgPyAwIDogdG8t
PnJvdGF0ZS5hbmdsZTsKLSAgICAgICAgaWYgKHNoYXJlU2FtZUF4aXMoZnJvbSwgdG8sIGF4aXNY
LCBheGlzWSwgYXhpc1osIGZyb21BbmdsZSkpCi0gICAgICAgICAgICByZXN1bHQucm90YXRlM2Qo
YXhpc1gsIGF4aXNZLCBheGlzWiwgYmxlbmREb3VibGVzKGZyb21BbmdsZSwgdG9BbmdsZSwgcHJv
Z3Jlc3MpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0b01hdHJpeDsKLSAgICAgICAgICAgIGlmICghaXNJZGVudGl0eSh0bykpCi0gICAgICAg
ICAgICAgICAgdG9NYXRyaXggPSB0by0+bWF0cml4OwotICAgICAgICAgICAgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXggZnJvbU1hdHJpeDsKLSAgICAgICAgICAgIGlmICghaXNJZGVudGl0eShmcm9t
KSkKLSAgICAgICAgICAgICAgICBmcm9tTWF0cml4ID0gZnJvbS0+bWF0cml4OwotICAgICAgICAg
ICAgcmVzdWx0ID0gdG9NYXRyaXg7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5ibGVuZChmcm9t
TWF0cml4LCBwcm9ncmVzcykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlv
bjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uU2NhbGU6IHsKLSAgICAgICAgZG91YmxlIGZyb21YID0g
aXNJZGVudGl0eShmcm9tKSA/IDEgOiBmcm9tLT5zY2FsZS54OwotICAgICAgICBkb3VibGUgZnJv
bVkgPSBpc0lkZW50aXR5KGZyb20pID8gMSA6IGZyb20tPnNjYWxlLnk7Ci0gICAgICAgIGRvdWJs
ZSBmcm9tWiA9IGlzSWRlbnRpdHkoZnJvbSkgPyAxIDogZnJvbS0+c2NhbGUuejsKLSAgICAgICAg
ZG91YmxlIHRvWCA9IGlzSWRlbnRpdHkodG8pID8gMSA6IHRvLT5zY2FsZS54OwotICAgICAgICBk
b3VibGUgdG9ZID0gaXNJZGVudGl0eSh0bykgPyAxIDogdG8tPnNjYWxlLnk7Ci0gICAgICAgIGRv
dWJsZSB0b1ogPSBpc0lkZW50aXR5KHRvKSA/IDEgOiB0by0+c2NhbGUuejsKLSAgICAgICAgcmVz
dWx0LnNjYWxlM2QoYmxlbmREb3VibGVzKGZyb21YLCB0b1gsIHByb2dyZXNzKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgYmxlbmREb3VibGVzKGZyb21ZLCB0b1ksIHByb2dyZXNzKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgYmxlbmREb3VibGVzKGZyb21aLCB0b1osIHByb2dyZXNzKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2Vi
VHJhbnNmb3JtT3BlcmF0aW9uU2tldzogewotICAgICAgICBkb3VibGUgZnJvbVggPSBpc0lkZW50
aXR5KGZyb20pID8gMCA6IGZyb20tPnNrZXcueDsKLSAgICAgICAgZG91YmxlIGZyb21ZID0gaXNJ
ZGVudGl0eShmcm9tKSA/IDAgOiBmcm9tLT5za2V3Lnk7Ci0gICAgICAgIGRvdWJsZSB0b1ggPSBp
c0lkZW50aXR5KHRvKSA/IDAgOiB0by0+c2tldy54OwotICAgICAgICBkb3VibGUgdG9ZID0gaXNJ
ZGVudGl0eSh0bykgPyAwIDogdG8tPnNrZXcueTsKLSAgICAgICAgcmVzdWx0LnNrZXdYKGJsZW5k
RG91Ymxlcyhmcm9tWCwgdG9YLCBwcm9ncmVzcykpOwotICAgICAgICByZXN1bHQuc2tld1koYmxl
bmREb3VibGVzKGZyb21ZLCB0b1ksIHByb2dyZXNzKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uUGVy
c3BlY3RpdmU6IHsKLSAgICAgICAgZG91YmxlIGZyb21QZXJzcGVjdGl2ZURlcHRoID0gaXNJZGVu
dGl0eShmcm9tKSA/IG51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpIDogZnJvbS0+cGVyc3Bl
Y3RpdmVEZXB0aDsKLSAgICAgICAgZG91YmxlIHRvUGVyc3BlY3RpdmVEZXB0aCA9IGlzSWRlbnRp
dHkodG8pID8gbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkgOiB0by0+cGVyc3BlY3RpdmVE
ZXB0aDsKLSAgICAgICAgcmVzdWx0LmFwcGx5UGVyc3BlY3RpdmUoYmxlbmREb3VibGVzKGZyb21Q
ZXJzcGVjdGl2ZURlcHRoLCB0b1BlcnNwZWN0aXZlRGVwdGgsIHByb2dyZXNzKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNm
b3JtT3BlcmF0aW9uTWF0cml4OiB7Ci0gICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRv
TWF0cml4OwotICAgICAgICBpZiAoIWlzSWRlbnRpdHkodG8pKQotICAgICAgICAgICAgdG9NYXRy
aXggPSB0by0+bWF0cml4OwotICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9tTWF0
cml4OwotICAgICAgICBpZiAoIWlzSWRlbnRpdHkoZnJvbSkpCi0gICAgICAgICAgICBmcm9tTWF0
cml4ID0gZnJvbS0+bWF0cml4OwotICAgICAgICByZXN1bHQgPSB0b01hdHJpeDsKLSAgICAgICAg
aWYgKCFyZXN1bHQuYmxlbmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3MpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBXZWJUcmFuc2Zvcm1P
cGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvbklkZW50aXR5OgotICAgICAgICAvLyBEbyBu
b3RoaW5nLgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YmxlbmQoY29u
c3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgZG91YmxlIHByb2dyZXNzKSBjb25zdAot
ewotICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRvUmV0dXJuOwotICAgIGJsZW5kSW50ZXJu
YWwoZnJvbSwgcHJvZ3Jlc3MsIHRvUmV0dXJuKTsKLSAgICByZXR1cm4gdG9SZXR1cm47Ci19Ci0K
LWJvb2wgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6bWF0Y2hlc1R5cGVzKGNvbnN0IFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMmIG90aGVyKSBjb25zdAotewotICAgIGlmIChpc0lkZW50aXR5KCkgfHwg
b3RoZXIuaXNJZGVudGl0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChtX3By
aXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgpICE9IG90aGVyLm1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5z
aXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9wcml2YXRlLT5vcGVyYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3By
aXZhdGUtPm9wZXJhdGlvbnNbaV0udHlwZSAhPSBvdGhlci5tX3ByaXZhdGUtPm9wZXJhdGlvbnNb
aV0udHlwZQotICAgICAgICAgICAgJiYgIW1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS5pc0lkZW50
aXR5KCkKLSAgICAgICAgICAgICYmICFvdGhlci5tX3ByaXZhdGUtPm9wZXJhdGlvbnNbaV0uaXNJ
ZGVudGl0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmNhbkJsZW5kV2l0aChj
b25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdGhlcikgY29uc3QKLXsKLSAgICBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBkdW1teTsKLSAgICByZXR1cm4gYmxlbmRJbnRlcm5hbChvdGhlciwg
MC41LCBkdW1teSk7Ci19Ci0KLXZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kVHJh
bnNsYXRlKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopCi17Ci0gICAgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9uIHRvQWRkOwotICAgIHRvQWRkLm1hdHJpeC50cmFuc2xhdGUzZCh4LCB5LCB6KTsK
LSAgICB0b0FkZC50eXBlID0gV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVy
YXRpb25UcmFuc2xhdGU7Ci0gICAgdG9BZGQudHJhbnNsYXRlLnggPSB4OwotICAgIHRvQWRkLnRy
YW5zbGF0ZS55ID0geTsKLSAgICB0b0FkZC50cmFuc2xhdGUueiA9IHo7Ci0gICAgbV9wcml2YXRl
LT5vcGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7Ci19Ci0KLXZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uczo6YXBwZW5kUm90YXRlKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHosIGRvdWJsZSBk
ZWdyZWVzKQotewotICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsKLSAgICB0b0FkZC5t
YXRyaXgucm90YXRlM2QoeCwgeSwgeiwgZGVncmVlcyk7Ci0gICAgdG9BZGQudHlwZSA9IFdlYlRy
YW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uUm90YXRlOwotICAgIHRvQWRk
LnJvdGF0ZS5heGlzLnggPSB4OwotICAgIHRvQWRkLnJvdGF0ZS5heGlzLnkgPSB5OwotICAgIHRv
QWRkLnJvdGF0ZS5heGlzLnogPSB6OwotICAgIHRvQWRkLnJvdGF0ZS5hbmdsZSA9IGRlZ3JlZXM7
Ci0gICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7Ci19Ci0KLXZvaWQgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kU2NhbGUoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3Vi
bGUgeikKLXsKLSAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gdG9BZGQ7Ci0gICAgdG9BZGQubWF0
cml4LnNjYWxlM2QoeCwgeSwgeik7Ci0gICAgdG9BZGQudHlwZSA9IFdlYlRyYW5zZm9ybU9wZXJh
dGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uU2NhbGU7Ci0gICAgdG9BZGQuc2NhbGUueCA9IHg7
Ci0gICAgdG9BZGQuc2NhbGUueSA9IHk7Ci0gICAgdG9BZGQuc2NhbGUueiA9IHo7Ci0gICAgbV9w
cml2YXRlLT5vcGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7Ci19Ci0KLXZvaWQgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9uczo6YXBwZW5kU2tldyhkb3VibGUgeCwgZG91YmxlIHkpCi17Ci0gICAgV2ViVHJh
bnNmb3JtT3BlcmF0aW9uIHRvQWRkOwotICAgIHRvQWRkLm1hdHJpeC5za2V3WCh4KTsKLSAgICB0
b0FkZC5tYXRyaXguc2tld1koeSk7Ci0gICAgdG9BZGQudHlwZSA9IFdlYlRyYW5zZm9ybU9wZXJh
dGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uU2tldzsKLSAgICB0b0FkZC5za2V3LnggPSB4Owot
ICAgIHRvQWRkLnNrZXcueSA9IHk7Ci0gICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVuZCh0
b0FkZCk7Ci19Ci0KLXZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kUGVyc3BlY3Rp
dmUoZG91YmxlIGRlcHRoKQotewotICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsKLSAg
ICB0b0FkZC5tYXRyaXguYXBwbHlQZXJzcGVjdGl2ZShkZXB0aCk7Ci0gICAgdG9BZGQudHlwZSA9
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uUGVyc3BlY3RpdmU7
Ci0gICAgdG9BZGQucGVyc3BlY3RpdmVEZXB0aCA9IGRlcHRoOwotICAgIG1fcHJpdmF0ZS0+b3Bl
cmF0aW9ucy5hcHBlbmQodG9BZGQpOwotfQotCi12b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6
OmFwcGVuZE1hdHJpeChjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQotewot
ICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsKLSAgICB0b0FkZC5tYXRyaXggPSBtYXRy
aXg7Ci0gICAgdG9BZGQudHlwZSA9IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3Jt
T3BlcmF0aW9uTWF0cml4OwotICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5hcHBlbmQodG9BZGQp
OwotfQotCi12b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZElkZW50aXR5KCkKLXsK
LSAgICBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuYXBwZW5kKFdlYlRyYW5zZm9ybU9wZXJhdGlvbigp
KTsKLX0KLQotYm9vbCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjppc0lkZW50aXR5KCkgY29uc3QK
LXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5zaXpl
KCk7ICsraSkgewotICAgICAgICBpZiAoIW1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS5pc0lkZW50
aXR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OnJlc2V0KCkKLXsKLSAgICBtX3By
aXZhdGUucmVzZXQoMCk7Ci19Ci0KLXZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6aW5pdGlh
bGl6ZSgpCi17Ci0gICAgbV9wcml2YXRlLnJlc2V0KG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
UHJpdmF0ZSk7Ci19Ci0KLXZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShj
b25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdGhlcikKLXsKLSAgICBpZiAobV9wcml2YXRl
LmdldCgpICE9IG90aGVyLm1fcHJpdmF0ZS5nZXQoKSkKLSAgICAgICAgbV9wcml2YXRlLnJlc2V0
KG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zUHJpdmF0ZSgqb3RoZXIubV9wcml2YXRlLmdldCgp
KSk7Ci0gICAgZWxzZQotICAgICAgICBpbml0aWFsaXplKCk7Ci19Ci0KLWJvb2wgV2ViVHJhbnNm
b3JtT3BlcmF0aW9uczo6YmxlbmRJbnRlcm5hbChjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
JiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXN1bHQp
IGNvbnN0Ci17Ci0gICAgYm9vbCBmcm9tSWRlbnRpdHkgPSBmcm9tLmlzSWRlbnRpdHkoKTsKLSAg
ICBib29sIHRvSWRlbnRpdHkgPSBpc0lkZW50aXR5KCk7Ci0gICAgaWYgKGZyb21JZGVudGl0eSAm
JiB0b0lkZW50aXR5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChtYXRjaGVzVHlw
ZXMoZnJvbSkpIHsKLSAgICAgICAgc2l6ZV90IG51bU9wZXJhdGlvbnMgPSBtYXgoZnJvbUlkZW50
aXR5ID8gMCA6IGZyb20ubV9wcml2YXRlLT5vcGVyYXRpb25zLnNpemUoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9JZGVudGl0eSA/IDAgOiBtX3ByaXZhdGUtPm9wZXJh
dGlvbnMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PcGVyYXRp
b25zOyArK2kpIHsKLSAgICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGJsZW5kZWQ7
Ci0gICAgICAgICAgICBpZiAoIWJsZW5kVHJhbnNmb3JtT3BlcmF0aW9ucyhmcm9tSWRlbnRpdHkg
PyAwIDogJmZyb20ubV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9JZGVudGl0eSA/IDAgOiAmbV9wcml2YXRlLT5vcGVy
YXRpb25zW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJv
Z3Jlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZGVk
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXN1bHQubXVs
dGlwbHkoYmxlbmRlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgcmVzdWx0ID0gYXBwbHkoKTsKLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9t
VHJhbnNmb3JtID0gZnJvbS5hcHBseSgpOwotICAgIHJldHVybiByZXN1bHQuYmxlbmQoZnJvbVRy
YW5zZm9ybSwgcHJvZ3Jlc3MpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRy
YW5zbGF0aW9uVXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwCmluZGV4IDFlZThlYTAuLmJkNWFjMjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Fu
aW1hdGlvblRyYW5zbGF0aW9uVXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmNwcApAQCAtNTcsMTAg
KzU3LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9ucyYgdHJhbnNmb3JtT3BlcmF0aW9ucywgY29uc3QgRmxvYXRTaXpl
JiBib3hTaXplKQorV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyogdG9XZWJUcmFuc2Zvcm1PcGVyYXRp
b25zKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRyYW5zZm9ybU9wZXJhdGlvbnMsIGNvbnN0
IEZsb2F0U2l6ZSYgYm94U2l6ZSkKIHsKICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgZGVlcCBjb3B5
IHRoZSB0cmFuc2Zvcm1PcGVyYXRpb25zIG1heSBjb250YWluIHJlZiBwb2ludGVycyB0byBUcmFu
c2Zvcm1PcGVyYXRpb24gb2JqZWN0cy4KLSAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHdlYlRy
YW5zZm9ybU9wZXJhdGlvbnM7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyogd2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyA9IFBsYXRmb3JtOjpjdXJyZW50KCktPmNvbXBvc2l0b3JTdXBwb3J0KCkt
PmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoKTsKICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8
IHRyYW5zZm9ybU9wZXJhdGlvbnMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSB0cmFuc2Zvcm1PcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKVtqXS0+Z2V0T3BlcmF0aW9uVHlwZSgpOwogICAgICAgICBzd2l0Y2ggKG9w
ZXJhdGlvblR5cGUpIHsKQEAgLTcwLDcgKzcwLDcgQEAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB0
b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdHJhbnMK
ICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOgogICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6IHsKICAgICAgICAgICAgIFNjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTY2FsZVRyYW5zZm9ybU9wZXJhdGlv
bio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAg
ICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kU2NhbGUodHJhbnNmb3JtLT54KCksIHRy
YW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnooKSk7CisgICAgICAgICAgICB3ZWJUcmFuc2Zvcm1P
cGVyYXRpb25zLT5hcHBlbmRTY2FsZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCksIHRy
YW5zZm9ybS0+eigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWDoKQEAgLTc5LDcgKzc5LDcgQEAgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyYgdHJhbnMKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRS
QU5TTEFURV8zRDoKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURTog
ewogICAgICAgICAgICAgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBz
dGF0aWNfY2FzdDxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRp
b25zLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVy
YXRpb25zLmFwcGVuZFRyYW5zbGF0ZShmbG9hdFZhbHVlRm9yTGVuZ3RoKHRyYW5zZm9ybS0+eCgp
LCBib3hTaXplLndpZHRoKCkpLCBmbG9hdFZhbHVlRm9yTGVuZ3RoKHRyYW5zZm9ybS0+eSgpLCBi
b3hTaXplLmhlaWdodCgpKSwgZmxvYXRWYWx1ZUZvckxlbmd0aCh0cmFuc2Zvcm0tPnooKSwgMSkp
OworICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy0+YXBwZW5kVHJhbnNsYXRlKGZs
b2F0VmFsdWVGb3JMZW5ndGgodHJhbnNmb3JtLT54KCksIGJveFNpemUud2lkdGgoKSksIGZsb2F0
VmFsdWVGb3JMZW5ndGgodHJhbnNmb3JtLT55KCksIGJveFNpemUuaGVpZ2h0KCkpLCBmbG9hdFZh
bHVlRm9yTGVuZ3RoKHRyYW5zZm9ybS0+eigpLCAxKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g6CkBAIC04
NywzNSArODcsMzUgQEAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB0b1dlYlRyYW5zZm9ybU9wZXJh
dGlvbnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdHJhbnMKICAgICAgICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246OlJPVEFURV8zRDoKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlJPVEFURTogewogICAgICAgICAgICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFu
c2Zvcm0gPSBzdGF0aWNfY2FzdDxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1P
cGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAgICB3ZWJUcmFuc2Zv
cm1PcGVyYXRpb25zLmFwcGVuZFJvdGF0ZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCks
IHRyYW5zZm9ybS0+eigpLCB0cmFuc2Zvcm0tPmFuZ2xlKCkpOworICAgICAgICAgICAgd2ViVHJh
bnNmb3JtT3BlcmF0aW9ucy0+YXBwZW5kUm90YXRlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0t
PnkoKSwgdHJhbnNmb3JtLT56KCksIHRyYW5zZm9ybS0+YW5nbGUoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19Y
OgogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19ZOgogICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFVzogewogICAgICAgICAgICAgU2tld1RyYW5zZm9ybU9w
ZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U2tld1RyYW5zZm9ybU9wZXJhdGlvbio+
KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAg
IHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kU2tldyh0cmFuc2Zvcm0tPmFuZ2xlWCgpLCB0
cmFuc2Zvcm0tPmFuZ2xlWSgpKTsKKyAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMt
PmFwcGVuZFNrZXcodHJhbnNmb3JtLT5hbmdsZVgoKSwgdHJhbnNmb3JtLT5hbmdsZVkoKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6TUFUUklYOiB7CiAgICAgICAgICAgICBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIHRy
YW5zZm9ybSA9IHN0YXRpY19jYXN0PE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9y
bU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKICAgICAgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG0gPSB0cmFuc2Zvcm0tPm1hdHJpeCgpOwotICAgICAgICAgICAgd2ViVHJh
bnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRNYXRyaXgoV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgobSkp
OworICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy0+YXBwZW5kTWF0cml4KFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4KG0pKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVhfM0Q6IHsKICAgICAgICAgICAg
IE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxNYXRy
aXgzRFRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygp
W2pdLmdldCgpKTsKICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG0gPSB0cmFuc2Zv
cm0tPm1hdHJpeCgpOwotICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRN
YXRyaXgoV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgobSkpOworICAgICAgICAgICAgd2ViVHJhbnNm
b3JtT3BlcmF0aW9ucy0+YXBwZW5kTWF0cml4KFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KG0pKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpQRVJTUEVDVElWRTogewogICAgICAgICAgICAgUGVyc3BlY3RpdmVUcmFuc2Zvcm1P
cGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFBlcnNwZWN0aXZlVHJhbnNmb3JtT3Bl
cmF0aW9uKj4odHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClbal0uZ2V0KCkpOwotICAg
ICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRQZXJzcGVjdGl2ZShmbG9hdFZh
bHVlRm9yTGVuZ3RoKHRyYW5zZm9ybS0+cGVyc3BlY3RpdmUoKSwgMCkpOworICAgICAgICAgICAg
d2ViVHJhbnNmb3JtT3BlcmF0aW9ucy0+YXBwZW5kUGVyc3BlY3RpdmUoZmxvYXRWYWx1ZUZvckxl
bmd0aCh0cmFuc2Zvcm0tPnBlcnNwZWN0aXZlKCksIDApKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpJREVOVElUWToKLSAg
ICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kSWRlbnRpdHkoKTsKKyAgICAg
ICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMtPmFwcGVuZElkZW50aXR5KCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok5PTkU6CiAgICAg
ICAgICAgICAvLyBEbyBub3RoaW5nLgpAQCAtMTUzLDEzICsxNTMsMTMgQEAgdGVtcGxhdGUgPD4K
IGJvb2wgYXBwZW5kS2V5ZnJhbWVXaXRoU3RhbmRhcmRUaW1pbmdGdW5jdGlvbjxUcmFuc2Zvcm1B
bmltYXRpb25WYWx1ZSwgV2ViVHJhbnNmb3JtS2V5ZnJhbWUsIFdlYlRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlPihXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUsIGRvdWJsZSBrZXlUaW1l
LCBjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogdmFsdWUsIGNvbnN0IFRyYW5zZm9ybUFu
aW1hdGlvblZhbHVlKiBsYXN0VmFsdWUsIFdlYktpdDo6V2ViQW5pbWF0aW9uQ3VydmU6OlRpbWlu
Z0Z1bmN0aW9uVHlwZSB0aW1pbmdGdW5jdGlvblR5cGUsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6
ZSkKIHsKICAgICBib29sIGNhbkJsZW5kID0gIWxhc3RWYWx1ZTsKLSAgICBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zIG9wZXJhdGlvbnMgPSB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKnZhbHVlLT52
YWx1ZSgpLCBib3hTaXplKTsKKyAgICBPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gb3Bl
cmF0aW9ucyA9IGFkb3B0UHRyKHRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygqdmFsdWUtPnZhbHVl
KCksIGJveFNpemUpKTsKICAgICBpZiAoIWNhbkJsZW5kKSB7Ci0gICAgICAgIFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgbGFzdE9wZXJhdGlvbnMgPSB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKmxh
c3RWYWx1ZS0+dmFsdWUoKSwgYm94U2l6ZSk7Ci0gICAgICAgIGNhbkJsZW5kID0gbGFzdE9wZXJh
dGlvbnMuY2FuQmxlbmRXaXRoKG9wZXJhdGlvbnMpOworICAgICAgICBPd25QdHI8V2ViVHJhbnNm
b3JtT3BlcmF0aW9ucz4gbGFzdE9wZXJhdGlvbnMgPSBhZG9wdFB0cih0b1dlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMoKmxhc3RWYWx1ZS0+dmFsdWUoKSwgYm94U2l6ZSkpOworICAgICAgICBjYW5CbGVu
ZCA9IGxhc3RPcGVyYXRpb25zLT5jYW5CbGVuZFdpdGgoKm9wZXJhdGlvbnMpOwogICAgIH0KICAg
ICBpZiAoY2FuQmxlbmQpIHsKLSAgICAgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFt
ZShrZXlUaW1lLCBvcGVyYXRpb25zKSwgdGltaW5nRnVuY3Rpb25UeXBlKTsKKyAgICAgICAgY3Vy
dmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZShrZXlUaW1lLCAqb3BlcmF0aW9ucyksIHRpbWlu
Z0Z1bmN0aW9uVHlwZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xNjksMTMgKzE2OSwxMyBAQCB0ZW1wbGF0ZSA8PgogYm9vbCBhcHBlbmRLZXlm
cmFtZVdpdGhDdXN0b21CZXppZXJUaW1pbmdGdW5jdGlvbjxUcmFuc2Zvcm1BbmltYXRpb25WYWx1
ZSwgV2ViVHJhbnNmb3JtS2V5ZnJhbWUsIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPihXZWJU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBjb25zdCBUcmFu
c2Zvcm1BbmltYXRpb25WYWx1ZSogdmFsdWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVl
KiBsYXN0VmFsdWUsIGRvdWJsZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5Miwg
Y29uc3QgRmxvYXRTaXplJiBib3hTaXplKQogewogICAgIGJvb2wgY2FuQmxlbmQgPSAhbGFzdFZh
bHVlOwotICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9ucyA9IHRvV2ViVHJhbnNm
b3JtT3BlcmF0aW9ucygqdmFsdWUtPnZhbHVlKCksIGJveFNpemUpOworICAgIE93blB0cjxXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zPiBvcGVyYXRpb25zID0gYWRvcHRQdHIodG9XZWJUcmFuc2Zvcm1P
cGVyYXRpb25zKCp2YWx1ZS0+dmFsdWUoKSwgYm94U2l6ZSkpOwogICAgIGlmICghY2FuQmxlbmQp
IHsKLSAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBsYXN0T3BlcmF0aW9ucyA9IHRvV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucygqbGFzdFZhbHVlLT52YWx1ZSgpLCBib3hTaXplKTsKLSAgICAg
ICAgY2FuQmxlbmQgPSBsYXN0T3BlcmF0aW9ucy5jYW5CbGVuZFdpdGgob3BlcmF0aW9ucyk7Cisg
ICAgICAgIE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiBsYXN0T3BlcmF0aW9ucyA9IGFk
b3B0UHRyKHRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygqbGFzdFZhbHVlLT52YWx1ZSgpLCBib3hT
aXplKSk7CisgICAgICAgIGNhbkJsZW5kID0gbGFzdE9wZXJhdGlvbnMtPmNhbkJsZW5kV2l0aCgq
b3BlcmF0aW9ucyk7CiAgICAgfQogICAgIGlmIChjYW5CbGVuZCkgewotICAgICAgICBjdXJ2ZS0+
YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKGtleVRpbWUsIG9wZXJhdGlvbnMpLCB4MSwgeTEsIHgy
LCB5Mik7CisgICAgICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoa2V5VGltZSwg
Km9wZXJhdGlvbnMpLCB4MSwgeTEsIHgyLCB5Mik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICByZXR1cm4gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182575</attachid>
            <date>2013-01-14 07:56:39 -0800</date>
            <delta_ts>2013-01-16 12:40:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105553-20130114105340.patch</filename>
            <type>text/plain</type>
            <size>33590</size>
            <attacher name="Ali Juma">ajuma</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCAxNGFkNjA0MDkzOGFh
NjkxZjAzZDQ5ZmY0ZjZjMWQxZWUyMGUxMGJmLi5jNjI4NDY3MDZkYjA4MmM0MzNjNWFkZDVlNTQ5
OGFkNzU5N2JhNjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMy0wMS0xNCAg
QWxpIEp1bWEgIDxhanVtYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDb252
ZXJ0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgaW50byBwdXJlIHZpcnR1YWwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTU1MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dl
YkNvbXBvc2l0b3JTdXBwb3J0Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb21wb3NpdG9yU3VwcG9ydDo6Y3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyk6CisgICAg
ICAgIChXZWJDb21wb3NpdG9yU3VwcG9ydCk6CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dl
YlRyYW5zZm9ybUtleWZyYW1lLmg6CisgICAgICAgIChXZWJUcmFuc2Zvcm1LZXlmcmFtZSk6Cisg
ICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6fldlYlRyYW5zZm9ybU9wZXJhdGlv
bnMpOgorICAgICAgICAoV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyk6CisKIDIwMTMtMDEtMDggIENo
cmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdW51c2Vk
L2RlcHJlY2F0ZWQgcmVuZGVyKCkgbWV0aG9kIGluIGNocm9taXVtIFdlYktpdCBBUEkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAyOTU1NDUzZWM2MTkzMjNiMmY5NTIxM2I1MjlhNzEyMWVmMzMwNjJkLi5lYzkwNTcx
NWQ2YzcyY2EzNDM4ZTYxMTNlOTE2M2ViMWI2NWE2YjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjggQEAKKzIwMTMtMDEtMTQgIEFsaSBKdW1hICA8YWp1bWFAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFtjaHJvbWl1bV0gQ29udmVydCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIGludG8gcHVyZSB2
aXJ0dWFsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDU1NTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHJlbW92ZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMg
YW5kIHVwZGF0ZXMKKyAgICAgICAgdXNlcnMgdG8gY29uc3RydWN0IGluc3RhbmNlcyB1c2luZyBh
IGZhY3RvcnkgZnVuY3Rpb24uIFRoaXMgYWxzbyBhZGRzCisgICAgICAgIHRoZSBpbXBsZW1lbnRh
dGlvbiBvZiBXZWJUcmFuc2Zvcm1LZXlGcmFtZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5v
IGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtS2V5ZnJhbWUuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9y
bUtleWZyYW1lLmguCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFu
c2Zvcm1LZXlmcmFtZTo6V2ViVHJhbnNmb3JtS2V5ZnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1LZXlmcmFtZTo6fldlYlRyYW5zZm9ybUtleWZyYW1lKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVHJhbnNmb3JtS2V5ZnJhbWU6OnRpbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJU
cmFuc2Zvcm1LZXlmcmFtZTo6dmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1
cHBvcnQvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisKIDIwMTMtMDEtMDkgIERpbWl0cmkg
R2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCBy
b2xsaW5nIG91dCByMTM5MTQzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVt
L3B1YmxpYy9XZWJDb21wb3NpdG9yU3VwcG9ydC5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVt
L3B1YmxpYy9XZWJDb21wb3NpdG9yU3VwcG9ydC5oCmluZGV4IGEzYjljNDA5NmRiM2ZjNDZhYjBh
NjMwMWRlOGI3YjU5MzY4ZmQzMmIuLjVjN2Y3MzMwYTdlYWZhMDE3OTViMGI5NGQwOWE3ZDI2NmZk
NGViY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQ29t
cG9zaXRvclN1cHBvcnQuaAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dl
YkNvbXBvc2l0b3JTdXBwb3J0LmgKQEAgLTUwLDYgKzUwLDcgQEAgY2xhc3MgV2ViU2Nyb2xsYmFy
VGhlbWVHZW9tZXRyeTsKIGNsYXNzIFdlYlNvbGlkQ29sb3JMYXllcjsKIGNsYXNzIFdlYlRocmVh
ZDsKIGNsYXNzIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOworY2xhc3MgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9uczsKIGNsYXNzIFdlYlZpZGVvRnJhbWVQcm92aWRlcjsKIGNsYXNzIFdlYlZpZGVv
TGF5ZXI7CiAKQEAgLTEwNCw2ICsxMDUsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFdlYlRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlKiBjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpIHsg
cmV0dXJuIDA7IH0KIAorICAgIHZpcnR1YWwgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyogY3JlYXRl
VHJhbnNmb3JtT3BlcmF0aW9ucygpIHsgcmV0dXJuIDA7IH0KKwogcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgfldlYkNvbXBvc2l0b3JTdXBwb3J0KCkgeyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oIGIvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oCmluZGV4IGM5
OWVmNTU4N2JhM2QzZjUyM2IwYmZmOGY3M2ExOTMzZjBjYWJhZTQuLmE1MDVkOWExZTM1NzEyYWYx
NTI3ZGNhMGEzMTEwMzIzYjk3MzQ5YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJv
bWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtS2V5ZnJhbWUuaAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Y2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUtleWZyYW1lLmgKQEAgLTI1LDE5ICsyNSwyNSBA
QAogI2lmbmRlZiBXZWJUcmFuc2Zvcm1LZXlmcmFtZV9oCiAjZGVmaW5lIFdlYlRyYW5zZm9ybUtl
eWZyYW1lX2gKIAorI2luY2x1ZGUgIldlYlByaXZhdGVPd25QdHIuaCIKICNpbmNsdWRlICJXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdHJ1Y3QgV2Vi
VHJhbnNmb3JtS2V5ZnJhbWUgewotICAgIFdlYlRyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0aW1l
LCBjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSkKLSAgICAgICAgOiB0aW1lKHRp
bWUpCi0gICAgICAgICwgdmFsdWUodmFsdWUpCi0gICAgewotICAgIH0KK2NsYXNzIFdlYlRyYW5z
Zm9ybUtleWZyYW1lIHsKK3B1YmxpYzoKKyAgICAvLyBUYWtlcyBvd25lcnNoaXAgb2YgdGhlIFdl
YlRyYW5mb3JtT3BlcmF0aW9ucyBvYmplY3QuCisgICAgV0VCS0lUX0VYUE9SVCBXZWJUcmFuc2Zv
cm1LZXlmcmFtZShkb3VibGUgdGltZSwgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyogdmFsdWUpOwog
Ci0gICAgZG91YmxlIHRpbWU7Ci0gICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB2YWx1ZTsKKyAg
ICBXRUJLSVRfRVhQT1JUIH5XZWJUcmFuc2Zvcm1LZXlmcmFtZSgpOworCisgICAgV0VCS0lUX0VY
UE9SVCBkb3VibGUgdGltZSgpIGNvbnN0OworCisgICAgV0VCS0lUX0VYUE9SVCBjb25zdCBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGRvdWJs
ZSBtX3RpbWU7CisgICAgV2ViUHJpdmF0ZU93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiBt
X3ZhbHVlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaCBiL1NvdXJj
ZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oCmluZGV4
IDllMzBmNTgyODc1Nzk4NzJjMmE5YTZkNWNhMDExMTEyMDVmM2JhMjYuLmIxZWNjNGZhMjMxYzlk
MmJhOThkZGQ1NDZiMjVlZTkzYmZlNjFjNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9j
aHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oCkBAIC0yNyw2OSAr
MjcsMjggQEAKIAogI2luY2x1ZGUgIldlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKLW5hbWVz
cGFjZSBXZWJLaXQgeworI2RlZmluZSBXRUJfVFJBTlNGT1JNX09QRVJBVElPTlNfSVNfVklSVFVB
TCAxCiAKLWNsYXNzIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnNQcml2YXRlOworbmFtZXNwYWNlIFdl
YktpdCB7CiAKLS8vIFRyYW5zZm9ybSBvcGVyYXRpb25zIGFyZSBhIGRlY29tcG9zZWQgdHJhbnNm
b3JtYXRpb24gbWF0cml4LiBJdCBjYW4gYmUKLS8vIGFwcGxpZWQgdG8gb2J0YWluIGEgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggYXQgYW55IHRpbWUsIGFuZCBjYW4gYmUgYmxlbmRlZAotLy8gaW50
ZWxsaWdlbnRseSB3aXRoIG90aGVyIHRyYW5zZm9ybSBvcGVyYXRpb25zLCBzbyBsb25nIGFzIHRo
ZXkgcmVwcmVzZW50IHRoZQotLy8gc2FtZSBkZWNvbXBvc2l0aW9uLiBGb3IgZXhhbXBsZSwgaWYg
d2UgaGF2ZSBhIHRyYW5zZm9ybSB0aGF0IGlzIG1hZGUgdXAgb2YKLS8vIGEgcm90YXRpb24gZm9s
bG93ZWQgYnkgc2tldywgaXQgY2FuIGJlIGJsZW5kZWQgaW50ZWxsaWdlbnRseSB3aXRoIGFub3Ro
ZXIKLS8vIHRyYW5zZm9ybSBtYWRlIHVwIG9mIGEgcm90YXRpb24gZm9sbG93ZWQgYnkgYSBza2V3
LiBCbGVuZGluZyBpcyBwb3NzaWJsZSBpZgotLy8gd2UgaGF2ZSB0d28gZGlzc2ltaWxhciBzZXRz
IG9mIHRyYW5zZm9ybSBvcGVyYXRpb25zLCBidXQgdGhlIGVmZmVjdCBtYXkgbm90Ci0vLyBiZSB3
aGF0IHdhcyBpbnRlbmRlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgY29tbWVudHMg
Zm9yIHRoZSBibGVuZAotLy8gZnVuY3Rpb24gYmVsb3cuCiBjbGFzcyBXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zIHsKIHB1YmxpYzoKLSAgICB+V2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpIHsgcmVzZXQo
KTsgfQotCi0gICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpIHsgaW5pdGlhbGl6ZSgpOyB9Ci0g
ICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyhjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBv
dGhlcikgeyBpbml0aWFsaXplKG90aGVyKTsgfQotICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMm
IG9wZXJhdG9yPShjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdGhlcikKLSAgICB7Ci0g
ICAgICAgIGluaXRpYWxpemUob3RoZXIpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQot
Ci0gICAgLy8gUmV0dXJucyBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCByZXByZXNlbnRpbmcgdGhl
c2UgdHJhbnNmb3JtIG9wZXJhdGlvbnMuCi0gICAgV0VCS0lUX0VYUE9SVCBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBhcHBseSgpIGNvbnN0OwotCi0gICAgLy8gR2l2ZW4gYW5vdGhlciBzZXQgb2Yg
dHJhbnNmb3JtIG9wZXJhdGlvbnMgYW5kIGEgcHJvZ3Jlc3MgaW4gdGhlIHJhbmdlCi0gICAgLy8g
WzAsIDFdLCByZXR1cm5zIGEgdHJhbnNmb3JtYXRpb24gbWF0cml4IHJlcHJlc2VudGluZyB0aGUg
aW50ZXJtZWRpYXRlCi0gICAgLy8gdmFsdWUuIElmIHRoaXMtPm1hdGNoZXNUeXBlcyhmcm9tKSwg
dGhlbiBlYWNoIG9mIHRoZSBvcGVyYXRpb25zIGFyZQotICAgIC8vIGJsZW5kZWQgc2VwYXJhdGVs
eSBhbmQgdGhlbiBjb21iaW5lZC4gT3RoZXJ3aXNlLCB0aGUgdHdvIHNldHMgb2YKLSAgICAvLyB0
cmFuc2Zvcm1zIGFyZSBiYWtlZCB0byBtYXRyaWNlcyAodXNpbmcgYXBwbHkpLCBhbmQgdGhlIG1h
dHJpY2VzIGFyZQotICAgIC8vIHRoZW4gZGVjb21wb3NlZCBhbmQgaW50ZXJwb2xhdGVkLiBGb3Ig
bW9yZSBpbmZvcm1hdGlvbiwgc2VlCi0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9X
RC1jc3MzLTJkLXRyYW5zZm9ybXMtMjAxMTEyMTUvI21hdHJpeC1kZWNvbXBvc2l0aW9uLgotICAg
IFdFQktJVF9FWFBPUlQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggYmxlbmQoY29uc3QgV2ViVHJh
bnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgZG91YmxlIHByb2dyZXNzKSBjb25zdDsKLQotICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGlzIG9wZXJhdGlvbiBhbmQgaXRzIGRlc2NlbmRhbnRzIGhhdmUg
dGhlIHNhbWUgdHlwZXMKLSAgICAvLyBhcyBvdGhlciBhbmQgaXRzIGRlc2NlbmRhbnRzLgotICAg
IFdFQktJVF9FWFBPUlQgYm9vbCBtYXRjaGVzVHlwZXMoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyYgb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgfldlYlRyYW5zZm9ybU9wZXJhdGlvbnMo
KSB7IH0KIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVzZSBvcGVyYXRpb25zIGNhbiBiZSBi
bGVuZGVkLiBJdCB3aWxsIG9ubHkgcmV0dXJuCiAgICAgLy8gZmFsc2UgaWYgd2UgbXVzdCByZXNv
cnQgdG8gbWF0cml4IGludGVycG9sYXRpb24sIGFuZCBtYXRyaXggaW50ZXJwb2xhdGlvbgogICAg
IC8vIGZhaWxzICh0aGlzIGNhbiBoYXBwZW4gaWYgZWl0aGVyIG1hdHJpeCBjYW5ub3QgYmUgZGVj
b21wb3NlZCkuCi0gICAgV0VCS0lUX0VYUE9SVCBib29sIGNhbkJsZW5kV2l0aChjb25zdCBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zJiBvdGhlcikgY29uc3Q7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgYXBwZW5kVHJhbnNsYXRlKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopOwotICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBhcHBlbmRSb3RhdGUoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUg
eiwgZG91YmxlIGRlZ3JlZXMpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhcHBlbmRTY2FsZShk
b3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KTsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXBw
ZW5kU2tldyhkb3VibGUgeCwgZG91YmxlIHkpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhcHBl
bmRQZXJzcGVjdGl2ZShkb3VibGUgZGVwdGgpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhcHBl
bmRNYXRyaXgoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgYXBwZW5kSWRlbnRpdHkoKTsKLQotICAgIFdFQktJVF9FWFBPUlQgYm9vbCBpc0lk
ZW50aXR5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGNhbkJsZW5kV2l0aChjb25zdCBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zJiBvdGhlcikgY29uc3QgPSAwOwogCi1wcml2YXRlOgotICAgIFdF
QktJVF9FWFBPUlQgdm9pZCByZXNldCgpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbml0aWFs
aXplKCk7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGluaXRpYWxpemUoY29uc3QgV2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyYgcHJvdG90eXBlKTsKLSAgICBXRUJLSVRfRVhQT1JUIGJvb2wgYmxlbmRJ
bnRlcm5hbChjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBkb3VibGUgcHJvZ3Jl
c3MsIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXN1bHQpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBhcHBlbmRUcmFuc2xhdGUoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRSb3RhdGUoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUg
eiwgZG91YmxlIGRlZ3JlZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kU2NhbGUoZG91
YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRT
a2V3KGRvdWJsZSB4LCBkb3VibGUgeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRQZXJz
cGVjdGl2ZShkb3VibGUgZGVwdGgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kTWF0cml4
KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBh
cHBlbmRJZGVudGl0eSgpID0gMDsKIAotICAgIFdlYlByaXZhdGVPd25QdHI8V2ViVHJhbnNmb3Jt
T3BlcmF0aW9uc1ByaXZhdGU+IG1fcHJpdmF0ZTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0
eSgpIGNvbnN0ID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CmluZGV4IDIyY2Q3NGU4OGZiNGNjNTUxNWY0NTA2M2RmYjNmZmEyMmE3ZTMxODEuLjQ2MWQ5OTQz
Zjk2YmE3ZTgxZGIwYTc0ZGE5YmRmMDMzOGU5YTZiZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTcx
NjUsNyArNzE2NSw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9X
ZWJTY3JvbGxiYXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBv
cnQvV2ViU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRocmVhZFNhZmVEYXRhLmNwcCcsCi0gICAgICAgICAgICAn
cGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1LZXlmcmFt
ZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXguY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBw
b3J0L1dlYlVSTC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
V2ViVVJMRXJyb3IuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtS2V5ZnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDBlYzIyM2I2MDE4YjYwMDMwNTM1NTM1YmVmMzFlOGIxMmI4NjhiYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJh
bnNmb3JtS2V5ZnJhbWUuY3BwCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtS2V5ZnJhbWUuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlRyYW5zZm9ybUtleWZyYW1lOjpXZWJUcmFuc2Zv
cm1LZXlmcmFtZShkb3VibGUgdGltZSwgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyogdmFsdWUpCisg
ICAgOiBtX3RpbWUodGltZSkKKyAgICAsIG1fdmFsdWUodmFsdWUpCit7Cit9CisKK1dlYlRyYW5z
Zm9ybUtleWZyYW1lOjp+V2ViVHJhbnNmb3JtS2V5ZnJhbWUoKQoreworICAgIG1fdmFsdWUucmVz
ZXQoMCk7Cit9CisKK2RvdWJsZSBXZWJUcmFuc2Zvcm1LZXlmcmFtZTo6dGltZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fdGltZTsKK30KKworY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYg
V2ViVHJhbnNmb3JtS2V5ZnJhbWU6OnZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fdmFs
dWUuZ2V0KCk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9ybU9wZXJhdGlv
bnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFu
c2Zvcm1PcGVyYXRpb25zLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I1MmQ5
YzY2MzVmNTI0NWYzMDg2NTI0NzdjYmFhNmE0Y2UyNWIxYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0L1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
Mzk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1
ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmg+Ci0KLSNpbmNsdWRlIDxhbGdvcml0
aG0+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1u
YW1lc3BhY2UgewotY29uc3QgZG91YmxlIEVQU0lMT04gPSAxZS00OwotfQotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotc3RydWN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB7Ci0gICAgZW51bSBUeXBl
IHsKLSAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVHJhbnNsYXRlLAotICAgICAgICBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25Sb3RhdGUsCi0gICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblNj
YWxlLAotICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25Ta2V3LAotICAgICAgICBXZWJUcmFu
c2Zvcm1PcGVyYXRpb25QZXJzcGVjdGl2ZSwKLSAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
TWF0cml4LAotICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25JZGVudGl0eQotICAgIH07Ci0K
LSAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb24oKQotICAgICAgICA6IHR5cGUoV2ViVHJhbnNmb3Jt
T3BlcmF0aW9uSWRlbnRpdHkpCi0gICAgewotICAgIH0KLQotICAgIFR5cGUgdHlwZTsKLSAgICBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7Ci0KLSAgICB1bmlvbiB7Ci0gICAgICAgIGRv
dWJsZSBwZXJzcGVjdGl2ZURlcHRoOwotCi0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBk
b3VibGUgeCwgeTsKLSAgICAgICAgfSBza2V3OwotCi0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAg
ICAgICAgZG91YmxlIHgsIHksIHo7Ci0gICAgICAgIH0gc2NhbGU7Ci0KLSAgICAgICAgc3RydWN0
IHsKLSAgICAgICAgICAgIGRvdWJsZSB4LCB5LCB6OwotICAgICAgICB9IHRyYW5zbGF0ZTsKLQot
ICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgICAgICBk
b3VibGUgeCwgeSwgejsKLSAgICAgICAgICAgIH0gYXhpczsKLQotICAgICAgICAgICAgZG91Ymxl
IGFuZ2xlOwotICAgICAgICB9IHJvdGF0ZTsKLSAgICB9OwotCi0gICAgYm9vbCBpc0lkZW50aXR5
KCkgY29uc3QgeyByZXR1cm4gbWF0cml4LmlzSWRlbnRpdHkoKTsgfQotfTsKLQotY2xhc3MgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9uc1ByaXZhdGUgewotcHVibGljOgotICAgIFZlY3RvcjxXZWJUcmFu
c2Zvcm1PcGVyYXRpb24+IG9wZXJhdGlvbnM7Ci19OwotCi1XZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBseSgpIGNvbnN0Ci17Ci0gICAgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggdG9SZXR1cm47Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3By
aXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHRvUmV0dXJuLm11bHRpcGx5
KG1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS5tYXRyaXgpOwotICAgIHJldHVybiB0b1JldHVybjsK
LX0KLQotc3RhdGljIGJvb2wgaXNJZGVudGl0eShjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb24q
IG9wZXJhdGlvbikKLXsKLSAgICByZXR1cm4gIW9wZXJhdGlvbiB8fCBvcGVyYXRpb24tPmlzSWRl
bnRpdHkoKTsKLX0KLQotc3RhdGljIGJvb2wgc2hhcmVTYW1lQXhpcyhjb25zdCBXZWJUcmFuc2Zv
cm1PcGVyYXRpb24qIGZyb20sIGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiogdG8sIGRvdWJs
ZSYgYXhpc1gsIGRvdWJsZSYgYXhpc1ksIGRvdWJsZSYgYXhpc1osIGRvdWJsZSYgYW5nbGVGcm9t
KQotewotICAgIGlmIChpc0lkZW50aXR5KGZyb20pICYmIGlzSWRlbnRpdHkodG8pKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaXNJZGVudGl0eShmcm9tKSAmJiAhaXNJZGVudGl0
eSh0bykpIHsKLSAgICAgICAgYXhpc1ggPSB0by0+cm90YXRlLmF4aXMueDsKLSAgICAgICAgYXhp
c1kgPSB0by0+cm90YXRlLmF4aXMueTsKLSAgICAgICAgYXhpc1ogPSB0by0+cm90YXRlLmF4aXMu
ejsKLSAgICAgICAgYW5nbGVGcm9tID0gMDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgaWYgKCFpc0lkZW50aXR5KGZyb20pICYmIGlzSWRlbnRpdHkodG8pKSB7Ci0gICAgICAg
IGF4aXNYID0gZnJvbS0+cm90YXRlLmF4aXMueDsKLSAgICAgICAgYXhpc1kgPSBmcm9tLT5yb3Rh
dGUuYXhpcy55OwotICAgICAgICBheGlzWiA9IGZyb20tPnJvdGF0ZS5heGlzLno7Ci0gICAgICAg
IGFuZ2xlRnJvbSA9IGZyb20tPnJvdGF0ZS5hbmdsZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgZG91YmxlIGxlbmd0aDIgPSBmcm9tLT5yb3RhdGUuYXhpcy54ICogZnJvbS0+
cm90YXRlLmF4aXMueCArIGZyb20tPnJvdGF0ZS5heGlzLnkgKiBmcm9tLT5yb3RhdGUuYXhpcy55
ICsgZnJvbS0+cm90YXRlLmF4aXMueiAqIGZyb20tPnJvdGF0ZS5heGlzLno7Ci0gICAgZG91Ymxl
IG90aGVyTGVuZ3RoMiA9IHRvLT5yb3RhdGUuYXhpcy54ICogdG8tPnJvdGF0ZS5heGlzLnggKyB0
by0+cm90YXRlLmF4aXMueSAqIHRvLT5yb3RhdGUuYXhpcy55ICsgdG8tPnJvdGF0ZS5heGlzLnog
KiB0by0+cm90YXRlLmF4aXMuejsKLQotICAgIGlmIChsZW5ndGgyIDw9IEVQU0lMT04gfHwgb3Ro
ZXJMZW5ndGgyIDw9IEVQU0lMT04pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRvdWJs
ZSBkb3QgPSB0by0+cm90YXRlLmF4aXMueCAqIGZyb20tPnJvdGF0ZS5heGlzLnggKyB0by0+cm90
YXRlLmF4aXMueSAqIGZyb20tPnJvdGF0ZS5heGlzLnkgKyB0by0+cm90YXRlLmF4aXMueiAqIGZy
b20tPnJvdGF0ZS5heGlzLno7Ci0gICAgZG91YmxlIGVycm9yID0gZmFicygxLjAgLSAoZG90ICog
ZG90KSAvIChsZW5ndGgyICogb3RoZXJMZW5ndGgyKSk7Ci0gICAgYm9vbCByZXN1bHQgPSBlcnJv
ciA8IEVQU0lMT047Ci0gICAgaWYgKHJlc3VsdCkgewotICAgICAgICBheGlzWCA9IHRvLT5yb3Rh
dGUuYXhpcy54OwotICAgICAgICBheGlzWSA9IHRvLT5yb3RhdGUuYXhpcy55OwotICAgICAgICBh
eGlzWiA9IHRvLT5yb3RhdGUuYXhpcy56OwotICAgICAgICAvLyBJZiB0aGUgYXhlcyBhcmUgcG9p
bnRpbmcgaW4gb3Bwb3NpdGUgZGlyZWN0aW9ucywgd2UgbmVlZCB0byByZXZlcnNlCi0gICAgICAg
IC8vIHRoZSBhbmdsZS4KLSAgICAgICAgYW5nbGVGcm9tID0gZG90ID4gMCA/IGZyb20tPnJvdGF0
ZS5hbmdsZSA6IC1mcm9tLT5yb3RhdGUuYW5nbGU7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXN0YXRpYyBkb3VibGUgYmxlbmREb3VibGVzKGRvdWJsZSBmcm9tLCBkb3VibGUgdG8s
IGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gZnJvbSAqICgxIC0gcHJvZ3Jlc3MpICsg
dG8gKiBwcm9ncmVzczsKLX0KLQotc3RhdGljIGJvb2wgYmxlbmRUcmFuc2Zvcm1PcGVyYXRpb25z
KGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uKiB0bywgZG91YmxlIHByb2dyZXNzLCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcmVz
dWx0KQotewotICAgIGlmIChpc0lkZW50aXR5KGZyb20pICYmIGlzSWRlbnRpdHkodG8pKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6VHlwZSBpbnRl
cnBvbGF0aW9uVHlwZSA9IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0
aW9uSWRlbnRpdHk7Ci0gICAgaWYgKGlzSWRlbnRpdHkodG8pKQotICAgICAgICBpbnRlcnBvbGF0
aW9uVHlwZSA9IGZyb20tPnR5cGU7Ci0gICAgZWxzZQotICAgICAgICBpbnRlcnBvbGF0aW9uVHlw
ZSA9IHRvLT50eXBlOwotCi0gICAgc3dpdGNoIChpbnRlcnBvbGF0aW9uVHlwZSkgewotICAgIGNh
c2UgV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25UcmFuc2xhdGU6
IHsKLSAgICAgICAgZG91YmxlIGZyb21YID0gaXNJZGVudGl0eShmcm9tKSA/IDAgOiBmcm9tLT50
cmFuc2xhdGUueDsKLSAgICAgICAgZG91YmxlIGZyb21ZID0gaXNJZGVudGl0eShmcm9tKSA/IDAg
OiBmcm9tLT50cmFuc2xhdGUueTsKLSAgICAgICAgZG91YmxlIGZyb21aID0gaXNJZGVudGl0eShm
cm9tKSA/IDAgOiBmcm9tLT50cmFuc2xhdGUuejsKLSAgICAgICAgZG91YmxlIHRvWCA9IGlzSWRl
bnRpdHkodG8pID8gMCA6IHRvLT50cmFuc2xhdGUueDsKLSAgICAgICAgZG91YmxlIHRvWSA9IGlz
SWRlbnRpdHkodG8pID8gMCA6IHRvLT50cmFuc2xhdGUueTsKLSAgICAgICAgZG91YmxlIHRvWiA9
IGlzSWRlbnRpdHkodG8pID8gMCA6IHRvLT50cmFuc2xhdGUuejsKLSAgICAgICAgcmVzdWx0LnRy
YW5zbGF0ZTNkKGJsZW5kRG91Ymxlcyhmcm9tWCwgdG9YLCBwcm9ncmVzcyksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBibGVuZERvdWJsZXMoZnJvbVksIHRvWSwgcHJvZ3Jlc3MpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmREb3VibGVzKGZyb21aLCB0b1osIHByb2dyZXNz
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlv
bjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uUm90YXRlOiB7Ci0gICAgICAgIGRvdWJsZSBheGlzWCA9
IDA7Ci0gICAgICAgIGRvdWJsZSBheGlzWSA9IDA7Ci0gICAgICAgIGRvdWJsZSBheGlzWiA9IDE7
Ci0gICAgICAgIGRvdWJsZSBmcm9tQW5nbGUgPSAwOwotICAgICAgICBkb3VibGUgdG9BbmdsZSA9
IGlzSWRlbnRpdHkodG8pID8gMCA6IHRvLT5yb3RhdGUuYW5nbGU7Ci0gICAgICAgIGlmIChzaGFy
ZVNhbWVBeGlzKGZyb20sIHRvLCBheGlzWCwgYXhpc1ksIGF4aXNaLCBmcm9tQW5nbGUpKQotICAg
ICAgICAgICAgcmVzdWx0LnJvdGF0ZTNkKGF4aXNYLCBheGlzWSwgYXhpc1osIGJsZW5kRG91Ymxl
cyhmcm9tQW5nbGUsIHRvQW5nbGUsIHByb2dyZXNzKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggdG9NYXRyaXg7Ci0gICAgICAgICAgICBpZiAo
IWlzSWRlbnRpdHkodG8pKQotICAgICAgICAgICAgICAgIHRvTWF0cml4ID0gdG8tPm1hdHJpeDsK
LSAgICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGZyb21NYXRyaXg7Ci0gICAgICAg
ICAgICBpZiAoIWlzSWRlbnRpdHkoZnJvbSkpCi0gICAgICAgICAgICAgICAgZnJvbU1hdHJpeCA9
IGZyb20tPm1hdHJpeDsKLSAgICAgICAgICAgIHJlc3VsdCA9IHRvTWF0cml4OwotICAgICAgICAg
ICAgaWYgKCFyZXN1bHQuYmxlbmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3MpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvblNjYWxlOiB7
Ci0gICAgICAgIGRvdWJsZSBmcm9tWCA9IGlzSWRlbnRpdHkoZnJvbSkgPyAxIDogZnJvbS0+c2Nh
bGUueDsKLSAgICAgICAgZG91YmxlIGZyb21ZID0gaXNJZGVudGl0eShmcm9tKSA/IDEgOiBmcm9t
LT5zY2FsZS55OwotICAgICAgICBkb3VibGUgZnJvbVogPSBpc0lkZW50aXR5KGZyb20pID8gMSA6
IGZyb20tPnNjYWxlLno7Ci0gICAgICAgIGRvdWJsZSB0b1ggPSBpc0lkZW50aXR5KHRvKSA/IDEg
OiB0by0+c2NhbGUueDsKLSAgICAgICAgZG91YmxlIHRvWSA9IGlzSWRlbnRpdHkodG8pID8gMSA6
IHRvLT5zY2FsZS55OwotICAgICAgICBkb3VibGUgdG9aID0gaXNJZGVudGl0eSh0bykgPyAxIDog
dG8tPnNjYWxlLno7Ci0gICAgICAgIHJlc3VsdC5zY2FsZTNkKGJsZW5kRG91Ymxlcyhmcm9tWCwg
dG9YLCBwcm9ncmVzcyksCi0gICAgICAgICAgICAgICAgICAgICAgIGJsZW5kRG91Ymxlcyhmcm9t
WSwgdG9ZLCBwcm9ncmVzcyksCi0gICAgICAgICAgICAgICAgICAgICAgIGJsZW5kRG91Ymxlcyhm
cm9tWiwgdG9aLCBwcm9ncmVzcykpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvblNrZXc6IHsKLSAgICAg
ICAgZG91YmxlIGZyb21YID0gaXNJZGVudGl0eShmcm9tKSA/IDAgOiBmcm9tLT5za2V3Lng7Ci0g
ICAgICAgIGRvdWJsZSBmcm9tWSA9IGlzSWRlbnRpdHkoZnJvbSkgPyAwIDogZnJvbS0+c2tldy55
OwotICAgICAgICBkb3VibGUgdG9YID0gaXNJZGVudGl0eSh0bykgPyAwIDogdG8tPnNrZXcueDsK
LSAgICAgICAgZG91YmxlIHRvWSA9IGlzSWRlbnRpdHkodG8pID8gMCA6IHRvLT5za2V3Lnk7Ci0g
ICAgICAgIHJlc3VsdC5za2V3WChibGVuZERvdWJsZXMoZnJvbVgsIHRvWCwgcHJvZ3Jlc3MpKTsK
LSAgICAgICAgcmVzdWx0LnNrZXdZKGJsZW5kRG91Ymxlcyhmcm9tWSwgdG9ZLCBwcm9ncmVzcykp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246
OldlYlRyYW5zZm9ybU9wZXJhdGlvblBlcnNwZWN0aXZlOiB7Ci0gICAgICAgIGRvdWJsZSBmcm9t
UGVyc3BlY3RpdmVEZXB0aCA9IGlzSWRlbnRpdHkoZnJvbSkgPyBudW1lcmljX2xpbWl0czxkb3Vi
bGU+OjptYXgoKSA6IGZyb20tPnBlcnNwZWN0aXZlRGVwdGg7Ci0gICAgICAgIGRvdWJsZSB0b1Bl
cnNwZWN0aXZlRGVwdGggPSBpc0lkZW50aXR5KHRvKSA/IG51bWVyaWNfbGltaXRzPGRvdWJsZT46
Om1heCgpIDogdG8tPnBlcnNwZWN0aXZlRGVwdGg7Ci0gICAgICAgIHJlc3VsdC5hcHBseVBlcnNw
ZWN0aXZlKGJsZW5kRG91Ymxlcyhmcm9tUGVyc3BlY3RpdmVEZXB0aCwgdG9QZXJzcGVjdGl2ZURl
cHRoLCBwcm9ncmVzcykpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBXZWJUcmFu
c2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvbk1hdHJpeDogewotICAgICAgICBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b01hdHJpeDsKLSAgICAgICAgaWYgKCFpc0lkZW50aXR5
KHRvKSkKLSAgICAgICAgICAgIHRvTWF0cml4ID0gdG8tPm1hdHJpeDsKLSAgICAgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggZnJvbU1hdHJpeDsKLSAgICAgICAgaWYgKCFpc0lkZW50aXR5KGZy
b20pKQotICAgICAgICAgICAgZnJvbU1hdHJpeCA9IGZyb20tPm1hdHJpeDsKLSAgICAgICAgcmVz
dWx0ID0gdG9NYXRyaXg7Ci0gICAgICAgIGlmICghcmVzdWx0LmJsZW5kKGZyb21NYXRyaXgsIHBy
b2dyZXNzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25J
ZGVudGl0eToKLSAgICAgICAgLy8gRG8gbm90aGluZy4KLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnM6OmJsZW5kKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20s
IGRvdWJsZSBwcm9ncmVzcykgY29uc3QKLXsKLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
b1JldHVybjsKLSAgICBibGVuZEludGVybmFsKGZyb20sIHByb2dyZXNzLCB0b1JldHVybik7Ci0g
ICAgcmV0dXJuIHRvUmV0dXJuOwotfQotCi1ib29sIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6Om1h
dGNoZXNUeXBlcyhjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdGhlcikgY29uc3QKLXsK
LSAgICBpZiAoaXNJZGVudGl0eSgpIHx8IG90aGVyLmlzSWRlbnRpdHkoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBpZiAobV9wcml2YXRlLT5vcGVyYXRpb25zLnNpemUoKSAhPSBvdGhl
ci5tX3ByaXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5zaXplKCk7
ICsraSkgewotICAgICAgICBpZiAobV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLnR5cGUgIT0gb3Ro
ZXIubV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLnR5cGUKLSAgICAgICAgICAgICYmICFtX3ByaXZh
dGUtPm9wZXJhdGlvbnNbaV0uaXNJZGVudGl0eSgpCi0gICAgICAgICAgICAmJiAhb3RoZXIubV9w
cml2YXRlLT5vcGVyYXRpb25zW2ldLmlzSWRlbnRpdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zOjpjYW5CbGVuZFdpdGgoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3Ro
ZXIpIGNvbnN0Ci17Ci0gICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZHVtbXk7Ci0gICAgcmV0
dXJuIGJsZW5kSW50ZXJuYWwob3RoZXIsIDAuNSwgZHVtbXkpOwotfQotCi12b2lkIFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnM6OmFwcGVuZFRyYW5zbGF0ZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJs
ZSB6KQotewotICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsKLSAgICB0b0FkZC5tYXRy
aXgudHJhbnNsYXRlM2QoeCwgeSwgeik7Ci0gICAgdG9BZGQudHlwZSA9IFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uVHJhbnNsYXRlOwotICAgIHRvQWRkLnRyYW5z
bGF0ZS54ID0geDsKLSAgICB0b0FkZC50cmFuc2xhdGUueSA9IHk7Ci0gICAgdG9BZGQudHJhbnNs
YXRlLnogPSB6OwotICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5hcHBlbmQodG9BZGQpOwotfQot
Ci12b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFJvdGF0ZShkb3VibGUgeCwgZG91
YmxlIHksIGRvdWJsZSB6LCBkb3VibGUgZGVncmVlcykKLXsKLSAgICBXZWJUcmFuc2Zvcm1PcGVy
YXRpb24gdG9BZGQ7Ci0gICAgdG9BZGQubWF0cml4LnJvdGF0ZTNkKHgsIHksIHosIGRlZ3JlZXMp
OwotICAgIHRvQWRkLnR5cGUgPSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9w
ZXJhdGlvblJvdGF0ZTsKLSAgICB0b0FkZC5yb3RhdGUuYXhpcy54ID0geDsKLSAgICB0b0FkZC5y
b3RhdGUuYXhpcy55ID0geTsKLSAgICB0b0FkZC5yb3RhdGUuYXhpcy56ID0gejsKLSAgICB0b0Fk
ZC5yb3RhdGUuYW5nbGUgPSBkZWdyZWVzOwotICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5hcHBl
bmQodG9BZGQpOwotfQotCi12b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFNjYWxl
KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopCi17Ci0gICAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uIHRvQWRkOwotICAgIHRvQWRkLm1hdHJpeC5zY2FsZTNkKHgsIHksIHopOwotICAgIHRvQWRk
LnR5cGUgPSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvblNjYWxl
OwotICAgIHRvQWRkLnNjYWxlLnggPSB4OwotICAgIHRvQWRkLnNjYWxlLnkgPSB5OwotICAgIHRv
QWRkLnNjYWxlLnogPSB6OwotICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5hcHBlbmQodG9BZGQp
OwotfQotCi12b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFNrZXcoZG91YmxlIHgs
IGRvdWJsZSB5KQotewotICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsKLSAgICB0b0Fk
ZC5tYXRyaXguc2tld1goeCk7Ci0gICAgdG9BZGQubWF0cml4LnNrZXdZKHkpOwotICAgIHRvQWRk
LnR5cGUgPSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvblNrZXc7
Ci0gICAgdG9BZGQuc2tldy54ID0geDsKLSAgICB0b0FkZC5za2V3LnkgPSB5OwotICAgIG1fcHJp
dmF0ZS0+b3BlcmF0aW9ucy5hcHBlbmQodG9BZGQpOwotfQotCi12b2lkIFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnM6OmFwcGVuZFBlcnNwZWN0aXZlKGRvdWJsZSBkZXB0aCkKLXsKLSAgICBXZWJUcmFu
c2Zvcm1PcGVyYXRpb24gdG9BZGQ7Ci0gICAgdG9BZGQubWF0cml4LmFwcGx5UGVyc3BlY3RpdmUo
ZGVwdGgpOwotICAgIHRvQWRkLnR5cGUgPSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5z
Zm9ybU9wZXJhdGlvblBlcnNwZWN0aXZlOwotICAgIHRvQWRkLnBlcnNwZWN0aXZlRGVwdGggPSBk
ZXB0aDsKLSAgICBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuYXBwZW5kKHRvQWRkKTsKLX0KLQotdm9p
ZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRNYXRyaXgoY29uc3QgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCkKLXsKLSAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gdG9BZGQ7
Ci0gICAgdG9BZGQubWF0cml4ID0gbWF0cml4OwotICAgIHRvQWRkLnR5cGUgPSBXZWJUcmFuc2Zv
cm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvbk1hdHJpeDsKLSAgICBtX3ByaXZhdGUt
Pm9wZXJhdGlvbnMuYXBwZW5kKHRvQWRkKTsKLX0KLQotdm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zOjphcHBlbmRJZGVudGl0eSgpCi17Ci0gICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVu
ZChXZWJUcmFuc2Zvcm1PcGVyYXRpb24oKSk7Ci19Ci0KLWJvb2wgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uczo6aXNJZGVudGl0eSgpIGNvbnN0Ci17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3ByaXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFtX3ByaXZh
dGUtPm9wZXJhdGlvbnNbaV0uaXNJZGVudGl0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zOjpyZXNldCgpCi17Ci0gICAgbV9wcml2YXRlLnJlc2V0KDApOwotfQotCi12b2lkIFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnM6OmluaXRpYWxpemUoKQotewotICAgIG1fcHJpdmF0ZS5yZXNldChu
ZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9uc1ByaXZhdGUpOwotfQotCi12b2lkIFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnM6OmluaXRpYWxpemUoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3Ro
ZXIpCi17Ci0gICAgaWYgKG1fcHJpdmF0ZS5nZXQoKSAhPSBvdGhlci5tX3ByaXZhdGUuZ2V0KCkp
Ci0gICAgICAgIG1fcHJpdmF0ZS5yZXNldChuZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9uc1ByaXZh
dGUoKm90aGVyLm1fcHJpdmF0ZS5nZXQoKSkpOwotICAgIGVsc2UKLSAgICAgICAgaW5pdGlhbGl6
ZSgpOwotfQotCi1ib29sIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmJsZW5kSW50ZXJuYWwoY29u
c3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgZG91YmxlIHByb2dyZXNzLCBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgcmVzdWx0KSBjb25zdAotewotICAgIGJvb2wgZnJvbUlkZW50aXR5
ID0gZnJvbS5pc0lkZW50aXR5KCk7Ci0gICAgYm9vbCB0b0lkZW50aXR5ID0gaXNJZGVudGl0eSgp
OwotICAgIGlmIChmcm9tSWRlbnRpdHkgJiYgdG9JZGVudGl0eSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBpZiAobWF0Y2hlc1R5cGVzKGZyb20pKSB7Ci0gICAgICAgIHNpemVfdCBudW1P
cGVyYXRpb25zID0gbWF4KGZyb21JZGVudGl0eSA/IDAgOiBmcm9tLm1fcHJpdmF0ZS0+b3BlcmF0
aW9ucy5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvSWRlbnRp
dHkgPyAwIDogbV9wcml2YXRlLT5vcGVyYXRpb25zLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtT3BlcmF0aW9uczsgKytpKSB7Ci0gICAgICAgICAgICBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBibGVuZGVkOwotICAgICAgICAgICAgaWYgKCFibGVuZFRyYW5zZm9y
bU9wZXJhdGlvbnMoZnJvbUlkZW50aXR5ID8gMCA6ICZmcm9tLm1fcHJpdmF0ZS0+b3BlcmF0aW9u
c1tpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvSWRlbnRp
dHkgPyAwIDogJm1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmxlbmRlZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgcmVzdWx0Lm11bHRpcGx5KGJsZW5kZWQpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJlc3VsdCA9IGFwcGx5KCk7Ci0gICAgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggZnJvbVRyYW5zZm9ybSA9IGZyb20uYXBwbHkoKTsKLSAgICBy
ZXR1cm4gcmVzdWx0LmJsZW5kKGZyb21UcmFuc2Zvcm0sIHByb2dyZXNzKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmNw
cAppbmRleCAxZWU4ZWEwNTMwNTZjNWFmMmZiNTU0Njc0ODQyMWZkZTFiMDk0YThjLi44ZDcyNTQ4
NDVhZjA4MGE4OGQxYzBiYTMwMzYxOTY4NDllNTg3MmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1h
dGlvblRyYW5zbGF0aW9uVXRpbC5jcHAKQEAgLTU3LDEwICs1NywxMCBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdlYlRyYW5zZm9ybU9wZXJhdGlv
bnMgdG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRy
YW5zZm9ybU9wZXJhdGlvbnMsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSkKK1dlYlRyYW5zZm9y
bU9wZXJhdGlvbnMqIHRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyhjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb25zJiB0cmFuc2Zvcm1PcGVyYXRpb25zLCBjb25zdCBGbG9hdFNpemUmIGJveFNpemUpCiB7
CiAgICAgLy8gV2UgbmVlZCB0byBkbyBhIGRlZXAgY29weSB0aGUgdHJhbnNmb3JtT3BlcmF0aW9u
cyBtYXkgY29udGFpbiByZWYgcG9pbnRlcnMgdG8gVHJhbnNmb3JtT3BlcmF0aW9uIG9iamVjdHMu
Ci0gICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zOworICAg
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMqIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgPSBQbGF0Zm9y
bTo6Y3VycmVudCgpLT5jb21wb3NpdG9yU3VwcG9ydCgpLT5jcmVhdGVUcmFuc2Zvcm1PcGVyYXRp
b25zKCk7CiAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB0cmFuc2Zvcm1PcGVyYXRpb25zLnNp
emUoKTsgKytqKSB7CiAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBv
cGVyYXRpb25UeXBlID0gdHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClbal0tPmdldE9w
ZXJhdGlvblR5cGUoKTsKICAgICAgICAgc3dpdGNoIChvcGVyYXRpb25UeXBlKSB7CkBAIC03MCw3
ICs3MCw3IEBAIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgdG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25z
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRyYW5zCiAgICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpTQ0FMRV8zRDoKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlND
QUxFOiB7CiAgICAgICAgICAgICBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0g
c3RhdGljX2Nhc3Q8U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRp
b25zLmFwcGVuZFNjYWxlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3Jt
LT56KCkpOworICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy0+YXBwZW5kU2NhbGUo
dHJhbnNmb3JtLT54KCksIHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnooKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
VFJBTlNMQVRFX1g6CkBAIC03OSw3ICs3OSw3IEBAIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgdG9X
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRyYW5zCiAg
ICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfM0Q6CiAgICAgICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU6IHsKICAgICAgICAgICAgIFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8VHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uKj4odHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClbal0uZ2V0
KCkpOwotICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRUcmFuc2xhdGUo
ZmxvYXRWYWx1ZUZvckxlbmd0aCh0cmFuc2Zvcm0tPngoKSwgYm94U2l6ZS53aWR0aCgpKSwgZmxv
YXRWYWx1ZUZvckxlbmd0aCh0cmFuc2Zvcm0tPnkoKSwgYm94U2l6ZS5oZWlnaHQoKSksIGZsb2F0
VmFsdWVGb3JMZW5ndGgodHJhbnNmb3JtLT56KCksIDEpKTsKKyAgICAgICAgICAgIHdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMtPmFwcGVuZFRyYW5zbGF0ZShmbG9hdFZhbHVlRm9yTGVuZ3RoKHRyYW5z
Zm9ybS0+eCgpLCBib3hTaXplLndpZHRoKCkpLCBmbG9hdFZhbHVlRm9yTGVuZ3RoKHRyYW5zZm9y
bS0+eSgpLCBib3hTaXplLmhlaWdodCgpKSwgZmxvYXRWYWx1ZUZvckxlbmd0aCh0cmFuc2Zvcm0t
PnooKSwgMSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9YOgpAQCAtODcsMzUgKzg3LDM1IEBAIFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMgdG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbnMmIHRyYW5zCiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVf
M0Q6CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEU6IHsKICAgICAgICAg
ICAgIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8Um90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4odHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClb
al0uZ2V0KCkpOwotICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRSb3Rh
dGUodHJhbnNmb3JtLT54KCksIHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnooKSwgdHJhbnNm
b3JtLT5hbmdsZSgpKTsKKyAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMtPmFwcGVu
ZFJvdGF0ZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9ybS0+eigpLCB0
cmFuc2Zvcm0tPmFuZ2xlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDoKICAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlNLRVdfWToKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNL
RVc6IHsKICAgICAgICAgICAgIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0
YXRpY19jYXN0PFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25z
LmFwcGVuZFNrZXcodHJhbnNmb3JtLT5hbmdsZVgoKSwgdHJhbnNmb3JtLT5hbmdsZVkoKSk7Cisg
ICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLT5hcHBlbmRTa2V3KHRyYW5zZm9ybS0+
YW5nbGVYKCksIHRyYW5zZm9ybS0+YW5nbGVZKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWDogewogICAgICAg
ICAgICAgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxN
YXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMo
KVtqXS5nZXQoKSk7CiAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtID0gdHJhbnNm
b3JtLT5tYXRyaXgoKTsKLSAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5k
TWF0cml4KFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KG0pKTsKKyAgICAgICAgICAgIHdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMtPmFwcGVuZE1hdHJpeChXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChtKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6TUFUUklYXzNEOiB7CiAgICAgICAgICAgICBNYXRyaXgzRFRyYW5zZm9ybU9wZXJh
dGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24q
Pih0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7CiAgICAgICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtID0gdHJhbnNmb3JtLT5tYXRyaXgoKTsKLSAgICAgICAg
ICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kTWF0cml4KFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4KG0pKTsKKyAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMtPmFwcGVuZE1h
dHJpeChXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChtKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6UEVSU1BFQ1RJVkU6IHsK
ICAgICAgICAgICAgIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBz
dGF0aWNfY2FzdDxQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJh
dGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMuYXBwZW5kUGVyc3BlY3RpdmUoZmxvYXRWYWx1ZUZvckxlbmd0aCh0cmFuc2Zvcm0t
PnBlcnNwZWN0aXZlKCksIDApKTsKKyAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMt
PmFwcGVuZFBlcnNwZWN0aXZlKGZsb2F0VmFsdWVGb3JMZW5ndGgodHJhbnNmb3JtLT5wZXJzcGVj
dGl2ZSgpLCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6SURFTlRJVFk6Ci0gICAgICAgICAgICB3ZWJUcmFuc2Zvcm1P
cGVyYXRpb25zLmFwcGVuZElkZW50aXR5KCk7CisgICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVy
YXRpb25zLT5hcHBlbmRJZGVudGl0eSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOgogICAgICAgICAgICAgLy8gRG8gbm90aGluZy4K
QEAgLTE1MywxMyArMTUzLDEzIEBAIHRlbXBsYXRlIDw+CiBib29sIGFwcGVuZEtleWZyYW1lV2l0
aFN0YW5kYXJkVGltaW5nRnVuY3Rpb248VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUsIFdlYlRyYW5z
Zm9ybUtleWZyYW1lLCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4oV2ViVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUqIGN1cnZlLCBkb3VibGUga2V5VGltZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0
aW9uVmFsdWUqIHZhbHVlLCBjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogbGFzdFZhbHVl
LCBXZWJLaXQ6OldlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGUgdGltaW5nRnVu
Y3Rpb25UeXBlLCBjb25zdCBGbG9hdFNpemUmIGJveFNpemUpCiB7CiAgICAgYm9vbCBjYW5CbGVu
ZCA9ICFsYXN0VmFsdWU7Ci0gICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zID0g
dG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCp2YWx1ZS0+dmFsdWUoKSwgYm94U2l6ZSk7CisgICAg
T3duUHRyPFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM+IG9wZXJhdGlvbnMgPSBhZG9wdFB0cih0b1dl
YlRyYW5zZm9ybU9wZXJhdGlvbnMoKnZhbHVlLT52YWx1ZSgpLCBib3hTaXplKSk7CiAgICAgaWYg
KCFjYW5CbGVuZCkgewotICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIGxhc3RPcGVyYXRp
b25zID0gdG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCpsYXN0VmFsdWUtPnZhbHVlKCksIGJveFNp
emUpOwotICAgICAgICBjYW5CbGVuZCA9IGxhc3RPcGVyYXRpb25zLmNhbkJsZW5kV2l0aChvcGVy
YXRpb25zKTsKKyAgICAgICAgT3duUHRyPFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM+IGxhc3RPcGVy
YXRpb25zID0gYWRvcHRQdHIodG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCpsYXN0VmFsdWUtPnZh
bHVlKCksIGJveFNpemUpKTsKKyAgICAgICAgY2FuQmxlbmQgPSBsYXN0T3BlcmF0aW9ucy0+Y2Fu
QmxlbmRXaXRoKCpvcGVyYXRpb25zKTsKICAgICB9CiAgICAgaWYgKGNhbkJsZW5kKSB7Ci0gICAg
ICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoa2V5VGltZSwgb3BlcmF0aW9ucyks
IHRpbWluZ0Z1bmN0aW9uVHlwZSk7CisgICAgICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5
ZnJhbWUoa2V5VGltZSwgb3BlcmF0aW9ucy5sZWFrUHRyKCkpLCB0aW1pbmdGdW5jdGlvblR5cGUp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY5
LDEzICsxNjksMTMgQEAgdGVtcGxhdGUgPD4KIGJvb2wgYXBwZW5kS2V5ZnJhbWVXaXRoQ3VzdG9t
QmV6aWVyVGltaW5nRnVuY3Rpb248VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUsIFdlYlRyYW5zZm9y
bUtleWZyYW1lLCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4oV2ViVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmUqIGN1cnZlLCBkb3VibGUga2V5VGltZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9u
VmFsdWUqIHZhbHVlLCBjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogbGFzdFZhbHVlLCBk
b3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIsIGNvbnN0IEZsb2F0U2l6
ZSYgYm94U2l6ZSkKIHsKICAgICBib29sIGNhbkJsZW5kID0gIWxhc3RWYWx1ZTsKLSAgICBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMgPSB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMo
KnZhbHVlLT52YWx1ZSgpLCBib3hTaXplKTsKKyAgICBPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0
aW9ucz4gb3BlcmF0aW9ucyA9IGFkb3B0UHRyKHRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygqdmFs
dWUtPnZhbHVlKCksIGJveFNpemUpKTsKICAgICBpZiAoIWNhbkJsZW5kKSB7Ci0gICAgICAgIFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnMgbGFzdE9wZXJhdGlvbnMgPSB0b1dlYlRyYW5zZm9ybU9wZXJh
dGlvbnMoKmxhc3RWYWx1ZS0+dmFsdWUoKSwgYm94U2l6ZSk7Ci0gICAgICAgIGNhbkJsZW5kID0g
bGFzdE9wZXJhdGlvbnMuY2FuQmxlbmRXaXRoKG9wZXJhdGlvbnMpOworICAgICAgICBPd25QdHI8
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gbGFzdE9wZXJhdGlvbnMgPSBhZG9wdFB0cih0b1dlYlRy
YW5zZm9ybU9wZXJhdGlvbnMoKmxhc3RWYWx1ZS0+dmFsdWUoKSwgYm94U2l6ZSkpOworICAgICAg
ICBjYW5CbGVuZCA9IGxhc3RPcGVyYXRpb25zLT5jYW5CbGVuZFdpdGgoKm9wZXJhdGlvbnMpOwog
ICAgIH0KICAgICBpZiAoY2FuQmxlbmQpIHsKLSAgICAgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zv
cm1LZXlmcmFtZShrZXlUaW1lLCBvcGVyYXRpb25zKSwgeDEsIHkxLCB4MiwgeTIpOworICAgICAg
ICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKGtleVRpbWUsIG9wZXJhdGlvbnMubGVh
a1B0cigpKSwgeDEsIHkxLCB4MiwgeTIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgcmV0dXJuIGZhbHNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183018</attachid>
            <date>2013-01-16 12:40:26 -0800</date>
            <delta_ts>2013-01-17 13:06:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105553-20130116153727.patch</filename>
            <type>text/plain</type>
            <size>34176</size>
            <attacher name="Ali Juma">ajuma</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5ODM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBmODlhMmE4YjcyNjA1
NTI5MGNkZmE3MmM0NjMzMzUxZDg5NjJhMTdjLi43ZjVkZTFkYmM2ZDkwYjZkZTc2YzY1MmViMjkx
YzBkNTI0NTg4Yzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMy0wMS0xNiAg
QWxpIEp1bWEgIDxhanVtYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDb252
ZXJ0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgaW50byBwdXJlIHZpcnR1YWwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTU1MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dl
YkNvbXBvc2l0b3JTdXBwb3J0Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb21wb3NpdG9yU3VwcG9ydDo6Y3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyk6CisgICAg
ICAgIChXZWJDb21wb3NpdG9yU3VwcG9ydCk6CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dl
YlRyYW5zZm9ybUtleWZyYW1lLmg6CisgICAgICAgIChXZWJUcmFuc2Zvcm1LZXlmcmFtZSk6Cisg
ICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6fldlYlRyYW5zZm9ybU9wZXJhdGlv
bnMpOgorICAgICAgICAoV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyk6CisKIDIwMTMtMDEtMTAgIFRv
bW15IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CiAKICAgICAgICAgTWVkaWFTdHJl
YW0gQVBJOiBBZGRpbmcgdGhlIG5ldyBpZCBhdHRyaWJ1dGUgdG8gTWVkaWFTdHJlYW0gYW5kIE1l
ZGlhU3RyZWFtVHJhY2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1MTVkOWVmNDI5OGZmODAxZjk3MDc1ZDhhODMy
MzM4M2ZjY2NkMDlhLi43NGRiNWQyOTNhZGM2YTNkZThjMmFlY2NjZTIxODM4MDNkNzdlNWNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTMtMDEtMTYgIEFsaSBKdW1hICA8YWp1bWFA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29udmVydCBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zIGludG8gcHVyZSB2aXJ0dWFsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU1NTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIHJlbW92ZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnMgYW5kIHVwZGF0ZXMKKyAgICAgICAgdXNlcnMgdG8gY29uc3Ry
dWN0IGluc3RhbmNlcyB1c2luZyBhIGZhY3RvcnkgZnVuY3Rpb24uIFRoaXMgYWxzbyBhZGRzCisg
ICAgICAgIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBXZWJUcmFuc2Zvcm1LZXlGcmFtZS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMsIG5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2Vi
VHJhbnNmb3JtS2V5ZnJhbWUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvUGxhdGZvcm0vY2hyb21p
dW0vcHVibGljL1dlYlRyYW5zZm9ybUtleWZyYW1lLmguCisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1LZXlmcmFtZTo6V2ViVHJhbnNmb3JtS2V5ZnJhbWUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1LZXlmcmFtZTo6fldlYlRyYW5zZm9ybUtl
eWZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtS2V5ZnJhbWU6OnRpbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1LZXlmcmFtZTo6dmFsdWUpOgorICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJh
bnNsYXRpb25VdGlsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisK
IDIwMTMtMDEtMTUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
R1RLKyBhbmQgUXQgYnVpbGQgZml4IGFmdGVyIHIxMzk4MzMuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkNvbXBvc2l0b3JTdXBwb3J0LmggYi9Tb3VyY2Uv
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkNvbXBvc2l0b3JTdXBwb3J0LmgKaW5kZXggYTNi
OWM0MDk2ZGIzZmM0NmFiMGE2MzAxZGU4YjdiNTkzNjhmZDMyYi4uNWM3ZjczMzBhN2VhZmEwMTc5
NWIwYjk0ZDA5YTdkMjY2ZmQ0ZWJjYSAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL2Nocm9t
aXVtL3B1YmxpYy9XZWJDb21wb3NpdG9yU3VwcG9ydC5oCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9j
aHJvbWl1bS9wdWJsaWMvV2ViQ29tcG9zaXRvclN1cHBvcnQuaApAQCAtNTAsNiArNTAsNyBAQCBj
bGFzcyBXZWJTY3JvbGxiYXJUaGVtZUdlb21ldHJ5OwogY2xhc3MgV2ViU29saWRDb2xvckxheWVy
OwogY2xhc3MgV2ViVGhyZWFkOwogY2xhc3MgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU7Citj
bGFzcyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOwogY2xhc3MgV2ViVmlkZW9GcmFtZVByb3ZpZGVy
OwogY2xhc3MgV2ViVmlkZW9MYXllcjsKIApAQCAtMTA0LDYgKzEwNSw4IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGNyZWF0ZVRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlKCkgeyByZXR1cm4gMDsgfQogCisgICAgdmlydHVhbCBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zKiBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKCkgeyByZXR1cm4gMDsgfQorCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+V2ViQ29tcG9zaXRvclN1cHBvcnQoKSB7IH0KIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUtl
eWZyYW1lLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUtl
eWZyYW1lLmgKaW5kZXggYzk5ZWY1NTg3YmEzZDNmNTIzYjBiZmY4ZjczYTE5MzNmMGNhYmFlNC4u
YTUwNWQ5YTFlMzU3MTJhZjE1MjdkY2EwYTMxMTAzMjNiOTczNDliYSAxMDA2NDQKLS0tIGEvU291
cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtS2V5ZnJhbWUuaApA
QCAtMjUsMTkgKzI1LDI1IEBACiAjaWZuZGVmIFdlYlRyYW5zZm9ybUtleWZyYW1lX2gKICNkZWZp
bmUgV2ViVHJhbnNmb3JtS2V5ZnJhbWVfaAogCisjaW5jbHVkZSAiV2ViUHJpdmF0ZU93blB0ci5o
IgogI2luY2x1ZGUgIldlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKLXN0cnVjdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSB7Ci0gICAgV2ViVHJhbnNmb3JtS2V5
ZnJhbWUoZG91YmxlIHRpbWUsIGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlKQot
ICAgICAgICA6IHRpbWUodGltZSkKLSAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKLSAgICB7Ci0gICAg
fQorY2xhc3MgV2ViVHJhbnNmb3JtS2V5ZnJhbWUgeworcHVibGljOgorICAgIC8vIFRha2VzIG93
bmVyc2hpcCBvZiB0aGUgV2ViVHJhbmZvcm1PcGVyYXRpb25zIG9iamVjdC4KKyAgICBXRUJLSVRf
RVhQT1JUIFdlYlRyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0aW1lLCBXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zKiB2YWx1ZSk7CiAKLSAgICBkb3VibGUgdGltZTsKLSAgICBXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zIHZhbHVlOworICAgIFdFQktJVF9FWFBPUlQgfldlYlRyYW5zZm9ybUtleWZyYW1lKCk7
CisKKyAgICBXRUJLSVRfRVhQT1JUIGRvdWJsZSB0aW1lKCkgY29uc3Q7CisKKyAgICBXRUJLSVRf
RVhQT1JUIGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlKCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgZG91YmxlIG1fdGltZTsKKyAgICBXZWJQcml2YXRlT3duUHRyPFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnM+IG1fdmFsdWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucy5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1P
cGVyYXRpb25zLmgKaW5kZXggOWUzMGY1ODI4NzU3OTg3MmMyYTlhNmQ1Y2EwMTExMTIwNWYzYmEy
Ni4uYjFlY2M0ZmEyMzFjOWQyYmE5OGRkZDU0NmIyNWVlOTNiZmU2MWM2YSAxMDA2NDQKLS0tIGEv
U291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmgK
KysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRp
b25zLmgKQEAgLTI3LDY5ICsyNywyOCBAQAogCiAjaW5jbHVkZSAiV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKIAotbmFtZXNwYWNlIFdlYktpdCB7CisjZGVmaW5lIFdFQl9UUkFOU0ZPUk1fT1BF
UkFUSU9OU19JU19WSVJUVUFMIDEKIAotY2xhc3MgV2ViVHJhbnNmb3JtT3BlcmF0aW9uc1ByaXZh
dGU7CituYW1lc3BhY2UgV2ViS2l0IHsKIAotLy8gVHJhbnNmb3JtIG9wZXJhdGlvbnMgYXJlIGEg
ZGVjb21wb3NlZCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguIEl0IGNhbiBiZQotLy8gYXBwbGllZCB0
byBvYnRhaW4gYSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhdCBhbnkgdGltZSwgYW5kIGNhbiBi
ZSBibGVuZGVkCi0vLyBpbnRlbGxpZ2VudGx5IHdpdGggb3RoZXIgdHJhbnNmb3JtIG9wZXJhdGlv
bnMsIHNvIGxvbmcgYXMgdGhleSByZXByZXNlbnQgdGhlCi0vLyBzYW1lIGRlY29tcG9zaXRpb24u
IEZvciBleGFtcGxlLCBpZiB3ZSBoYXZlIGEgdHJhbnNmb3JtIHRoYXQgaXMgbWFkZSB1cCBvZgot
Ly8gYSByb3RhdGlvbiBmb2xsb3dlZCBieSBza2V3LCBpdCBjYW4gYmUgYmxlbmRlZCBpbnRlbGxp
Z2VudGx5IHdpdGggYW5vdGhlcgotLy8gdHJhbnNmb3JtIG1hZGUgdXAgb2YgYSByb3RhdGlvbiBm
b2xsb3dlZCBieSBhIHNrZXcuIEJsZW5kaW5nIGlzIHBvc3NpYmxlIGlmCi0vLyB3ZSBoYXZlIHR3
byBkaXNzaW1pbGFyIHNldHMgb2YgdHJhbnNmb3JtIG9wZXJhdGlvbnMsIGJ1dCB0aGUgZWZmZWN0
IG1heSBub3QKLS8vIGJlIHdoYXQgd2FzIGludGVuZGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwg
c2VlIHRoZSBjb21tZW50cyBmb3IgdGhlIGJsZW5kCi0vLyBmdW5jdGlvbiBiZWxvdy4KIGNsYXNz
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgewogcHVibGljOgotICAgIH5XZWJUcmFuc2Zvcm1PcGVy
YXRpb25zKCkgeyByZXNldCgpOyB9Ci0KLSAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCkgeyBp
bml0aWFsaXplKCk7IH0KLSAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKGNvbnN0IFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMmIG90aGVyKSB7IGluaXRpYWxpemUob3RoZXIpOyB9Ci0gICAgV2ViVHJh
bnNmb3JtT3BlcmF0aW9ucyYgb3BlcmF0b3I9KGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMm
IG90aGVyKQotICAgIHsKLSAgICAgICAgaW5pdGlhbGl6ZShvdGhlcik7Ci0gICAgICAgIHJldHVy
biAqdGhpczsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm5zIGEgdHJhbnNmb3JtYXRpb24gbWF0cml4
IHJlcHJlc2VudGluZyB0aGVzZSB0cmFuc2Zvcm0gb3BlcmF0aW9ucy4KLSAgICBXRUJLSVRfRVhQ
T1JUIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGFwcGx5KCkgY29uc3Q7Ci0KLSAgICAvLyBHaXZl
biBhbm90aGVyIHNldCBvZiB0cmFuc2Zvcm0gb3BlcmF0aW9ucyBhbmQgYSBwcm9ncmVzcyBpbiB0
aGUgcmFuZ2UKLSAgICAvLyBbMCwgMV0sIHJldHVybnMgYSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgg
cmVwcmVzZW50aW5nIHRoZSBpbnRlcm1lZGlhdGUKLSAgICAvLyB2YWx1ZS4gSWYgdGhpcy0+bWF0
Y2hlc1R5cGVzKGZyb20pLCB0aGVuIGVhY2ggb2YgdGhlIG9wZXJhdGlvbnMgYXJlCi0gICAgLy8g
YmxlbmRlZCBzZXBhcmF0ZWx5IGFuZCB0aGVuIGNvbWJpbmVkLiBPdGhlcndpc2UsIHRoZSB0d28g
c2V0cyBvZgotICAgIC8vIHRyYW5zZm9ybXMgYXJlIGJha2VkIHRvIG1hdHJpY2VzICh1c2luZyBh
cHBseSksIGFuZCB0aGUgbWF0cmljZXMgYXJlCi0gICAgLy8gdGhlbiBkZWNvbXBvc2VkIGFuZCBp
bnRlcnBvbGF0ZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKLSAgICAvLyBodHRwOi8vd3d3
LnczLm9yZy9UUi8yMDExL1dELWNzczMtMmQtdHJhbnNmb3Jtcy0yMDExMTIxNS8jbWF0cml4LWRl
Y29tcG9zaXRpb24uCi0gICAgV0VCS0lUX0VYUE9SVCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBi
bGVuZChjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0OwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgb3BlcmF0aW9uIGFuZCBpdHMg
ZGVzY2VuZGFudHMgaGF2ZSB0aGUgc2FtZSB0eXBlcwotICAgIC8vIGFzIG90aGVyIGFuZCBpdHMg
ZGVzY2VuZGFudHMuCi0gICAgV0VCS0lUX0VYUE9SVCBib29sIG1hdGNoZXNUeXBlcyhjb25zdCBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCB+V2ViVHJh
bnNmb3JtT3BlcmF0aW9ucygpIHsgfQogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZXNlIG9w
ZXJhdGlvbnMgY2FuIGJlIGJsZW5kZWQuIEl0IHdpbGwgb25seSByZXR1cm4KICAgICAvLyBmYWxz
ZSBpZiB3ZSBtdXN0IHJlc29ydCB0byBtYXRyaXggaW50ZXJwb2xhdGlvbiwgYW5kIG1hdHJpeCBp
bnRlcnBvbGF0aW9uCiAgICAgLy8gZmFpbHMgKHRoaXMgY2FuIGhhcHBlbiBpZiBlaXRoZXIgbWF0
cml4IGNhbm5vdCBiZSBkZWNvbXBvc2VkKS4KLSAgICBXRUJLSVRfRVhQT1JUIGJvb2wgY2FuQmxl
bmRXaXRoKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIG90aGVyKSBjb25zdDsKLQotICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBhcHBlbmRUcmFuc2xhdGUoZG91YmxlIHgsIGRvdWJsZSB5LCBk
b3VibGUgeik7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFwcGVuZFJvdGF0ZShkb3VibGUgeCwg
ZG91YmxlIHksIGRvdWJsZSB6LCBkb3VibGUgZGVncmVlcyk7Ci0gICAgV0VCS0lUX0VYUE9SVCB2
b2lkIGFwcGVuZFNjYWxlKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopOwotICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCBhcHBlbmRTa2V3KGRvdWJsZSB4LCBkb3VibGUgeSk7Ci0gICAgV0VCS0lU
X0VYUE9SVCB2b2lkIGFwcGVuZFBlcnNwZWN0aXZlKGRvdWJsZSBkZXB0aCk7Ci0gICAgV0VCS0lU
X0VYUE9SVCB2b2lkIGFwcGVuZE1hdHJpeChjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYp
OwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhcHBlbmRJZGVudGl0eSgpOwotCi0gICAgV0VCS0lU
X0VYUE9SVCBib29sIGlzSWRlbnRpdHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQmxl
bmRXaXRoKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIG90aGVyKSBjb25zdCA9IDA7CiAK
LXByaXZhdGU6Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7Ci0gICAgV0VCS0lUX0VY
UE9SVCB2b2lkIGluaXRpYWxpemUoKTsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW5pdGlhbGl6
ZShjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBwcm90b3R5cGUpOwotICAgIFdFQktJVF9F
WFBPUlQgYm9vbCBibGVuZEludGVybmFsKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIGZy
b20sIGRvdWJsZSBwcm9ncmVzcywgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHJlc3VsdCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFRyYW5zbGF0ZShkb3VibGUgeCwgZG91YmxlIHks
IGRvdWJsZSB6KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFJvdGF0ZShkb3VibGUgeCwg
ZG91YmxlIHksIGRvdWJsZSB6LCBkb3VibGUgZGVncmVlcykgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmRTY2FsZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGFwcGVuZFNrZXcoZG91YmxlIHgsIGRvdWJsZSB5KSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGFwcGVuZFBlcnNwZWN0aXZlKGRvdWJsZSBkZXB0aCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBhcHBlbmRNYXRyaXgoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGFwcGVuZElkZW50aXR5KCkgPSAwOwogCi0gICAgV2ViUHJpdmF0ZU93
blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zUHJpdmF0ZT4gbV9wcml2YXRlOworICAgIHZpcnR1
YWwgYm9vbCBpc0lkZW50aXR5KCkgY29uc3QgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNTk1NmFkZjExNWY0MjRhMTk5YTVlNzEyZDQ3ODY5OWU2
NjFmMDdlZC4uNDYzOWUwMWYyMTExYmVjODI5NjhkODczNGE1M2JmOThhN2M3YzAyYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtNzE4MCw3ICs3MTgwLDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9j
aHJvbWl1bS9zdXBwb3J0L1dlYlNjcm9sbGJhckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vY2hyb21pdW0vc3VwcG9ydC9XZWJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVGhyZWFkU2FmZURhdGEuY3Bw
JywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dl
YlRyYW5zZm9ybUtleWZyYW1lLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0v
c3VwcG9ydC9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Y2hyb21pdW0vc3VwcG9ydC9XZWJVUkxFcnJvci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9ybUtl
eWZyYW1lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MGVjMjIzYjYwMThiNjAwMzA1MzU1MzViZWYzMWU4YjEy
Yjg2OGJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5jcHAKQEAgLTAsMCArMSw1MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFu
c2Zvcm1LZXlmcmFtZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViVHJhbnNmb3JtS2V5
ZnJhbWU6OldlYlRyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0aW1lLCBXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zKiB2YWx1ZSkKKyAgICA6IG1fdGltZSh0aW1lKQorICAgICwgbV92YWx1ZSh2YWx1ZSkK
K3sKK30KKworV2ViVHJhbnNmb3JtS2V5ZnJhbWU6On5XZWJUcmFuc2Zvcm1LZXlmcmFtZSgpCit7
CisgICAgbV92YWx1ZS5yZXNldCgwKTsKK30KKworZG91YmxlIFdlYlRyYW5zZm9ybUtleWZyYW1l
Ojp0aW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aW1lOworfQorCitjb25zdCBXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zJiBXZWJUcmFuc2Zvcm1LZXlmcmFtZTo6dmFsdWUoKSBjb25zdAorewor
ICAgIHJldHVybiAqbV92YWx1ZS5nZXQoKTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0L1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzYjUyZDljNjYzNWY1MjQ1ZjMwODY1MjQ3N2NiYWE2YTRjZTI1YjFjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwzOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaD4KLQot
I2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSB7Ci1jb25zdCBkb3VibGUgRVBTSUxPTiA9IDFlLTQ7
Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdHJ1Y3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
IHsKLSAgICBlbnVtIFR5cGUgewotICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UcmFuc2xh
dGUsCi0gICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblJvdGF0ZSwKLSAgICAgICAgV2ViVHJh
bnNmb3JtT3BlcmF0aW9uU2NhbGUsCi0gICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblNrZXcs
Ci0gICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblBlcnNwZWN0aXZlLAotICAgICAgICBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25NYXRyaXgsCi0gICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbklk
ZW50aXR5Ci0gICAgfTsKLQotICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbigpCi0gICAgICAgIDog
dHlwZShXZWJUcmFuc2Zvcm1PcGVyYXRpb25JZGVudGl0eSkKLSAgICB7Ci0gICAgfQotCi0gICAg
VHlwZSB0eXBlOwotICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKLQotICAgIHVu
aW9uIHsKLSAgICAgICAgZG91YmxlIHBlcnNwZWN0aXZlRGVwdGg7Ci0KLSAgICAgICAgc3RydWN0
IHsKLSAgICAgICAgICAgIGRvdWJsZSB4LCB5OwotICAgICAgICB9IHNrZXc7Ci0KLSAgICAgICAg
c3RydWN0IHsKLSAgICAgICAgICAgICBkb3VibGUgeCwgeSwgejsKLSAgICAgICAgfSBzY2FsZTsK
LQotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgZG91YmxlIHgsIHksIHo7Ci0gICAgICAg
IH0gdHJhbnNsYXRlOwotCi0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBzdHJ1Y3Qgewot
ICAgICAgICAgICAgICAgIGRvdWJsZSB4LCB5LCB6OwotICAgICAgICAgICAgfSBheGlzOwotCi0g
ICAgICAgICAgICBkb3VibGUgYW5nbGU7Ci0gICAgICAgIH0gcm90YXRlOwotICAgIH07Ci0KLSAg
ICBib29sIGlzSWRlbnRpdHkoKSBjb25zdCB7IHJldHVybiBtYXRyaXguaXNJZGVudGl0eSgpOyB9
Ci19OwotCi1jbGFzcyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zUHJpdmF0ZSB7Ci1wdWJsaWM6Ci0g
ICAgVmVjdG9yPFdlYlRyYW5zZm9ybU9wZXJhdGlvbj4gb3BlcmF0aW9uczsKLX07Ci0KLVdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGx5KCkgY29uc3QK
LXsKLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b1JldHVybjsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAg
dG9SZXR1cm4ubXVsdGlwbHkobV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLm1hdHJpeCk7Ci0gICAg
cmV0dXJuIHRvUmV0dXJuOwotfQotCi1zdGF0aWMgYm9vbCBpc0lkZW50aXR5KGNvbnN0IFdlYlRy
YW5zZm9ybU9wZXJhdGlvbiogb3BlcmF0aW9uKQotewotICAgIHJldHVybiAhb3BlcmF0aW9uIHx8
IG9wZXJhdGlvbi0+aXNJZGVudGl0eSgpOwotfQotCi1zdGF0aWMgYm9vbCBzaGFyZVNhbWVBeGlz
KGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uKiB0bywgZG91YmxlJiBheGlzWCwgZG91YmxlJiBheGlzWSwgZG91YmxlJiBheGlzWiwg
ZG91YmxlJiBhbmdsZUZyb20pCi17Ci0gICAgaWYgKGlzSWRlbnRpdHkoZnJvbSkgJiYgaXNJZGVu
dGl0eSh0bykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChpc0lkZW50aXR5KGZy
b20pICYmICFpc0lkZW50aXR5KHRvKSkgewotICAgICAgICBheGlzWCA9IHRvLT5yb3RhdGUuYXhp
cy54OwotICAgICAgICBheGlzWSA9IHRvLT5yb3RhdGUuYXhpcy55OwotICAgICAgICBheGlzWiA9
IHRvLT5yb3RhdGUuYXhpcy56OwotICAgICAgICBhbmdsZUZyb20gPSAwOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWlzSWRlbnRpdHkoZnJvbSkgJiYgaXNJZGVudGl0
eSh0bykpIHsKLSAgICAgICAgYXhpc1ggPSBmcm9tLT5yb3RhdGUuYXhpcy54OwotICAgICAgICBh
eGlzWSA9IGZyb20tPnJvdGF0ZS5heGlzLnk7Ci0gICAgICAgIGF4aXNaID0gZnJvbS0+cm90YXRl
LmF4aXMuejsKLSAgICAgICAgYW5nbGVGcm9tID0gZnJvbS0+cm90YXRlLmFuZ2xlOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBkb3VibGUgbGVuZ3RoMiA9IGZyb20tPnJvdGF0
ZS5heGlzLnggKiBmcm9tLT5yb3RhdGUuYXhpcy54ICsgZnJvbS0+cm90YXRlLmF4aXMueSAqIGZy
b20tPnJvdGF0ZS5heGlzLnkgKyBmcm9tLT5yb3RhdGUuYXhpcy56ICogZnJvbS0+cm90YXRlLmF4
aXMuejsKLSAgICBkb3VibGUgb3RoZXJMZW5ndGgyID0gdG8tPnJvdGF0ZS5heGlzLnggKiB0by0+
cm90YXRlLmF4aXMueCArIHRvLT5yb3RhdGUuYXhpcy55ICogdG8tPnJvdGF0ZS5heGlzLnkgKyB0
by0+cm90YXRlLmF4aXMueiAqIHRvLT5yb3RhdGUuYXhpcy56OwotCi0gICAgaWYgKGxlbmd0aDIg
PD0gRVBTSUxPTiB8fCBvdGhlckxlbmd0aDIgPD0gRVBTSUxPTikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgZG91YmxlIGRvdCA9IHRvLT5yb3RhdGUuYXhpcy54ICogZnJvbS0+cm90YXRl
LmF4aXMueCArIHRvLT5yb3RhdGUuYXhpcy55ICogZnJvbS0+cm90YXRlLmF4aXMueSArIHRvLT5y
b3RhdGUuYXhpcy56ICogZnJvbS0+cm90YXRlLmF4aXMuejsKLSAgICBkb3VibGUgZXJyb3IgPSBm
YWJzKDEuMCAtIChkb3QgKiBkb3QpIC8gKGxlbmd0aDIgKiBvdGhlckxlbmd0aDIpKTsKLSAgICBi
b29sIHJlc3VsdCA9IGVycm9yIDwgRVBTSUxPTjsKLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAg
IGF4aXNYID0gdG8tPnJvdGF0ZS5heGlzLng7Ci0gICAgICAgIGF4aXNZID0gdG8tPnJvdGF0ZS5h
eGlzLnk7Ci0gICAgICAgIGF4aXNaID0gdG8tPnJvdGF0ZS5heGlzLno7Ci0gICAgICAgIC8vIElm
IHRoZSBheGVzIGFyZSBwb2ludGluZyBpbiBvcHBvc2l0ZSBkaXJlY3Rpb25zLCB3ZSBuZWVkIHRv
IHJldmVyc2UKLSAgICAgICAgLy8gdGhlIGFuZ2xlLgotICAgICAgICBhbmdsZUZyb20gPSBkb3Qg
PiAwID8gZnJvbS0+cm90YXRlLmFuZ2xlIDogLWZyb20tPnJvdGF0ZS5hbmdsZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGRvdWJsZSBibGVuZERvdWJsZXMoZG91Ymxl
IGZyb20sIGRvdWJsZSB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiBmcm9tICog
KDEgLSBwcm9ncmVzcykgKyB0byAqIHByb2dyZXNzOwotfQotCi1zdGF0aWMgYm9vbCBibGVuZFRy
YW5zZm9ybU9wZXJhdGlvbnMoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBjb25z
dCBXZWJUcmFuc2Zvcm1PcGVyYXRpb24qIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4JiByZXN1bHQpCi17Ci0gICAgaWYgKGlzSWRlbnRpdHkoZnJvbSkgJiYgaXNJ
ZGVudGl0eSh0bykpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uOjpUeXBlIGludGVycG9sYXRpb25UeXBlID0gV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25JZGVudGl0eTsKLSAgICBpZiAoaXNJZGVudGl0eSh0bykpCi0g
ICAgICAgIGludGVycG9sYXRpb25UeXBlID0gZnJvbS0+dHlwZTsKLSAgICBlbHNlCi0gICAgICAg
IGludGVycG9sYXRpb25UeXBlID0gdG8tPnR5cGU7Ci0KLSAgICBzd2l0Y2ggKGludGVycG9sYXRp
b25UeXBlKSB7Ci0gICAgY2FzZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9w
ZXJhdGlvblRyYW5zbGF0ZTogewotICAgICAgICBkb3VibGUgZnJvbVggPSBpc0lkZW50aXR5KGZy
b20pID8gMCA6IGZyb20tPnRyYW5zbGF0ZS54OwotICAgICAgICBkb3VibGUgZnJvbVkgPSBpc0lk
ZW50aXR5KGZyb20pID8gMCA6IGZyb20tPnRyYW5zbGF0ZS55OwotICAgICAgICBkb3VibGUgZnJv
bVogPSBpc0lkZW50aXR5KGZyb20pID8gMCA6IGZyb20tPnRyYW5zbGF0ZS56OwotICAgICAgICBk
b3VibGUgdG9YID0gaXNJZGVudGl0eSh0bykgPyAwIDogdG8tPnRyYW5zbGF0ZS54OwotICAgICAg
ICBkb3VibGUgdG9ZID0gaXNJZGVudGl0eSh0bykgPyAwIDogdG8tPnRyYW5zbGF0ZS55OwotICAg
ICAgICBkb3VibGUgdG9aID0gaXNJZGVudGl0eSh0bykgPyAwIDogdG8tPnRyYW5zbGF0ZS56Owot
ICAgICAgICByZXN1bHQudHJhbnNsYXRlM2QoYmxlbmREb3VibGVzKGZyb21YLCB0b1gsIHByb2dy
ZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kRG91Ymxlcyhmcm9tWSwgdG9Z
LCBwcm9ncmVzcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZERvdWJsZXMoZnJv
bVosIHRvWiwgcHJvZ3Jlc3MpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25Sb3RhdGU6IHsKLSAgICAg
ICAgZG91YmxlIGF4aXNYID0gMDsKLSAgICAgICAgZG91YmxlIGF4aXNZID0gMDsKLSAgICAgICAg
ZG91YmxlIGF4aXNaID0gMTsKLSAgICAgICAgZG91YmxlIGZyb21BbmdsZSA9IDA7Ci0gICAgICAg
IGRvdWJsZSB0b0FuZ2xlID0gaXNJZGVudGl0eSh0bykgPyAwIDogdG8tPnJvdGF0ZS5hbmdsZTsK
LSAgICAgICAgaWYgKHNoYXJlU2FtZUF4aXMoZnJvbSwgdG8sIGF4aXNYLCBheGlzWSwgYXhpc1os
IGZyb21BbmdsZSkpCi0gICAgICAgICAgICByZXN1bHQucm90YXRlM2QoYXhpc1gsIGF4aXNZLCBh
eGlzWiwgYmxlbmREb3VibGVzKGZyb21BbmdsZSwgdG9BbmdsZSwgcHJvZ3Jlc3MpKTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b01hdHJpeDsK
LSAgICAgICAgICAgIGlmICghaXNJZGVudGl0eSh0bykpCi0gICAgICAgICAgICAgICAgdG9NYXRy
aXggPSB0by0+bWF0cml4OwotICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZnJv
bU1hdHJpeDsKLSAgICAgICAgICAgIGlmICghaXNJZGVudGl0eShmcm9tKSkKLSAgICAgICAgICAg
ICAgICBmcm9tTWF0cml4ID0gZnJvbS0+bWF0cml4OwotICAgICAgICAgICAgcmVzdWx0ID0gdG9N
YXRyaXg7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5ibGVuZChmcm9tTWF0cml4LCBwcm9ncmVz
cykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3Jt
T3BlcmF0aW9uU2NhbGU6IHsKLSAgICAgICAgZG91YmxlIGZyb21YID0gaXNJZGVudGl0eShmcm9t
KSA/IDEgOiBmcm9tLT5zY2FsZS54OwotICAgICAgICBkb3VibGUgZnJvbVkgPSBpc0lkZW50aXR5
KGZyb20pID8gMSA6IGZyb20tPnNjYWxlLnk7Ci0gICAgICAgIGRvdWJsZSBmcm9tWiA9IGlzSWRl
bnRpdHkoZnJvbSkgPyAxIDogZnJvbS0+c2NhbGUuejsKLSAgICAgICAgZG91YmxlIHRvWCA9IGlz
SWRlbnRpdHkodG8pID8gMSA6IHRvLT5zY2FsZS54OwotICAgICAgICBkb3VibGUgdG9ZID0gaXNJ
ZGVudGl0eSh0bykgPyAxIDogdG8tPnNjYWxlLnk7Ci0gICAgICAgIGRvdWJsZSB0b1ogPSBpc0lk
ZW50aXR5KHRvKSA/IDEgOiB0by0+c2NhbGUuejsKLSAgICAgICAgcmVzdWx0LnNjYWxlM2QoYmxl
bmREb3VibGVzKGZyb21YLCB0b1gsIHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
YmxlbmREb3VibGVzKGZyb21ZLCB0b1ksIHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgYmxlbmREb3VibGVzKGZyb21aLCB0b1osIHByb2dyZXNzKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0
aW9uU2tldzogewotICAgICAgICBkb3VibGUgZnJvbVggPSBpc0lkZW50aXR5KGZyb20pID8gMCA6
IGZyb20tPnNrZXcueDsKLSAgICAgICAgZG91YmxlIGZyb21ZID0gaXNJZGVudGl0eShmcm9tKSA/
IDAgOiBmcm9tLT5za2V3Lnk7Ci0gICAgICAgIGRvdWJsZSB0b1ggPSBpc0lkZW50aXR5KHRvKSA/
IDAgOiB0by0+c2tldy54OwotICAgICAgICBkb3VibGUgdG9ZID0gaXNJZGVudGl0eSh0bykgPyAw
IDogdG8tPnNrZXcueTsKLSAgICAgICAgcmVzdWx0LnNrZXdYKGJsZW5kRG91Ymxlcyhmcm9tWCwg
dG9YLCBwcm9ncmVzcykpOwotICAgICAgICByZXN1bHQuc2tld1koYmxlbmREb3VibGVzKGZyb21Z
LCB0b1ksIHByb2dyZXNzKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFdlYlRy
YW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uUGVyc3BlY3RpdmU6IHsKLSAg
ICAgICAgZG91YmxlIGZyb21QZXJzcGVjdGl2ZURlcHRoID0gaXNJZGVudGl0eShmcm9tKSA/IG51
bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpIDogZnJvbS0+cGVyc3BlY3RpdmVEZXB0aDsKLSAg
ICAgICAgZG91YmxlIHRvUGVyc3BlY3RpdmVEZXB0aCA9IGlzSWRlbnRpdHkodG8pID8gbnVtZXJp
Y19saW1pdHM8ZG91YmxlPjo6bWF4KCkgOiB0by0+cGVyc3BlY3RpdmVEZXB0aDsKLSAgICAgICAg
cmVzdWx0LmFwcGx5UGVyc3BlY3RpdmUoYmxlbmREb3VibGVzKGZyb21QZXJzcGVjdGl2ZURlcHRo
LCB0b1BlcnNwZWN0aXZlRGVwdGgsIHByb2dyZXNzKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uTWF0
cml4OiB7Ci0gICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRvTWF0cml4OwotICAgICAg
ICBpZiAoIWlzSWRlbnRpdHkodG8pKQotICAgICAgICAgICAgdG9NYXRyaXggPSB0by0+bWF0cml4
OwotICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9tTWF0cml4OwotICAgICAgICBp
ZiAoIWlzSWRlbnRpdHkoZnJvbSkpCi0gICAgICAgICAgICBmcm9tTWF0cml4ID0gZnJvbS0+bWF0
cml4OwotICAgICAgICByZXN1bHQgPSB0b01hdHJpeDsKLSAgICAgICAgaWYgKCFyZXN1bHQuYmxl
bmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3MpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRy
YW5zZm9ybU9wZXJhdGlvbklkZW50aXR5OgotICAgICAgICAvLyBEbyBub3RoaW5nLgotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YmxlbmQoY29uc3QgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyYgZnJvbSwgZG91YmxlIHByb2dyZXNzKSBjb25zdAotewotICAgIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IHRvUmV0dXJuOwotICAgIGJsZW5kSW50ZXJuYWwoZnJvbSwgcHJvZ3Jl
c3MsIHRvUmV0dXJuKTsKLSAgICByZXR1cm4gdG9SZXR1cm47Ci19Ci0KLWJvb2wgV2ViVHJhbnNm
b3JtT3BlcmF0aW9uczo6bWF0Y2hlc1R5cGVzKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMm
IG90aGVyKSBjb25zdAotewotICAgIGlmIChpc0lkZW50aXR5KCkgfHwgb3RoZXIuaXNJZGVudGl0
eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChtX3ByaXZhdGUtPm9wZXJhdGlv
bnMuc2l6ZSgpICE9IG90aGVyLm1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5zaXplKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcml2YXRlLT5v
cGVyYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3ByaXZhdGUtPm9wZXJhdGlv
bnNbaV0udHlwZSAhPSBvdGhlci5tX3ByaXZhdGUtPm9wZXJhdGlvbnNbaV0udHlwZQotICAgICAg
ICAgICAgJiYgIW1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS5pc0lkZW50aXR5KCkKLSAgICAgICAg
ICAgICYmICFvdGhlci5tX3ByaXZhdGUtPm9wZXJhdGlvbnNbaV0uaXNJZGVudGl0eSgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmNhbkJsZW5kV2l0aChjb25zdCBXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zJiBvdGhlcikgY29uc3QKLXsKLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBkdW1teTsKLSAgICByZXR1cm4gYmxlbmRJbnRlcm5hbChvdGhlciwgMC41LCBkdW1teSk7Ci19
Ci0KLXZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kVHJhbnNsYXRlKGRvdWJsZSB4
LCBkb3VibGUgeSwgZG91YmxlIHopCi17Ci0gICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHRvQWRk
OwotICAgIHRvQWRkLm1hdHJpeC50cmFuc2xhdGUzZCh4LCB5LCB6KTsKLSAgICB0b0FkZC50eXBl
ID0gV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25UcmFuc2xhdGU7
Ci0gICAgdG9BZGQudHJhbnNsYXRlLnggPSB4OwotICAgIHRvQWRkLnRyYW5zbGF0ZS55ID0geTsK
LSAgICB0b0FkZC50cmFuc2xhdGUueiA9IHo7Ci0gICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFw
cGVuZCh0b0FkZCk7Ci19Ci0KLXZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kUm90
YXRlKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHosIGRvdWJsZSBkZWdyZWVzKQotewotICAg
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsKLSAgICB0b0FkZC5tYXRyaXgucm90YXRlM2Qo
eCwgeSwgeiwgZGVncmVlcyk7Ci0gICAgdG9BZGQudHlwZSA9IFdlYlRyYW5zZm9ybU9wZXJhdGlv
bjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uUm90YXRlOwotICAgIHRvQWRkLnJvdGF0ZS5heGlzLngg
PSB4OwotICAgIHRvQWRkLnJvdGF0ZS5heGlzLnkgPSB5OwotICAgIHRvQWRkLnJvdGF0ZS5heGlz
LnogPSB6OwotICAgIHRvQWRkLnJvdGF0ZS5hbmdsZSA9IGRlZ3JlZXM7Ci0gICAgbV9wcml2YXRl
LT5vcGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7Ci19Ci0KLXZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uczo6YXBwZW5kU2NhbGUoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeikKLXsKLSAgICBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb24gdG9BZGQ7Ci0gICAgdG9BZGQubWF0cml4LnNjYWxlM2QoeCwg
eSwgeik7Ci0gICAgdG9BZGQudHlwZSA9IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNm
b3JtT3BlcmF0aW9uU2NhbGU7Ci0gICAgdG9BZGQuc2NhbGUueCA9IHg7Ci0gICAgdG9BZGQuc2Nh
bGUueSA9IHk7Ci0gICAgdG9BZGQuc2NhbGUueiA9IHo7Ci0gICAgbV9wcml2YXRlLT5vcGVyYXRp
b25zLmFwcGVuZCh0b0FkZCk7Ci19Ci0KLXZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBw
ZW5kU2tldyhkb3VibGUgeCwgZG91YmxlIHkpCi17Ci0gICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
IHRvQWRkOwotICAgIHRvQWRkLm1hdHJpeC5za2V3WCh4KTsKLSAgICB0b0FkZC5tYXRyaXguc2tl
d1koeSk7Ci0gICAgdG9BZGQudHlwZSA9IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNm
b3JtT3BlcmF0aW9uU2tldzsKLSAgICB0b0FkZC5za2V3LnggPSB4OwotICAgIHRvQWRkLnNrZXcu
eSA9IHk7Ci0gICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7Ci19Ci0KLXZv
aWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kUGVyc3BlY3RpdmUoZG91YmxlIGRlcHRo
KQotewotICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsKLSAgICB0b0FkZC5tYXRyaXgu
YXBwbHlQZXJzcGVjdGl2ZShkZXB0aCk7Ci0gICAgdG9BZGQudHlwZSA9IFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uUGVyc3BlY3RpdmU7Ci0gICAgdG9BZGQucGVy
c3BlY3RpdmVEZXB0aCA9IGRlcHRoOwotICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5hcHBlbmQo
dG9BZGQpOwotfQotCi12b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZE1hdHJpeChj
b25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQotewotICAgIFdlYlRyYW5zZm9y
bU9wZXJhdGlvbiB0b0FkZDsKLSAgICB0b0FkZC5tYXRyaXggPSBtYXRyaXg7Ci0gICAgdG9BZGQu
dHlwZSA9IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uTWF0cml4
OwotICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5hcHBlbmQodG9BZGQpOwotfQotCi12b2lkIFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZElkZW50aXR5KCkKLXsKLSAgICBtX3ByaXZhdGUt
Pm9wZXJhdGlvbnMuYXBwZW5kKFdlYlRyYW5zZm9ybU9wZXJhdGlvbigpKTsKLX0KLQotYm9vbCBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjppc0lkZW50aXR5KCkgY29uc3QKLXsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAoIW1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS5pc0lkZW50aXR5KCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnM6OnJlc2V0KCkKLXsKLSAgICBtX3ByaXZhdGUucmVzZXQoMCk7
Ci19Ci0KLXZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6aW5pdGlhbGl6ZSgpCi17Ci0gICAg
bV9wcml2YXRlLnJlc2V0KG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zUHJpdmF0ZSk7Ci19Ci0K
LXZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShjb25zdCBXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zJiBvdGhlcikKLXsKLSAgICBpZiAobV9wcml2YXRlLmdldCgpICE9IG90aGVy
Lm1fcHJpdmF0ZS5nZXQoKSkKLSAgICAgICAgbV9wcml2YXRlLnJlc2V0KG5ldyBXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zUHJpdmF0ZSgqb3RoZXIubV9wcml2YXRlLmdldCgpKSk7Ci0gICAgZWxzZQot
ICAgICAgICBpbml0aWFsaXplKCk7Ci19Ci0KLWJvb2wgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6
YmxlbmRJbnRlcm5hbChjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBkb3VibGUg
cHJvZ3Jlc3MsIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAg
Ym9vbCBmcm9tSWRlbnRpdHkgPSBmcm9tLmlzSWRlbnRpdHkoKTsKLSAgICBib29sIHRvSWRlbnRp
dHkgPSBpc0lkZW50aXR5KCk7Ci0gICAgaWYgKGZyb21JZGVudGl0eSAmJiB0b0lkZW50aXR5KQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChtYXRjaGVzVHlwZXMoZnJvbSkpIHsKLSAg
ICAgICAgc2l6ZV90IG51bU9wZXJhdGlvbnMgPSBtYXgoZnJvbUlkZW50aXR5ID8gMCA6IGZyb20u
bV9wcml2YXRlLT5vcGVyYXRpb25zLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9JZGVudGl0eSA/IDAgOiBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgpKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PcGVyYXRpb25zOyArK2kpIHsKLSAg
ICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGJsZW5kZWQ7Ci0gICAgICAgICAgICBp
ZiAoIWJsZW5kVHJhbnNmb3JtT3BlcmF0aW9ucyhmcm9tSWRlbnRpdHkgPyAwIDogJmZyb20ubV9w
cml2YXRlLT5vcGVyYXRpb25zW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9JZGVudGl0eSA/IDAgOiAmbV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZGVkKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXN1bHQubXVsdGlwbHkoYmxlbmRlZCk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0g
YXBwbHkoKTsKLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9tVHJhbnNmb3JtID0gZnJv
bS5hcHBseSgpOwotICAgIHJldHVybiByZXN1bHQuYmxlbmQoZnJvbVRyYW5zZm9ybSwgcHJvZ3Jl
c3MpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25U
cmFuc2xhdGlvblV0aWwuY3BwCmluZGV4IDFlZThlYTA1MzA1NmM1YWYyZmI1NTQ2NzQ4NDIxZmRl
MWIwOTRhOGMuLmIzNDY4YzVmZjlmODVmYjJkYzVhZjExYzEwYjhmODA4ZTU3NTU3MWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlv
blRyYW5zbGF0aW9uVXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmNwcApAQCAtNTcsMTAgKzU3LDEy
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyYgdHJhbnNmb3JtT3BlcmF0aW9ucywgY29uc3QgRmxvYXRTaXplJiBib3hT
aXplKQorUGFzc093blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiB0b1dlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdHJhbnNmb3JtT3BlcmF0aW9ucywg
Y29uc3QgRmxvYXRTaXplJiBib3hTaXplKQogewogICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBkZWVw
IGNvcHkgdGhlIHRyYW5zZm9ybU9wZXJhdGlvbnMgbWF5IGNvbnRhaW4gcmVmIHBvaW50ZXJzIHRv
IFRyYW5zZm9ybU9wZXJhdGlvbiBvYmplY3RzLgotICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMg
d2ViVHJhbnNmb3JtT3BlcmF0aW9uczsKKyAgICBPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9u
cz4gd2ViVHJhbnNmb3JtT3BlcmF0aW9ucyA9IGFkb3B0UHRyKFBsYXRmb3JtOjpjdXJyZW50KCkt
PmNvbXBvc2l0b3JTdXBwb3J0KCktPmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoKSk7CisgICAg
aWYgKCF3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zKQorICAgICAgICByZXR1cm4gUGFzc093blB0cjxX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zPigpOwogICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgdHJh
bnNmb3JtT3BlcmF0aW9ucy5zaXplKCk7ICsraikgewogICAgICAgICBUcmFuc2Zvcm1PcGVyYXRp
b246Ok9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZSA9IHRyYW5zZm9ybU9wZXJhdGlvbnMub3Bl
cmF0aW9ucygpW2pdLT5nZXRPcGVyYXRpb25UeXBlKCk7CiAgICAgICAgIHN3aXRjaCAob3BlcmF0
aW9uVHlwZSkgewpAQCAtNzAsNyArNzIsNyBAQCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHRvV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyhjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0cmFucwogICAg
ICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfM0Q6CiAgICAgICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpTQ0FMRTogewogICAgICAgICAgICAgU2NhbGVUcmFuc2Zvcm1PcGVy
YXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4o
dHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClbal0uZ2V0KCkpOwotICAgICAgICAgICAg
d2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRTY2FsZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNm
b3JtLT55KCksIHRyYW5zZm9ybS0+eigpKTsKKyAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJh
dGlvbnMtPmFwcGVuZFNjYWxlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0tPnkoKSwgdHJhbnNm
b3JtLT56KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YOgpAQCAtNzksNyArODEsNyBAQCBXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zIHRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyhjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb25zJiB0cmFucwogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNM
QVRFXzNEOgogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFOiB7CiAg
ICAgICAgICAgICBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRp
Y19jYXN0PFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMu
b3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlv
bnMuYXBwZW5kVHJhbnNsYXRlKGZsb2F0VmFsdWVGb3JMZW5ndGgodHJhbnNmb3JtLT54KCksIGJv
eFNpemUud2lkdGgoKSksIGZsb2F0VmFsdWVGb3JMZW5ndGgodHJhbnNmb3JtLT55KCksIGJveFNp
emUuaGVpZ2h0KCkpLCBmbG9hdFZhbHVlRm9yTGVuZ3RoKHRyYW5zZm9ybS0+eigpLCAxKSk7Cisg
ICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLT5hcHBlbmRUcmFuc2xhdGUoZmxvYXRW
YWx1ZUZvckxlbmd0aCh0cmFuc2Zvcm0tPngoKSwgYm94U2l6ZS53aWR0aCgpKSwgZmxvYXRWYWx1
ZUZvckxlbmd0aCh0cmFuc2Zvcm0tPnkoKSwgYm94U2l6ZS5oZWlnaHQoKSksIGZsb2F0VmFsdWVG
b3JMZW5ndGgodHJhbnNmb3JtLT56KCksIDEpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWDoKQEAgLTg3LDM1
ICs4OSwzNSBAQCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHRvV2ViVHJhbnNmb3JtT3BlcmF0aW9u
cyhjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0cmFucwogICAgICAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6Uk9UQVRFXzNEOgogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
Uk9UQVRFOiB7CiAgICAgICAgICAgICBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9y
bSA9IHN0YXRpY19jYXN0PFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJh
dGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMuYXBwZW5kUm90YXRlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0tPnkoKSwgdHJh
bnNmb3JtLT56KCksIHRyYW5zZm9ybS0+YW5nbGUoKSk7CisgICAgICAgICAgICB3ZWJUcmFuc2Zv
cm1PcGVyYXRpb25zLT5hcHBlbmRSb3RhdGUodHJhbnNmb3JtLT54KCksIHRyYW5zZm9ybS0+eSgp
LCB0cmFuc2Zvcm0tPnooKSwgdHJhbnNmb3JtLT5hbmdsZSgpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1g6CiAg
ICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1k6CiAgICAgICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpTS0VXOiB7CiAgICAgICAgICAgICBTa2V3VHJhbnNmb3JtT3BlcmF0
aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKj4odHJh
bnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClbal0uZ2V0KCkpOwotICAgICAgICAgICAgd2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRTa2V3KHRyYW5zZm9ybS0+YW5nbGVYKCksIHRyYW5z
Zm9ybS0+YW5nbGVZKCkpOworICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy0+YXBw
ZW5kU2tldyh0cmFuc2Zvcm0tPmFuZ2xlWCgpLCB0cmFuc2Zvcm0tPmFuZ2xlWSgpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpNQVRSSVg6IHsKICAgICAgICAgICAgIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNm
b3JtID0gc3RhdGljX2Nhc3Q8TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKj4odHJhbnNmb3JtT3Bl
cmF0aW9ucy5vcGVyYXRpb25zKClbal0uZ2V0KCkpOwogICAgICAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbSA9IHRyYW5zZm9ybS0+bWF0cml4KCk7Ci0gICAgICAgICAgICB3ZWJUcmFuc2Zv
cm1PcGVyYXRpb25zLmFwcGVuZE1hdHJpeChXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChtKSk7Cisg
ICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLT5hcHBlbmRNYXRyaXgoV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgobSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWF8zRDogewogICAgICAgICAgICAgTWF0
cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PE1hdHJpeDNE
VHJhbnNmb3JtT3BlcmF0aW9uKj4odHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClbal0u
Z2V0KCkpOwogICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbSA9IHRyYW5zZm9ybS0+
bWF0cml4KCk7Ci0gICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZE1hdHJp
eChXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChtKSk7CisgICAgICAgICAgICB3ZWJUcmFuc2Zvcm1P
cGVyYXRpb25zLT5hcHBlbmRNYXRyaXgoV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgobSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlBFUlNQRUNUSVZFOiB7CiAgICAgICAgICAgICBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJh
dGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRp
b24qPih0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAg
ICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZFBlcnNwZWN0aXZlKGZsb2F0VmFsdWVG
b3JMZW5ndGgodHJhbnNmb3JtLT5wZXJzcGVjdGl2ZSgpLCAwKSk7CisgICAgICAgICAgICB3ZWJU
cmFuc2Zvcm1PcGVyYXRpb25zLT5hcHBlbmRQZXJzcGVjdGl2ZShmbG9hdFZhbHVlRm9yTGVuZ3Ro
KHRyYW5zZm9ybS0+cGVyc3BlY3RpdmUoKSwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OklERU5USVRZOgotICAgICAg
ICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRJZGVudGl0eSgpOworICAgICAgICAg
ICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy0+YXBwZW5kSWRlbnRpdHkoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORToKICAgICAgICAg
ICAgIC8vIERvIG5vdGhpbmcuCkBAIC0xMjMsNyArMTI1LDcgQEAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYg
dHJhbnMKICAgICAgICAgfSAvLyBzd2l0Y2gKICAgICB9IC8vIGZvciBlYWNoIG9wZXJhdGlvbgog
Ci0gICAgcmV0dXJuIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnM7CisgICAgcmV0dXJuIHdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMucmVsZWFzZSgpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNs
YXNzIEtleWZyYW1lLCBjbGFzcyBDdXJ2ZT4KQEAgLTE1MywxMyArMTU1LDE3IEBAIHRlbXBsYXRl
IDw+CiBib29sIGFwcGVuZEtleWZyYW1lV2l0aFN0YW5kYXJkVGltaW5nRnVuY3Rpb248VHJhbnNm
b3JtQW5pbWF0aW9uVmFsdWUsIFdlYlRyYW5zZm9ybUtleWZyYW1lLCBXZWJUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZT4oV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlLCBkb3VibGUga2V5
VGltZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIHZhbHVlLCBjb25zdCBUcmFuc2Zv
cm1BbmltYXRpb25WYWx1ZSogbGFzdFZhbHVlLCBXZWJLaXQ6OldlYkFuaW1hdGlvbkN1cnZlOjpU
aW1pbmdGdW5jdGlvblR5cGUgdGltaW5nRnVuY3Rpb25UeXBlLCBjb25zdCBGbG9hdFNpemUmIGJv
eFNpemUpCiB7CiAgICAgYm9vbCBjYW5CbGVuZCA9ICFsYXN0VmFsdWU7Ci0gICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zID0gdG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCp2YWx1
ZS0+dmFsdWUoKSwgYm94U2l6ZSk7CisgICAgT3duUHRyPFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM+
IG9wZXJhdGlvbnModG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCp2YWx1ZS0+dmFsdWUoKSwgYm94
U2l6ZSkpOworICAgIGlmICghb3BlcmF0aW9ucykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGlmICghY2FuQmxlbmQpIHsKLSAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBsYXN0T3Bl
cmF0aW9ucyA9IHRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygqbGFzdFZhbHVlLT52YWx1ZSgpLCBi
b3hTaXplKTsKLSAgICAgICAgY2FuQmxlbmQgPSBsYXN0T3BlcmF0aW9ucy5jYW5CbGVuZFdpdGgo
b3BlcmF0aW9ucyk7CisgICAgICAgIE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiBsYXN0
T3BlcmF0aW9ucyh0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKmxhc3RWYWx1ZS0+dmFsdWUoKSwg
Ym94U2l6ZSkpOworICAgICAgICBpZiAoIWxhc3RPcGVyYXRpb25zKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBjYW5CbGVuZCA9IGxhc3RPcGVyYXRpb25zLT5jYW5CbGVuZFdp
dGgoKm9wZXJhdGlvbnMpOwogICAgIH0KICAgICBpZiAoY2FuQmxlbmQpIHsKLSAgICAgICAgY3Vy
dmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZShrZXlUaW1lLCBvcGVyYXRpb25zKSwgdGltaW5n
RnVuY3Rpb25UeXBlKTsKKyAgICAgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZShr
ZXlUaW1lLCBvcGVyYXRpb25zLmxlYWtQdHIoKSksIHRpbWluZ0Z1bmN0aW9uVHlwZSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNjksMTMgKzE3
NSwxNyBAQCB0ZW1wbGF0ZSA8PgogYm9vbCBhcHBlbmRLZXlmcmFtZVdpdGhDdXN0b21CZXppZXJU
aW1pbmdGdW5jdGlvbjxUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSwgV2ViVHJhbnNmb3JtS2V5ZnJh
bWUsIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPihXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZSogY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSog
dmFsdWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiBsYXN0VmFsdWUsIGRvdWJsZSB4
MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MiwgY29uc3QgRmxvYXRTaXplJiBib3hT
aXplKQogewogICAgIGJvb2wgY2FuQmxlbmQgPSAhbGFzdFZhbHVlOwotICAgIFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9ucyA9IHRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygqdmFsdWUt
PnZhbHVlKCksIGJveFNpemUpOworICAgIE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiBv
cGVyYXRpb25zKHRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygqdmFsdWUtPnZhbHVlKCksIGJveFNp
emUpKTsKKyAgICBpZiAoIW9wZXJhdGlvbnMpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBp
ZiAoIWNhbkJsZW5kKSB7Ci0gICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgbGFzdE9wZXJh
dGlvbnMgPSB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKmxhc3RWYWx1ZS0+dmFsdWUoKSwgYm94
U2l6ZSk7Ci0gICAgICAgIGNhbkJsZW5kID0gbGFzdE9wZXJhdGlvbnMuY2FuQmxlbmRXaXRoKG9w
ZXJhdGlvbnMpOworICAgICAgICBPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gbGFzdE9w
ZXJhdGlvbnModG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCpsYXN0VmFsdWUtPnZhbHVlKCksIGJv
eFNpemUpKTsKKyAgICAgICAgaWYgKCFsYXN0T3BlcmF0aW9ucykKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgY2FuQmxlbmQgPSBsYXN0T3BlcmF0aW9ucy0+Y2FuQmxlbmRXaXRo
KCpvcGVyYXRpb25zKTsKICAgICB9CiAgICAgaWYgKGNhbkJsZW5kKSB7Ci0gICAgICAgIGN1cnZl
LT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoa2V5VGltZSwgb3BlcmF0aW9ucyksIHgxLCB5MSwg
eDIsIHkyKTsKKyAgICAgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZShrZXlUaW1l
LCBvcGVyYXRpb25zLmxlYWtQdHIoKSksIHgxLCB5MSwgeDIsIHkyKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183252</attachid>
            <date>2013-01-17 13:06:30 -0800</date>
            <delta_ts>2013-01-18 11:10:10 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-105553-20130117160329.patch</filename>
            <type>text/plain</type>
            <size>34180</size>
            <attacher name="Ali Juma">ajuma</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5OTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBmODlhMmE4YjcyNjA1
NTI5MGNkZmE3MmM0NjMzMzUxZDg5NjJhMTdjLi5lMTBjMjQwMTU1MWNjYTlhNjMzZmU0YzkyZGJj
ODIwYmY0ZGMyYWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMy0wMS0xNyAg
QWxpIEp1bWEgIDxhanVtYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDb252
ZXJ0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgaW50byBwdXJlIHZpcnR1YWwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTU1MworCisgICAgICAgIFJl
dmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgorCisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dl
YkNvbXBvc2l0b3JTdXBwb3J0Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb21wb3NpdG9yU3VwcG9ydDo6Y3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyk6CisgICAg
ICAgIChXZWJDb21wb3NpdG9yU3VwcG9ydCk6CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dl
YlRyYW5zZm9ybUtleWZyYW1lLmg6CisgICAgICAgIChXZWJUcmFuc2Zvcm1LZXlmcmFtZSk6Cisg
ICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6fldlYlRyYW5zZm9ybU9wZXJhdGlv
bnMpOgorICAgICAgICAoV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyk6CisKIDIwMTMtMDEtMTAgIFRv
bW15IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CiAKICAgICAgICAgTWVkaWFTdHJl
YW0gQVBJOiBBZGRpbmcgdGhlIG5ldyBpZCBhdHRyaWJ1dGUgdG8gTWVkaWFTdHJlYW0gYW5kIE1l
ZGlhU3RyZWFtVHJhY2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiNmJhNDIyNDlkNTUwOWQ2M2Q4ZTVhMjk3YzRl
MDgzZThjY2I2MGNiLi4zZmFlYTE0NTZjNTRkYjhmMDk3Y2ZiMTk2ZTQ2ZjhmMTE4MGE5N2JjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTMtMDEtMTcgIEFsaSBKdW1hICA8YWp1bWFA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29udmVydCBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zIGludG8gcHVyZSB2aXJ0dWFsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU1NTMKKworICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBS
b2JpbnNvbi4KKworICAgICAgICBUaGlzIHJlbW92ZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnMgYW5kIHVwZGF0ZXMKKyAgICAgICAgdXNlcnMgdG8gY29uc3Ry
dWN0IGluc3RhbmNlcyB1c2luZyBhIGZhY3RvcnkgZnVuY3Rpb24uIFRoaXMgYWxzbyBhZGRzCisg
ICAgICAgIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBXZWJUcmFuc2Zvcm1LZXlGcmFtZS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMsIG5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2Vi
VHJhbnNmb3JtS2V5ZnJhbWUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvUGxhdGZvcm0vY2hyb21p
dW0vcHVibGljL1dlYlRyYW5zZm9ybUtleWZyYW1lLmguCisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1LZXlmcmFtZTo6V2ViVHJhbnNmb3JtS2V5ZnJhbWUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1LZXlmcmFtZTo6fldlYlRyYW5zZm9ybUtl
eWZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtS2V5ZnJhbWU6OnRpbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1LZXlmcmFtZTo6dmFsdWUpOgorICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJh
bnNsYXRpb25VdGlsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisK
IDIwMTMtMDEtMTYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBJ
bnRyb2R1Y2UgQmFja2dyb3VuZEhUTUxQYXJzZXIgZm9yIHBhcnNpbmcgSFRNTCBvbiBhIGJhY2tn
cm91bmQgdGhyZWFkCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGlj
L1dlYkNvbXBvc2l0b3JTdXBwb3J0LmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGlj
L1dlYkNvbXBvc2l0b3JTdXBwb3J0LmgKaW5kZXggYTNiOWM0MDk2ZGIzZmM0NmFiMGE2MzAxZGU4
YjdiNTkzNjhmZDMyYi4uNWM3ZjczMzBhN2VhZmEwMTc5NWIwYjk0ZDA5YTdkMjY2ZmQ0ZWJjYSAx
MDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJDb21wb3NpdG9y
U3VwcG9ydC5oCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tcG9z
aXRvclN1cHBvcnQuaApAQCAtNTAsNiArNTAsNyBAQCBjbGFzcyBXZWJTY3JvbGxiYXJUaGVtZUdl
b21ldHJ5OwogY2xhc3MgV2ViU29saWRDb2xvckxheWVyOwogY2xhc3MgV2ViVGhyZWFkOwogY2xh
c3MgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU7CitjbGFzcyBXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zOwogY2xhc3MgV2ViVmlkZW9GcmFtZVByb3ZpZGVyOwogY2xhc3MgV2ViVmlkZW9MYXllcjsK
IApAQCAtMTA0LDYgKzEwNSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgV2ViVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmUqIGNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCkgeyByZXR1cm4g
MDsgfQogCisgICAgdmlydHVhbCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKiBjcmVhdGVUcmFuc2Zv
cm1PcGVyYXRpb25zKCkgeyByZXR1cm4gMDsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+
V2ViQ29tcG9zaXRvclN1cHBvcnQoKSB7IH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUtleWZyYW1lLmggYi9Tb3VyY2UvUGxhdGZv
cm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUtleWZyYW1lLmgKaW5kZXggYzk5ZWY1NTg3
YmEzZDNmNTIzYjBiZmY4ZjczYTE5MzNmMGNhYmFlNC4uYTUwNWQ5YTFlMzU3MTJhZjE1MjdkY2Ew
YTMxMTAzMjNiOTczNDliYSAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1
YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1
bS9wdWJsaWMvV2ViVHJhbnNmb3JtS2V5ZnJhbWUuaApAQCAtMjUsMTkgKzI1LDI1IEBACiAjaWZu
ZGVmIFdlYlRyYW5zZm9ybUtleWZyYW1lX2gKICNkZWZpbmUgV2ViVHJhbnNmb3JtS2V5ZnJhbWVf
aAogCisjaW5jbHVkZSAiV2ViUHJpdmF0ZU93blB0ci5oIgogI2luY2x1ZGUgIldlYlRyYW5zZm9y
bU9wZXJhdGlvbnMuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0cnVjdCBXZWJUcmFuc2Zv
cm1LZXlmcmFtZSB7Ci0gICAgV2ViVHJhbnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUsIGNvbnN0
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlKQotICAgICAgICA6IHRpbWUodGltZSkKLSAg
ICAgICAgLCB2YWx1ZSh2YWx1ZSkKLSAgICB7Ci0gICAgfQorY2xhc3MgV2ViVHJhbnNmb3JtS2V5
ZnJhbWUgeworcHVibGljOgorICAgIC8vIFRha2VzIG93bmVyc2hpcCBvZiB0aGUgV2ViVHJhbmZv
cm1PcGVyYXRpb25zIG9iamVjdC4KKyAgICBXRUJLSVRfRVhQT1JUIFdlYlRyYW5zZm9ybUtleWZy
YW1lKGRvdWJsZSB0aW1lLCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKiB2YWx1ZSk7CiAKLSAgICBk
b3VibGUgdGltZTsKLSAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHZhbHVlOworICAgIFdFQktJ
VF9FWFBPUlQgfldlYlRyYW5zZm9ybUtleWZyYW1lKCk7CisKKyAgICBXRUJLSVRfRVhQT1JUIGRv
dWJsZSB0aW1lKCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIGNvbnN0IFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnMmIHZhbHVlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZG91YmxlIG1fdGlt
ZTsKKyAgICBXZWJQcml2YXRlT3duUHRyPFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM+IG1fdmFsdWU7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oIGIvU291cmNlL1BsYXRm
b3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmgKaW5kZXggOWUzMGY1
ODI4NzU3OTg3MmMyYTlhNmQ1Y2EwMTExMTIwNWYzYmEyNi4uYjFlY2M0ZmEyMzFjOWQyYmE5OGRk
ZDU0NmIyNWVlOTNiZmU2MWM2YSAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVt
L3B1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmgKKysrIGIvU291cmNlL1BsYXRmb3JtL2No
cm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmgKQEAgLTI3LDY5ICsyNywyOCBA
QAogCiAjaW5jbHVkZSAiV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAotbmFtZXNwYWNlIFdl
YktpdCB7CisjZGVmaW5lIFdFQl9UUkFOU0ZPUk1fT1BFUkFUSU9OU19JU19WSVJUVUFMIDEKIAot
Y2xhc3MgV2ViVHJhbnNmb3JtT3BlcmF0aW9uc1ByaXZhdGU7CituYW1lc3BhY2UgV2ViS2l0IHsK
IAotLy8gVHJhbnNmb3JtIG9wZXJhdGlvbnMgYXJlIGEgZGVjb21wb3NlZCB0cmFuc2Zvcm1hdGlv
biBtYXRyaXguIEl0IGNhbiBiZQotLy8gYXBwbGllZCB0byBvYnRhaW4gYSBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBhdCBhbnkgdGltZSwgYW5kIGNhbiBiZSBibGVuZGVkCi0vLyBpbnRlbGxpZ2Vu
dGx5IHdpdGggb3RoZXIgdHJhbnNmb3JtIG9wZXJhdGlvbnMsIHNvIGxvbmcgYXMgdGhleSByZXBy
ZXNlbnQgdGhlCi0vLyBzYW1lIGRlY29tcG9zaXRpb24uIEZvciBleGFtcGxlLCBpZiB3ZSBoYXZl
IGEgdHJhbnNmb3JtIHRoYXQgaXMgbWFkZSB1cCBvZgotLy8gYSByb3RhdGlvbiBmb2xsb3dlZCBi
eSBza2V3LCBpdCBjYW4gYmUgYmxlbmRlZCBpbnRlbGxpZ2VudGx5IHdpdGggYW5vdGhlcgotLy8g
dHJhbnNmb3JtIG1hZGUgdXAgb2YgYSByb3RhdGlvbiBmb2xsb3dlZCBieSBhIHNrZXcuIEJsZW5k
aW5nIGlzIHBvc3NpYmxlIGlmCi0vLyB3ZSBoYXZlIHR3byBkaXNzaW1pbGFyIHNldHMgb2YgdHJh
bnNmb3JtIG9wZXJhdGlvbnMsIGJ1dCB0aGUgZWZmZWN0IG1heSBub3QKLS8vIGJlIHdoYXQgd2Fz
IGludGVuZGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBjb21tZW50cyBmb3IgdGhl
IGJsZW5kCi0vLyBmdW5jdGlvbiBiZWxvdy4KIGNsYXNzIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMg
ewogcHVibGljOgotICAgIH5XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCkgeyByZXNldCgpOyB9Ci0K
LSAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCkgeyBpbml0aWFsaXplKCk7IH0KLSAgICBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIG90aGVyKSB7
IGluaXRpYWxpemUob3RoZXIpOyB9Ci0gICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3BlcmF0
b3I9KGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIG90aGVyKQotICAgIHsKLSAgICAgICAg
aW5pdGlhbGl6ZShvdGhlcik7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICAv
LyBSZXR1cm5zIGEgdHJhbnNmb3JtYXRpb24gbWF0cml4IHJlcHJlc2VudGluZyB0aGVzZSB0cmFu
c2Zvcm0gb3BlcmF0aW9ucy4KLSAgICBXRUJLSVRfRVhQT1JUIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IGFwcGx5KCkgY29uc3Q7Ci0KLSAgICAvLyBHaXZlbiBhbm90aGVyIHNldCBvZiB0cmFuc2Zv
cm0gb3BlcmF0aW9ucyBhbmQgYSBwcm9ncmVzcyBpbiB0aGUgcmFuZ2UKLSAgICAvLyBbMCwgMV0s
IHJldHVybnMgYSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggcmVwcmVzZW50aW5nIHRoZSBpbnRlcm1l
ZGlhdGUKLSAgICAvLyB2YWx1ZS4gSWYgdGhpcy0+bWF0Y2hlc1R5cGVzKGZyb20pLCB0aGVuIGVh
Y2ggb2YgdGhlIG9wZXJhdGlvbnMgYXJlCi0gICAgLy8gYmxlbmRlZCBzZXBhcmF0ZWx5IGFuZCB0
aGVuIGNvbWJpbmVkLiBPdGhlcndpc2UsIHRoZSB0d28gc2V0cyBvZgotICAgIC8vIHRyYW5zZm9y
bXMgYXJlIGJha2VkIHRvIG1hdHJpY2VzICh1c2luZyBhcHBseSksIGFuZCB0aGUgbWF0cmljZXMg
YXJlCi0gICAgLy8gdGhlbiBkZWNvbXBvc2VkIGFuZCBpbnRlcnBvbGF0ZWQuIEZvciBtb3JlIGlu
Zm9ybWF0aW9uLCBzZWUKLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELWNzczMt
MmQtdHJhbnNmb3Jtcy0yMDExMTIxNS8jbWF0cml4LWRlY29tcG9zaXRpb24uCi0gICAgV0VCS0lU
X0VYUE9SVCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBibGVuZChjb25zdCBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zJiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0OwotCi0gICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoaXMgb3BlcmF0aW9uIGFuZCBpdHMgZGVzY2VuZGFudHMgaGF2ZSB0aGUgc2Ft
ZSB0eXBlcwotICAgIC8vIGFzIG90aGVyIGFuZCBpdHMgZGVzY2VuZGFudHMuCi0gICAgV0VCS0lU
X0VYUE9SVCBib29sIG1hdGNoZXNUeXBlcyhjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBv
dGhlcikgY29uc3Q7CisgICAgdmlydHVhbCB+V2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpIHsgfQog
CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZXNlIG9wZXJhdGlvbnMgY2FuIGJlIGJsZW5kZWQu
IEl0IHdpbGwgb25seSByZXR1cm4KICAgICAvLyBmYWxzZSBpZiB3ZSBtdXN0IHJlc29ydCB0byBt
YXRyaXggaW50ZXJwb2xhdGlvbiwgYW5kIG1hdHJpeCBpbnRlcnBvbGF0aW9uCiAgICAgLy8gZmFp
bHMgKHRoaXMgY2FuIGhhcHBlbiBpZiBlaXRoZXIgbWF0cml4IGNhbm5vdCBiZSBkZWNvbXBvc2Vk
KS4KLSAgICBXRUJLSVRfRVhQT1JUIGJvb2wgY2FuQmxlbmRXaXRoKGNvbnN0IFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnMmIG90aGVyKSBjb25zdDsKLQotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhcHBl
bmRUcmFuc2xhdGUoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeik7Ci0gICAgV0VCS0lUX0VY
UE9SVCB2b2lkIGFwcGVuZFJvdGF0ZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6LCBkb3Vi
bGUgZGVncmVlcyk7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFwcGVuZFNjYWxlKGRvdWJsZSB4
LCBkb3VibGUgeSwgZG91YmxlIHopOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhcHBlbmRTa2V3
KGRvdWJsZSB4LCBkb3VibGUgeSk7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFwcGVuZFBlcnNw
ZWN0aXZlKGRvdWJsZSBkZXB0aCk7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFwcGVuZE1hdHJp
eChjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwotICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBhcHBlbmRJZGVudGl0eSgpOwotCi0gICAgV0VCS0lUX0VYUE9SVCBib29sIGlzSWRlbnRpdHko
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQmxlbmRXaXRoKGNvbnN0IFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnMmIG90aGVyKSBjb25zdCA9IDA7CiAKLXByaXZhdGU6Ci0gICAgV0VCS0lUX0VY
UE9SVCB2b2lkIHJlc2V0KCk7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGluaXRpYWxpemUoKTsK
LSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zJiBwcm90b3R5cGUpOwotICAgIFdFQktJVF9FWFBPUlQgYm9vbCBibGVuZEludGVybmFs
KGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHJlc3VsdCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFw
cGVuZFRyYW5zbGF0ZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGFwcGVuZFJvdGF0ZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6LCBkb3Vi
bGUgZGVncmVlcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTY2FsZShkb3VibGUgeCwg
ZG91YmxlIHksIGRvdWJsZSB6KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFNrZXcoZG91
YmxlIHgsIGRvdWJsZSB5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFBlcnNwZWN0aXZl
KGRvdWJsZSBkZXB0aCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRNYXRyaXgoY29uc3Qg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZElk
ZW50aXR5KCkgPSAwOwogCi0gICAgV2ViUHJpdmF0ZU93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zUHJpdmF0ZT4gbV9wcml2YXRlOworICAgIHZpcnR1YWwgYm9vbCBpc0lkZW50aXR5KCkgY29u
c3QgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXgg
YjQ2MGRhOTE0NzhkYzIwZjZjZGM0NGQ1ZmM0YjlmZjBiNjY0OGY0OC4uY2M1MzY0ZTIzYWRhNWE0
M2QyMDk0ZWJiMjA1ODk0YzI1Y2NmMzY0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNzE5NCw3ICs3
MTk0LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlNjcm9s
bGJhckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJT
aGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL3N1cHBvcnQvV2ViVGhyZWFkU2FmZURhdGEuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9ybUtleWZyYW1lLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2Vi
VVJMLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxF
cnJvci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
c3VwcG9ydC9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9ybUtleWZyYW1lLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
MGVjMjIzYjYwMThiNjAwMzA1MzU1MzViZWYzMWU4YjEyYjg2OGJiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1L
ZXlmcmFtZS5jcHAKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworV2ViVHJhbnNmb3JtS2V5ZnJhbWU6OldlYlRyYW5zZm9ybUtleWZy
YW1lKGRvdWJsZSB0aW1lLCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKiB2YWx1ZSkKKyAgICA6IG1f
dGltZSh0aW1lKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKK3sKK30KKworV2ViVHJhbnNmb3JtS2V5
ZnJhbWU6On5XZWJUcmFuc2Zvcm1LZXlmcmFtZSgpCit7CisgICAgbV92YWx1ZS5yZXNldCgwKTsK
K30KKworZG91YmxlIFdlYlRyYW5zZm9ybUtleWZyYW1lOjp0aW1lKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV90aW1lOworfQorCitjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBXZWJUcmFu
c2Zvcm1LZXlmcmFtZTo6dmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiAqbV92YWx1ZS5nZXQo
KTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjUyZDljNjYzNWY1
MjQ1ZjMwODY1MjQ3N2NiYWE2YTRjZTI1YjFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBv
cnQvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOTQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSA8cHVi
bGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaD4KLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFj
ZSB7Ci1jb25zdCBkb3VibGUgRVBTSUxPTiA9IDFlLTQ7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1zdHJ1Y3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHsKLSAgICBlbnVtIFR5cGUgewotICAg
ICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UcmFuc2xhdGUsCi0gICAgICAgIFdlYlRyYW5zZm9y
bU9wZXJhdGlvblJvdGF0ZSwKLSAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uU2NhbGUsCi0g
ICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblNrZXcsCi0gICAgICAgIFdlYlRyYW5zZm9ybU9w
ZXJhdGlvblBlcnNwZWN0aXZlLAotICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25NYXRyaXgs
Ci0gICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbklkZW50aXR5Ci0gICAgfTsKLQotICAgIFdl
YlRyYW5zZm9ybU9wZXJhdGlvbigpCi0gICAgICAgIDogdHlwZShXZWJUcmFuc2Zvcm1PcGVyYXRp
b25JZGVudGl0eSkKLSAgICB7Ci0gICAgfQotCi0gICAgVHlwZSB0eXBlOwotICAgIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKLQotICAgIHVuaW9uIHsKLSAgICAgICAgZG91YmxlIHBl
cnNwZWN0aXZlRGVwdGg7Ci0KLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIGRvdWJsZSB4
LCB5OwotICAgICAgICB9IHNrZXc7Ci0KLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgICBk
b3VibGUgeCwgeSwgejsKLSAgICAgICAgfSBzY2FsZTsKLQotICAgICAgICBzdHJ1Y3QgewotICAg
ICAgICAgICAgZG91YmxlIHgsIHksIHo7Ci0gICAgICAgIH0gdHJhbnNsYXRlOwotCi0gICAgICAg
IHN0cnVjdCB7Ci0gICAgICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgICAgIGRvdWJsZSB4
LCB5LCB6OwotICAgICAgICAgICAgfSBheGlzOwotCi0gICAgICAgICAgICBkb3VibGUgYW5nbGU7
Ci0gICAgICAgIH0gcm90YXRlOwotICAgIH07Ci0KLSAgICBib29sIGlzSWRlbnRpdHkoKSBjb25z
dCB7IHJldHVybiBtYXRyaXguaXNJZGVudGl0eSgpOyB9Ci19OwotCi1jbGFzcyBXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zUHJpdmF0ZSB7Ci1wdWJsaWM6Ci0gICAgVmVjdG9yPFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbj4gb3BlcmF0aW9uczsKLX07Ci0KLVdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnM6OmFwcGx5KCkgY29uc3QKLXsKLSAgICBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCB0b1JldHVybjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJpdmF0ZS0+
b3BlcmF0aW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAgdG9SZXR1cm4ubXVsdGlwbHkobV9wcml2
YXRlLT5vcGVyYXRpb25zW2ldLm1hdHJpeCk7Ci0gICAgcmV0dXJuIHRvUmV0dXJuOwotfQotCi1z
dGF0aWMgYm9vbCBpc0lkZW50aXR5KGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiogb3BlcmF0
aW9uKQotewotICAgIHJldHVybiAhb3BlcmF0aW9uIHx8IG9wZXJhdGlvbi0+aXNJZGVudGl0eSgp
OwotfQotCi1zdGF0aWMgYm9vbCBzaGFyZVNhbWVBeGlzKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJh
dGlvbiogZnJvbSwgY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiB0bywgZG91YmxlJiBheGlz
WCwgZG91YmxlJiBheGlzWSwgZG91YmxlJiBheGlzWiwgZG91YmxlJiBhbmdsZUZyb20pCi17Ci0g
ICAgaWYgKGlzSWRlbnRpdHkoZnJvbSkgJiYgaXNJZGVudGl0eSh0bykpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmIChpc0lkZW50aXR5KGZyb20pICYmICFpc0lkZW50aXR5KHRvKSkg
ewotICAgICAgICBheGlzWCA9IHRvLT5yb3RhdGUuYXhpcy54OwotICAgICAgICBheGlzWSA9IHRv
LT5yb3RhdGUuYXhpcy55OwotICAgICAgICBheGlzWiA9IHRvLT5yb3RhdGUuYXhpcy56OwotICAg
ICAgICBhbmdsZUZyb20gPSAwOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBp
ZiAoIWlzSWRlbnRpdHkoZnJvbSkgJiYgaXNJZGVudGl0eSh0bykpIHsKLSAgICAgICAgYXhpc1gg
PSBmcm9tLT5yb3RhdGUuYXhpcy54OwotICAgICAgICBheGlzWSA9IGZyb20tPnJvdGF0ZS5heGlz
Lnk7Ci0gICAgICAgIGF4aXNaID0gZnJvbS0+cm90YXRlLmF4aXMuejsKLSAgICAgICAgYW5nbGVG
cm9tID0gZnJvbS0+cm90YXRlLmFuZ2xlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBkb3VibGUgbGVuZ3RoMiA9IGZyb20tPnJvdGF0ZS5heGlzLnggKiBmcm9tLT5yb3RhdGUu
YXhpcy54ICsgZnJvbS0+cm90YXRlLmF4aXMueSAqIGZyb20tPnJvdGF0ZS5heGlzLnkgKyBmcm9t
LT5yb3RhdGUuYXhpcy56ICogZnJvbS0+cm90YXRlLmF4aXMuejsKLSAgICBkb3VibGUgb3RoZXJM
ZW5ndGgyID0gdG8tPnJvdGF0ZS5heGlzLnggKiB0by0+cm90YXRlLmF4aXMueCArIHRvLT5yb3Rh
dGUuYXhpcy55ICogdG8tPnJvdGF0ZS5heGlzLnkgKyB0by0+cm90YXRlLmF4aXMueiAqIHRvLT5y
b3RhdGUuYXhpcy56OwotCi0gICAgaWYgKGxlbmd0aDIgPD0gRVBTSUxPTiB8fCBvdGhlckxlbmd0
aDIgPD0gRVBTSUxPTikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZG91YmxlIGRvdCA9
IHRvLT5yb3RhdGUuYXhpcy54ICogZnJvbS0+cm90YXRlLmF4aXMueCArIHRvLT5yb3RhdGUuYXhp
cy55ICogZnJvbS0+cm90YXRlLmF4aXMueSArIHRvLT5yb3RhdGUuYXhpcy56ICogZnJvbS0+cm90
YXRlLmF4aXMuejsKLSAgICBkb3VibGUgZXJyb3IgPSBmYWJzKDEuMCAtIChkb3QgKiBkb3QpIC8g
KGxlbmd0aDIgKiBvdGhlckxlbmd0aDIpKTsKLSAgICBib29sIHJlc3VsdCA9IGVycm9yIDwgRVBT
SUxPTjsKLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIGF4aXNYID0gdG8tPnJvdGF0ZS5heGlz
Lng7Ci0gICAgICAgIGF4aXNZID0gdG8tPnJvdGF0ZS5heGlzLnk7Ci0gICAgICAgIGF4aXNaID0g
dG8tPnJvdGF0ZS5heGlzLno7Ci0gICAgICAgIC8vIElmIHRoZSBheGVzIGFyZSBwb2ludGluZyBp
biBvcHBvc2l0ZSBkaXJlY3Rpb25zLCB3ZSBuZWVkIHRvIHJldmVyc2UKLSAgICAgICAgLy8gdGhl
IGFuZ2xlLgotICAgICAgICBhbmdsZUZyb20gPSBkb3QgPiAwID8gZnJvbS0+cm90YXRlLmFuZ2xl
IDogLWZyb20tPnJvdGF0ZS5hbmdsZTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
c3RhdGljIGRvdWJsZSBibGVuZERvdWJsZXMoZG91YmxlIGZyb20sIGRvdWJsZSB0bywgZG91Ymxl
IHByb2dyZXNzKQotewotICAgIHJldHVybiBmcm9tICogKDEgLSBwcm9ncmVzcykgKyB0byAqIHBy
b2dyZXNzOwotfQotCi1zdGF0aWMgYm9vbCBibGVuZFRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3Qg
V2ViVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb24q
IHRvLCBkb3VibGUgcHJvZ3Jlc3MsIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXN1bHQpCi17
Ci0gICAgaWYgKGlzSWRlbnRpdHkoZnJvbSkgJiYgaXNJZGVudGl0eSh0bykpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpUeXBlIGludGVycG9sYXRp
b25UeXBlID0gV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25JZGVu
dGl0eTsKLSAgICBpZiAoaXNJZGVudGl0eSh0bykpCi0gICAgICAgIGludGVycG9sYXRpb25UeXBl
ID0gZnJvbS0+dHlwZTsKLSAgICBlbHNlCi0gICAgICAgIGludGVycG9sYXRpb25UeXBlID0gdG8t
PnR5cGU7Ci0KLSAgICBzd2l0Y2ggKGludGVycG9sYXRpb25UeXBlKSB7Ci0gICAgY2FzZSBXZWJU
cmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvblRyYW5zbGF0ZTogewotICAg
ICAgICBkb3VibGUgZnJvbVggPSBpc0lkZW50aXR5KGZyb20pID8gMCA6IGZyb20tPnRyYW5zbGF0
ZS54OwotICAgICAgICBkb3VibGUgZnJvbVkgPSBpc0lkZW50aXR5KGZyb20pID8gMCA6IGZyb20t
PnRyYW5zbGF0ZS55OwotICAgICAgICBkb3VibGUgZnJvbVogPSBpc0lkZW50aXR5KGZyb20pID8g
MCA6IGZyb20tPnRyYW5zbGF0ZS56OwotICAgICAgICBkb3VibGUgdG9YID0gaXNJZGVudGl0eSh0
bykgPyAwIDogdG8tPnRyYW5zbGF0ZS54OwotICAgICAgICBkb3VibGUgdG9ZID0gaXNJZGVudGl0
eSh0bykgPyAwIDogdG8tPnRyYW5zbGF0ZS55OwotICAgICAgICBkb3VibGUgdG9aID0gaXNJZGVu
dGl0eSh0bykgPyAwIDogdG8tPnRyYW5zbGF0ZS56OwotICAgICAgICByZXN1bHQudHJhbnNsYXRl
M2QoYmxlbmREb3VibGVzKGZyb21YLCB0b1gsIHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJsZW5kRG91Ymxlcyhmcm9tWSwgdG9ZLCBwcm9ncmVzcyksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBibGVuZERvdWJsZXMoZnJvbVosIHRvWiwgcHJvZ3Jlc3MpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJU
cmFuc2Zvcm1PcGVyYXRpb25Sb3RhdGU6IHsKLSAgICAgICAgZG91YmxlIGF4aXNYID0gMDsKLSAg
ICAgICAgZG91YmxlIGF4aXNZID0gMDsKLSAgICAgICAgZG91YmxlIGF4aXNaID0gMTsKLSAgICAg
ICAgZG91YmxlIGZyb21BbmdsZSA9IDA7Ci0gICAgICAgIGRvdWJsZSB0b0FuZ2xlID0gaXNJZGVu
dGl0eSh0bykgPyAwIDogdG8tPnJvdGF0ZS5hbmdsZTsKLSAgICAgICAgaWYgKHNoYXJlU2FtZUF4
aXMoZnJvbSwgdG8sIGF4aXNYLCBheGlzWSwgYXhpc1osIGZyb21BbmdsZSkpCi0gICAgICAgICAg
ICByZXN1bHQucm90YXRlM2QoYXhpc1gsIGF4aXNZLCBheGlzWiwgYmxlbmREb3VibGVzKGZyb21B
bmdsZSwgdG9BbmdsZSwgcHJvZ3Jlc3MpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b01hdHJpeDsKLSAgICAgICAgICAgIGlmICghaXNJZGVu
dGl0eSh0bykpCi0gICAgICAgICAgICAgICAgdG9NYXRyaXggPSB0by0+bWF0cml4OwotICAgICAg
ICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZnJvbU1hdHJpeDsKLSAgICAgICAgICAgIGlm
ICghaXNJZGVudGl0eShmcm9tKSkKLSAgICAgICAgICAgICAgICBmcm9tTWF0cml4ID0gZnJvbS0+
bWF0cml4OwotICAgICAgICAgICAgcmVzdWx0ID0gdG9NYXRyaXg7Ci0gICAgICAgICAgICBpZiAo
IXJlc3VsdC5ibGVuZChmcm9tTWF0cml4LCBwcm9ncmVzcykpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFdl
YlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uU2NhbGU6IHsKLSAgICAg
ICAgZG91YmxlIGZyb21YID0gaXNJZGVudGl0eShmcm9tKSA/IDEgOiBmcm9tLT5zY2FsZS54Owot
ICAgICAgICBkb3VibGUgZnJvbVkgPSBpc0lkZW50aXR5KGZyb20pID8gMSA6IGZyb20tPnNjYWxl
Lnk7Ci0gICAgICAgIGRvdWJsZSBmcm9tWiA9IGlzSWRlbnRpdHkoZnJvbSkgPyAxIDogZnJvbS0+
c2NhbGUuejsKLSAgICAgICAgZG91YmxlIHRvWCA9IGlzSWRlbnRpdHkodG8pID8gMSA6IHRvLT5z
Y2FsZS54OwotICAgICAgICBkb3VibGUgdG9ZID0gaXNJZGVudGl0eSh0bykgPyAxIDogdG8tPnNj
YWxlLnk7Ci0gICAgICAgIGRvdWJsZSB0b1ogPSBpc0lkZW50aXR5KHRvKSA/IDEgOiB0by0+c2Nh
bGUuejsKLSAgICAgICAgcmVzdWx0LnNjYWxlM2QoYmxlbmREb3VibGVzKGZyb21YLCB0b1gsIHBy
b2dyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgYmxlbmREb3VibGVzKGZyb21ZLCB0b1ks
IHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgYmxlbmREb3VibGVzKGZyb21aLCB0
b1osIHByb2dyZXNzKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uU2tldzogewotICAgICAgICBkb3Vi
bGUgZnJvbVggPSBpc0lkZW50aXR5KGZyb20pID8gMCA6IGZyb20tPnNrZXcueDsKLSAgICAgICAg
ZG91YmxlIGZyb21ZID0gaXNJZGVudGl0eShmcm9tKSA/IDAgOiBmcm9tLT5za2V3Lnk7Ci0gICAg
ICAgIGRvdWJsZSB0b1ggPSBpc0lkZW50aXR5KHRvKSA/IDAgOiB0by0+c2tldy54OwotICAgICAg
ICBkb3VibGUgdG9ZID0gaXNJZGVudGl0eSh0bykgPyAwIDogdG8tPnNrZXcueTsKLSAgICAgICAg
cmVzdWx0LnNrZXdYKGJsZW5kRG91Ymxlcyhmcm9tWCwgdG9YLCBwcm9ncmVzcykpOwotICAgICAg
ICByZXN1bHQuc2tld1koYmxlbmREb3VibGVzKGZyb21ZLCB0b1ksIHByb2dyZXNzKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJh
bnNmb3JtT3BlcmF0aW9uUGVyc3BlY3RpdmU6IHsKLSAgICAgICAgZG91YmxlIGZyb21QZXJzcGVj
dGl2ZURlcHRoID0gaXNJZGVudGl0eShmcm9tKSA/IG51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1h
eCgpIDogZnJvbS0+cGVyc3BlY3RpdmVEZXB0aDsKLSAgICAgICAgZG91YmxlIHRvUGVyc3BlY3Rp
dmVEZXB0aCA9IGlzSWRlbnRpdHkodG8pID8gbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkg
OiB0by0+cGVyc3BlY3RpdmVEZXB0aDsKLSAgICAgICAgcmVzdWx0LmFwcGx5UGVyc3BlY3RpdmUo
YmxlbmREb3VibGVzKGZyb21QZXJzcGVjdGl2ZURlcHRoLCB0b1BlcnNwZWN0aXZlRGVwdGgsIHBy
b2dyZXNzKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uTWF0cml4OiB7Ci0gICAgICAgIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IHRvTWF0cml4OwotICAgICAgICBpZiAoIWlzSWRlbnRpdHkodG8pKQot
ICAgICAgICAgICAgdG9NYXRyaXggPSB0by0+bWF0cml4OwotICAgICAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBmcm9tTWF0cml4OwotICAgICAgICBpZiAoIWlzSWRlbnRpdHkoZnJvbSkpCi0g
ICAgICAgICAgICBmcm9tTWF0cml4ID0gZnJvbS0+bWF0cml4OwotICAgICAgICByZXN1bHQgPSB0
b01hdHJpeDsKLSAgICAgICAgaWYgKCFyZXN1bHQuYmxlbmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3Mp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvbklkZW50aXR5
OgotICAgICAgICAvLyBEbyBub3RoaW5nLgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uczo6YmxlbmQoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgZG91Ymxl
IHByb2dyZXNzKSBjb25zdAotewotICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRvUmV0dXJu
OwotICAgIGJsZW5kSW50ZXJuYWwoZnJvbSwgcHJvZ3Jlc3MsIHRvUmV0dXJuKTsKLSAgICByZXR1
cm4gdG9SZXR1cm47Ci19Ci0KLWJvb2wgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6bWF0Y2hlc1R5
cGVzKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIG90aGVyKSBjb25zdAotewotICAgIGlm
IChpc0lkZW50aXR5KCkgfHwgb3RoZXIuaXNJZGVudGl0eSgpKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIGlmIChtX3ByaXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgpICE9IG90aGVyLm1fcHJp
dmF0ZS0+b3BlcmF0aW9ucy5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcml2YXRlLT5vcGVyYXRpb25zLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChtX3ByaXZhdGUtPm9wZXJhdGlvbnNbaV0udHlwZSAhPSBvdGhlci5tX3By
aXZhdGUtPm9wZXJhdGlvbnNbaV0udHlwZQotICAgICAgICAgICAgJiYgIW1fcHJpdmF0ZS0+b3Bl
cmF0aW9uc1tpXS5pc0lkZW50aXR5KCkKLSAgICAgICAgICAgICYmICFvdGhlci5tX3ByaXZhdGUt
Pm9wZXJhdGlvbnNbaV0uaXNJZGVudGl0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYlRyYW5zZm9ybU9wZXJhdGlv
bnM6OmNhbkJsZW5kV2l0aChjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdGhlcikgY29u
c3QKLXsKLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkdW1teTsKLSAgICByZXR1cm4gYmxl
bmRJbnRlcm5hbChvdGhlciwgMC41LCBkdW1teSk7Ci19Ci0KLXZvaWQgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uczo6YXBwZW5kVHJhbnNsYXRlKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopCi17
Ci0gICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHRvQWRkOwotICAgIHRvQWRkLm1hdHJpeC50cmFu
c2xhdGUzZCh4LCB5LCB6KTsKLSAgICB0b0FkZC50eXBlID0gV2ViVHJhbnNmb3JtT3BlcmF0aW9u
OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25UcmFuc2xhdGU7Ci0gICAgdG9BZGQudHJhbnNsYXRlLngg
PSB4OwotICAgIHRvQWRkLnRyYW5zbGF0ZS55ID0geTsKLSAgICB0b0FkZC50cmFuc2xhdGUueiA9
IHo7Ci0gICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7Ci19Ci0KLXZvaWQg
V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kUm90YXRlKGRvdWJsZSB4LCBkb3VibGUgeSwg
ZG91YmxlIHosIGRvdWJsZSBkZWdyZWVzKQotewotICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0
b0FkZDsKLSAgICB0b0FkZC5tYXRyaXgucm90YXRlM2QoeCwgeSwgeiwgZGVncmVlcyk7Ci0gICAg
dG9BZGQudHlwZSA9IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9u
Um90YXRlOwotICAgIHRvQWRkLnJvdGF0ZS5heGlzLnggPSB4OwotICAgIHRvQWRkLnJvdGF0ZS5h
eGlzLnkgPSB5OwotICAgIHRvQWRkLnJvdGF0ZS5heGlzLnogPSB6OwotICAgIHRvQWRkLnJvdGF0
ZS5hbmdsZSA9IGRlZ3JlZXM7Ci0gICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVuZCh0b0Fk
ZCk7Ci19Ci0KLXZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kU2NhbGUoZG91Ymxl
IHgsIGRvdWJsZSB5LCBkb3VibGUgeikKLXsKLSAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gdG9B
ZGQ7Ci0gICAgdG9BZGQubWF0cml4LnNjYWxlM2QoeCwgeSwgeik7Ci0gICAgdG9BZGQudHlwZSA9
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uU2NhbGU7Ci0gICAg
dG9BZGQuc2NhbGUueCA9IHg7Ci0gICAgdG9BZGQuc2NhbGUueSA9IHk7Ci0gICAgdG9BZGQuc2Nh
bGUueiA9IHo7Ci0gICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7Ci19Ci0K
LXZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kU2tldyhkb3VibGUgeCwgZG91Ymxl
IHkpCi17Ci0gICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHRvQWRkOwotICAgIHRvQWRkLm1hdHJp
eC5za2V3WCh4KTsKLSAgICB0b0FkZC5tYXRyaXguc2tld1koeSk7Ci0gICAgdG9BZGQudHlwZSA9
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uU2tldzsKLSAgICB0
b0FkZC5za2V3LnggPSB4OwotICAgIHRvQWRkLnNrZXcueSA9IHk7Ci0gICAgbV9wcml2YXRlLT5v
cGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7Ci19Ci0KLXZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
czo6YXBwZW5kUGVyc3BlY3RpdmUoZG91YmxlIGRlcHRoKQotewotICAgIFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbiB0b0FkZDsKLSAgICB0b0FkZC5tYXRyaXguYXBwbHlQZXJzcGVjdGl2ZShkZXB0aCk7
Ci0gICAgdG9BZGQudHlwZSA9IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3Bl
cmF0aW9uUGVyc3BlY3RpdmU7Ci0gICAgdG9BZGQucGVyc3BlY3RpdmVEZXB0aCA9IGRlcHRoOwot
ICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5hcHBlbmQodG9BZGQpOwotfQotCi12b2lkIFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZE1hdHJpeChjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbWF0cml4KQotewotICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsKLSAgICB0
b0FkZC5tYXRyaXggPSBtYXRyaXg7Ci0gICAgdG9BZGQudHlwZSA9IFdlYlRyYW5zZm9ybU9wZXJh
dGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uTWF0cml4OwotICAgIG1fcHJpdmF0ZS0+b3BlcmF0
aW9ucy5hcHBlbmQodG9BZGQpOwotfQotCi12b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFw
cGVuZElkZW50aXR5KCkKLXsKLSAgICBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuYXBwZW5kKFdlYlRy
YW5zZm9ybU9wZXJhdGlvbigpKTsKLX0KLQotYm9vbCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjpp
c0lkZW50aXR5KCkgY29uc3QKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJpdmF0
ZS0+b3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIW1fcHJpdmF0ZS0+b3Bl
cmF0aW9uc1tpXS5pc0lkZW50aXR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OnJl
c2V0KCkKLXsKLSAgICBtX3ByaXZhdGUucmVzZXQoMCk7Ci19Ci0KLXZvaWQgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9uczo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgbV9wcml2YXRlLnJlc2V0KG5ldyBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zUHJpdmF0ZSk7Ci19Ci0KLXZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uczo6aW5pdGlhbGl6ZShjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdGhlcikKLXsK
LSAgICBpZiAobV9wcml2YXRlLmdldCgpICE9IG90aGVyLm1fcHJpdmF0ZS5nZXQoKSkKLSAgICAg
ICAgbV9wcml2YXRlLnJlc2V0KG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zUHJpdmF0ZSgqb3Ro
ZXIubV9wcml2YXRlLmdldCgpKSk7Ci0gICAgZWxzZQotICAgICAgICBpbml0aWFsaXplKCk7Ci19
Ci0KLWJvb2wgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YmxlbmRJbnRlcm5hbChjb25zdCBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgYm9vbCBmcm9tSWRlbnRpdHkgPSBmcm9t
LmlzSWRlbnRpdHkoKTsKLSAgICBib29sIHRvSWRlbnRpdHkgPSBpc0lkZW50aXR5KCk7Ci0gICAg
aWYgKGZyb21JZGVudGl0eSAmJiB0b0lkZW50aXR5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGlmIChtYXRjaGVzVHlwZXMoZnJvbSkpIHsKLSAgICAgICAgc2l6ZV90IG51bU9wZXJhdGlv
bnMgPSBtYXgoZnJvbUlkZW50aXR5ID8gMCA6IGZyb20ubV9wcml2YXRlLT5vcGVyYXRpb25zLnNp
emUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9JZGVudGl0eSA/IDAg
OiBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1PcGVyYXRpb25zOyArK2kpIHsKLSAgICAgICAgICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGJsZW5kZWQ7Ci0gICAgICAgICAgICBpZiAoIWJsZW5kVHJhbnNmb3JtT3BlcmF0
aW9ucyhmcm9tSWRlbnRpdHkgPyAwIDogJmZyb20ubV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9JZGVudGl0eSA/IDAg
OiAmbV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvZ3Jlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBibGVuZGVkKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICByZXN1bHQubXVsdGlwbHkoYmxlbmRlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gYXBwbHkoKTsKLSAgICBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBmcm9tVHJhbnNmb3JtID0gZnJvbS5hcHBseSgpOwotICAgIHJldHVybiBy
ZXN1bHQuYmxlbmQoZnJvbVRyYW5zZm9ybSwgcHJvZ3Jlc3MpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwCmluZGV4
IDFlZThlYTA1MzA1NmM1YWYyZmI1NTQ2NzQ4NDIxZmRlMWIwOTRhOGMuLjFhOGI0NjZmMzI5OTQw
YjI5MmU3Mzk2N2JkMmI1ZTIyZTAwM2I1ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJh
bnNsYXRpb25VdGlsLmNwcApAQCAtNTcsMTAgKzU3LDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB0b1dl
YlRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdHJhbnNmb3Jt
T3BlcmF0aW9ucywgY29uc3QgRmxvYXRTaXplJiBib3hTaXplKQorUGFzc093blB0cjxXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zPiB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9ucyYgdHJhbnNmb3JtT3BlcmF0aW9ucywgY29uc3QgRmxvYXRTaXplJiBib3hTaXpl
KQogewogICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBkZWVwIGNvcHkgdGhlIHRyYW5zZm9ybU9wZXJh
dGlvbnMgbWF5IGNvbnRhaW4gcmVmIHBvaW50ZXJzIHRvIFRyYW5zZm9ybU9wZXJhdGlvbiBvYmpl
Y3RzLgotICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgd2ViVHJhbnNmb3JtT3BlcmF0aW9uczsK
KyAgICBPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gd2ViVHJhbnNmb3JtT3BlcmF0aW9u
cyA9IGFkb3B0UHRyKFBsYXRmb3JtOjpjdXJyZW50KCktPmNvbXBvc2l0b3JTdXBwb3J0KCktPmNy
ZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoKSk7CisgICAgaWYgKCF3ZWJUcmFuc2Zvcm1PcGVyYXRp
b25zKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8
IHRyYW5zZm9ybU9wZXJhdGlvbnMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSB0cmFuc2Zvcm1PcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKVtqXS0+Z2V0T3BlcmF0aW9uVHlwZSgpOwogICAgICAgICBzd2l0Y2ggKG9w
ZXJhdGlvblR5cGUpIHsKQEAgLTcwLDcgKzcyLDcgQEAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB0
b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdHJhbnMK
ICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOgogICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6IHsKICAgICAgICAgICAgIFNjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTY2FsZVRyYW5zZm9ybU9wZXJhdGlv
bio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAg
ICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kU2NhbGUodHJhbnNmb3JtLT54KCksIHRy
YW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnooKSk7CisgICAgICAgICAgICB3ZWJUcmFuc2Zvcm1P
cGVyYXRpb25zLT5hcHBlbmRTY2FsZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCksIHRy
YW5zZm9ybS0+eigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWDoKQEAgLTc5LDcgKzgxLDcgQEAgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyYgdHJhbnMKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRS
QU5TTEFURV8zRDoKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURTog
ewogICAgICAgICAgICAgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBz
dGF0aWNfY2FzdDxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRp
b25zLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVy
YXRpb25zLmFwcGVuZFRyYW5zbGF0ZShmbG9hdFZhbHVlRm9yTGVuZ3RoKHRyYW5zZm9ybS0+eCgp
LCBib3hTaXplLndpZHRoKCkpLCBmbG9hdFZhbHVlRm9yTGVuZ3RoKHRyYW5zZm9ybS0+eSgpLCBi
b3hTaXplLmhlaWdodCgpKSwgZmxvYXRWYWx1ZUZvckxlbmd0aCh0cmFuc2Zvcm0tPnooKSwgMSkp
OworICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy0+YXBwZW5kVHJhbnNsYXRlKGZs
b2F0VmFsdWVGb3JMZW5ndGgodHJhbnNmb3JtLT54KCksIGJveFNpemUud2lkdGgoKSksIGZsb2F0
VmFsdWVGb3JMZW5ndGgodHJhbnNmb3JtLT55KCksIGJveFNpemUuaGVpZ2h0KCkpLCBmbG9hdFZh
bHVlRm9yTGVuZ3RoKHRyYW5zZm9ybS0+eigpLCAxKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g6CkBAIC04
NywzNSArODksMzUgQEAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB0b1dlYlRyYW5zZm9ybU9wZXJh
dGlvbnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdHJhbnMKICAgICAgICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246OlJPVEFURV8zRDoKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlJPVEFURTogewogICAgICAgICAgICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFu
c2Zvcm0gPSBzdGF0aWNfY2FzdDxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1P
cGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAgICB3ZWJUcmFuc2Zv
cm1PcGVyYXRpb25zLmFwcGVuZFJvdGF0ZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCks
IHRyYW5zZm9ybS0+eigpLCB0cmFuc2Zvcm0tPmFuZ2xlKCkpOworICAgICAgICAgICAgd2ViVHJh
bnNmb3JtT3BlcmF0aW9ucy0+YXBwZW5kUm90YXRlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0t
PnkoKSwgdHJhbnNmb3JtLT56KCksIHRyYW5zZm9ybS0+YW5nbGUoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19Y
OgogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19ZOgogICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFVzogewogICAgICAgICAgICAgU2tld1RyYW5zZm9ybU9w
ZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U2tld1RyYW5zZm9ybU9wZXJhdGlvbio+
KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAg
IHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kU2tldyh0cmFuc2Zvcm0tPmFuZ2xlWCgpLCB0
cmFuc2Zvcm0tPmFuZ2xlWSgpKTsKKyAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMt
PmFwcGVuZFNrZXcodHJhbnNmb3JtLT5hbmdsZVgoKSwgdHJhbnNmb3JtLT5hbmdsZVkoKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6TUFUUklYOiB7CiAgICAgICAgICAgICBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIHRy
YW5zZm9ybSA9IHN0YXRpY19jYXN0PE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9y
bU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKICAgICAgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG0gPSB0cmFuc2Zvcm0tPm1hdHJpeCgpOwotICAgICAgICAgICAgd2ViVHJh
bnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRNYXRyaXgoV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgobSkp
OworICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy0+YXBwZW5kTWF0cml4KFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4KG0pKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVhfM0Q6IHsKICAgICAgICAgICAg
IE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxNYXRy
aXgzRFRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygp
W2pdLmdldCgpKTsKICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG0gPSB0cmFuc2Zv
cm0tPm1hdHJpeCgpOwotICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRN
YXRyaXgoV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgobSkpOworICAgICAgICAgICAgd2ViVHJhbnNm
b3JtT3BlcmF0aW9ucy0+YXBwZW5kTWF0cml4KFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KG0pKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpQRVJTUEVDVElWRTogewogICAgICAgICAgICAgUGVyc3BlY3RpdmVUcmFuc2Zvcm1P
cGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFBlcnNwZWN0aXZlVHJhbnNmb3JtT3Bl
cmF0aW9uKj4odHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClbal0uZ2V0KCkpOwotICAg
ICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRQZXJzcGVjdGl2ZShmbG9hdFZh
bHVlRm9yTGVuZ3RoKHRyYW5zZm9ybS0+cGVyc3BlY3RpdmUoKSwgMCkpOworICAgICAgICAgICAg
d2ViVHJhbnNmb3JtT3BlcmF0aW9ucy0+YXBwZW5kUGVyc3BlY3RpdmUoZmxvYXRWYWx1ZUZvckxl
bmd0aCh0cmFuc2Zvcm0tPnBlcnNwZWN0aXZlKCksIDApKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpJREVOVElUWToKLSAg
ICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kSWRlbnRpdHkoKTsKKyAgICAg
ICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMtPmFwcGVuZElkZW50aXR5KCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok5PTkU6CiAgICAg
ICAgICAgICAvLyBEbyBub3RoaW5nLgpAQCAtMTIzLDcgKzEyNSw3IEBAIFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMgdG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlv
bnMmIHRyYW5zCiAgICAgICAgIH0gLy8gc3dpdGNoCiAgICAgfSAvLyBmb3IgZWFjaCBvcGVyYXRp
b24KIAotICAgIHJldHVybiB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zOworICAgIHJldHVybiB3ZWJU
cmFuc2Zvcm1PcGVyYXRpb25zLnJlbGVhc2UoKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFZhbHVl
LCBjbGFzcyBLZXlmcmFtZSwgY2xhc3MgQ3VydmU+CkBAIC0xNTMsMTMgKzE1NSwxNyBAQCB0ZW1w
bGF0ZSA8PgogYm9vbCBhcHBlbmRLZXlmcmFtZVdpdGhTdGFuZGFyZFRpbWluZ0Z1bmN0aW9uPFRy
YW5zZm9ybUFuaW1hdGlvblZhbHVlLCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSwgV2ViVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmU+KFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSwgZG91Ymxl
IGtleVRpbWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiB2YWx1ZSwgY29uc3QgVHJh
bnNmb3JtQW5pbWF0aW9uVmFsdWUqIGxhc3RWYWx1ZSwgV2ViS2l0OjpXZWJBbmltYXRpb25DdXJ2
ZTo6VGltaW5nRnVuY3Rpb25UeXBlIHRpbWluZ0Z1bmN0aW9uVHlwZSwgY29uc3QgRmxvYXRTaXpl
JiBib3hTaXplKQogewogICAgIGJvb2wgY2FuQmxlbmQgPSAhbGFzdFZhbHVlOwotICAgIFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9ucyA9IHRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygq
dmFsdWUtPnZhbHVlKCksIGJveFNpemUpOworICAgIE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zPiBvcGVyYXRpb25zKHRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygqdmFsdWUtPnZhbHVlKCks
IGJveFNpemUpKTsKKyAgICBpZiAoIW9wZXJhdGlvbnMpCisgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoIWNhbkJsZW5kKSB7Ci0gICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgbGFz
dE9wZXJhdGlvbnMgPSB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKmxhc3RWYWx1ZS0+dmFsdWUo
KSwgYm94U2l6ZSk7Ci0gICAgICAgIGNhbkJsZW5kID0gbGFzdE9wZXJhdGlvbnMuY2FuQmxlbmRX
aXRoKG9wZXJhdGlvbnMpOworICAgICAgICBPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4g
bGFzdE9wZXJhdGlvbnModG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCpsYXN0VmFsdWUtPnZhbHVl
KCksIGJveFNpemUpKTsKKyAgICAgICAgaWYgKCFsYXN0T3BlcmF0aW9ucykKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FuQmxlbmQgPSBsYXN0T3BlcmF0aW9ucy0+Y2FuQmxl
bmRXaXRoKCpvcGVyYXRpb25zKTsKICAgICB9CiAgICAgaWYgKGNhbkJsZW5kKSB7Ci0gICAgICAg
IGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoa2V5VGltZSwgb3BlcmF0aW9ucyksIHRp
bWluZ0Z1bmN0aW9uVHlwZSk7CisgICAgICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJh
bWUoa2V5VGltZSwgb3BlcmF0aW9ucy5sZWFrUHRyKCkpLCB0aW1pbmdGdW5jdGlvblR5cGUpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY5LDEz
ICsxNzUsMTcgQEAgdGVtcGxhdGUgPD4KIGJvb2wgYXBwZW5kS2V5ZnJhbWVXaXRoQ3VzdG9tQmV6
aWVyVGltaW5nRnVuY3Rpb248VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUsIFdlYlRyYW5zZm9ybUtl
eWZyYW1lLCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4oV2ViVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUqIGN1cnZlLCBkb3VibGUga2V5VGltZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFs
dWUqIHZhbHVlLCBjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogbGFzdFZhbHVlLCBkb3Vi
bGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIsIGNvbnN0IEZsb2F0U2l6ZSYg
Ym94U2l6ZSkKIHsKICAgICBib29sIGNhbkJsZW5kID0gIWxhc3RWYWx1ZTsKLSAgICBXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMgPSB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKnZh
bHVlLT52YWx1ZSgpLCBib3hTaXplKTsKKyAgICBPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9u
cz4gb3BlcmF0aW9ucyh0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKnZhbHVlLT52YWx1ZSgpLCBi
b3hTaXplKSk7CisgICAgaWYgKCFvcGVyYXRpb25zKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaWYgKCFjYW5CbGVuZCkgewotICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIGxhc3RP
cGVyYXRpb25zID0gdG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCpsYXN0VmFsdWUtPnZhbHVlKCks
IGJveFNpemUpOwotICAgICAgICBjYW5CbGVuZCA9IGxhc3RPcGVyYXRpb25zLmNhbkJsZW5kV2l0
aChvcGVyYXRpb25zKTsKKyAgICAgICAgT3duUHRyPFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM+IGxh
c3RPcGVyYXRpb25zKHRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygqbGFzdFZhbHVlLT52YWx1ZSgp
LCBib3hTaXplKSk7CisgICAgICAgIGlmICghbGFzdE9wZXJhdGlvbnMpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGNhbkJsZW5kID0gbGFzdE9wZXJhdGlvbnMtPmNhbkJsZW5k
V2l0aCgqb3BlcmF0aW9ucyk7CiAgICAgfQogICAgIGlmIChjYW5CbGVuZCkgewotICAgICAgICBj
dXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKGtleVRpbWUsIG9wZXJhdGlvbnMpLCB4MSwg
eTEsIHgyLCB5Mik7CisgICAgICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoa2V5
VGltZSwgb3BlcmF0aW9ucy5sZWFrUHRyKCkpLCB4MSwgeTEsIHgyLCB5Mik7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>