<?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>18078</bug_id>
          
          <creation_ts>2008-03-25 14:40:42 -0700</creation_ts>
          <short_desc>-webkit-transition- need to animates shorthand properties</short_desc>
          <delta_ts>2009-01-19 19:31:52 -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>CSS</component>
          <version>525.x (Safari 3.1)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benoit Marchant">marchant</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>dino</cc>
    
    <cc>farukates</cc>
    
    <cc>marchant</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>75161</commentid>
    <comment_count>0</comment_count>
    <who name="Benoit Marchant">marchant</who>
    <bug_when>2008-03-25 14:40:42 -0700</bug_when>
    <thetext>currently, shorthands like border:, margin:, padding: etc don&apos;t get animated by the new -webkit-transition- feature. They need to as it is extremely common practice to use these for convenience and compact code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75213</commentid>
    <comment_count>1</comment_count>
      <attachid>20059</attachid>
    <who name="Benoit Marchant">marchant</who>
    <bug_when>2008-03-25 16:53:38 -0700</bug_when>
    <thetext>Created attachment 20059
test case showing the issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104374</commentid>
    <comment_count>2</comment_count>
      <attachid>26417</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-04 13:47:15 -0800</bug_when>
    <thetext>Created attachment 26417
Initial patch

Dave, how about this approach? I just make property wrappers for shorthands that contain an array of the individual property wrappers.

This works well, but it will add to the cost of running &apos;all&apos; transitions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104593</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-06 12:04:51 -0800</bug_when>
    <thetext>To do:
* Optimize the transition-property &quot;all&quot; case by avoiding shorthand wrappers, since we don&apos;t need to compare shorthands then.
* Maybe reuse the ShorthandMap used for computed style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104594</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-06 12:06:44 -0800</bug_when>
    <thetext>ShorthandMap is actually in CSSMutableStyleDeclaration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105098</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-09 17:45:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/5823254&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105521</commentid>
    <comment_count>6</comment_count>
      <attachid>26417</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-13 10:20:31 -0800</bug_when>
    <thetext>Comment on attachment 26417
Initial patch

Needs more work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106216</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-18 12:10:14 -0800</bug_when>
    <thetext>Yoink.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106217</commentid>
    <comment_count>8</comment_count>
      <attachid>26835</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-18 12:17:43 -0800</bug_when>
    <thetext>Created attachment 26835
Patch, testcases, changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106277</commentid>
    <comment_count>9</comment_count>
      <attachid>26835</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-19 12:58:11 -0800</bug_when>
    <thetext>Comment on attachment 26835
Patch, testcases, changelog

Everything looks fine, but you need to put CSSPropertyLonghand into its own files and add it to all the projects/makefiles please.

I&apos;ll give you r=me assuming you are going to do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106286</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-19 14:24:20 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	M	LayoutTests/transitions/transform-op-list-match.html
	M	LayoutTests/transitions/transform-op-list-no-match.html
	M	LayoutTests/transitions/transition-test-helpers.js
	M	LayoutTests/transitions/zero-duration-in-list.html
	M	WebCore/ChangeLog
	M	WebCore/GNUmakefile.am
	M	WebCore/WebCore.pro
	M	WebCore/WebCore.scons
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	M	WebCore/WebCore.xcodeproj/project.pbxproj
	M	WebCore/WebCoreSources.bkl
	M	WebCore/css/CSSMutableStyleDeclaration.cpp
	A	WebCore/css/CSSPropertyLonghand.cpp
	A	WebCore/css/CSSPropertyLonghand.h
	M	WebCore/page/animation/AnimationBase.cpp
	M	WebCore/page/animation/AnimationBase.h
	M	WebCore/page/animation/CompositeAnimation.cpp
Committed r40039

Keeping open to commit test cases (which I left at home).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106303</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-19 19:31:52 -0800</bug_when>
    <thetext>Testcases:
Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	A	LayoutTests/transitions/shorthand-border-transitions-expected.txt
	A	LayoutTests/transitions/shorthand-border-transitions.html
	A	LayoutTests/transitions/shorthand-transitions-expected.txt
	A	LayoutTests/transitions/shorthand-transitions.html
Committed r40051
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>20059</attachid>
            <date>2008-03-25 16:53:38 -0700</date>
            <delta_ts>2008-03-25 16:53:38 -0700</delta_ts>
            <desc>test case showing the issue</desc>
            <filename>testNSCSSTransition.html</filename>
            <type>application/xhtml+xml</type>
            <size>4399</size>
            <attacher name="Benoit Marchant">marchant</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFs
Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25h
bC5kdGQiPgoKPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDps
YW5nPSJlbiIgbGFuZz0iZW4iPgo8aGVhZD4KCTx0aXRsZT5DU1NBbmltYXRpb25UZXN0PC90aXRs
ZT4KCTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBj
aGFyc2V0PXV0Zi04IiAvPgoJPG1ldGEgaHR0cC1lcXVpdj0iZXhwaXJlcyIgY29udGVudD0iTW9u
LCAwNCBKdWwgMjA1MCAwNzowNzowNyBHTVQiIC8+CgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0Ij4KCWZ1bmN0aW9uIHRlc3RBbmltYXRpb25zIChub2RlKSB7CgkJbm9kZS5jbGFzc05h
bWUgPSAiZW5kIjsKCX0KCQoJZnVuY3Rpb24gdGVzdEFuaW1hdGlvbnNUb28gKG5vZGUpIHsKCQlu
b2RlLmFkZEV2ZW50TGlzdGVuZXIoIndlYmtpdFRyYW5zaXRpb25FbmRFdmVudCIsZnVuY3Rpb24o
KXthbGVydCgiaGVyZSIpO25vZGUuY2xhc3NOYW1lID0gInN0YXJ0VG9vIjt9LGZhbHNlKTsKCgkJ
bm9kZS5jbGFzc05hbWUgPSAiZW5kVG9vIjsKCX0KCgkJPC9zY3JpcHQ+CgoJCTxzdHlsZSB0eXBl
PSJ0ZXh0L2NzcyI+CgkJCgkJI2NsaWNNZSB7CgkJCS13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0
eTogYmFja2dyb3VuZC1jb2xvciwgY29sb3IsIGZvbnQtc2l6ZSwgaGVpZ2h0LCB3aWR0aCwgcGFk
ZGluZywgdG9wLCBsZWZ0LCBvcGFjaXR5LGJvcmRlcjsKCQkJLXdlYmtpdC10cmFuc2l0aW9uLWR1
cmF0aW9uOiAzcywgM3MsIDNzLCAzcywgM3MsIDNzLCAzcywgM3MsIDNzLCAzczsKCQkJLXdlYmtp
dC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluLW91dCwgZWFzZS1pbi1vdXQsIGVh
c2UtaW4tb3V0LCBlYXNlLWluLW91dCwgZWFzZS1pbi1vdXQsIGVhc2UtaW4tb3V0LCBlYXNlLWlu
LW91dCwgZWFzZS1pbi1vdXQsIGVhc2UtaW4tb3V0LCBlYXNlLWluLW91dDsKCQl9CgkJCgkJI2Ns
aWNNZVRvbyB7CgkJCS13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZC1jb2xv
ciwgY29sb3IsIGZvbnQtc2l6ZSwgaGVpZ2h0LCB3aWR0aCwgcGFkZGluZywgdG9wLCBsZWZ0LCBv
cGFjaXR5LGJvcmRlci1sZWZ0LXdpZHRoLGJvcmRlci10b3Atd2lkdGgsYm9yZGVyLXJpZ2h0LXdp
ZHRoLGJvcmRlci1ib3R0b20td2lkdGgsYm9yZGVyLWxlZnQtY29sb3IsYm9yZGVyLXRvcC1jb2xv
cixib3JkZXItcmlnaHQtY29sb3IsYm9yZGVyLWJvdHRvbXQtY29sb3IgOwoJCQktd2Via2l0LXRy
YW5zaXRpb24tZHVyYXRpb246IDNzLCAzcywgM3MsIDNzLCAzcywgM3MsIDNzLCAzcywgM3MsIDNz
OwoJCQktd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW4tb3V0LCBlYXNl
LWluLW91dCwgZWFzZS1pbi1vdXQsIGVhc2UtaW4tb3V0LCBlYXNlLWluLW91dCwgZWFzZS1pbi1v
dXQsIGVhc2UtaW4tb3V0LCBlYXNlLWluLW91dCwgZWFzZS1pbi1vdXQsIGVhc2UtaW4tb3V0LCBl
YXNlLWluLW91dCwgZWFzZS1pbi1vdXQsIGVhc2UtaW4tb3V0LCBlYXNlLWluLW91dCwgZWFzZS1p
bi1vdXQsIGVhc2UtaW4tb3V0LCBlYXNlLWluLW91dDsKCQl9CgkJCgoJCQoJCS5zdGFydHsKCQkJ
YmFja2dyb3VuZC1jb2xvcjogYmx1ZTsKCQkJY29sb3I6IGJsYWNrOwoJCQlmb250LXNpemUgOiAy
MHB4OwoJCQloZWlnaHQgOiAxMDBweDsKCQkJd2lkdGggOiA0MGVtOwoJCQlwb3NpdGlvbjphYnNv
bHV0ZTsKCQkJcGFkZGluZzoxMHB4OwoJCQl0b3AgOiAxMDBweDsKCQkJbGVmdCA6IDExMHB4OwoJ
CQlvcGFjaXR5IDogMTsKCQkJZmlsdGVyOmFscGhhKG9wYWNpdHk9MTAwKSBwcm9naWQ6RFhJbWFn
ZVRyYW5zZm9ybS5NaWNyb3NvZnQuTW90aW9uQmx1cihzdHJlbmd0aD0xMDMsIGRpcmVjdGlvbj0z
MTApOwoJCQkvKmZpbHRlcjphbHBoYShvcGFjaXR5PTEwMCk7Ki8KCQkJYm9yZGVyOiAycHggc29s
aWQgZGFya21hZ2VudGE7CgkJCS8qY2xpcDogcmVjdCgxMHB4LCA5MHB4LCA3MHB4LCAwcHgpOyov
CgkJCS8qb3ZlcmZsb3c6aGlkZGVuOyovCgoJCX0KCQkKCQkuc3RhcnRUb28gewoJCQliYWNrZ3Jv
dW5kLWNvbG9yOiBibHVlOwoJCQljb2xvcjogYmxhY2s7CgkJCWZvbnQtc2l6ZSA6IDIwcHg7CgkJ
CWhlaWdodCA6IDEwMHB4OwoJCQl3aWR0aCA6IDQwZW07CgkJCXBvc2l0aW9uOmFic29sdXRlOwoJ
CQlwYWRkaW5nOjEwcHg7CgkJCXRvcCA6IDI0MHB4OwoJCQlsZWZ0IDogMTEwcHg7CgkJCW9wYWNp
dHkgOiAxOwoJCQlmaWx0ZXI6YWxwaGEob3BhY2l0eT0xMDApIHByb2dpZDpEWEltYWdlVHJhbnNm
b3JtLk1pY3Jvc29mdC5Nb3Rpb25CbHVyKHN0cmVuZ3RoPTEwMywgZGlyZWN0aW9uPTMxMCk7CgkJ
CS8qZmlsdGVyOmFscGhhKG9wYWNpdHk9MTAwKTsqLwoJCQkvL2JvcmRlcjogMnB4IHNvbGlkIGRh
cmttYWdlbnRhOwoJCQkKCQkJYm9yZGVyLXN0eWxlOnNvbGlkOwoKCQkJYm9yZGVyLWxlZnQtd2lk
dGg6MnB4OwoJCQlib3JkZXItdG9wLXdpZHRoOjJweDsKCQkJYm9yZGVyLXJpZ2h0LXdpZHRoOjJw
eDsKCQkJYm9yZGVyLWJvdHRvbS13aWR0aDoycHg7CgoJCQlib3JkZXItbGVmdC1jb2xvcjpkYXJr
bWFnZW50YTsKCQkJYm9yZGVyLXRvcC1jb2xvcjpkYXJrbWFnZW50YTsKCQkJYm9yZGVyLXJpZ2h0
LWNvbG9yOmRhcmttYWdlbnRhOwoJCQlib3JkZXItYm90dG9tLWNvbG9yOmRhcmttYWdlbnRhOwoJ
CQkKCQkJCgkJCS8qY2xpcDogcmVjdCgxMHB4LCA5MHB4LCA3MHB4LCAwcHgpOyovCgkJCS8qb3Zl
cmZsb3c6aGlkZGVuOyovCgoJCX0KCgkJCgkJLmVuZHsKCQkJYmFja2dyb3VuZC1jb2xvcjogZ3Jl
ZW47CgkJCWNvbG9yOiB3aGl0ZTsKCQkJZm9udC1zaXplIDogNDBweDsKCQkJaGVpZ2h0IDogNDBw
eDsKCQkJd2lkdGggOiA2MGVtOwoJCQlwb3NpdGlvbjogYWJzb2x1dGU7CgkJCXBhZGRpbmc6MnB4
OwoJCQl0b3AgOiA1MDBweDsKCQkJbGVmdCA6IDUwMHB4OwoJCQlvcGFjaXR5IDogMDsKCQkJYm9y
ZGVyOiAxMHB4IHNvbGlkIHJlZDsKCQkJYm9yZGVyLXNwYWNpbmc6MTBweCAxMHB4OwoJCQlmaWx0
ZXI6YWxwaGEob3BhY2l0eT0wKSBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuTW90
aW9uQmx1cihzdHJlbmd0aD0xMDMsIGRpcmVjdGlvbj0zMTApOwoJCQkvKmZpbHRlcjphbHBoYShv
cGFjaXR5PTApOyovCgkJCS8qY2xpcDpyZWN0KDVweCwgMjAwcHgsIDgwcHgsIDBweCk7Ki8KCQkJ
LypvdmVyZmxvdzpoaWRkZW47Ki8KCQl9CgkJCgkJLmVuZFRvbyB7CgkJCWJhY2tncm91bmQtY29s
b3I6IGdyZWVuOwoJCQljb2xvcjogd2hpdGU7CgkJCWZvbnQtc2l6ZSA6IDQwcHg7CgkJCWhlaWdo
dCA6IDQwcHg7CgkJCXdpZHRoIDogNjBlbTsKCQkJcG9zaXRpb246IGFic29sdXRlOwoJCQlwYWRk
aW5nOjJweDsKCQkJdG9wIDogNTAwcHg7CgkJCWxlZnQgOiA1MDBweDsKCQkJb3BhY2l0eSA6IDA7
CgkJCWJvcmRlci1zcGFjaW5nOjEwcHggMTBweDsKCQkJCgkJCWJvcmRlci1zdHlsZTpzb2xpZDsK
CQkKCQkJYm9yZGVyLWxlZnQtd2lkdGg6MTBweDsKCQkJYm9yZGVyLXRvcC13aWR0aDoxMHB4OwoJ
CQlib3JkZXItcmlnaHQtd2lkdGg6MTBweDsKCQkJYm9yZGVyLWJvdHRvbS13aWR0aDoxMHB4OwoK
CQkJYm9yZGVyLWxlZnQtY29sb3I6cmVkOwoJCQlib3JkZXItdG9wLWNvbG9yOnJlZDsKCQkJYm9y
ZGVyLXJpZ2h0LWNvbG9yOnJlZDsKCQkJYm9yZGVyLWJvdHRvbS1jb2xvcjpyZWQ7CgkJCWZpbHRl
cjphbHBoYShvcGFjaXR5PTApIHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5Nb3Rp
b25CbHVyKHN0cmVuZ3RoPTEwMywgZGlyZWN0aW9uPTMxMCk7CgkJCS8qZmlsdGVyOmFscGhhKG9w
YWNpdHk9MCk7Ki8KCQkJLypjbGlwOnJlY3QoNXB4LCAyMDBweCwgODBweCwgMHB4KTsqLwoJCQkv
Km92ZXJmbG93OmhpZGRlbjsqLwoJCX0KCgkJPC9zdHlsZT4KCgk8L2hlYWQ+Cgk8Ym9keSBpZD0i
R2lhbmR1aWEudGVzdC5BcHBLaXQudGVzdE5TQ29tcG9uZW50Ij4KCQk8aDE+VW5mb3J0dW5hdGVs
eSBmb250LXNpemUgZG9lc24ndCBhbmltYXRlPC9oMT4KCQk8ZGl2IGlkPSJjbGljTWUiIGNsYXNz
PSJzdGFydCIgIG9uY2xpY2s9InRlc3RBbmltYXRpb25zKHRoaXMpOyIgPgoJCQlDbGljIE1lIC0g
VXNlcyBib3JkZXI6IHNob3J0aGFuZAoJCTwvZGl2PgoKCQk8ZGl2IGlkPSJjbGljTWVUb28iIGNs
YXNzPSJzdGFydFRvbyIgIG9uY2xpY2s9InRlc3RBbmltYXRpb25zVG9vKHRoaXMpOyIgPgoJCQlD
bGljIE1lIC0gVXNlcyBhdG9taWMgYm9yZGVyIHByb3BlcnRpZXMKCQk8L2Rpdj4KCgk8L2JvZHk+
Cgk8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26417</attachid>
            <date>2009-01-04 13:47:15 -0800</date>
            <delta_ts>2009-01-13 10:20:31 -0800</delta_ts>
            <desc>Initial patch</desc>
            <filename>18078_patch.txt</filename>
            <type>text/plain</type>
            <size>22290</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAgYi9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCmluZGV4IGRiNzEzZjQuLmE5
OTVlODUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5j
cHAKKysrIGIvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcApAQCAtMjUy
LDYgKzI1MiwzOSBAQCBwcml2YXRlOgogICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIp
KFNoYWRvd0RhdGEqLCBib29sKTsKIH07CiAKK2NsYXNzIFNob3J0aGFuZFByb3BlcnR5V3JhcHBl
ciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBTaG9ydGhhbmRQ
cm9wZXJ0eVdyYXBwZXIoaW50IHByb3ApCisgICAgICAgIDogUHJvcGVydHlXcmFwcGVyQmFzZShw
cm9wKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZChQcm9wZXJ0eVdyYXBwZXJCYXNl
KiBwcm9wZXJ0eVdyYXBwZXIpCisgICAgeworICAgICAgICBtX3Byb3BlcnR5V3JhcHBlcnMuYXBw
ZW5kKHByb3BlcnR5V3JhcHBlcik7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBlcXVh
bHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdAorICAg
IHsKKyAgICAgICAgVmVjdG9yPFByb3BlcnR5V3JhcHBlckJhc2UqPjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9wcm9wZXJ0eVdyYXBwZXJzLmVuZCgpOworICAgICAgICBmb3IgKFZlY3RvcjxQcm9w
ZXJ0eVdyYXBwZXJCYXNlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wcm9wZXJ0eVdyYXBwZXJz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgaWYgKCEoKml0KS0+ZXF1
YWxzKGEsIGIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoY29uc3Qg
QW5pbWF0aW9uQmFzZSogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0CisgICAgewor
ICAgICAgICBWZWN0b3I8UHJvcGVydHlXcmFwcGVyQmFzZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3Byb3BlcnR5V3JhcHBlcnMuZW5kKCk7CisgICAgICAgIGZvciAoVmVjdG9yPFByb3BlcnR5
V3JhcHBlckJhc2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Byb3BlcnR5V3JhcHBlcnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgKCppdCktPmJsZW5kKGFuaW0sIGRz
dCwgYSwgYiwgcHJvZ3Jlc3MpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8UHJvcGVy
dHlXcmFwcGVyQmFzZSo+IG1fcHJvcGVydHlXcmFwcGVyczsKK307CisKIGNsYXNzIFByb3BlcnR5
V3JhcHBlck1heWJlSW52YWxpZENvbG9yIDogcHVibGljIFByb3BlcnR5V3JhcHBlckJhc2Ugewog
cHVibGljOgogICAgIFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKGludCBwcm9wLCBj
b25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJT
dHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSkKQEAgLTI5Miw2NCArMzI1LDIyOSBAQCBwcml2
YXRlOgogc3RhdGljIFZlY3RvcjxQcm9wZXJ0eVdyYXBwZXJCYXNlKj4qIGdQcm9wZXJ0eVdyYXBw
ZXJzID0gMDsKIHN0YXRpYyBpbnQgZ1Byb3BlcnR5V3JhcHBlck1hcFtudW1DU1NQcm9wZXJ0aWVz
XTsKIAorZW51bSBCb3hTaWRlIHsKKyAgICBCb3hTaWRlTGVmdCA9IDAsCisgICAgQm94U2lkZVJp
Z2h0LAorICAgIEJveFNpZGVUb3AsCisgICAgQm94U2lkZUJvdHRvbSwKKyAgICBCb3hTaWRlQ291
bnQsCisgICAgQm9yZGVyQ29ybmVyQ291bnQgPSBCb3hTaWRlQ291bnQsCit9OworCitzdGF0aWMg
dm9pZCBjcmVhdGVCb3JkZXJQcm9wZXJ0eVdyYXBwZXJzKCkKK3sKKyAgICBTaG9ydGhhbmRQcm9w
ZXJ0eVdyYXBwZXIqIGJvcmRlclNob3J0aGFuZFdyYXBwZXIgPSBuZXcgU2hvcnRoYW5kUHJvcGVy
dHlXcmFwcGVyKENTU1Byb3BlcnR5Qm9yZGVyKTsKKyAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBw
ZXIqIGJvcmRlcldpZHRoU2hvcnRoYW5kV3JhcHBlciA9IG5ldyBTaG9ydGhhbmRQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlCb3JkZXJXaWR0aCk7CisgICAgU2hvcnRoYW5kUHJvcGVydHlXcmFw
cGVyKiBib3JkZXJDb2xvclNob3J0aGFuZFdyYXBwZXIgPSBuZXcgU2hvcnRoYW5kUHJvcGVydHlX
cmFwcGVyKENTU1Byb3BlcnR5Qm9yZGVyQ29sb3IpOworICAgIAorICAgIC8vIGJvcmRlci13aWR0
aAorICAgIFByb3BlcnR5V3JhcHBlckJhc2UqIGJvcmRlcldpZHRoV3JhcHBlcnNbQm94U2lkZUNv
dW50XSA9IHsKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25lZCBzaG9ydD4oQ1NT
UHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyTGVmdFdpZHRoLCAm
UmVuZGVyU3R5bGU6OnNldEJvcmRlckxlZnRXaWR0aCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXI8dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aCwgJlJlbmRl
clN0eWxlOjpib3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclJpZ2h0V2lk
dGgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNob3J0PihDU1NQcm9w
ZXJ0eUJvcmRlclRvcFdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlclRvcFdpZHRoLCAmUmVuZGVy
U3R5bGU6OnNldEJvcmRlclRvcFdpZHRoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjx1
bnNpZ25lZCBzaG9ydD4oQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aCwgJlJlbmRlclN0eWxl
Ojpib3JkZXJCb3R0b21XaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21XaWR0aCkK
KyAgICB9OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJveFNpZGVDb3VudDsgKytp
KSB7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQoYm9yZGVyV2lkdGhXcmFwcGVy
c1tpXSk7CisgICAgICAgIGJvcmRlcldpZHRoU2hvcnRoYW5kV3JhcHBlci0+YXBwZW5kKGJvcmRl
cldpZHRoV3JhcHBlcnNbaV0pOworICAgICAgICBib3JkZXJTaG9ydGhhbmRXcmFwcGVyLT5hcHBl
bmQoYm9yZGVyV2lkdGhXcmFwcGVyc1tpXSk7CisgICAgfQorCisgICAgLy8gYm9yZGVyLWNvbG9y
CisgICAgUHJvcGVydHlXcmFwcGVyQmFzZSogYm9yZGVyQ29sb3JXcmFwcGVyc1tCb3hTaWRlQ291
bnRdID0geworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NT
UHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyTGVmdENvbG9yLCAm
UmVuZGVyU3R5bGU6OnNldEJvcmRlckxlZnRDb2xvciksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3IsICZSZW5k
ZXJTdHlsZTo6Ym9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJSaWdodENv
bG9yKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1By
b3BlcnR5Qm9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wQ29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0Qm9yZGVyVG9wQ29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
TWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvciwgJlJlbmRlclN0
eWxlOjpib3JkZXJCb3R0b21Db2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21Db2xv
cikKKyAgICB9OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJveFNpZGVDb3VudDsg
KytpKSB7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQoYm9yZGVyQ29sb3JXcmFw
cGVyc1tpXSk7CisgICAgICAgIGJvcmRlckNvbG9yU2hvcnRoYW5kV3JhcHBlci0+YXBwZW5kKGJv
cmRlckNvbG9yV3JhcHBlcnNbaV0pOworICAgICAgICBib3JkZXJTaG9ydGhhbmRXcmFwcGVyLT5h
cHBlbmQoYm9yZGVyQ29sb3JXcmFwcGVyc1tpXSk7CisgICAgfQorCisgICAgLy8gYm9yZGVyLWxl
ZnQKKyAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIqIGJvcmRlckxlZnRXcmFwcGVyID0gbmV3
IFNob3J0aGFuZFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJvcmRlckxlZnQpOworICAgIGJv
cmRlckxlZnRXcmFwcGVyLT5hcHBlbmQoYm9yZGVyV2lkdGhXcmFwcGVyc1tCb3hTaWRlTGVmdF0p
OworICAgIGJvcmRlckxlZnRXcmFwcGVyLT5hcHBlbmQoYm9yZGVyQ29sb3JXcmFwcGVyc1tCb3hT
aWRlTGVmdF0pOworCisgICAgLy8gYm9yZGVyLXJpZ2h0CisgICAgU2hvcnRoYW5kUHJvcGVydHlX
cmFwcGVyKiBib3JkZXJSaWdodFdyYXBwZXIgPSBuZXcgU2hvcnRoYW5kUHJvcGVydHlXcmFwcGVy
KENTU1Byb3BlcnR5Qm9yZGVyUmlnaHQpOworICAgIGJvcmRlclJpZ2h0V3JhcHBlci0+YXBwZW5k
KGJvcmRlcldpZHRoV3JhcHBlcnNbQm94U2lkZVJpZ2h0XSk7CisgICAgYm9yZGVyUmlnaHRXcmFw
cGVyLT5hcHBlbmQoYm9yZGVyQ29sb3JXcmFwcGVyc1tCb3hTaWRlUmlnaHRdKTsKKyAgICAKKyAg
ICAvLyBib3JkZXItdG9wCisgICAgU2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyKiBib3JkZXJUb3BX
cmFwcGVyID0gbmV3IFNob3J0aGFuZFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJvcmRlclRv
cCk7CisgICAgYm9yZGVyVG9wV3JhcHBlci0+YXBwZW5kKGJvcmRlcldpZHRoV3JhcHBlcnNbQm94
U2lkZVRvcF0pOworICAgIGJvcmRlclRvcFdyYXBwZXItPmFwcGVuZChib3JkZXJDb2xvcldyYXBw
ZXJzW0JveFNpZGVUb3BdKTsKKworICAgIC8vIGJvcmRlci1ib3R0b20KKyAgICBTaG9ydGhhbmRQ
cm9wZXJ0eVdyYXBwZXIqIGJvcmRlckJvdHRvbVdyYXBwZXIgPSBuZXcgU2hvcnRoYW5kUHJvcGVy
dHlXcmFwcGVyKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tKTsKKyAgICBib3JkZXJCb3R0b21XcmFw
cGVyLT5hcHBlbmQoYm9yZGVyV2lkdGhXcmFwcGVyc1tCb3hTaWRlQm90dG9tXSk7CisgICAgYm9y
ZGVyQm90dG9tV3JhcHBlci0+YXBwZW5kKGJvcmRlckNvbG9yV3JhcHBlcnNbQm94U2lkZUJvdHRv
bV0pOworICAgIAorICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQoYm9yZGVyTGVmdFdyYXBw
ZXIpOworICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQoYm9yZGVyUmlnaHRXcmFwcGVyKTsK
KyAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKGJvcmRlclRvcFdyYXBwZXIpOworICAgIGdQ
cm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQoYm9yZGVyQm90dG9tV3JhcHBlcik7CisgICAgCisgICAg
Z1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChib3JkZXJXaWR0aFNob3J0aGFuZFdyYXBwZXIpOwor
ICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQoYm9yZGVyQ29sb3JTaG9ydGhhbmRXcmFwcGVy
KTsKKyAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKGJvcmRlclNob3J0aGFuZFdyYXBwZXIp
OworCisgICAgLy8gYm9yZGVyLXNwYWNpbmcKKyAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIq
IGJvcmRlclNwYWNpbmdXcmFwcGVyID0gbmV3IFNob3J0aGFuZFByb3BlcnR5V3JhcHBlcihDU1NQ
cm9wZXJ0eUJvcmRlclNwYWNpbmcpOworICAgIFByb3BlcnR5V3JhcHBlckJhc2UqIGhvcml6b250
YWxCb3JkZXJTcGFjaW5nV3JhcHBlciA9IG5ldyBQcm9wZXJ0eVdyYXBwZXI8c2hvcnQ+KENTU1By
b3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6aG9yaXpv
bnRhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0SG9yaXpvbnRhbEJvcmRlclNwYWNp
bmcpOworICAgIFByb3BlcnR5V3JhcHBlckJhc2UqIHZlcnRpY2FsQm9yZGVyU3BhY2luZ1dyYXBw
ZXIgPSBuZXcgUHJvcGVydHlXcmFwcGVyPHNob3J0PihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZl
cnRpY2FsU3BhY2luZywgJlJlbmRlclN0eWxlOjp2ZXJ0aWNhbEJvcmRlclNwYWNpbmcsICZSZW5k
ZXJTdHlsZTo6c2V0VmVydGljYWxCb3JkZXJTcGFjaW5nKTsKKworICAgIGdQcm9wZXJ0eVdyYXBw
ZXJzLT5hcHBlbmQoaG9yaXpvbnRhbEJvcmRlclNwYWNpbmdXcmFwcGVyKTsKKyAgICBnUHJvcGVy
dHlXcmFwcGVycy0+YXBwZW5kKHZlcnRpY2FsQm9yZGVyU3BhY2luZ1dyYXBwZXIpOworCisgICAg
Ym9yZGVyU3BhY2luZ1dyYXBwZXItPmFwcGVuZChob3Jpem9udGFsQm9yZGVyU3BhY2luZ1dyYXBw
ZXIpOworICAgIGJvcmRlclNwYWNpbmdXcmFwcGVyLT5hcHBlbmQodmVydGljYWxCb3JkZXJTcGFj
aW5nV3JhcHBlcik7CisKKyAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKGJvcmRlclNwYWNp
bmdXcmFwcGVyKTsKKworICAgIC8vIGJvcmRlci1yYWRpdXMKKyAgICBTaG9ydGhhbmRQcm9wZXJ0
eVdyYXBwZXIqIGJvcmRlclJhZGl1c1dyYXBwZXIgPSBuZXcgU2hvcnRoYW5kUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyUmFkaXVzKTsKKyAgICBQcm9wZXJ0eVdyYXBwZXJC
YXNlKiBib3JkZXJSYWRpdXNXcmFwcGVyc1tCb3JkZXJDb3JuZXJDb3VudF0gPSB7CisgICAgICAg
IG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgSW50U2l6ZSY+KENTU1Byb3BlcnR5V2Via2l0Qm9y
ZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3JkZXJUb3BMZWZ0UmFkaXVzLCAmUmVu
ZGVyU3R5bGU6OnNldEJvcmRlclRvcExlZnRSYWRpdXMpLAorICAgICAgICBuZXcgUHJvcGVydHlX
cmFwcGVyPGNvbnN0IEludFNpemUmPihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclRvcFJpZ2h0UmFk
aXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRlclRvcFJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNl
dEJvcmRlclRvcFJpZ2h0UmFkaXVzKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxjb25z
dCBJbnRTaXplJj4oQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVzLCAmUmVu
ZGVyU3R5bGU6OmJvcmRlckJvdHRvbUxlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
Qm90dG9tTGVmdFJhZGl1cyksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgSW50
U2l6ZSY+KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMsICZSZW5kZXJT
dHlsZTo6Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90
dG9tUmlnaHRSYWRpdXMpCisgICAgfTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBC
b3JkZXJDb3JuZXJDb3VudDsgKytpKSB7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBl
bmQoYm9yZGVyUmFkaXVzV3JhcHBlcnNbaV0pOworICAgICAgICBib3JkZXJSYWRpdXNXcmFwcGVy
LT5hcHBlbmQoYm9yZGVyUmFkaXVzV3JhcHBlcnNbaV0pOworICAgIH0KKyAgICBnUHJvcGVydHlX
cmFwcGVycy0+YXBwZW5kKGJvcmRlclJhZGl1c1dyYXBwZXIpOworfQorCitzdGF0aWMgdm9pZCBj
cmVhdGVNYXJnaW5Qcm9wZXJ0eVdyYXBwZXJzKCkKK3sKKyAgICBTaG9ydGhhbmRQcm9wZXJ0eVdy
YXBwZXIqIG1hcmdpblNob3J0aGFuZFdyYXBwZXIgPSBuZXcgU2hvcnRoYW5kUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5TWFyZ2luKTsKKyAgICBQcm9wZXJ0eVdyYXBwZXJCYXNlKiBtYXJnaW5X
cmFwcGVyc1tCb3hTaWRlQ291bnRdID0geworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPExl
bmd0aD4oQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCAmUmVuZGVyU3R5bGU6Om1hcmdpbkxlZnQsICZS
ZW5kZXJTdHlsZTo6c2V0TWFyZ2luTGVmdCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
TGVuZ3RoPihDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCAmUmVuZGVyU3R5bGU6Om1hcmdpblJpZ2h0
LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpblJpZ2h0KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3Jh
cHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5TWFyZ2luVG9wLCAmUmVuZGVyU3R5bGU6Om1hcmdpblRv
cCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5Ub3ApLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyPExlbmd0aD4oQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sICZSZW5kZXJTdHlsZTo6bWFyZ2lu
Qm90dG9tLCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpbkJvdHRvbSkKKyAgICB9OworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IEJveFNpZGVDb3VudDsgKytpKSB7CisgICAgICAgIGdQcm9w
ZXJ0eVdyYXBwZXJzLT5hcHBlbmQobWFyZ2luV3JhcHBlcnNbaV0pOworICAgICAgICBtYXJnaW5T
aG9ydGhhbmRXcmFwcGVyLT5hcHBlbmQobWFyZ2luV3JhcHBlcnNbaV0pOworICAgIH0KKyAgICBn
UHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG1hcmdpblNob3J0aGFuZFdyYXBwZXIpOworfQorCitz
dGF0aWMgdm9pZCBjcmVhdGVQYWRkaW5nUHJvcGVydHlXcmFwcGVycygpCit7CisgICAgU2hvcnRo
YW5kUHJvcGVydHlXcmFwcGVyKiBwYWRkaW5nU2hvcnRoYW5kV3JhcHBlciA9IG5ldyBTaG9ydGhh
bmRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nKTsKKyAgICBQcm9wZXJ0eVdyYXBw
ZXJCYXNlKiBwYWRkaW5nV3JhcHBlcnNbQm94U2lkZUNvdW50XSA9IHsKKyAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5UGFkZGluZ0xlZnQsICZSZW5kZXJTdHls
ZTo6cGFkZGluZ0xlZnQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ0xlZnQpLAorICAgICAgICBu
ZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQsICZSZW5k
ZXJTdHlsZTo6cGFkZGluZ1JpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdSaWdodCksCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVBhZGRpbmdUb3As
ICZSZW5kZXJTdHlsZTo6cGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nVG9wKSwK
KyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5UGFkZGluZ0Jv
dHRvbSwgJlJlbmRlclN0eWxlOjpwYWRkaW5nQm90dG9tLCAmUmVuZGVyU3R5bGU6OnNldFBhZGRp
bmdCb3R0b20pCisgICAgfTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCb3hTaWRl
Q291bnQ7ICsraSkgeworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKHBhZGRpbmdX
cmFwcGVyc1tpXSk7CisgICAgICAgIHBhZGRpbmdTaG9ydGhhbmRXcmFwcGVyLT5hcHBlbmQocGFk
ZGluZ1dyYXBwZXJzW2ldKTsKKyAgICB9CisgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChw
YWRkaW5nU2hvcnRoYW5kV3JhcHBlcik7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZUJhY2tncm91
bmRQcm9wZXJ0eVdyYXBwZXJzKCkKK3sKKyAgICAvLyBGSVhNRTogYW5pbWF0ZSBiYWNrZ3JvdW5k
LXBvc2l0aW9uCisgICAgU2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyKiBiYWNrZ3JvdW5kU2hvcnRo
YW5kV3JhcHBlciA9IG5ldyBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kKTsKKworICAgIFByb3BlcnR5V3JhcHBlckJhc2UqIGJhY2tncm91bmRDb2xvcldyYXBw
ZXIgPSBuZXcgUHJvcGVydHlXcmFwcGVyPGNvbnN0IENvbG9yJj4oQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZENvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dEJhY2tncm91bmRDb2xvcik7CisgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChiYWNrZ3Jv
dW5kQ29sb3JXcmFwcGVyKTsKKworICAgIGJhY2tncm91bmRTaG9ydGhhbmRXcmFwcGVyLT5hcHBl
bmQoYmFja2dyb3VuZENvbG9yV3JhcHBlcik7CisgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVu
ZChiYWNrZ3JvdW5kU2hvcnRoYW5kV3JhcHBlcik7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZUZv
bnRQcm9wZXJ0eVdyYXBwZXJzKCkKK3sKKyAgICAvLyBGSVhNRTogYW5pbWF0ZSBmb250LXdlaWdo
dAorICAgIFNob3J0aGFuZFByb3BlcnR5V3JhcHBlciogZm9udFNob3J0aGFuZFdyYXBwZXIgPSBu
ZXcgU2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5Rm9udCk7CisKKyAgICBQcm9w
ZXJ0eVdyYXBwZXJCYXNlKiBmb250U2l6ZVdyYXBwZXIgPSBuZXcgUHJvcGVydHlXcmFwcGVyPGlu
dD4oQ1NTUHJvcGVydHlGb250U2l6ZSwgJlJlbmRlclN0eWxlOjpmb250U2l6ZSwgJlJlbmRlclN0
eWxlOjpzZXRCbGVuZGVkRm9udFNpemUpOworICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQo
Zm9udFNpemVXcmFwcGVyKTsKKworICAgIGZvbnRTaG9ydGhhbmRXcmFwcGVyLT5hcHBlbmQoZm9u
dFNpemVXcmFwcGVyKTsKKyAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKGZvbnRTaG9ydGhh
bmRXcmFwcGVyKTsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlT3V0bGluZVByb3BlcnR5V3JhcHBl
cnMoKQoreworICAgIFNob3J0aGFuZFByb3BlcnR5V3JhcHBlciogb3V0bGluZVNob3J0aGFuZFdy
YXBwZXIgPSBuZXcgU2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5T3V0bGluZSk7
CisKKyAgICBQcm9wZXJ0eVdyYXBwZXJCYXNlKiBvdXRsaW5lT2Zmc2V0V3JhcHBlciA9IG5ldyBQ
cm9wZXJ0eVdyYXBwZXI8aW50PihDU1NQcm9wZXJ0eU91dGxpbmVPZmZzZXQsICZSZW5kZXJTdHls
ZTo6b3V0bGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lT2Zmc2V0KTsKKyAgICBQ
cm9wZXJ0eVdyYXBwZXJCYXNlKiBvdXRsaW5lV2lkdGhXcmFwcGVyID0gbmV3IFByb3BlcnR5V3Jh
cHBlcjx1bnNpZ25lZCBzaG9ydD4oQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGgsICZSZW5kZXJTdHls
ZTo6b3V0bGluZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVXaWR0aCk7CisgICAgUHJv
cGVydHlXcmFwcGVyQmFzZSogb3V0bGluZUNvbG9yV3JhcHBlciA9IG5ldyBQcm9wZXJ0eVdyYXBw
ZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eU91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxl
OjpvdXRsaW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZUNvbG9yKTsKKworICAgIGdQ
cm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQob3V0bGluZU9mZnNldFdyYXBwZXIpOworICAgIGdQcm9w
ZXJ0eVdyYXBwZXJzLT5hcHBlbmQob3V0bGluZVdpZHRoV3JhcHBlcik7CisgICAgZ1Byb3BlcnR5
V3JhcHBlcnMtPmFwcGVuZChvdXRsaW5lQ29sb3JXcmFwcGVyKTsKKyAgICAKKyAgICBvdXRsaW5l
U2hvcnRoYW5kV3JhcHBlci0+YXBwZW5kKG91dGxpbmVXaWR0aFdyYXBwZXIpOworICAgIG91dGxp
bmVTaG9ydGhhbmRXcmFwcGVyLT5hcHBlbmQob3V0bGluZUNvbG9yV3JhcHBlcik7CisgICAgZ1By
b3BlcnR5V3JhcHBlcnMtPmFwcGVuZChvdXRsaW5lU2hvcnRoYW5kV3JhcHBlcik7Cit9CisKIHN0
YXRpYyB2b2lkIGVuc3VyZVByb3BlcnR5TWFwKCkKIHsKICAgICAvLyBGSVhNRTogVGhpcyBkYXRh
IGlzIG5ldmVyIGRlc3Ryb3llZC4gTWF5YmUgd2Ugc2hvdWxkIHJlZiBjb3VudCBpdCBhbmQgdG9z
cyBpdCB3aGVuIHRoZSBsYXN0IEFuaW1hdGlvbkNvbnRyb2xsZXIgaXMgZGVzdHJveWVkPwogICAg
IGlmIChnUHJvcGVydHlXcmFwcGVycyA9PSAwKSB7CiAgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJz
ID0gbmV3IFZlY3RvcjxQcm9wZXJ0eVdyYXBwZXJCYXNlKj4oKTsKIAotICAgICAgICAvLyBidWls
ZCB0aGUgbGlzdCBvZiBwcm9wZXJ0eSB3cmFwcGVycyB0byBkbyB0aGUgY29tcGFyaXNvbnMgYW5k
IGJsZW5kcworICAgICAgICAvLyBCdWlsZCB0aGUgbGlzdCBvZiBwcm9wZXJ0eSB3cmFwcGVycyB0
byBkbyB0aGUgY29tcGFyaXNvbnMgYW5kIGJsZW5kcy4KICAgICAgICAgZ1Byb3BlcnR5V3JhcHBl
cnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlMZWZ0LCAm
UmVuZGVyU3R5bGU6OmxlZnQsICZSZW5kZXJTdHlsZTo6c2V0TGVmdCkpOwogICAgICAgICBnUHJv
cGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9w
ZXJ0eVJpZ2h0LCAmUmVuZGVyU3R5bGU6OnJpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFJpZ2h0KSk7
CiAgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxM
ZW5ndGg+KENTU1Byb3BlcnR5VG9wLCAmUmVuZGVyU3R5bGU6OnRvcCwgJlJlbmRlclN0eWxlOjpz
ZXRUb3ApKTsKICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlX
cmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlCb3R0b20sICZSZW5kZXJTdHlsZTo6Ym90dG9tLCAm
UmVuZGVyU3R5bGU6OnNldEJvdHRvbSkpOwogICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBw
ZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVdpZHRoLCAmUmVuZGVy
U3R5bGU6OndpZHRoLCAmUmVuZGVyU3R5bGU6OnNldFdpZHRoKSk7CiAgICAgICAgIGdQcm9wZXJ0
eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5
SGVpZ2h0LCAmUmVuZGVyU3R5bGU6OmhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRIZWlnaHQpKTsK
LSAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPHVu
c2lnbmVkIHNob3J0PihDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgJlJlbmRlclN0eWxlOjpi
b3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdFdpZHRoKSk7Ci0gICAg
ICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25l
ZCBzaG9ydD4oQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRl
clJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyUmlnaHRXaWR0aCkpOwotICAgICAg
ICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5zaWduZWQg
c2hvcnQ+KENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9w
V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wV2lkdGgpKTsKLSAgICAgICAgZ1Byb3Bl
cnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNob3J0PihD
U1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVdp
ZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVdpZHRoKSk7Ci0gICAgICAgIGdQcm9w
ZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3Bl
cnR5TWFyZ2luTGVmdCwgJlJlbmRlclN0eWxlOjptYXJnaW5MZWZ0LCAmUmVuZGVyU3R5bGU6OnNl
dE1hcmdpbkxlZnQpKTsKLSAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJv
cGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgJlJlbmRlclN0eWxl
OjptYXJnaW5SaWdodCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5SaWdodCkpOwotICAgICAgICBn
UHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQ
cm9wZXJ0eU1hcmdpblRvcCwgJlJlbmRlclN0eWxlOjptYXJnaW5Ub3AsICZSZW5kZXJTdHlsZTo6
c2V0TWFyZ2luVG9wKSk7Ci0gICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFBy
b3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCAmUmVuZGVyU3R5
bGU6Om1hcmdpbkJvdHRvbSwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5Cb3R0b20pKTsKLSAgICAg
ICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4o
Q1NTUHJvcGVydHlQYWRkaW5nTGVmdCwgJlJlbmRlclN0eWxlOjpwYWRkaW5nTGVmdCwgJlJlbmRl
clN0eWxlOjpzZXRQYWRkaW5nTGVmdCkpOwotICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBw
ZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwg
JlJlbmRlclN0eWxlOjpwYWRkaW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1JpZ2h0
KSk7Ci0gICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
cjxMZW5ndGg+KENTU1Byb3BlcnR5UGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpwYWRkaW5nVG9w
LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdUb3ApKTsKLSAgICAgICAgZ1Byb3BlcnR5V3JhcHBl
cnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlQYWRkaW5n
Qm90dG9tLCAmUmVuZGVyU3R5bGU6OnBhZGRpbmdCb3R0b20sICZSZW5kZXJTdHlsZTo6c2V0UGFk
ZGluZ0JvdHRvbSkpOworICAgICAgICAKKyAgICAgICAgY3JlYXRlQm9yZGVyUHJvcGVydHlXcmFw
cGVycygpOworICAgICAgICBjcmVhdGVNYXJnaW5Qcm9wZXJ0eVdyYXBwZXJzKCk7CisgICAgICAg
IGNyZWF0ZVBhZGRpbmdQcm9wZXJ0eVdyYXBwZXJzKCk7CisgICAgICAgIAogICAgICAgICBnUHJv
cGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3Bl
cnR5T3BhY2l0eSwgJlJlbmRlclN0eWxlOjpvcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldE9wYWNp
dHkpKTsKICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFw
cGVyPGNvbnN0IENvbG9yJj4oQ1NTUHJvcGVydHlDb2xvciwgJlJlbmRlclN0eWxlOjpjb2xvciwg
JlJlbmRlclN0eWxlOjpzZXRDb2xvcikpOwotICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBw
ZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgQ29sb3ImPihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvciwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
QmFja2dyb3VuZENvbG9yKSk7Ci0gICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3
IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5Rm9udFNpemUsICZSZW5kZXJTdHlsZTo6
Zm9udFNpemUsICZSZW5kZXJTdHlsZTo6c2V0QmxlbmRlZEZvbnRTaXplKSk7CisKKyAgICAgICAg
Y3JlYXRlQmFja2dyb3VuZFByb3BlcnR5V3JhcHBlcnMoKTsKKyAgICAgICAgY3JlYXRlRm9udFBy
b3BlcnR5V3JhcHBlcnMoKTsKKwogICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5l
dyBQcm9wZXJ0eVdyYXBwZXI8dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5V2Via2l0Q29sdW1u
UnVsZVdpZHRoLCAmUmVuZGVyU3R5bGU6OmNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpz
ZXRDb2x1bW5SdWxlV2lkdGgpKTsKICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChu
ZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkdhcCwgJlJl
bmRlclN0eWxlOjpjb2x1bW5HYXAsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uR2FwKSk7CiAgICAg
ICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25l
ZCBzaG9ydD4oQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5Db3VudCwgJlJlbmRlclN0eWxlOjpjb2x1
bW5Db3VudCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5Db3VudCkpOwogICAgICAgICBnUHJvcGVy
dHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5
V2Via2l0Q29sdW1uV2lkdGgsICZSZW5kZXJTdHlsZTo6Y29sdW1uV2lkdGgsICZSZW5kZXJTdHls
ZTo6c2V0Q29sdW1uV2lkdGgpKTsKLSAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChu
ZXcgUHJvcGVydHlXcmFwcGVyPHNob3J0PihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250
YWxTcGFjaW5nLCAmUmVuZGVyU3R5bGU6Omhvcml6b250YWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVy
U3R5bGU6OnNldEhvcml6b250YWxCb3JkZXJTcGFjaW5nKSk7Ci0gICAgICAgIGdQcm9wZXJ0eVdy
YXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NTUHJvcGVydHlXZWJr
aXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6dmVydGljYWxCb3JkZXJTcGFj
aW5nLCAmUmVuZGVyU3R5bGU6OnNldFZlcnRpY2FsQm9yZGVyU3BhY2luZykpOworICAgICAgICAK
KyAgICAgICAgCiAgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5
V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5WkluZGV4LCAmUmVuZGVyU3R5bGU6OnpJbmRleCwgJlJl
bmRlclN0eWxlOjpzZXRaSW5kZXgpKTsKICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVu
ZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCAmUmVu
ZGVyU3R5bGU6OmxpbmVIZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0TGluZUhlaWdodCkpOwotICAg
ICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8aW50PihD
U1NQcm9wZXJ0eU91dGxpbmVPZmZzZXQsICZSZW5kZXJTdHlsZTo6b3V0bGluZU9mZnNldCwgJlJl
bmRlclN0eWxlOjpzZXRPdXRsaW5lT2Zmc2V0KSk7Ci0gICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJz
LT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25lZCBzaG9ydD4oQ1NTUHJvcGVydHlP
dXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6b3V0bGluZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNl
dE91dGxpbmVXaWR0aCkpOworICAgICAgICAKKyAgICAgICAgY3JlYXRlT3V0bGluZVByb3BlcnR5
V3JhcHBlcnMoKTsKKyAgICAgICAgCiAgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQo
bmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5TGV0dGVyU3BhY2luZywgJlJlbmRl
clN0eWxlOjpsZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldExldHRlclNwYWNpbmcpKTsK
ICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGlu
dD4oQ1NTUHJvcGVydHlXb3JkU3BhY2luZywgJlJlbmRlclN0eWxlOjp3b3JkU3BhY2luZywgJlJl
bmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZykpOworCiAgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJz
LT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJj4o
Q1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtLCAmUmVu
ZGVyU3R5bGU6OnNldFRyYW5zZm9ybSkpOwogICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBw
ZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9y
bU9yaWdpblgsICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtT3JpZ2luWCwgJlJlbmRlclN0eWxlOjpz
ZXRUcmFuc2Zvcm1PcmlnaW5YKSk7CiAgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQo
bmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3Jp
Z2luWSwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5ZLCAmUmVuZGVyU3R5bGU6OnNldFRy
YW5zZm9ybU9yaWdpblkpKTsKLSAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcg
UHJvcGVydHlXcmFwcGVyPGNvbnN0IEludFNpemUmPihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclRv
cExlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0
eWxlOjpzZXRCb3JkZXJUb3BMZWZ0UmFkaXVzKSk7Ci0gICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJz
LT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxjb25zdCBJbnRTaXplJj4oQ1NTUHJvcGVydHlX
ZWJraXRCb3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3JkZXJUb3BSaWdodFJh
ZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BSaWdodFJhZGl1cykpOwotICAgICAgICBn
UHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgSW50U2l6
ZSY+KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxl
Ojpib3JkZXJCb3R0b21MZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbUxl
ZnRSYWRpdXMpKTsKLSAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVy
dHlXcmFwcGVyPGNvbnN0IEludFNpemUmPihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJvdHRvbVJp
Z2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVy
U3R5bGU6OnNldEJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKSk7CisKICAgICAgICAgZ1Byb3BlcnR5
V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPEVWaXNpYmlsaXR5PihDU1NQcm9w
ZXJ0eVZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6dmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjpz
ZXRWaXNpYmlsaXR5KSk7CiAgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFBy
b3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlab29tLCAmUmVuZGVyU3R5bGU6Onpvb20s
ICZSZW5kZXJTdHlsZTo6c2V0Wm9vbSkpOwogICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBw
ZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtp
dENvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpjb2x1bW5SdWxlQ29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0Q29sdW1uUnVsZUNvbG9yKSk7CiAgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5h
cHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5V2Vi
a2l0VGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnRleHRTdHJva2VDb2xvciwgJlJlbmRl
clN0eWxlOjpzZXRUZXh0U3Ryb2tlQ29sb3IpKTsKICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMt
PmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlX
ZWJraXRUZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnRleHRGaWxsQ29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0VGV4dEZpbGxDb2xvcikpOwotICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBw
ZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eUJvcmRl
ckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6
c2V0Qm9yZGVyTGVmdENvbG9yKSk7Ci0gICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQo
bmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyUmln
aHRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dEJvcmRlclJpZ2h0Q29sb3IpKTsKLSAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChu
ZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJUb3BD
b2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3Jk
ZXJUb3BDb2xvcikpOwotICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9w
ZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9y
LCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRl
ckJvdHRvbUNvbG9yKSk7Ci0gICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFBy
b3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5T3V0bGluZUNvbG9yLCAm
UmVuZGVyU3R5bGU6Om91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lQ29sb3Ip
KTsKIAogICAgICAgICAvLyBUaGVzZSBhcmUgZm9yIHNoYWRvd3MKICAgICAgICAgZ1Byb3BlcnR5
V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5V2Vi
a2l0Qm94U2hhZG93LCAmUmVuZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRC
b3hTaGFkb3cpKTsKQEAgLTM2MSw2ICs1NTksMjMgQEAgc3RhdGljIHZvaWQgZW5zdXJlUHJvcGVy
dHlNYXAoKQogICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdy
YXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5U3Ryb2tlT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzdHJv
a2VPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldFN0cm9rZU9wYWNpdHkpKTsKICNlbmRpZgogCisg
ICAgICAgIC8vIFRPRE86CisgICAgICAgIC8vIAorICAgICAgICAvLyAgQ1NTUHJvcGVydHlNaW5X
aWR0aCwgQ1NTUHJvcGVydHlNYXhXaWR0aCwgQ1NTUHJvcGVydHlNaW5IZWlnaHQsIENTU1Byb3Bl
cnR5TWF4SGVpZ2h0CisgICAgICAgIC8vICBDU1NQcm9wZXJ0eVRleHRJbmRlbnQKKyAgICAgICAg
Ly8gIENTU1Byb3BlcnR5VmVydGljYWxBbGlnbgorICAgICAgICAvLyAgQ1NTUHJvcGVydHlXZWJr
aXRCYWNrZ3JvdW5kT3JpZ2luCisgICAgICAgIC8vICBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91
bmRTaXplCisgICAgICAgIC8vICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbgorICAgICAg
ICAvLyAgQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2luCisgICAgICAgIC8vICBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tTaXplCisgICAgICAgIC8vIAorICAgICAgICAvLyBDb21wb3VuZCBwcm9wZXJ0
aWVzIHRoYXQgaGF2ZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIGFuaW1hdGFibGU6CisgICAg
ICAgIC8vIAorICAgICAgICAvLyAgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5zCisgICAgICAgIC8v
ICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2sKKyAgICAgICAgLy8gIENTU1Byb3BlcnR5V2Via2l0Qm94
UmVmbGVjdAorICAgICAgICAKICAgICAgICAgLy8gTWFrZSBzdXJlIHVudXNlZCBzbG90cyBoYXZl
IGEgdmFsdWUKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAodW5zaWduZWQg
aW50KSBudW1DU1NQcm9wZXJ0aWVzOyArK2kpCiAgICAgICAgICAgICBnUHJvcGVydHlXcmFwcGVy
TWFwW2ldID0gQ1NTUHJvcGVydHlJbnZhbGlkOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwIGIvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9D
b21wb3NpdGVBbmltYXRpb24uY3BwCmluZGV4IDUwYjlmNjguLjJkYWZiZWIgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAorKysgYi9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKQEAgLTE1Miw3ICsxNTIs
NyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OnVwZGF0ZVRyYW5zaXRpb25zKFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlcgogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICAvLyBJbXBsaWNpdEFuaW1hdGlvbnMgYXJlIGFsd2F5cyBoYXNoZWQgYnkgYWN0dWFsIHByb3Bl
cnRpZXMsIG5ldmVyIGNBbmltYXRlQWxsCi0gICAgICAgICAgICBBU1NFUlQocHJvcCA+IGZpcnN0
Q1NTUHJvcGVydHkgJiYgcHJvcCA8IChmaXJzdENTU1Byb3BlcnR5ICsgbnVtQ1NTUHJvcGVydGll
cykpOworICAgICAgICAgICAgQVNTRVJUKHByb3AgPj0gZmlyc3RDU1NQcm9wZXJ0eSAmJiBwcm9w
IDwgKGZpcnN0Q1NTUHJvcGVydHkgKyBudW1DU1NQcm9wZXJ0aWVzKSk7CiAKICAgICAgICAgICAg
IC8vIElmIHRoZXJlIGlzIGEgcnVubmluZyBhbmltYXRpb24gZm9yIHRoaXMgcHJvcGVydHksIHRo
ZSB0cmFuc2l0aW9uIGlzIG92ZXJyaWRkZW4KICAgICAgICAgICAgIC8vIGFuZCB3ZSBoYXZlIHRv
IHVzZSB0aGUgdW5hbmltYXRlZFN0eWxlIGZyb20gdGhlIGFuaW1hdGlvbi4gV2UgZG8gdGhlIHRl
c3QK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26835</attachid>
            <date>2009-01-18 12:17:43 -0800</date>
            <delta_ts>2009-01-19 12:58:11 -0800</delta_ts>
            <desc>Patch, testcases, changelog</desc>
            <filename>18078_patch.txt</filename>
            <type>text/plain</type>
            <size>39934</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwYjE3NDNkLi5hYzE0M2IwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDktMDEt
MTggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4MDc4CisgICAgICAgIAorICAgICAgICBBZGQgdGVzdHMgZm9y
IGFuaW1hdGluZyBzaG9ydGhhbmQgcHJvcGVydGllcywKKyAgICAgICAgYW5kIGZpeCB0cmFuc2l0
aW9uLXRlc3QtaGVscGVycy5qcyB0byBoYW5kbGUgbW9yZSBraW5kcworICAgICAgICBvZiBDU1Mg
cHJvcGVydGllcywgbGlrZSBsaXN0cyBhbmQgY29sb3JzLgorICAgICAgICAKKyAgICAgICAgKiB0
cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1tYXRjaC5odG1sOgorICAgICAgICAqIHRyYW5z
aXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW5vLW1hdGNoLmh0bWw6CisgICAgICAgICogdHJhbnNp
dGlvbnMvdHJhbnNpdGlvbi10ZXN0LWhlbHBlcnMuanM6CisgICAgICAgIChydW5UcmFuc2l0aW9u
VGVzdC5jaGVja0V4cGVjdGVkVmFsdWUpOgorICAgICAgICAocnVuVHJhbnNpdGlvblRlc3QucnVu
VGVzdCk6CisgICAgICAgICogdHJhbnNpdGlvbnMvemVyby1kdXJhdGlvbi1pbi1saXN0Lmh0bWw6
CisKIDIwMDktMDEtMTcgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgQWRlbGUgUGV0ZXJzb24KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW1hdGNoLmh0bWwgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1tYXRjaC5odG1sCmluZGV4IDNkMzg1YTIu
LmNlOTZhOGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1v
cC1saXN0LW1hdGNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNmb3Jt
LW9wLWxpc3QtbWF0Y2guaHRtbApAQCAtMzYsNyArMzYsNyBAQAogICAgICAgYm94LnN0eWxlLndl
YmtpdFRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKDBweCkgcm90YXRlKDU0MGRlZyknOwogICAgIH0K
ICAgICAKLSAgICBydW5UcmFuc2l0aW9uVGVzdChleHBlY3RlZFZhbHVlcywgc2V0dXBUZXN0KTsK
KyAgICBydW5UcmFuc2l0aW9uVGVzdChleHBlY3RlZFZhbHVlcywgc2V0dXBUZXN0LCB0cnVlKTsK
ICAgICAKICAgPC9zY3JpcHQ+CiA8L2hlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1uby1tYXRjaC5odG1sIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3Qtbm8tbWF0Y2guaHRtbAppbmRleCBiYjFiYmMxLi4x
NDE2NWQwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3At
bGlzdC1uby1tYXRjaC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zZm9y
bS1vcC1saXN0LW5vLW1hdGNoLmh0bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgIGJveC5zdHls
ZS53ZWJraXRUcmFuc2Zvcm0gPSAncm90YXRlKDU0MGRlZyknOwogICAgIH0KICAgICAKLSAgICBy
dW5UcmFuc2l0aW9uVGVzdChleHBlY3RlZFZhbHVlcywgc2V0dXBUZXN0KTsKKyAgICBydW5UcmFu
c2l0aW9uVGVzdChleHBlY3RlZFZhbHVlcywgc2V0dXBUZXN0LCB0cnVlKTsKICAgICAKICAgPC9z
Y3JpcHQ+CiA8L2hlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFu
c2l0aW9uLXRlc3QtaGVscGVycy5qcyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRp
b24tdGVzdC1oZWxwZXJzLmpzCmluZGV4IGE0ZWNjMjkuLjVjYWExYjUgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdGVzdC1oZWxwZXJzLmpzCisrKyBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdGVzdC1oZWxwZXJzLmpzCkBAIC0yNiw3
ICsyNiw3IEBAIGZ1bmN0aW9uIHJvdW5kTnVtYmVyKG51bSwgZGVjaW1hbFBsYWNlcykKICAgcmV0
dXJuIE1hdGgucm91bmQobnVtICogTWF0aC5wb3coMTAsIGRlY2ltYWxQbGFjZXMpKSAvIE1hdGgu
cG93KDEwLCBkZWNpbWFsUGxhY2VzKTsKIH0KIAotZnVuY3Rpb24gcnVuVHJhbnNpdGlvblRlc3Qo
ZXhwZWN0ZWQsIGNhbGxiYWNrKQorZnVuY3Rpb24gcnVuVHJhbnNpdGlvblRlc3QoZXhwZWN0ZWQs
IGNhbGxiYWNrLCB1c2VQYXVzZUFQSSkKIHsKICAgICB2YXIgcmVzdWx0ID0gIiI7CiAgICAgdmFy
IGhhc1BhdXNlVHJhbnNpdGlvbkFQSSA9ICgnbGF5b3V0VGVzdENvbnRyb2xsZXInIGluIHdpbmRv
dykgJiYgKCdwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQnIGluIGxheW91dFRl
c3RDb250cm9sbGVyKTsKQEAgLTQ2LDEwICs0NiwxMCBAQCBmdW5jdGlvbiBydW5UcmFuc2l0aW9u
VGVzdChleHBlY3RlZCwgY2FsbGJhY2spCiAgICAgICAgIHZhciB0b2xlcmFuY2UgPSBleHBlY3Rl
ZFtpbmRleF1bNF07CiAKICAgICAgICAgdmFyIGNvbXB1dGVkVmFsdWU7Ci0gICAgICAgIHZhciBw
YXNzOwotICAgICAgICBpZiAoIXByb3BlcnR5LmluZGV4T2YoIi13ZWJraXQtdHJhbnNmb3JtIikp
IHsKKyAgICAgICAgdmFyIHBhc3MgPSBmYWxzZTsKKyAgICAgICAgdmFyIHRyYW5zZm9ybVJlZ0V4
cCA9IC9eLXdlYmtpdC10cmFuc2Zvcm0oXC5cZCspPyQvOworICAgICAgICBpZiAodHJhbnNmb3Jt
UmVnRXhwLnRlc3QocHJvcGVydHkpKSB7CiAgICAgICAgICAgICBjb21wdXRlZFZhbHVlID0gd2lu
ZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKSku
d2Via2l0VHJhbnNmb3JtOwotCiAgICAgICAgICAgICBpZiAodHlwZW9mIGV4cGVjdGVkVmFsdWUg
PT0gInN0cmluZyIpCiAgICAgICAgICAgICAgICAgcGFzcyA9IChjb21wdXRlZFZhbHVlID09IGV4
cGVjdGVkVmFsdWUpOwogICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGV4cGVjdGVkVmFsdWUg
PT0gIm51bWJlciIpIHsKQEAgLTY4LDEwICs2OCw0MiBAQCBmdW5jdGlvbiBydW5UcmFuc2l0aW9u
VGVzdChleHBlY3RlZCwgY2FsbGJhY2spCiAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkgPT0g
ImxpbmVIZWlnaHQiKSB7CiAgICAgICAgICAgICBjb21wdXRlZFZhbHVlID0gcGFyc2VJbnQod2lu
ZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKSku
bGluZUhlaWdodCk7CiAgICAgICAgICAgICBwYXNzID0gaXNDbG9zZUVub3VnaChjb21wdXRlZFZh
bHVlLCBleHBlY3RlZFZhbHVlLCB0b2xlcmFuY2UpOwotICAgICAgICB9IGVsc2UgeyAgICAKKyAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHZhciBjb21wdXRlZFN0eWxlID0gd2luZG93Lmdl
dENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKSkuZ2V0UHJv
cGVydHlDU1NWYWx1ZShwcm9wZXJ0eSk7Ci0gICAgICAgICAgICBjb21wdXRlZFZhbHVlID0gY29t
cHV0ZWRTdHlsZS5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19OVU1CRVIpOwot
ICAgICAgICAgICAgcGFzcyA9IGlzQ2xvc2VFbm91Z2goY29tcHV0ZWRWYWx1ZSwgZXhwZWN0ZWRW
YWx1ZSwgdG9sZXJhbmNlKTsKKyAgICAgICAgICAgIGlmIChjb21wdXRlZFN0eWxlLmNzc1ZhbHVl
VHlwZSA9PSBDU1NWYWx1ZS5DU1NfVkFMVUVfTElTVCkgeworICAgICAgICAgICAgICAgIC8vIEZv
ciBub3csIGFzc3VtZSB0aGF0IHZhbHVlIGxpc3RzIGFyZSBzaW1wbGUgbGlzdHMgb2YgbnVtYmVy
IHZhbHVlcyAoZS5nLiB0cmFuc2Zvcm0tb3JpZ2luKQorICAgICAgICAgICAgICAgIHZhciB2YWx1
ZXMgPSBbXTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbXB1dGVkU3R5
bGUubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goY29tcHV0
ZWRTdHlsZVtpXS5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19OVU1CRVIpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29tcHV0ZWRWYWx1ZSA9IHZhbHVl
cy5qb2luKCcsJyk7CisgICAgICAgICAgICAgICAgcGFzcyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAg
ICAgICAgIHBhc3MgJj0gaXNDbG9zZUVub3VnaCh2YWx1ZXNbaV0sIGV4cGVjdGVkVmFsdWVbaV0s
IHRvbGVyYW5jZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbXB1dGVkU3R5bGUuY3NzVmFs
dWVUeXBlID09IENTU1ZhbHVlLkNTU19QUklNSVRJVkVfVkFMVUUpIHsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKGNvbXB1dGVkU3R5bGUucHJpbWl0aXZlVHlwZSkgeworICAgICAgICAgICAgICAg
ICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlLkNTU19TVFJJTkc6CisgICAgICAgICAgICAgICAg
ICAgICAgICBjb21wdXRlZFZhbHVlID0gY29tcHV0ZWRTdHlsZS5nZXRTdHJpbmdWYWx1ZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcGFzcyA9IGNvbXB1dGVkVmFsdWUgPT0gZXhwZWN0ZWRW
YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlLkNTU19SR0JDT0xPUjoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciByZ2JDb2xvciA9IGNvbXB1dGVkU3R5bGUuZ2V0UkdCQ29sb3JWYWx1ZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRWYWx1ZSA9IFtyZ2JDb2xvci5yZWQuZ2V0
RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZS5DU1NfTlVNQkVSKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdiQ29sb3IuZ3JlZW4uZ2V0RmxvYXRWYWx1ZShD
U1NQcmltaXRpdmVWYWx1ZS5DU1NfTlVNQkVSKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmdiQ29sb3IuYmx1ZS5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZh
bHVlLkNTU19OVU1CRVIpXTsgLy8gYWxwaGEgaXMgbm90IGV4cG9zZWQgdG8gSlMKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBhc3MgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFz
cyAmPSBpc0Nsb3NlRW5vdWdoKGNvbXB1dGVkVmFsdWVbaV0sIGV4cGVjdGVkVmFsdWVbaV0sIHRv
bGVyYW5jZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZS5DU1NfUkVDVDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbXB1dGVkVmFsdWUgPSBjb21wdXRlZFN0eWxlLmdldFJlY3RWYWx1ZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcGFzcyA9IGNvbXB1dGVkVmFsdWUgPT0gZXhwZWN0ZWRWYWx1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRWYWx1ZSA9IGNvbXB1dGVk
U3R5bGUuZ2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZS5DU1NfTlVNQkVSKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBhc3MgPSBpc0Nsb3NlRW5vdWdoKGNvbXB1dGVkVmFsdWUsIGV4
cGVjdGVkVmFsdWUsIHRvbGVyYW5jZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQogICAgICAgICB9CiAKICAgICAgICAgaWYgKHBhc3MpCkBAIC0xMDUsNyArMTM3LDcgQEAgZnVu
Y3Rpb24gcnVuVHJhbnNpdGlvblRlc3QoZXhwZWN0ZWQsIGNhbGxiYWNrKQogICAgICAgICAgICAg
cHJvcGVydHkgPSAiLXdlYmtpdC10cmFuc2Zvcm0iOwogCiAgICAgICAgICAgICAvLyBXZSBjYW4g
b25seSB1c2UgdGhlIHRyYW5zaXRpb24gZmFzdC1mb3J3YXJkIG1lY2hhbmlzbSBpZiBEUlQgaW1w
bGVtZW50cyBwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoKQotICAgICAgICAg
ICAgaWYgKGhhc1BhdXNlVHJhbnNpdGlvbkFQSSkgeworICAgICAgICAgICAgaWYgKGhhc1BhdXNl
VHJhbnNpdGlvbkFQSSAmJiB1c2VQYXVzZUFQSSkgewogICAgICAgICAgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChwcm9wZXJ0
eSwgdGltZSwgZWxlbWVudElkKTsKICAgICAgICAgICAgICAgICBjaGVja0V4cGVjdGVkVmFsdWUo
ZXhwZWN0ZWQsIGkpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvemVyby1kdXJhdGlvbi1pbi1saXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy96ZXJvLWR1cmF0aW9uLWluLWxpc3QuaHRtbAppbmRleCBiOTBlNjFhLi5mYmUyZjVjIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLWluLWxpc3Qu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLWluLWxpc3Qu
aHRtbApAQCAtMzIsNyArMzIsNyBAQAogICAgICAgYm94LnN0eWxlLmxlZnQgPSAnMTAwcHgnOwog
ICAgIH0KICAgICAKLSAgICBydW5UcmFuc2l0aW9uVGVzdChleHBlY3RlZFZhbHVlcywgc2V0dXBU
ZXN0KTsKKyAgICBydW5UcmFuc2l0aW9uVGVzdChleHBlY3RlZFZhbHVlcywgc2V0dXBUZXN0LCB0
cnVlKTsKICAgICAKICAgPC9zY3JpcHQ+CiA8L2hlYWQ+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0No
YW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGU2ZGE0YzUuLjUzOWNmMDIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNTMgQEAKKzIwMDktMDEtMTggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDc4CisKKyAgICAgICAgU3Vw
cG9ydCBhbmltYXRpb25zIGFuZCB0cmFuc2l0aW9ucyBvZiBzaG9ydGhhbmQgcHJvcGVydGllcyBi
eSBjcmVhdGluZworICAgICAgICBQcm9wZXJ0eVdyYXBwZXJzIHRoYXQgc2ltcGx5IHdyYXAgYSB2
ZWN0b3Igb2YgYXRvbWNpIHdyYXBwZXJzLCBhbmQgaW1wbGVtZW50CisgICAgICAgIGVxdWFsKCkg
YW5kIGJsZW5kKCkuIEJ1aWxkIHRoYXQgY29sbGVjdGlvbiBvZiBzaG9ydGhhbmQgd3JhcHBlcnMg
dXNpbmcgdGhlCisgICAgICAgIHNob3J0aGFuZCBtYXAgdGhhdCBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiBhbHJlYWR5IGhhcy4gU2tpcCBjb21wYXJpbmcgdGhlc2UKKyAgICAgICAgc2hvcnRo
YW5kIHdyYXBwZXJzIGR1cmluZyAnYWxsJyB0cmFuc2l0aW9ucy4KKyAgICAgICAgCisgICAgICAg
ICogY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjppbml0U2hvcnRoYW5kTWFwKToKKyAgICAgICAgKFdlYkNvcmU6Omxv
bmdoYW5kRm9yUHJvcGVydHkpOgorICAgICAgICBNb3ZlIHRoZSBzaG9ydGhhbmRQcm9wZXJ0eU1h
cCBzdHVmZiB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLgorICAgICAgICAKKyAgICAgICAgKiBjc3Mv
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5TG9uZ2hhbmQ6OkNTU1Byb3BlcnR5TG9uZ2hhbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlMb25naGFuZDo6cHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eUxvbmdoYW5kOjpsZW5ndGgpOgorICAgICAgICBSZW5hbWUgUHJvcGVydHlMb25naGFuZCB0
byBDU1NQcm9wZXJ0eUxvbmdoYW5kIG5vdyB0aGF0IGl0IGlzIGV4cG9zZWQKKyAgICAgICAgaW4g
dGhlIGhlYWRlciwgYW5kIGV4cG9zZSBsb25naGFuZEZvclByb3BlcnR5KCkuCisgICAgICAgIAor
ICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UHJvcGVydHlXcmFwcGVyQmFzZTo6aXNTaG9ydGhhbmRXcmFwcGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNob3J0aGFuZFByb3BlcnR5V3JhcHBlcjo6U2hvcnRoYW5kUHJvcGVydHlXcmFw
cGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNob3J0aGFuZFByb3BlcnR5V3JhcHBlcjo6aXNTaG9y
dGhhbmRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNob3J0aGFuZFByb3BlcnR5V3JhcHBl
cjo6ZXF1YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlNob3J0aGFuZFByb3BlcnR5V3JhcHBlcjo6
YmxlbmQpOgorICAgICAgICBBZGQgYSB3cmFwcGVyIGNsYXNzIGZvciBzaG9ydGhhbmQgcHJvcGVy
dGllcyB0aGF0IHNpbXBseSB3cmFwcyBhbgorICAgICAgICBhcnJheSBvZiBhdG9taWMgcHJvcGVy
dHkgd3JhcHBlcnMuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlUHJvcGVydHlN
YXApOgorICAgICAgICAoV2ViQ29yZTo6YWRkUHJvcGVydHlXcmFwcGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmFkZFNob3J0aGFuZFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6d3JhcHBl
ckZvclByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OnByb3BlcnRp
ZXNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjpnZXRQcm9wZXJ0eUF0
SW5kZXgpOgorICAgICAgICBTb21lIG1pbm9yIHJlZmFjdG9yaW5nIHRvIHJlLXVzZSB3cmFwcGVy
Rm9yUHJvcGVydHkoKSwgYW5kIGVuc3VyZSB0aGF0IGdQcm9wZXJ0eVdyYXBwZXJNYXAKKyAgICAg
ICAgaXMgZmlsbGVkIHdpdGggYW4gaW52YWxpZCBpbmRleCAoLTEpLCBub3QgMC4KKworICAgICAg
ICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6YmxlbmRQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBw
YWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmg6CisgICAgICAgICogcGFnZS9hbmltYXRpb24v
Q29tcG9zaXRlQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1h
dGlvblByaXZhdGU6OnVwZGF0ZVRyYW5zaXRpb25zKToKKyAgICAgICAgV2hlbiBkb2luZyAnYWxs
JyB0cmFuc2l0aW9ucywgc2tpcCBzaG9ydGhhbmQgd3JhcHBlcnMsIHNpbmNlICdhbGwnIHRyYW5z
aXRpb25zCisgICAgICAgIGp1c3QgbmVlZCB0byBjb21wYXJlIGFsbCB0aGUgYXRvbWljIHByb3Bl
cnR5IHdyYXBwZXJzLgorCiAyMDA5LTAxLTE3ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KIAogICAgICAgICBPcHRpbWl6ZSBpc1RleHROb2RlKCkgdGhlIHNhbWUgd2F5IGlzRWxlbWVu
dE5vZGUoKSB3YXMgb3B0aW1pemVkIGluIGFuIGVhcmxpZXIgY2hlY2tpbi4gIGlzVGV4dE5vZGUo
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3Bw
IGIvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDZiMTJj
ZWQuLmM0NWYwNGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uLmNwcAorKysgYi9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5j
cHAKQEAgLTM2MywyMDcgKzM2Myw5IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0CiAgICAgcmV0
dXJuIHByb3BlcnR5ID8gcHJvcGVydHktPnZhbHVlKCkgOiAwOwogfQogCi1zdHJ1Y3QgUHJvcGVy
dHlMb25naGFuZCB7Ci0gICAgUHJvcGVydHlMb25naGFuZCgpCi0gICAgICAgIDogbV9wcm9wZXJ0
aWVzKDApCi0gICAgICAgICwgbV9sZW5ndGgoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgUHJvcGVy
dHlMb25naGFuZChjb25zdCBpbnQqIGZpcnN0UHJvcGVydHksIHVuc2lnbmVkIG51bVByb3BlcnRp
ZXMpCi0gICAgICAgIDogbV9wcm9wZXJ0aWVzKGZpcnN0UHJvcGVydHkpCi0gICAgICAgICwgbV9s
ZW5ndGgobnVtUHJvcGVydGllcykKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgaW50KiBwcm9w
ZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzOyB9Ci0gICAgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBp
bnQqIG1fcHJvcGVydGllczsKLSAgICB1bnNpZ25lZCBtX2xlbmd0aDsKLX07Ci0gICAgCi10eXBl
ZGVmIEhhc2hNYXA8aW50LCBQcm9wZXJ0eUxvbmdoYW5kPiBTaG9ydGhhbmRNYXA7Ci0KLXN0YXRp
YyB2b2lkIGluaXRTaG9ydGhhbmRNYXAoU2hvcnRoYW5kTWFwJiBzaG9ydGhhbmRNYXApCi17Ci0g
ICAgI2RlZmluZSBTRVRfU0hPUlRIQU5EX01BUF9FTlRSWShtYXAsIHByb3BJRCwgYXJyYXkpIFwK
LSAgICAgICAgbWFwLnNldChwcm9wSUQsIFByb3BlcnR5TG9uZ2hhbmQoYXJyYXksIHNpemVvZihh
cnJheSkgLyBzaXplb2YoYXJyYXlbMF0pKSkKLQotICAgIC8vIEZJWE1FOiBUaGUgJ2ZvbnQnIHBy
b3BlcnR5IGhhcyAic2hvcnRoYW5kIG5hdHVyZSIgYnV0IGlzIG5vdCBwYXJzZWQgYXMgYSBzaG9y
dGhhbmQuCi0KLSAgICAvLyBEbyBub3QgY2hhbmdlIHRoZSBvcmRlciBvZiB0aGUgZm9sbG93aW5n
IGZvdXIgc2hvcnRoYW5kcywgYW5kIGtlZXAgdGhlbSB0b2dldGhlci4KLSAgICBzdGF0aWMgY29u
c3QgaW50IGJvcmRlclByb3BlcnRpZXNbNF1bM10gPSB7Ci0gICAgICAgIHsgQ1NTUHJvcGVydHlC
b3JkZXJUb3BDb2xvciwgQ1NTUHJvcGVydHlCb3JkZXJUb3BTdHlsZSwgQ1NTUHJvcGVydHlCb3Jk
ZXJUb3BXaWR0aCB9LAotICAgICAgICB7IENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwgQ1NT
UHJvcGVydHlCb3JkZXJSaWdodFN0eWxlLCBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGggfSwK
LSAgICAgICAgeyBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yLCBDU1NQcm9wZXJ0eUJvcmRl
ckJvdHRvbVN0eWxlLCBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoIH0sCi0gICAgICAgIHsg
Q1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IsIENTU1Byb3BlcnR5Qm9yZGVyTGVmdFN0eWxlLCBD
U1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCB9Ci0gICAgfTsKLSAgICBTRVRfU0hPUlRIQU5EX01B
UF9FTlRSWShzaG9ydGhhbmRNYXAsIENTU1Byb3BlcnR5Qm9yZGVyVG9wLCBib3JkZXJQcm9wZXJ0
aWVzWzBdKTsKLSAgICBTRVRfU0hPUlRIQU5EX01BUF9FTlRSWShzaG9ydGhhbmRNYXAsIENTU1By
b3BlcnR5Qm9yZGVyUmlnaHQsIGJvcmRlclByb3BlcnRpZXNbMV0pOwotICAgIFNFVF9TSE9SVEhB
TkRfTUFQX0VOVFJZKHNob3J0aGFuZE1hcCwgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b20sIGJvcmRl
clByb3BlcnRpZXNbMl0pOwotICAgIFNFVF9TSE9SVEhBTkRfTUFQX0VOVFJZKHNob3J0aGFuZE1h
cCwgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0LCBib3JkZXJQcm9wZXJ0aWVzWzNdKTsKLQotICAgIHNo
b3J0aGFuZE1hcC5zZXQoQ1NTUHJvcGVydHlCb3JkZXIsIFByb3BlcnR5TG9uZ2hhbmQoYm9yZGVy
UHJvcGVydGllc1swXSwgc2l6ZW9mKGJvcmRlclByb3BlcnRpZXMpIC8gc2l6ZW9mKGJvcmRlclBy
b3BlcnRpZXNbMF1bMF0pKSk7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IGJvcmRlckNvbG9yUHJv
cGVydGllc1tdID0gewotICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yLAotICAgICAg
ICBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3IsCi0gICAgICAgIENTU1Byb3BlcnR5Qm9yZGVy
Qm90dG9tQ29sb3IsCi0gICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yCi0gICAgfTsK
LSAgICBTRVRfU0hPUlRIQU5EX01BUF9FTlRSWShzaG9ydGhhbmRNYXAsIENTU1Byb3BlcnR5Qm9y
ZGVyQ29sb3IsIGJvcmRlckNvbG9yUHJvcGVydGllcyk7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50
IGJvcmRlclN0eWxlUHJvcGVydGllc1tdID0gewotICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclRv
cFN0eWxlLAotICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGUsCi0gICAgICAgIENT
U1Byb3BlcnR5Qm9yZGVyQm90dG9tU3R5bGUsCi0gICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyTGVm
dFN0eWxlCi0gICAgfTsKLSAgICBTRVRfU0hPUlRIQU5EX01BUF9FTlRSWShzaG9ydGhhbmRNYXAs
IENTU1Byb3BlcnR5Qm9yZGVyU3R5bGUsIGJvcmRlclN0eWxlUHJvcGVydGllcyk7Ci0KLSAgICBz
dGF0aWMgY29uc3QgaW50IGJvcmRlcldpZHRoUHJvcGVydGllc1tdID0gewotICAgICAgICBDU1NQ
cm9wZXJ0eUJvcmRlclRvcFdpZHRoLAotICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lk
dGgsCi0gICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lkdGgsCi0gICAgICAgIENTU1By
b3BlcnR5Qm9yZGVyTGVmdFdpZHRoCi0gICAgfTsKLSAgICBTRVRfU0hPUlRIQU5EX01BUF9FTlRS
WShzaG9ydGhhbmRNYXAsIENTU1Byb3BlcnR5Qm9yZGVyV2lkdGgsIGJvcmRlcldpZHRoUHJvcGVy
dGllcyk7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IGJhY2tncm91bmRQb3NpdGlvblByb3BlcnRp
ZXNbXSA9IHsgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YLCBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRQb3NpdGlvblkgfTsKLSAgICBTRVRfU0hPUlRIQU5EX01BUF9FTlRSWShzaG9ydGhhbmRN
YXAsIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uLCBiYWNrZ3JvdW5kUG9zaXRpb25Qcm9w
ZXJ0aWVzKTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgYm9yZGVyU3BhY2luZ1Byb3BlcnRpZXNb
XSA9IHsgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZywgQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcgfTsKLSAgICBTRVRfU0hPUlRIQU5EX01BUF9F
TlRSWShzaG9ydGhhbmRNYXAsIENTU1Byb3BlcnR5Qm9yZGVyU3BhY2luZywgYm9yZGVyU3BhY2lu
Z1Byb3BlcnRpZXMpOwotCi0gICAgc3RhdGljIGNvbnN0IGludCBsaXN0U3R5bGVQcm9wZXJ0aWVz
W10gPSB7Ci0gICAgICAgIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2UsCi0gICAgICAgIENTU1By
b3BlcnR5TGlzdFN0eWxlUG9zaXRpb24sCi0gICAgICAgIENTU1Byb3BlcnR5TGlzdFN0eWxlVHlw
ZQotICAgIH07Ci0gICAgU0VUX1NIT1JUSEFORF9NQVBfRU5UUlkoc2hvcnRoYW5kTWFwLCBDU1NQ
cm9wZXJ0eUxpc3RTdHlsZSwgbGlzdFN0eWxlUHJvcGVydGllcyk7Ci0KLSAgICBzdGF0aWMgY29u
c3QgaW50IG1hcmdpblByb3BlcnRpZXNbXSA9IHsKLSAgICAgICAgQ1NTUHJvcGVydHlNYXJnaW5U
b3AsCi0gICAgICAgIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQsCi0gICAgICAgIENTU1Byb3BlcnR5
TWFyZ2luQm90dG9tLAotICAgICAgICBDU1NQcm9wZXJ0eU1hcmdpbkxlZnQKLSAgICB9OwotICAg
IFNFVF9TSE9SVEhBTkRfTUFQX0VOVFJZKHNob3J0aGFuZE1hcCwgQ1NTUHJvcGVydHlNYXJnaW4s
IG1hcmdpblByb3BlcnRpZXMpOwotCi0gICAgc3RhdGljIGNvbnN0IGludCBtYXJnaW5Db2xsYXBz
ZVByb3BlcnRpZXNbXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Ub3BDb2xsYXBzZSwgQ1NT
UHJvcGVydHlXZWJraXRNYXJnaW5Cb3R0b21Db2xsYXBzZSB9OwotICAgIFNFVF9TSE9SVEhBTkRf
TUFQX0VOVFJZKHNob3J0aGFuZE1hcCwgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Db2xsYXBzZSwg
bWFyZ2luQ29sbGFwc2VQcm9wZXJ0aWVzKTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgbWFycXVl
ZVByb3BlcnRpZXNbXSA9IHsKLSAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlRGlyZWN0
aW9uLAotICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVJbmNyZW1lbnQsCi0gICAgICAg
IENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVJlcGV0aXRpb24sCi0gICAgICAgIENTU1Byb3BlcnR5
V2Via2l0TWFycXVlZVN0eWxlLAotICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTcGVl
ZAotICAgIH07Ci0gICAgU0VUX1NIT1JUSEFORF9NQVBfRU5UUlkoc2hvcnRoYW5kTWFwLCBDU1NQ
cm9wZXJ0eVdlYmtpdE1hcnF1ZWUsIG1hcnF1ZWVQcm9wZXJ0aWVzKTsKLQotICAgIHN0YXRpYyBj
b25zdCBpbnQgb3V0bGluZVByb3BlcnRpZXNbXSA9IHsKLSAgICAgICAgQ1NTUHJvcGVydHlPdXRs
aW5lQ29sb3IsCi0gICAgICAgIENTU1Byb3BlcnR5T3V0bGluZU9mZnNldCwKLSAgICAgICAgQ1NT
UHJvcGVydHlPdXRsaW5lU3R5bGUsCi0gICAgICAgIENTU1Byb3BlcnR5T3V0bGluZVdpZHRoCi0g
ICAgfTsKLSAgICBTRVRfU0hPUlRIQU5EX01BUF9FTlRSWShzaG9ydGhhbmRNYXAsIENTU1Byb3Bl
cnR5T3V0bGluZSwgb3V0bGluZVByb3BlcnRpZXMpOwotCi0gICAgc3RhdGljIGNvbnN0IGludCBw
YWRkaW5nUHJvcGVydGllc1tdID0gewotICAgICAgICBDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsCi0g
ICAgICAgIENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0LAotICAgICAgICBDU1NQcm9wZXJ0eVBhZGRp
bmdCb3R0b20sCi0gICAgICAgIENTU1Byb3BlcnR5UGFkZGluZ0xlZnQKLSAgICB9OwotICAgIFNF
VF9TSE9SVEhBTkRfTUFQX0VOVFJZKHNob3J0aGFuZE1hcCwgQ1NTUHJvcGVydHlQYWRkaW5nLCBw
YWRkaW5nUHJvcGVydGllcyk7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IHRleHRTdHJva2VQcm9w
ZXJ0aWVzW10gPSB7IENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCBDU1NQcm9wZXJ0
eVdlYmtpdFRleHRTdHJva2VXaWR0aCB9OwotICAgIFNFVF9TSE9SVEhBTkRfTUFQX0VOVFJZKHNo
b3J0aGFuZE1hcCwgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlLCB0ZXh0U3Ryb2tlUHJvcGVy
dGllcyk7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IGJhY2tncm91bmRQcm9wZXJ0aWVzW10gPSB7
Ci0gICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQsCi0gICAgICAgIENTU1By
b3BlcnR5V2Via2l0QmFja2dyb3VuZENsaXAsCi0gICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yLAotICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZSwKLSAgICAgICAgQ1NT
UHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kT3JpZ2luLAotICAgICAgICBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRQb3NpdGlvblgsCi0gICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWSwK
LSAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0LAotICAgIH07Ci0gICAgU0VUX1NI
T1JUSEFORF9NQVBfRU5UUlkoc2hvcnRoYW5kTWFwLCBDU1NQcm9wZXJ0eUJhY2tncm91bmQsIGJh
Y2tncm91bmRQcm9wZXJ0aWVzKTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgY29sdW1uc1Byb3Bl
cnRpZXNbXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5XaWR0aCwgQ1NTUHJvcGVydHlXZWJr
aXRDb2x1bW5Db3VudCB9OwotICAgIFNFVF9TSE9SVEhBTkRfTUFQX0VOVFJZKHNob3J0aGFuZE1h
cCwgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5zLCBjb2x1bW5zUHJvcGVydGllcyk7Ci0KLSAgICBz
dGF0aWMgY29uc3QgaW50IGNvbHVtblJ1bGVQcm9wZXJ0aWVzW10gPSB7Ci0gICAgICAgIENTU1By
b3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yLAotICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdENv
bHVtblJ1bGVTdHlsZSwKLSAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlV2lkdGgK
LSAgICB9OwotICAgIFNFVF9TSE9SVEhBTkRfTUFQX0VOVFJZKHNob3J0aGFuZE1hcCwgQ1NTUHJv
cGVydHlXZWJraXRDb2x1bW5SdWxlLCBjb2x1bW5SdWxlUHJvcGVydGllcyk7Ci0KLSAgICBzdGF0
aWMgY29uc3QgaW50IG92ZXJmbG93UHJvcGVydGllc1tdID0geyBDU1NQcm9wZXJ0eU92ZXJmbG93
WCwgQ1NTUHJvcGVydHlPdmVyZmxvd1kgfTsKLSAgICBTRVRfU0hPUlRIQU5EX01BUF9FTlRSWShz
aG9ydGhhbmRNYXAsIENTU1Byb3BlcnR5T3ZlcmZsb3csIG92ZXJmbG93UHJvcGVydGllcyk7Ci0K
LSAgICBzdGF0aWMgY29uc3QgaW50IGJvcmRlclJhZGl1c1Byb3BlcnRpZXNbXSA9IHsKLSAgICAg
ICAgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJUb3BSaWdodFJhZGl1cywKLSAgICAgICAgQ1NTUHJv
cGVydHlXZWJraXRCb3JkZXJUb3BMZWZ0UmFkaXVzLAotICAgICAgICBDU1NQcm9wZXJ0eVdlYmtp
dEJvcmRlckJvdHRvbUxlZnRSYWRpdXMsCi0gICAgICAgIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVy
Qm90dG9tUmlnaHRSYWRpdXMKLSAgICB9OwotICAgIFNFVF9TSE9SVEhBTkRfTUFQX0VOVFJZKHNo
b3J0aGFuZE1hcCwgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXMsIGJvcmRlclJhZGl1c1By
b3BlcnRpZXMpOwotCi0gICAgc3RhdGljIGNvbnN0IGludCBtYXNrUG9zaXRpb25Qcm9wZXJ0aWVz
W10gPSB7IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgQ1NTUHJvcGVydHlXZWJraXRN
YXNrUG9zaXRpb25ZIH07Ci0gICAgU0VUX1NIT1JUSEFORF9NQVBfRU5UUlkoc2hvcnRoYW5kTWFw
LCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbiwgbWFza1Bvc2l0aW9uUHJvcGVydGllcyk7
Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IG1hc2tQcm9wZXJ0aWVzW10gPSB7Ci0gICAgICAgIENT
U1Byb3BlcnR5V2Via2l0TWFza0F0dGFjaG1lbnQsCi0gICAgICAgIENTU1Byb3BlcnR5V2Via2l0
TWFza0NsaXAsCi0gICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlLAotICAgICAgICBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW4sCi0gICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFz
a1Bvc2l0aW9uWCwKLSAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZLAotICAg
ICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQsCi0gICAgfTsKLSAgICBTRVRfU0hPUlRI
QU5EX01BUF9FTlRSWShzaG9ydGhhbmRNYXAsIENTU1Byb3BlcnR5V2Via2l0TWFzaywgbWFza1By
b3BlcnRpZXMpOwotCi0gICAgc3RhdGljIGNvbnN0IGludCBhbmltYXRpb25Qcm9wZXJ0aWVzW10g
PSB7Ci0gICAgICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uTmFtZSwKLSAgICAgICAgQ1NT
UHJvcGVydHlXZWJraXRBbmltYXRpb25EdXJhdGlvbiwKLSAgICAgICAgQ1NTUHJvcGVydHlXZWJr
aXRBbmltYXRpb25UaW1pbmdGdW5jdGlvbiwKLSAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRBbmlt
YXRpb25EZWxheSwKLSAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25D
b3VudCwKLSAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EaXJlY3Rpb24KLSAgICB9
OwotICAgIFNFVF9TSE9SVEhBTkRfTUFQX0VOVFJZKHNob3J0aGFuZE1hcCwgQ1NTUHJvcGVydHlX
ZWJraXRBbmltYXRpb24sIGFuaW1hdGlvblByb3BlcnRpZXMpOwotCi0gICAgc3RhdGljIGNvbnN0
IGludCB0cmFuc2l0aW9uUHJvcGVydGllc1tdID0gewotICAgICAgICBDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zaXRpb25Qcm9wZXJ0eSwKLSAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9u
RHVyYXRpb24sCi0gICAgICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0
aW9uLAotICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxheQotICAgIH07Ci0g
ICAgU0VUX1NIT1JUSEFORF9NQVBfRU5UUlkoc2hvcnRoYW5kTWFwLCBDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zaXRpb24sIHRyYW5zaXRpb25Qcm9wZXJ0aWVzKTsKLQotICAgIHN0YXRpYyBjb25zdCBp
bnQgdHJhbnNmb3JtT3JpZ2luUHJvcGVydGllc1tdID0gewotICAgICAgICBDU1NQcm9wZXJ0eVdl
YmtpdFRyYW5zZm9ybU9yaWdpblgsCi0gICAgICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3Jt
T3JpZ2luWQotICAgIH07Ci0gICAgU0VUX1NIT1JUSEFORF9NQVBfRU5UUlkoc2hvcnRoYW5kTWFw
LCBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpbiwgdHJhbnNmb3JtT3JpZ2luUHJvcGVy
dGllcyk7Ci0gICAgCi0gICAgI3VuZGVmIFNFVF9TSE9SVEhBTkRfTUFQX0VOVFJZCi19Ci0KIGJv
b2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVNob3J0aGFuZFByb3BlcnR5KGlu
dCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQpIAogewotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoU2hvcnRoYW5kTWFwLCBzaG9ydGhhbmRNYXAsICgpKTsKLSAgICBpZiAoc2hvcnRoYW5k
TWFwLmlzRW1wdHkoKSkKLSAgICAgICAgaW5pdFNob3J0aGFuZE1hcChzaG9ydGhhbmRNYXApOwot
Ci0gICAgUHJvcGVydHlMb25naGFuZCBsb25naGFuZCA9IHNob3J0aGFuZE1hcC5nZXQocHJvcGVy
dHlJRCk7CisgICAgQ1NTUHJvcGVydHlMb25naGFuZCBsb25naGFuZCA9IGxvbmdoYW5kRm9yUHJv
cGVydHkocHJvcGVydHlJRCk7CiAgICAgaWYgKGxvbmdoYW5kLmxlbmd0aCgpKSB7CiAgICAgICAg
IHJlbW92ZVByb3BlcnRpZXNJblNldChsb25naGFuZC5wcm9wZXJ0aWVzKCksIGxvbmdoYW5kLmxl
bmd0aCgpLCBub3RpZnlDaGFuZ2VkKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05NDgsNCAr
NzUwLDE4NyBAQCBDU1NQcm9wZXJ0eSogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmZpbmRQ
cm9wZXJ0eVdpdGhJZChpbnQgcHJvcGVydHlJRCkKICAgICByZXR1cm4gMDsKIH0KIAordHlwZWRl
ZiBIYXNoTWFwPGludCwgQ1NTUHJvcGVydHlMb25naGFuZD4gU2hvcnRoYW5kTWFwOworCitzdGF0
aWMgdm9pZCBpbml0U2hvcnRoYW5kTWFwKFNob3J0aGFuZE1hcCYgc2hvcnRoYW5kTWFwKQorewor
ICAgICNkZWZpbmUgU0VUX1NIT1JUSEFORF9NQVBfRU5UUlkobWFwLCBwcm9wSUQsIGFycmF5KSBc
CisgICAgICAgIG1hcC5zZXQocHJvcElELCBDU1NQcm9wZXJ0eUxvbmdoYW5kKGFycmF5LCBzaXpl
b2YoYXJyYXkpIC8gc2l6ZW9mKGFycmF5WzBdKSkpCisKKyAgICAvLyBGSVhNRTogVGhlICdmb250
JyBwcm9wZXJ0eSBoYXMgInNob3J0aGFuZCBuYXR1cmUiIGJ1dCBpcyBub3QgcGFyc2VkIGFzIGEg
c2hvcnRoYW5kLgorCisgICAgLy8gRG8gbm90IGNoYW5nZSB0aGUgb3JkZXIgb2YgdGhlIGZvbGxv
d2luZyBmb3VyIHNob3J0aGFuZHMsIGFuZCBrZWVwIHRoZW0gdG9nZXRoZXIuCisgICAgc3RhdGlj
IGNvbnN0IGludCBib3JkZXJQcm9wZXJ0aWVzWzRdWzNdID0geworICAgICAgICB7IENTU1Byb3Bl
cnR5Qm9yZGVyVG9wQ29sb3IsIENTU1Byb3BlcnR5Qm9yZGVyVG9wU3R5bGUsIENTU1Byb3BlcnR5
Qm9yZGVyVG9wV2lkdGggfSwKKyAgICAgICAgeyBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3Is
IENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRTdHlsZSwgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRo
IH0sCisgICAgICAgIHsgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvciwgQ1NTUHJvcGVydHlC
b3JkZXJCb3R0b21TdHlsZSwgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aCB9LAorICAgICAg
ICB7IENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yLCBDU1NQcm9wZXJ0eUJvcmRlckxlZnRTdHls
ZSwgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGggfQorICAgIH07CisgICAgU0VUX1NIT1JUSEFO
RF9NQVBfRU5UUlkoc2hvcnRoYW5kTWFwLCBDU1NQcm9wZXJ0eUJvcmRlclRvcCwgYm9yZGVyUHJv
cGVydGllc1swXSk7CisgICAgU0VUX1NIT1JUSEFORF9NQVBfRU5UUlkoc2hvcnRoYW5kTWFwLCBD
U1NQcm9wZXJ0eUJvcmRlclJpZ2h0LCBib3JkZXJQcm9wZXJ0aWVzWzFdKTsKKyAgICBTRVRfU0hP
UlRIQU5EX01BUF9FTlRSWShzaG9ydGhhbmRNYXAsIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tLCBi
b3JkZXJQcm9wZXJ0aWVzWzJdKTsKKyAgICBTRVRfU0hPUlRIQU5EX01BUF9FTlRSWShzaG9ydGhh
bmRNYXAsIENTU1Byb3BlcnR5Qm9yZGVyTGVmdCwgYm9yZGVyUHJvcGVydGllc1szXSk7CisKKyAg
ICBzaG9ydGhhbmRNYXAuc2V0KENTU1Byb3BlcnR5Qm9yZGVyLCBDU1NQcm9wZXJ0eUxvbmdoYW5k
KGJvcmRlclByb3BlcnRpZXNbMF0sIHNpemVvZihib3JkZXJQcm9wZXJ0aWVzKSAvIHNpemVvZihi
b3JkZXJQcm9wZXJ0aWVzWzBdWzBdKSkpOworCisgICAgc3RhdGljIGNvbnN0IGludCBib3JkZXJD
b2xvclByb3BlcnRpZXNbXSA9IHsKKyAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvciwK
KyAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLAorICAgICAgICBDU1NQcm9wZXJ0
eUJvcmRlckJvdHRvbUNvbG9yLAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcgor
ICAgIH07CisgICAgU0VUX1NIT1JUSEFORF9NQVBfRU5UUlkoc2hvcnRoYW5kTWFwLCBDU1NQcm9w
ZXJ0eUJvcmRlckNvbG9yLCBib3JkZXJDb2xvclByb3BlcnRpZXMpOworCisgICAgc3RhdGljIGNv
bnN0IGludCBib3JkZXJTdHlsZVByb3BlcnRpZXNbXSA9IHsKKyAgICAgICAgQ1NTUHJvcGVydHlC
b3JkZXJUb3BTdHlsZSwKKyAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFN0eWxlLAorICAg
ICAgICBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVN0eWxlLAorICAgICAgICBDU1NQcm9wZXJ0eUJv
cmRlckxlZnRTdHlsZQorICAgIH07CisgICAgU0VUX1NIT1JUSEFORF9NQVBfRU5UUlkoc2hvcnRo
YW5kTWFwLCBDU1NQcm9wZXJ0eUJvcmRlclN0eWxlLCBib3JkZXJTdHlsZVByb3BlcnRpZXMpOwor
CisgICAgc3RhdGljIGNvbnN0IGludCBib3JkZXJXaWR0aFByb3BlcnRpZXNbXSA9IHsKKyAgICAg
ICAgQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwKKyAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJS
aWdodFdpZHRoLAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLAorICAgICAg
ICBDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aAorICAgIH07CisgICAgU0VUX1NIT1JUSEFORF9N
QVBfRU5UUlkoc2hvcnRoYW5kTWFwLCBDU1NQcm9wZXJ0eUJvcmRlcldpZHRoLCBib3JkZXJXaWR0
aFByb3BlcnRpZXMpOworCisgICAgc3RhdGljIGNvbnN0IGludCBiYWNrZ3JvdW5kUG9zaXRpb25Q
cm9wZXJ0aWVzW10gPSB7IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWCwgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUG9zaXRpb25ZIH07CisgICAgU0VUX1NIT1JUSEFORF9NQVBfRU5UUlkoc2hv
cnRoYW5kTWFwLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiwgYmFja2dyb3VuZFBvc2l0
aW9uUHJvcGVydGllcyk7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IGJvcmRlclNwYWNpbmdQcm9w
ZXJ0aWVzW10gPSB7IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsIENT
U1Byb3BlcnR5V2Via2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nIH07CisgICAgU0VUX1NIT1JUSEFO
RF9NQVBfRU5UUlkoc2hvcnRoYW5kTWFwLCBDU1NQcm9wZXJ0eUJvcmRlclNwYWNpbmcsIGJvcmRl
clNwYWNpbmdQcm9wZXJ0aWVzKTsKKworICAgIHN0YXRpYyBjb25zdCBpbnQgbGlzdFN0eWxlUHJv
cGVydGllc1tdID0geworICAgICAgICBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlLAorICAgICAg
ICBDU1NQcm9wZXJ0eUxpc3RTdHlsZVBvc2l0aW9uLAorICAgICAgICBDU1NQcm9wZXJ0eUxpc3RT
dHlsZVR5cGUKKyAgICB9OworICAgIFNFVF9TSE9SVEhBTkRfTUFQX0VOVFJZKHNob3J0aGFuZE1h
cCwgQ1NTUHJvcGVydHlMaXN0U3R5bGUsIGxpc3RTdHlsZVByb3BlcnRpZXMpOworCisgICAgc3Rh
dGljIGNvbnN0IGludCBtYXJnaW5Qcm9wZXJ0aWVzW10gPSB7CisgICAgICAgIENTU1Byb3BlcnR5
TWFyZ2luVG9wLAorICAgICAgICBDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LAorICAgICAgICBDU1NQ
cm9wZXJ0eU1hcmdpbkJvdHRvbSwKKyAgICAgICAgQ1NTUHJvcGVydHlNYXJnaW5MZWZ0CisgICAg
fTsKKyAgICBTRVRfU0hPUlRIQU5EX01BUF9FTlRSWShzaG9ydGhhbmRNYXAsIENTU1Byb3BlcnR5
TWFyZ2luLCBtYXJnaW5Qcm9wZXJ0aWVzKTsKKworICAgIHN0YXRpYyBjb25zdCBpbnQgbWFyZ2lu
Q29sbGFwc2VQcm9wZXJ0aWVzW10gPSB7IENTU1Byb3BlcnR5V2Via2l0TWFyZ2luVG9wQ29sbGFw
c2UsIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQm90dG9tQ29sbGFwc2UgfTsKKyAgICBTRVRfU0hP
UlRIQU5EX01BUF9FTlRSWShzaG9ydGhhbmRNYXAsIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQ29s
bGFwc2UsIG1hcmdpbkNvbGxhcHNlUHJvcGVydGllcyk7CisKKyAgICBzdGF0aWMgY29uc3QgaW50
IG1hcnF1ZWVQcm9wZXJ0aWVzW10gPSB7CisgICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFycXVl
ZURpcmVjdGlvbiwKKyAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlSW5jcmVtZW50LAor
ICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVSZXBldGl0aW9uLAorICAgICAgICBDU1NQ
cm9wZXJ0eVdlYmtpdE1hcnF1ZWVTdHlsZSwKKyAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXJx
dWVlU3BlZWQKKyAgICB9OworICAgIFNFVF9TSE9SVEhBTkRfTUFQX0VOVFJZKHNob3J0aGFuZE1h
cCwgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlLCBtYXJxdWVlUHJvcGVydGllcyk7CisKKyAgICBz
dGF0aWMgY29uc3QgaW50IG91dGxpbmVQcm9wZXJ0aWVzW10gPSB7CisgICAgICAgIENTU1Byb3Bl
cnR5T3V0bGluZUNvbG9yLAorICAgICAgICBDU1NQcm9wZXJ0eU91dGxpbmVPZmZzZXQsCisgICAg
ICAgIENTU1Byb3BlcnR5T3V0bGluZVN0eWxlLAorICAgICAgICBDU1NQcm9wZXJ0eU91dGxpbmVX
aWR0aAorICAgIH07CisgICAgU0VUX1NIT1JUSEFORF9NQVBfRU5UUlkoc2hvcnRoYW5kTWFwLCBD
U1NQcm9wZXJ0eU91dGxpbmUsIG91dGxpbmVQcm9wZXJ0aWVzKTsKKworICAgIHN0YXRpYyBjb25z
dCBpbnQgcGFkZGluZ1Byb3BlcnRpZXNbXSA9IHsKKyAgICAgICAgQ1NTUHJvcGVydHlQYWRkaW5n
VG9wLAorICAgICAgICBDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwKKyAgICAgICAgQ1NTUHJvcGVy
dHlQYWRkaW5nQm90dG9tLAorICAgICAgICBDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0CisgICAgfTsK
KyAgICBTRVRfU0hPUlRIQU5EX01BUF9FTlRSWShzaG9ydGhhbmRNYXAsIENTU1Byb3BlcnR5UGFk
ZGluZywgcGFkZGluZ1Byb3BlcnRpZXMpOworCisgICAgc3RhdGljIGNvbnN0IGludCB0ZXh0U3Ry
b2tlUHJvcGVydGllc1tdID0geyBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciwgQ1NT
UHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlV2lkdGggfTsKKyAgICBTRVRfU0hPUlRIQU5EX01BUF9F
TlRSWShzaG9ydGhhbmRNYXAsIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZSwgdGV4dFN0cm9r
ZVByb3BlcnRpZXMpOworCisgICAgc3RhdGljIGNvbnN0IGludCBiYWNrZ3JvdW5kUHJvcGVydGll
c1tdID0geworICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRBdHRhY2htZW50LAorICAgICAg
ICBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDbGlwLAorICAgICAgICBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRDb2xvciwKKyAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2UsCisgICAg
ICAgIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZE9yaWdpbiwKKyAgICAgICAgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUG9zaXRpb25YLAorICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3Np
dGlvblksCisgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdCwKKyAgICB9OworICAg
IFNFVF9TSE9SVEhBTkRfTUFQX0VOVFJZKHNob3J0aGFuZE1hcCwgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kLCBiYWNrZ3JvdW5kUHJvcGVydGllcyk7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IGNvbHVt
bnNQcm9wZXJ0aWVzW10gPSB7IENTU1Byb3BlcnR5V2Via2l0Q29sdW1uV2lkdGgsIENTU1Byb3Bl
cnR5V2Via2l0Q29sdW1uQ291bnQgfTsKKyAgICBTRVRfU0hPUlRIQU5EX01BUF9FTlRSWShzaG9y
dGhhbmRNYXAsIENTU1Byb3BlcnR5V2Via2l0Q29sdW1ucywgY29sdW1uc1Byb3BlcnRpZXMpOwor
CisgICAgc3RhdGljIGNvbnN0IGludCBjb2x1bW5SdWxlUHJvcGVydGllc1tdID0geworICAgICAg
ICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvciwKKyAgICAgICAgQ1NTUHJvcGVydHlX
ZWJraXRDb2x1bW5SdWxlU3R5bGUsCisgICAgICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVs
ZVdpZHRoCisgICAgfTsKKyAgICBTRVRfU0hPUlRIQU5EX01BUF9FTlRSWShzaG9ydGhhbmRNYXAs
IENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZSwgY29sdW1uUnVsZVByb3BlcnRpZXMpOworCisg
ICAgc3RhdGljIGNvbnN0IGludCBvdmVyZmxvd1Byb3BlcnRpZXNbXSA9IHsgQ1NTUHJvcGVydHlP
dmVyZmxvd1gsIENTU1Byb3BlcnR5T3ZlcmZsb3dZIH07CisgICAgU0VUX1NIT1JUSEFORF9NQVBf
RU5UUlkoc2hvcnRoYW5kTWFwLCBDU1NQcm9wZXJ0eU92ZXJmbG93LCBvdmVyZmxvd1Byb3BlcnRp
ZXMpOworCisgICAgc3RhdGljIGNvbnN0IGludCBib3JkZXJSYWRpdXNQcm9wZXJ0aWVzW10gPSB7
CisgICAgICAgIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVG9wUmlnaHRSYWRpdXMsCisgICAgICAg
IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVG9wTGVmdFJhZGl1cywKKyAgICAgICAgQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVzLAorICAgICAgICBDU1NQcm9wZXJ0eVdlYmtp
dEJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzCisgICAgfTsKKyAgICBTRVRfU0hPUlRIQU5EX01BUF9F
TlRSWShzaG9ydGhhbmRNYXAsIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyUmFkaXVzLCBib3JkZXJS
YWRpdXNQcm9wZXJ0aWVzKTsKKworICAgIHN0YXRpYyBjb25zdCBpbnQgbWFza1Bvc2l0aW9uUHJv
cGVydGllc1tdID0geyBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblgsIENTU1Byb3BlcnR5
V2Via2l0TWFza1Bvc2l0aW9uWSB9OworICAgIFNFVF9TSE9SVEhBTkRfTUFQX0VOVFJZKHNob3J0
aGFuZE1hcCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24sIG1hc2tQb3NpdGlvblByb3Bl
cnRpZXMpOworCisgICAgc3RhdGljIGNvbnN0IGludCBtYXNrUHJvcGVydGllc1tdID0geworICAg
ICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tBdHRhY2htZW50LAorICAgICAgICBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tDbGlwLAorICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZSwKKyAg
ICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2luLAorICAgICAgICBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tQb3NpdGlvblgsCisgICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9u
WSwKKyAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0LAorICAgIH07CisgICAgU0VU
X1NIT1JUSEFORF9NQVBfRU5UUlkoc2hvcnRoYW5kTWFwLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2ss
IG1hc2tQcm9wZXJ0aWVzKTsKKworICAgIHN0YXRpYyBjb25zdCBpbnQgYW5pbWF0aW9uUHJvcGVy
dGllc1tdID0geworICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbk5hbWUsCisgICAg
ICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb24sCisgICAgICAgIENTU1Byb3Bl
cnR5V2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb24sCisgICAgICAgIENTU1Byb3BlcnR5V2Vi
a2l0QW5pbWF0aW9uRGVsYXksCisgICAgICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uSXRl
cmF0aW9uQ291bnQsCisgICAgICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0aW9u
CisgICAgfTsKKyAgICBTRVRfU0hPUlRIQU5EX01BUF9FTlRSWShzaG9ydGhhbmRNYXAsIENTU1By
b3BlcnR5V2Via2l0QW5pbWF0aW9uLCBhbmltYXRpb25Qcm9wZXJ0aWVzKTsKKworICAgIHN0YXRp
YyBjb25zdCBpbnQgdHJhbnNpdGlvblByb3BlcnRpZXNbXSA9IHsKKyAgICAgICAgQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHksCisgICAgICAgIENTU1Byb3BlcnR5V2Via2l0VHJh
bnNpdGlvbkR1cmF0aW9uLAorICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1p
bmdGdW5jdGlvbiwKKyAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRGVsYXkKKyAg
ICB9OworICAgIFNFVF9TSE9SVEhBTkRfTUFQX0VOVFJZKHNob3J0aGFuZE1hcCwgQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2l0aW9uLCB0cmFuc2l0aW9uUHJvcGVydGllcyk7CisKKyAgICBzdGF0aWMg
Y29uc3QgaW50IHRyYW5zZm9ybU9yaWdpblByb3BlcnRpZXNbXSA9IHsKKyAgICAgICAgQ1NTUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5YLAorICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRy
YW5zZm9ybU9yaWdpblkKKyAgICB9OworICAgIFNFVF9TSE9SVEhBTkRfTUFQX0VOVFJZKHNob3J0
aGFuZE1hcCwgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW4sIHRyYW5zZm9ybU9yaWdp
blByb3BlcnRpZXMpOworICAgIAorICAgICN1bmRlZiBTRVRfU0hPUlRIQU5EX01BUF9FTlRSWQor
fQorCitDU1NQcm9wZXJ0eUxvbmdoYW5kIGxvbmdoYW5kRm9yUHJvcGVydHkoaW50IHByb3BlcnR5
SUQpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTaG9ydGhhbmRNYXAsIHNob3J0aGFuZE1h
cCwgKCkpOworICAgIGlmIChzaG9ydGhhbmRNYXAuaXNFbXB0eSgpKQorICAgICAgICBpbml0U2hv
cnRoYW5kTWFwKHNob3J0aGFuZE1hcCk7CisKKyAgICByZXR1cm4gc2hvcnRoYW5kTWFwLmdldChw
cm9wZXJ0eUlEKTsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIGIvV2ViQ29yZS9jc3MvQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaAppbmRleCA5Yzg0OTE2Li5hNGE0MjNiIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oCisrKyBiL1dlYkNv
cmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgKQEAgLTIxNyw2ICsyMTcsMzAgQEAg
aW5saW5lIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvciYgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb25Db25zdEkKICAgICByZXR1cm4gKnRoaXM7IAogfQogCitzdHJ1Y3Qg
Q1NTUHJvcGVydHlMb25naGFuZCB7CisgICAgQ1NTUHJvcGVydHlMb25naGFuZCgpCisgICAgICAg
IDogbV9wcm9wZXJ0aWVzKDApCisgICAgICAgICwgbV9sZW5ndGgoMCkKKyAgICB7CisgICAgfQor
CisgICAgQ1NTUHJvcGVydHlMb25naGFuZChjb25zdCBpbnQqIGZpcnN0UHJvcGVydHksIHVuc2ln
bmVkIG51bVByb3BlcnRpZXMpCisgICAgICAgIDogbV9wcm9wZXJ0aWVzKGZpcnN0UHJvcGVydHkp
CisgICAgICAgICwgbV9sZW5ndGgobnVtUHJvcGVydGllcykKKyAgICB7CisgICAgfQorCisgICAg
Y29uc3QgaW50KiBwcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzOyB9Cisg
ICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKworcHJpdmF0
ZToKKyAgICBjb25zdCBpbnQqIG1fcHJvcGVydGllczsKKyAgICB1bnNpZ25lZCBtX2xlbmd0aDsK
K307CisKKy8vIFJldHVybnMgYW4gZW1wdHkgbGlzdCBpZiB0aGUgcHJvcGVydHkgaXMgbm90IGEg
c2hvcnRoYW5kCitDU1NQcm9wZXJ0eUxvbmdoYW5kIGxvbmdoYW5kRm9yUHJvcGVydHkoaW50KTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb25faApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25C
YXNlLmNwcCBiL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKaW5kZXgg
YjdhZTRlMS4uNzJiNzFhOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25CYXNlLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2Uu
Y3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5oIgogCiAjaW5j
bHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNT
dHJpbmcuaCIKICNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRpb24uaCIKQEAgLTE1NCw2ICsxNTUs
MTEgQEAgc3RhdGljIGlubGluZSBFVmlzaWJpbGl0eSBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9u
QmFzZSogYW5pbSwgRVZpc2liaWxpdHkgZnJvbSwKICAgICByZXR1cm4gcmVzdWx0ID4gMC4gPyBW
SVNJQkxFIDogKHRvICE9IFZJU0lCTEUgPyB0byA6IGZyb20pOwogfQogCitjbGFzcyBQcm9wZXJ0
eVdyYXBwZXJCYXNlOworCitzdGF0aWMgdm9pZCBhZGRTaG9ydGhhbmRQcm9wZXJ0aWVzKCk7Citz
dGF0aWMgUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlckZvclByb3BlcnR5KGludCBwcm9wZXJ0
eUlEKTsKKwogY2xhc3MgUHJvcGVydHlXcmFwcGVyQmFzZSB7CiBwdWJsaWM6CiAgICAgUHJvcGVy
dHlXcmFwcGVyQmFzZShpbnQgcHJvcCkKQEAgLTE2Miw2ICsxNjgsOCBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgdmlydHVhbCB+UHJvcGVydHlXcmFwcGVyQmFzZSgpIHsgfQorICAgIAorICAgIHZp
cnR1YWwgYm9vbCBpc1Nob3J0aGFuZFdyYXBwZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGJsZW5kKGNvbnN0IEFuaW1h
dGlvbkJhc2UqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCA9IDA7CiAKQEAgLTI4
OCw5ICsyOTYsNDggQEAgcHJpdmF0ZToKICAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVy
KShjb25zdCBDb2xvciYpOwogfTsKIAorY2xhc3MgU2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyIDog
cHVibGljIFByb3BlcnR5V3JhcHBlckJhc2UgeworcHVibGljOgorICAgIFNob3J0aGFuZFByb3Bl
cnR5V3JhcHBlcihpbnQgcHJvcGVydHksIGNvbnN0IENTU1Byb3BlcnR5TG9uZ2hhbmQmIGxvbmdo
YW5kKQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlckJhc2UocHJvcGVydHkpCisgICAgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9uZ2hhbmQubGVuZ3RoKCk7ICsraSkgewor
ICAgICAgICAgICAgUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciA9IHdyYXBwZXJGb3JQcm9w
ZXJ0eShsb25naGFuZC5wcm9wZXJ0aWVzKClbaV0pOworICAgICAgICAgICAgaWYgKHdyYXBwZXIp
CisgICAgICAgICAgICAgICAgbV9wcm9wZXJ0eVdyYXBwZXJzLmFwcGVuZCh3cmFwcGVyKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1Nob3J0aGFuZFdyYXBwZXIoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QKKyAgICB7CisgICAgICAg
IFZlY3RvcjxQcm9wZXJ0eVdyYXBwZXJCYXNlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcHJv
cGVydHlXcmFwcGVycy5lbmQoKTsKKyAgICAgICAgZm9yIChWZWN0b3I8UHJvcGVydHlXcmFwcGVy
QmFzZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcHJvcGVydHlXcmFwcGVycy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIGlmICghKCppdCktPmVxdWFscyhhLCBiKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJsZW5kKGNvbnN0IEFuaW1hdGlvbkJh
c2UqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdAorICAgIHsKKyAgICAgICAgVmVj
dG9yPFByb3BlcnR5V3JhcHBlckJhc2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wcm9wZXJ0
eVdyYXBwZXJzLmVuZCgpOworICAgICAgICBmb3IgKFZlY3RvcjxQcm9wZXJ0eVdyYXBwZXJCYXNl
Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wcm9wZXJ0eVdyYXBwZXJzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgICAgICgqaXQpLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHBy
b2dyZXNzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFByb3BlcnR5V3JhcHBlckJh
c2UqPiBtX3Byb3BlcnR5V3JhcHBlcnM7Cit9OworCisKIHN0YXRpYyBWZWN0b3I8UHJvcGVydHlX
cmFwcGVyQmFzZSo+KiBnUHJvcGVydHlXcmFwcGVycyA9IDA7CiBzdGF0aWMgaW50IGdQcm9wZXJ0
eVdyYXBwZXJNYXBbbnVtQ1NTUHJvcGVydGllc107CiAKK3N0YXRpYyBjb25zdCBpbnQgY0ludmFs
aWRQcm9wZXJ0eVdyYXBwZXJJbmRleCA9IC0xOworCisKIHN0YXRpYyB2b2lkIGVuc3VyZVByb3Bl
cnR5TWFwKCkKIHsKICAgICAvLyBGSVhNRTogVGhpcyBkYXRhIGlzIG5ldmVyIGRlc3Ryb3llZC4g
TWF5YmUgd2Ugc2hvdWxkIHJlZiBjb3VudCBpdCBhbmQgdG9zcyBpdCB3aGVuIHRoZSBsYXN0IEFu
aW1hdGlvbkNvbnRyb2xsZXIgaXMgZGVzdHJveWVkPwpAQCAtMzYwLDE4ICs0MDcsOTggQEAgc3Rh
dGljIHZvaWQgZW5zdXJlUHJvcGVydHlNYXAoKQogICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+
YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5U3Ryb2tlT3BhY2l0
eSwgJlJlbmRlclN0eWxlOjpzdHJva2VPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldFN0cm9rZU9w
YWNpdHkpKTsKICNlbmRpZgogCisgICAgICAgIC8vIFRPRE86CisgICAgICAgIC8vIAorICAgICAg
ICAvLyAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlv
bgorICAgICAgICAvLyAgQ1NTUHJvcGVydHlNaW5XaWR0aCwgQ1NTUHJvcGVydHlNYXhXaWR0aCwg
Q1NTUHJvcGVydHlNaW5IZWlnaHQsIENTU1Byb3BlcnR5TWF4SGVpZ2h0CisgICAgICAgIC8vICBD
U1NQcm9wZXJ0eVRleHRJbmRlbnQKKyAgICAgICAgLy8gIENTU1Byb3BlcnR5VmVydGljYWxBbGln
bgorICAgICAgICAvLyAgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kT3JpZ2luCisgICAgICAg
IC8vICBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRTaXplCisgICAgICAgIC8vICBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbgorICAgICAgICAvLyAgQ1NTUHJvcGVydHlXZWJraXRNYXNr
T3JpZ2luCisgICAgICAgIC8vICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplCisgICAgICAgIC8v
IAorICAgICAgICAvLyBDb21wb3VuZCBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBjb21wb25lbnRzIHRo
YXQgc2hvdWxkIGJlIGFuaW1hdGFibGU6CisgICAgICAgIC8vIAorICAgICAgICAvLyAgQ1NTUHJv
cGVydHlXZWJraXRDb2x1bW5zCisgICAgICAgIC8vICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2sKKyAg
ICAgICAgLy8gIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdAorCiAgICAgICAgIC8vIE1ha2Ug
c3VyZSB1bnVzZWQgc2xvdHMgaGF2ZSBhIHZhbHVlCi0gICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgKHVuc2lnbmVkIGludCkgbnVtQ1NTUHJvcGVydGllczsgKytpKQotICAgICAg
ICAgICAgZ1Byb3BlcnR5V3JhcHBlck1hcFtpXSA9IENTU1Byb3BlcnR5SW52YWxpZDsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+
KG51bUNTU1Byb3BlcnRpZXMpOyArK2kpCisgICAgICAgICAgICBnUHJvcGVydHlXcmFwcGVyTWFw
W2ldID0gY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleDsKIAorICAgICAgICAvLyBGaXJzdCB3
ZSBwdXQgdGhlIG5vbi1zaG9ydGhhbmQgcHJvcGVydHkgd3JhcHBlcnMgaW50byB0aGUgbWFwLCBz
byB0aGUgc2hvcnRoYW5kLWJ1aWxkaW5nCisgICAgICAgIC8vIGNvZGUgY2FuIGZpbmQgdGhlbS4K
ICAgICAgICAgc2l6ZV90IG4gPSBnUHJvcGVydHlXcmFwcGVycy0+c2l6ZSgpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgICAgICAgQVNTRVJU
KCgqZ1Byb3BlcnR5V3JhcHBlcnMpW2ldLT5wcm9wZXJ0eSgpIC0gZmlyc3RDU1NQcm9wZXJ0eSA8
IG51bUNTU1Byb3BlcnRpZXMpOwogICAgICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlck1hcFsoKmdQ
cm9wZXJ0eVdyYXBwZXJzKVtpXS0+cHJvcGVydHkoKSAtIGZpcnN0Q1NTUHJvcGVydHldID0gaTsK
ICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTm93IGFkZCB0aGUgc2hvcnRoYW5kIHdy
YXBwZXJzLgorICAgICAgICBhZGRTaG9ydGhhbmRQcm9wZXJ0aWVzKCk7CiAgICAgfQogfQogCitz
dGF0aWMgdm9pZCBhZGRQcm9wZXJ0eVdyYXBwZXIoaW50IHByb3BlcnR5SUQsIFByb3BlcnR5V3Jh
cHBlckJhc2UqIHdyYXBwZXIpCit7CisgICAgaW50IHByb3BJbmRleCA9IHByb3BlcnR5SUQgLSBm
aXJzdENTU1Byb3BlcnR5OworCisgICAgQVNTRVJUKGdQcm9wZXJ0eVdyYXBwZXJNYXBbcHJvcElu
ZGV4XSA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4KTsKKworICAgIHVuc2lnbmVkIHdy
YXBwZXJJbmRleCA9IGdQcm9wZXJ0eVdyYXBwZXJzLT5zaXplKCk7CisgICAgZ1Byb3BlcnR5V3Jh
cHBlcnMtPmFwcGVuZCh3cmFwcGVyKTsKKyAgICBnUHJvcGVydHlXcmFwcGVyTWFwW3Byb3BJbmRl
eF0gPSB3cmFwcGVySW5kZXg7Cit9CisKK3N0YXRpYyB2b2lkIGFkZFNob3J0aGFuZFByb3BlcnRp
ZXMoKQoreworICAgIHN0YXRpYyBjb25zdCBpbnQgYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRp
ZXNbXSA9IHsKKyAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kLCAgICAgIC8vIGZvciBiYWNr
Z3JvdW5kLWNvbG9yCisgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyVG9wLCBDU1NQcm9wZXJ0eUJv
cmRlclJpZ2h0LCBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbSwgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0
LAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckNvbG9yLCAKKyAgICAgICAgQ1NTUHJvcGVydHlC
b3JkZXJXaWR0aCwKKyAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXIsCisgICAgICAgIENTU1Byb3Bl
cnR5Qm9yZGVyU3BhY2luZywKKyAgICAgICAgQ1NTUHJvcGVydHlNYXJnaW4sCisgICAgICAgIENT
U1Byb3BlcnR5T3V0bGluZSwKKyAgICAgICAgQ1NTUHJvcGVydHlQYWRkaW5nLAorICAgICAgICBD
U1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2UsCisgICAgICAgIENTU1Byb3BlcnR5V2Via2l0Q29s
dW1uUnVsZSwKKyAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXMsCisgICAgICAg
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luCisgICAgfTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaXplb2YoYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRpZXMpIC8g
c2l6ZW9mKGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzWzBdKTsgKytpKSB7CisgICAgICAg
IGludCBwcm9wZXJ0eUlEID0gYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRpZXNbaV07CisgICAg
ICAgIENTU1Byb3BlcnR5TG9uZ2hhbmQgbG9uZ2hhbmQgPSBsb25naGFuZEZvclByb3BlcnR5KHBy
b3BlcnR5SUQpOworICAgICAgICBpZiAobG9uZ2hhbmQubGVuZ3RoKCkgPiAwKQorICAgICAgICAg
ICAgYWRkUHJvcGVydHlXcmFwcGVyKHByb3BlcnR5SUQsIG5ldyBTaG9ydGhhbmRQcm9wZXJ0eVdy
YXBwZXIocHJvcGVydHlJRCwgbG9uZ2hhbmQpKTsKKyAgICB9CisKKyAgICAvLyAnZm9udCcgaXMg
bm90IGluIHRoZSBzaG9ydGhhbmQgbWFwLgorICAgIHN0YXRpYyBjb25zdCBpbnQgYW5pbWF0YWJs
ZUZvbnRQcm9wZXJ0aWVzW10gPSB7CisgICAgICAgIENTU1Byb3BlcnR5Rm9udFNpemUsCisgICAg
ICAgIENTU1Byb3BlcnR5Rm9udFdlaWdodAorICAgIH07CisKKyAgICBDU1NQcm9wZXJ0eUxvbmdo
YW5kIGZvbnRMb25naGFuZChhbmltYXRhYmxlRm9udFByb3BlcnRpZXMsIHNpemVvZihhbmltYXRh
YmxlRm9udFByb3BlcnRpZXMpIC8gc2l6ZW9mKGFuaW1hdGFibGVGb250UHJvcGVydGllc1swXSkp
OworICAgIGFkZFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUZvbnQsIG5ldyBTaG9ydGhhbmRQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlGb250LCBmb250TG9uZ2hhbmQpKTsKK30KKworc3Rh
dGljIFByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXJGb3JQcm9wZXJ0eShpbnQgcHJvcGVydHlJ
RCkKK3sKKyAgICBpbnQgcHJvcEluZGV4ID0gcHJvcGVydHlJRCAtIGZpcnN0Q1NTUHJvcGVydHk7
CisgICAgaWYgKHByb3BJbmRleCA+PSAwICYmIHByb3BJbmRleCA8IG51bUNTU1Byb3BlcnRpZXMp
IHsKKyAgICAgICAgaW50IHdyYXBwZXJJbmRleCA9IGdQcm9wZXJ0eVdyYXBwZXJNYXBbcHJvcElu
ZGV4XTsKKyAgICAgICAgaWYgKHdyYXBwZXJJbmRleCA+PSAwKQorICAgICAgICAgICAgcmV0dXJu
ICgqZ1Byb3BlcnR5V3JhcHBlcnMpW3dyYXBwZXJJbmRleF07CisgICAgfQorICAgIHJldHVybiAw
OworfQorCiBBbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKGNvbnN0IEFuaW1hdGlvbiogdHJh
bnNpdGlvbiwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21w
QW5pbSkKICAgICA6IG1fYW5pbVN0YXRlKEFuaW1hdGlvblN0YXRlTmV3KQogICAgICwgbV9pc0Fu
aW1hdGluZyhmYWxzZSkKQEAgLTQwMywyNyArNTMwLDI4IEBAIGJvb2wgQW5pbWF0aW9uQmFzZTo6
cHJvcGVydGllc0VxdWFsKGludCBwcm9wLCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyCiAgICAgaWYgKHByb3AgPT0gY0FuaW1hdGVBbGwpIHsKICAgICAgICAgc2l6ZV90IG4gPSBn
UHJvcGVydHlXcmFwcGVycy0+c2l6ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IG47ICsraSkgewotICAgICAgICAgICAgaWYgKCEoKmdQcm9wZXJ0eVdyYXBwZXJzKVtp
XS0+ZXF1YWxzKGEsIGIpKQorICAgICAgICAgICAgUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBl
ciA9ICgqZ1Byb3BlcnR5V3JhcHBlcnMpW2ldOworICAgICAgICAgICAgLy8gTm8gcG9pbnQgY29t
cGFyaW5nIHNob3J0aGFuZCB3cmFwcGVycyBmb3IgJ2FsbCcuCisgICAgICAgICAgICBpZiAoIXdy
YXBwZXItPmlzU2hvcnRoYW5kV3JhcHBlcigpICYmICF3cmFwcGVyLT5lcXVhbHMoYSwgYikpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgaW50IHByb3BJbmRleCA9IHByb3AgLSBmaXJzdENTU1Byb3BlcnR5OwotCi0gICAgICAg
IGlmIChwcm9wSW5kZXggPj0gMCAmJiBwcm9wSW5kZXggPCBudW1DU1NQcm9wZXJ0aWVzKSB7Ci0g
ICAgICAgICAgICBpbnQgaSA9IGdQcm9wZXJ0eVdyYXBwZXJNYXBbcHJvcEluZGV4XTsKLSAgICAg
ICAgICAgIHJldHVybiBpID49IDAgPyAoKmdQcm9wZXJ0eVdyYXBwZXJzKVtpXS0+ZXF1YWxzKGEs
IGIpIDogdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICBQcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFw
cGVyID0gd3JhcHBlckZvclByb3BlcnR5KHByb3ApOworICAgICAgICBpZiAod3JhcHBlcikKKyAg
ICAgICAgICAgIHJldHVybiB3cmFwcGVyLT5lcXVhbHMoYSwgYik7CiAgICAgfQogICAgIHJldHVy
biB0cnVlOwogfQogCi1pbnQgQW5pbWF0aW9uQmFzZTo6Z2V0UHJvcGVydHlBdEluZGV4KGludCBp
KQoraW50IEFuaW1hdGlvbkJhc2U6OmdldFByb3BlcnR5QXRJbmRleChpbnQgaSwgYm9vbCYgaXNT
aG9ydGhhbmQpCiB7CiAgICAgZW5zdXJlUHJvcGVydHlNYXAoKTsKICAgICBpZiAoaSA8IDAgfHwg
aSA+PSBzdGF0aWNfY2FzdDxpbnQ+KGdQcm9wZXJ0eVdyYXBwZXJzLT5zaXplKCkpKQogICAgICAg
ICByZXR1cm4gQ1NTUHJvcGVydHlJbnZhbGlkOwogCi0gICAgcmV0dXJuICgqZ1Byb3BlcnR5V3Jh
cHBlcnMpW2ldLT5wcm9wZXJ0eSgpOworICAgIFByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIg
PSAoKmdQcm9wZXJ0eVdyYXBwZXJzKVtpXTsKKyAgICBpc1Nob3J0aGFuZCA9IHdyYXBwZXItPmlz
U2hvcnRoYW5kV3JhcHBlcigpOworICAgIHJldHVybiB3cmFwcGVyLT5wcm9wZXJ0eSgpOwogfQog
CiBpbnQgQW5pbWF0aW9uQmFzZTo6Z2V0TnVtUHJvcGVydGllcygpCkBAIC00MzYsMzEgKzU2NCwx
MiBAQCBpbnQgQW5pbWF0aW9uQmFzZTo6Z2V0TnVtUHJvcGVydGllcygpCiBib29sIEFuaW1hdGlv
bkJhc2U6OmJsZW5kUHJvcGVydGllcyhjb25zdCBBbmltYXRpb25CYXNlKiBhbmltLCBpbnQgcHJv
cCwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpCiB7CiAgICAgQVNTRVJUKHByb3AgIT0gY0FuaW1hdGVB
bGwpOwotICAgIC8vIEZJWE1FOiBXaHkgY2FuIHRoaXMgaGFwcGVuPwotICAgIAotICAgIGVuc3Vy
ZVByb3BlcnR5TWFwKCk7Ci0gICAgaWYgKHByb3AgPT0gY0FuaW1hdGVBbGwpIHsKLSAgICAgICAg
Ym9vbCBuZWVkc1RpbWVyID0gZmFsc2U7CiAKLSAgICAgICAgc2l6ZV90IG4gPSBnUHJvcGVydHlX
cmFwcGVycy0+c2l6ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG47
ICsraSkgewotICAgICAgICAgICAgUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciA9ICgqZ1By
b3BlcnR5V3JhcHBlcnMpW2ldOwotICAgICAgICAgICAgaWYgKCF3cmFwcGVyLT5lcXVhbHMoYSwg
YikpIHsKLSAgICAgICAgICAgICAgICB3cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHBy
b2dyZXNzKTsKLSAgICAgICAgICAgICAgICBuZWVkc1RpbWVyID0gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbmVlZHNUaW1lcjsKLSAgICB9Ci0KLSAgICBp
bnQgcHJvcEluZGV4ID0gcHJvcCAtIGZpcnN0Q1NTUHJvcGVydHk7Ci0gICAgaWYgKHByb3BJbmRl
eCA+PSAwICYmIHByb3BJbmRleCA8IG51bUNTU1Byb3BlcnRpZXMpIHsKLSAgICAgICAgaW50IGkg
PSBnUHJvcGVydHlXcmFwcGVyTWFwW3Byb3BJbmRleF07Ci0gICAgICAgIGlmIChpID49IDApIHsK
LSAgICAgICAgICAgIFByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSAoKmdQcm9wZXJ0eVdy
YXBwZXJzKVtpXTsKLSAgICAgICAgICAgIHdyYXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwg
cHJvZ3Jlc3MpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKyAgICBlbnN1
cmVQcm9wZXJ0eU1hcCgpOworICAgIFByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSB3cmFw
cGVyRm9yUHJvcGVydHkocHJvcCk7CisgICAgaWYgKHdyYXBwZXIpIHsKKyAgICAgICAgd3JhcHBl
ci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vQW5pbWF0aW9uQmFzZS5oIGIvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRp
b25CYXNlLmgKaW5kZXggOTc2MTJlNS4uZWFiMWY0MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgKKysrIGIvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9B
bmltYXRpb25CYXNlLmgKQEAgLTE3Miw3ICsxNzIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBn
b0ludG9FbmRpbmdPckxvb3BpbmdTdGF0ZSgpOwogCiAgICAgc3RhdGljIGJvb2wgcHJvcGVydGll
c0VxdWFsKGludCBwcm9wLCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpOwotICAgIHN0YXRpYyBpbnQgZ2V0UHJvcGVydHlBdEluZGV4KGludCk7CisgICAgc3RhdGlj
IGludCBnZXRQcm9wZXJ0eUF0SW5kZXgoaW50LCBib29sJiBpc1Nob3J0aGFuZCk7CiAgICAgc3Rh
dGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKCk7CiAKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB3ZSBu
ZWVkIHRvIHN0YXJ0IHNvZnR3YXJlIGFuaW1hdGlvbiB0aW1lcnMKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcCBiL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAppbmRleCBjN2JmZWE5Li44YjVjMTJlIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAK
KysrIGIvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCkBAIC0x
NDgsMTIgKzE0OCwxNSBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OnVwZGF0ZVRy
YW5zaXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlcgogICAgICAgICAvLyB0aHJv
dWdoIHRoZSBsb29wLgogICAgICAgICBmb3IgKGludCBwcm9wZXJ0eUluZGV4ID0gMDsgcHJvcGVy
dHlJbmRleCA8IEFuaW1hdGlvbkJhc2U6OmdldE51bVByb3BlcnRpZXMoKTsgKytwcm9wZXJ0eUlu
ZGV4KSB7CiAgICAgICAgICAgICBpZiAoYWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gR2V0IHRo
ZSBuZXh0IHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgcHJvcCA9IEFuaW1hdGlvbkJhc2U6Omdl
dFByb3BlcnR5QXRJbmRleChwcm9wZXJ0eUluZGV4KTsKKyAgICAgICAgICAgICAgICAvLyBHZXQg
dGhlIG5leHQgcHJvcGVydHkgd2hpY2ggaXMgbm90IGEgc2hvcnRoYW5kLgorICAgICAgICAgICAg
ICAgIGJvb2wgaXNTaG9ydGhhbmQ7CisgICAgICAgICAgICAgICAgcHJvcCA9IEFuaW1hdGlvbkJh
c2U6OmdldFByb3BlcnR5QXRJbmRleChwcm9wZXJ0eUluZGV4LCBpc1Nob3J0aGFuZCk7CisgICAg
ICAgICAgICAgICAgaWYgKGlzU2hvcnRoYW5kKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gSW1wbGljaXRBbmltYXRpb25zIGFy
ZSBhbHdheXMgaGFzaGVkIGJ5IGFjdHVhbCBwcm9wZXJ0aWVzLCBuZXZlciBjQW5pbWF0ZUFsbAot
ICAgICAgICAgICAgQVNTRVJUKHByb3AgPiBmaXJzdENTU1Byb3BlcnR5ICYmIHByb3AgPCAoZmly
c3RDU1NQcm9wZXJ0eSArIG51bUNTU1Byb3BlcnRpZXMpKTsKKyAgICAgICAgICAgIEFTU0VSVChw
cm9wID49IGZpcnN0Q1NTUHJvcGVydHkgJiYgcHJvcCA8IChmaXJzdENTU1Byb3BlcnR5ICsgbnVt
Q1NTUHJvcGVydGllcykpOwogCiAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHJ1bm5pbmcg
YW5pbWF0aW9uIGZvciB0aGlzIHByb3BlcnR5LCB0aGUgdHJhbnNpdGlvbiBpcyBvdmVycmlkZGVu
CiAgICAgICAgICAgICAvLyBhbmQgd2UgaGF2ZSB0byB1c2UgdGhlIHVuYW5pbWF0ZWRTdHlsZSBm
cm9tIHRoZSBhbmltYXRpb24uIFdlIGRvIHRoZSB0ZXN0Cg==
</data>
<flag name="review"
          id="12822"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>