<?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>121038</bug_id>
          
          <creation_ts>2013-09-09 12:22:49 -0700</creation_ts>
          <short_desc>Hide node() below RenderLayerModelObject, use element() instead</short_desc>
          <delta_ts>2013-09-09 12:54:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>philn</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>926840</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-09 12:22:49 -0700</bug_when>
    <thetext>Tighter typing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926846</commentid>
    <comment_count>1</comment_count>
      <attachid>211066</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-09 12:35:36 -0700</bug_when>
    <thetext>Created attachment 211066
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926847</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-09 12:36:59 -0700</bug_when>
    <thetext>Attachment 211066 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/accessibility/AccessibilityRenderObject.cpp&apos;, u&apos;Source/WebCore/accessibility/AccessibilityTable.cpp&apos;, u&apos;Source/WebCore/accessibility/AccessibilityTableCell.cpp&apos;, u&apos;Source/WebCore/accessibility/AccessibilityTableColumn.cpp&apos;, u&apos;Source/WebCore/editing/markup.cpp&apos;, u&apos;Source/WebCore/html/HTMLTableCellElement.cpp&apos;, u&apos;Source/WebCore/html/shadow/SliderThumbElement.cpp&apos;, u&apos;Source/WebCore/page/Frame.cpp&apos;, u&apos;Source/WebCore/rendering/RenderBlock.cpp&apos;, u&apos;Source/WebCore/rendering/RenderBlock.h&apos;, u&apos;Source/WebCore/rendering/RenderBlockFlow.cpp&apos;, u&apos;Source/WebCore/rendering/RenderBlockFlow.h&apos;, u&apos;Source/WebCore/rendering/RenderBlockLineLayout.cpp&apos;, u&apos;Source/WebCore/rendering/RenderBox.cpp&apos;, u&apos;Source/WebCore/rendering/RenderBox.h&apos;, u&apos;Source/WebCore/rendering/RenderBoxModelObject.cpp&apos;, u&apos;Source/WebCore/rendering/RenderBoxModelObject.h&apos;, u&apos;Source/WebCore/rendering/RenderButton.cpp&apos;, u&apos;Source/WebCore/rendering/RenderButton.h&apos;, u&apos;Source/WebCore/rendering/RenderEmbeddedObject.cpp&apos;, u&apos;Source/WebCore/rendering/RenderFileUploadControl.cpp&apos;, u&apos;Source/WebCore/rendering/RenderFrame.cpp&apos;, u&apos;Source/WebCore/rendering/RenderFrameBase.cpp&apos;, u&apos;Source/WebCore/rendering/RenderFrameSet.cpp&apos;, u&apos;Source/WebCore/rendering/RenderHTMLCanvas.cpp&apos;, u&apos;Source/WebCore/rendering/RenderIFrame.cpp&apos;, u&apos;Source/WebCore/rendering/RenderImage.cpp&apos;, u&apos;Source/WebCore/rendering/RenderInline.cpp&apos;, u&apos;Source/WebCore/rendering/RenderInline.h&apos;, u&apos;Source/WebCore/rendering/RenderLayer.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayerBacking.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayerCompositor.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayerFilterInfo.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayerModelObject.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayerModelObject.h&apos;, u&apos;Source/WebCore/rendering/RenderListBox.cpp&apos;, u&apos;Source/WebCore/rendering/RenderListItem.cpp&apos;, u&apos;Source/WebCore/rendering/RenderMarquee.cpp&apos;, u&apos;Source/WebCore/rendering/RenderMedia.cpp&apos;, u&apos;Source/WebCore/rendering/RenderMediaControlElements.cpp&apos;, u&apos;Source/WebCore/rendering/RenderMenuList.cpp&apos;, u&apos;Source/WebCore/rendering/RenderMeter.cpp&apos;, u&apos;Source/WebCore/rendering/RenderPart.cpp&apos;, u&apos;Source/WebCore/rendering/RenderProgress.cpp&apos;, u&apos;Source/WebCore/rendering/RenderReplaced.cpp&apos;, u&apos;Source/WebCore/rendering/RenderSearchField.cpp&apos;, u&apos;Source/WebCore/rendering/RenderSlider.cpp&apos;, u&apos;Source/WebCore/rendering/RenderSnapshottedPlugIn.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTable.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTableCell.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTableCol.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTextControl.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTextControlMultiLine.cpp&apos;, u&apos;Source/WebCore/rendering/RenderTextControlSingleLine.cpp&apos;, u&apos;Source/WebCore/rendering/RenderThemeMac.mm&apos;, u&apos;Source/WebCore/rendering/RenderTreeAsText.cpp&apos;, u&apos;Source/WebCore/rendering/RenderVideo.cpp&apos;, u&apos;Source/WebCore/rendering/RenderWidget.cpp&apos;, u&apos;Source/WebCore/rendering/mathml/RenderMathMLFenced.cpp&apos;, u&apos;Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp&apos;, u&apos;Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp&apos;, u&apos;Source/WebCore/rendering/mathml/RenderMathMLSpace.cpp&apos;, u&apos;Source/WebCore/rendering/svg/RenderSVGForeignObject.cpp&apos;, u&apos;Source/WebCore/rendering/svg/RenderSVGRoot.cpp&apos;, u&apos;Source/WebCore/rendering/svg/RenderSVGText.cpp&apos;, u&apos;Source/WebCore/rendering/svg/RenderSVGTextPath.cpp&apos;]&quot; exit_code: 1
Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:162:  Omit int when using unsigned  [runtime/unsigned] [1]
Total errors found: 1 in 66 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926849</commentid>
    <comment_count>3</comment_count>
      <attachid>211066</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-09-09 12:41:05 -0700</bug_when>
    <thetext>Comment on attachment 211066
patch

r=me, fix style error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926856</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-09 12:54:35 -0700</bug_when>
    <thetext>https://trac.webkit.org/r155374</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211066</attachid>
            <date>2013-09-09 12:35:36 -0700</date>
            <delta_ts>2013-09-09 12:41:05 -0700</delta_ts>
            <desc>patch</desc>
            <filename>renderer-hide-node-3.patch</filename>
            <type>text/plain</type>
            <size>123082</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NTM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NiBAQAorMjAxMy0wOS0wOSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgSGlkZSBub2RlKCkgYmVsb3cg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCwgdXNlIGVsZW1lbnQoKSBpbnN0ZWFkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjEwMzgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTd2l0Y2ggYWxsIGNhbGwgc2l0
ZXMgdG8gZWxlbWVudCgpLiBSZW1vdmUgbm93IHVubmVjZXNzYXJ5IGNhc3RzLCB0eXBlIGNoZWNr
cyBhbmQgZGVhZCBjb2RlLgorICAgICAgICBNYWtlIGNvbnN0cnVjdG9ycyBiZWxvdyBSZW5kZXJM
YXllck1vZGVsT2JqZWN0IHRha2UgYW4gRWxlbWVudCBpbnN0ZWFkIG9mIGEgQ29udGFpbmVyTm9k
ZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpzdGFydE9mQ29udGludWF0aW9ucyk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVRhYmxlOjppc0RhdGFUYWJsZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlUYWJsZUNlbGw6OnRpdGxlVUlFbGVtZW50KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5VGFibGVDb2x1bW46OmhlYWRlck9iamVjdEZvclNlY3Rpb24pOgorICAgICAgICAqIGVk
aXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3RBbmNlc3RvclRvV3Jh
cE1hcmt1cCk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudDo6Y2VsbEFib3ZlKToKKyAgICAgICAg
KiBodG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU2xpZGVyVGh1bWI6OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU2xpZGVyQ29udGFpbmVyOjpjb21wdXRlTG9naWNhbEhlaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTbGlkZXJDb250YWluZXI6OmxheW91dCk6CisgICAgICAgICogcGFnZS9G
cmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6ZnJhbWVGb3JXaWRnZXQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPdmVy
Zmxvd0V2ZW50RGlzcGF0Y2hlcjo6fk92ZXJmbG93RXZlbnREaXNwYXRjaGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpSZW5kZXJCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6Y2xvbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNyZWF0
ZVJlcGxhY2VtZW50UnVuSW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppc1NlbGVjdGlvblJvb3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om5vZGVGb3JIaXRUZXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoYXNMaW5lSWZFbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpSZW5kZXJCbG9ja0Zsb3cpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjphZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbik6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OlJlbmRlckJveCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnVwZGF0ZUZyb21TdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OmxvZ2ljYWxTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYW5CZVBy
b2dyYW1hdGljYWxseVNjcm9sbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bm9k
ZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYWludEN1c3RvbUhpZ2hs
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJ
blJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNpemVzTG9naWNhbFdpZHRo
VG9GaXRDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9jYWxDYXJldFJl
Y3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
TW9kZWxPYmplY3Q6OlJlbmRlckJveE1vZGVsT2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQnV0dG9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJ1dHRvbjo6dXBkYXRlRnJvbUVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjpjYW5IYXZlR2VuZXJhdGVkQ2hpbGRy
ZW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCdXR0b24uaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
RW1iZWRkZWRPYmplY3Q6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
RW1iZWRkZWRPYmplY3Q6OmlzUmVwbGFjZW1lbnRPYnNjdXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckVtYmVkZGVkT2JqZWN0Ojp2aWV3Q2xlYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJF
bWJlZGRlZE9iamVjdDo6aGFuZGxlVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JFdmVudCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp1cGRhdGVGcm9tRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6bWF4RmlsZW5hbWVXaWR0
aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmpl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNvbXB1dGVJ
bnRyaW5zaWNMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxv
YWRDb250cm9sOjp1cGxvYWRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVw
bG9hZENvbnRyb2w6OmZpbGVUZXh0VmFsdWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
cmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZTo6ZWRnZUluZm8pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWU6OnZpZXdDbGVhcmVkKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyRnJhbWVCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYW1l
QmFzZTo6bGF5b3V0V2l0aEZsYXR0ZW5pbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
cmFtZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZVNldDo6ZnJhbWVTZXQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckhUTUxDYW52YXM6OnJlcXVpcmVzTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJIVE1MQ2FudmFzOjpjYW52YXNTaXplQ2hhbmdlZCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlcklGcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJRnJhbWU6OmlzU2Vh
bWxlc3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySUZyYW1lOjpmbGF0dGVuRnJhbWUpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJJbWFnZTo6aW1hZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdl
OjpwYWludEFyZWFFbGVtZW50Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklt
YWdlOjphcmVhRWxlbWVudEZvY3VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJ
bWFnZTo6cGFpbnRJbnRvUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6aW1h
Z2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjp1cGRhdGVBbHRUZXh0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGlu
ZTo6Y2xvbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpoaXRUZXN0Q3VsbGVk
SW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6dXBkYXRlSGl0VGVzdFJl
c3VsdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6On5SZW5kZXJMYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6bmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6aXNUcmFuc3BhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c2Nyb2xsVG8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlc2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZmlsdGVyTmVlZHNSZXBhaW50KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6Y3JlYXRlUHJpbWFyeUdyYXBoaWNzTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVy
Q29uZmlndXJhdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZyYW1lQ29u
dGVudHNDb21wb3NpdG9yKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJ
bmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpGaWx0ZXJJbmZvOjpub3Rp
ZnlGaW5pc2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6RmlsdGVySW5mbzo6
dXBkYXRlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6RmlsdGVySW5mbzo6bm90aWZ5Q3VzdG9tRmlsdGVyUHJvZ3JhbUxvYWRlZCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OmVsZW1lbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6
OnNlbGVjdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJ
dGVtRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpwYWludEl0
ZW1CYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNjcm9sbFRv
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmNyZWF0ZVNjcm9sbGJhcik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmlzTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdMaXN0KToKKyAgICAgICAgKFdl
YkNvcmU6Om5leHRMaXN0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0xpc3RJdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpjYWxjVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OmV4cGxpY2l0VmFsdWVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpzZXRFeHBsaWNpdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpjbGVhckV4cGxpY2l0VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6cHJldmlvdXNPck5leHRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RJdGVtOjp1cGRhdGVMaXN0TWFya2VyTnVtYmVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck1hcnF1ZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6bWFycXVl
ZVNwZWVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWVkaWE6Om1lZGlhRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck1lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bGF5b3V0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVu
dUxpc3Q6OnNlbGVjdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6
OnZhbHVlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6Y3JlYXRl
U2Nyb2xsYmFyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTWV0ZXI6Om1ldGVyRWxlbWVudCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclBhcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGFydDo6cmVxdWly
ZXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclBhcnQ6
OmVtYmVkZGVkQ29udGVudEJveCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclByb2dyZXNz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjpwcm9ncmVzc0VsZW1lbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJSZXBsYWNlZDo6cG9zaXRpb25Gb3JQb2ludCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJSZXBsYWNlZDo6aXNTZWxlY3RlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clNlYXJjaEZpZWxkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjph
dXRvc2F2ZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNyZWF0
ZVNjcm9sbGJhcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXI6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTbGlkZXI6OmluRHJhZ01vZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbmFw
c2hvdHRlZFBsdWdJbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbmFwc2hvdHRlZFBs
dWdJbjo6cGx1Z0luSW1hZ2VFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFi
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNvbnZlcnRTdHlsZUxvZ2lj
YWxXaWR0aFRvQ29tcHV0ZWRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6
Y29udmVydFN0eWxlTG9naWNhbEhlaWdodFRvQ29tcHV0ZWRIZWlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6cGFy
c2VDb2xTcGFuRnJvbURPTSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnBh
cnNlUm93U3BhbkZyb21ET00pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjp1
cGRhdGVDb2xBbmRSb3dTcGFuRmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVD
ZWxsOjpjb2xTcGFuT3JSb3dTcGFuQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
YWJsZUNlbGw6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVD
b2w6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OnRleHRGb3Jt
Q29udHJvbEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmFk
anVzdElubmVyVGV4dFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9s
Ojp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bDo6bGF5b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Q29udHJvbE11bHRpTGluZTo6flJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpub2RlQXRQb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6cHJlZmVycmVkQ29udGVu
dExvZ2ljYWxXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbE11bHRp
TGluZTo6Y29tcHV0ZUNvbnRyb2xMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjYXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0U2hv
dWxkQmVUcnVuY2F0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjppbnB1dEVsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNuYXBzaG90dGVk
UGx1Z2luT3ZlcmxheSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVSZW5kZXJSZWdpb25MaXN0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlkZW86
OnVwZGF0ZUludHJpbnNpY1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlkZW86OnZp
ZGVvRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnNldFdpZGdldEdlb21ldHJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcldpZGdldDo6dXBkYXRlV2lkZ2V0UG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWF0aE1MRmVuY2VkOjp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNYXRoTUxGZW5jZWQ6OmNyZWF0ZU1hdGhNTE9wZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck1hdGhNTEZlbmNlZDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MRnJhY3Rpb246OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y3JlYXRlR2x5cGgpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MU3BhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWF0aE1MU3BhY2U6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
Rm9yZWlnbk9iamVjdDo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZUludHJp
bnNpY1JhdGlvSW5mb3JtYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6
aXNFbWJlZGRlZFRocm91Z2hTVkdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdS
b290Ojppc0VtYmVkZGVkVGhyb3VnaEZyYW1lQ29udGFpbmluZ1NWR0RvY3VtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2Fs
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmxheW91dCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmJ1aWxkTG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSb290OjpoYXNSZWxhdGl2ZURpbWVuc2lvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6aGFzUmVsYXRpdmVJbnRyaW5zaWNMb2dpY2FsV2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6aGFzUmVsYXRpdmVMb2dpY2FsSGVp
Z2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1RleHQ6OnN0cm9rZUJvdW5kaW5nQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHRQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHRQ
YXRoOjpsYXlvdXRQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHRQYXRoOjpz
dGFydE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0UGF0aDo6ZXhhY3RB
bGlnbm1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dFBhdGg6OnN0cmV0Y2hN
ZXRob2QpOgorCiAyMDEzLTA5LTA5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4K
IAogICAgICAgICBNYWtlIFJlbmRlclZpZXcgYW5vbnltb3VzCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHAJKHJldmlzaW9uIDE1NTM3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NSw3ICsy
NjUsNyBAQCBzdGF0aWMgaW5saW5lIFJlbmRlcklubGluZSogc3RhcnRPZkNvbnRpCiAKICAgICAv
LyBCbG9ja3Mgd2l0aCBhIHByZXZpb3VzIGNvbnRpbnVhdGlvbiBhbHdheXMgaGF2ZSBhIG5leHQg
Y29udGludWF0aW9uCiAgICAgaWYgKHItPmlzUmVuZGVyQmxvY2soKSAmJiB0b1JlbmRlckJsb2Nr
KHIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpCi0gICAgICAgIHJldHVybiB0b1JlbmRl
cklubGluZSh0b1JlbmRlckJsb2NrKHIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCktPm5v
ZGUoKS0+cmVuZGVyZXIoKSk7CisgICAgICAgIHJldHVybiB0b1JlbmRlcklubGluZSh0b1JlbmRl
ckJsb2NrKHIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCktPmVsZW1lbnQoKS0+cmVuZGVy
ZXIoKSk7CiAKICAgICByZXR1cm4gMDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAJKHJldmlzaW9uIDE1NTM2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTExLDEyICsxMTEsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VGFi
bGU6OmlzRGF0YVRhYmxlKCkgYwogICAgIC8vIGJldHdlZW4gYSAibGF5b3V0IiB0YWJsZSBhbmQg
YSAiZGF0YSIgdGFibGUuCiAgICAgCiAgICAgUmVuZGVyVGFibGUqIHRhYmxlID0gdG9SZW5kZXJU
YWJsZShtX3JlbmRlcmVyKTsKLSAgICBOb2RlKiB0YWJsZU5vZGUgPSB0YWJsZS0+bm9kZSgpOwot
ICAgIGlmICghdGFibGVOb2RlIHx8ICFpc0hUTUxUYWJsZUVsZW1lbnQodGFibGVOb2RlKSkKKyAg
ICBpZiAoIXRhYmxlLT5lbGVtZW50KCkgfHwgIWlzSFRNTFRhYmxlRWxlbWVudCh0YWJsZS0+ZWxl
bWVudCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gaWYgdGhlcmUgaXMgYSBj
YXB0aW9uIGVsZW1lbnQsIHN1bW1hcnksIFRIRUFELCBvciBURk9PVCBzZWN0aW9uLCBpdCdzIG1v
c3QgY2VydGFpbmx5IGEgZGF0YSB0YWJsZQotICAgIEhUTUxUYWJsZUVsZW1lbnQqIHRhYmxlRWxl
bWVudCA9IHRvSFRNTFRhYmxlRWxlbWVudCh0YWJsZU5vZGUpOworICAgIEhUTUxUYWJsZUVsZW1l
bnQqIHRhYmxlRWxlbWVudCA9IHRvSFRNTFRhYmxlRWxlbWVudCh0YWJsZS0+ZWxlbWVudCgpKTsK
ICAgICBpZiAoIXRhYmxlRWxlbWVudC0+c3VtbWFyeSgpLmlzRW1wdHkoKSB8fCB0YWJsZUVsZW1l
bnQtPnRIZWFkKCkgfHwgdGFibGVFbGVtZW50LT50Rm9vdCgpIHx8IHRhYmxlRWxlbWVudC0+Y2Fw
dGlvbigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKQEAgLTE3OCw4ICsxNzcsNyBAQCBi
b29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6aXNEYXRhVGFibGUoKSBjCiAgICAgICAgICAgICBSZW5k
ZXJUYWJsZUNlbGwqIGNlbGwgPSBmaXJzdEJvZHktPnByaW1hcnlDZWxsQXQocm93LCBjb2wpOwog
ICAgICAgICAgICAgaWYgKCFjZWxsKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgTm9kZSogY2VsbE5vZGUgPSBjZWxsLT5ub2RlKCk7Ci0gICAgICAgICAgICBpZiAoIWNl
bGxOb2RlKQorICAgICAgICAgICAgaWYgKCFjZWxsLT5lbGVtZW50KCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChjZWxsLT53aWR0aCgp
IDwgMSB8fCBjZWxsLT5oZWlnaHQoKSA8IDEpCkBAIC0xODcsNyArMTg1LDcgQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5VGFibGU6OmlzRGF0YVRhYmxlKCkgYwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICB2YWxpZENlbGxDb3VudCsrOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBIVE1MVGFibGVD
ZWxsRWxlbWVudCogY2VsbEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVu
dCo+KGNlbGxOb2RlKTsKKyAgICAgICAgICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50KiBjZWxsRWxl
bWVudCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50Kj4oY2VsbC0+ZWxlbWVudCgp
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYm9vbCBpc1RIQ2VsbCA9IGNlbGxFbGVtZW50
LT5oYXNUYWdOYW1lKHRoVGFnKTsKICAgICAgICAgICAgIC8vIElmIHRoZSBmaXJzdCByb3cgaXMg
Y29tcHJpc2VkIG9mIGFsbCA8dGg+IHRhZ3MsIGFzc3VtZSBpdCBpcyBhIGRhdGEgdGFibGUuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDE1NTM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3NCw4ICsxNzQsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGVD
CiAgICAgaWYgKCFoZWFkZXJDZWxsIHx8IGhlYWRlckNlbGwgPT0gcmVuZGVyQ2VsbCkKICAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICBOb2RlKiBjZWxsRWxlbWVudCA9IGhlYWRlckNlbGwtPm5vZGUo
KTsKLSAgICBpZiAoIWNlbGxFbGVtZW50IHx8ICFjZWxsRWxlbWVudC0+aGFzVGFnTmFtZSh0aFRh
ZykpCisgICAgaWYgKCFoZWFkZXJDZWxsLT5lbGVtZW50KCkgfHwgIWhlYWRlckNlbGwtPmVsZW1l
bnQoKS0+aGFzVGFnTmFtZSh0aFRhZykpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIHJl
dHVybiBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGhlYWRlckNlbGwpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlQ29sdW1uLmNwcAkocmV2aXNpb24gMTU1MzY5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYsMTEgKzEzNiwxMCBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGVD
CiAgICAgICAgIGlmICgodGVzdENlbGwtPmNvbCgpICsgKHRlc3RDZWxsLT5jb2xTcGFuKCktMSkp
IDwgbV9jb2x1bW5JbmRleCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAg
Tm9kZSogbm9kZSA9IHRlc3RDZWxsLT5ub2RlKCk7Ci0gICAgICAgIGlmICghbm9kZSkKKyAgICAg
ICAgaWYgKCF0ZXN0Q2VsbC0+ZWxlbWVudCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIAotICAgICAgICBpZiAodGhUYWdSZXF1aXJlZCAmJiAhbm9kZS0+aGFzVGFnTmFtZSh0aFRh
ZykpCisgICAgICAgIGlmICh0aFRhZ1JlcXVpcmVkICYmICF0ZXN0Q2VsbC0+ZWxlbWVudCgpLT5o
YXNUYWdOYW1lKHRoVGFnKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAg
ICAgY2VsbCA9IHRlc3RDZWxsOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2
aXNpb24gMTU1MzY5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MjQsNyArNTI0LDcgQEAgc3RhdGljIE5vZGUqIGhpZ2hlc3RBbmNlc3Rv
clRvV3JhcE1hcmt1cAogCiAgICAgTm9kZSogY2hlY2tBbmNlc3RvciA9IHNwZWNpYWxDb21tb25B
bmNlc3RvciA/IHNwZWNpYWxDb21tb25BbmNlc3RvciA6IGNvbW1vbkFuY2VzdG9yOwogICAgIGlm
IChjaGVja0FuY2VzdG9yLT5yZW5kZXJlcigpICYmIGNoZWNrQW5jZXN0b3ItPnJlbmRlcmVyKCkt
PmNvbnRhaW5pbmdCbG9jaygpKSB7Ci0gICAgICAgIE5vZGUqIG5ld1NwZWNpYWxDb21tb25BbmNl
c3RvciA9IGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBlKGZpcnN0UG9zaXRpb25Jbk5vZGUoY2hl
Y2tBbmNlc3RvciksICZpc0VsZW1lbnRQcmVzZW50YXRpb25hbCwgQ2FuQ3Jvc3NFZGl0aW5nQm91
bmRhcnksIGNoZWNrQW5jZXN0b3ItPnJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpLT5ub2Rl
KCkpOworICAgICAgICBOb2RlKiBuZXdTcGVjaWFsQ29tbW9uQW5jZXN0b3IgPSBoaWdoZXN0RW5j
bG9zaW5nTm9kZU9mVHlwZShmaXJzdFBvc2l0aW9uSW5Ob2RlKGNoZWNrQW5jZXN0b3IpLCAmaXNF
bGVtZW50UHJlc2VudGF0aW9uYWwsIENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5LCBjaGVja0FuY2Vz
dG9yLT5yZW5kZXJlcigpLT5jb250YWluaW5nQmxvY2soKS0+ZWxlbWVudCgpKTsKICAgICAgICAg
aWYgKG5ld1NwZWNpYWxDb21tb25BbmNlc3RvcikKICAgICAgICAgICAgIHNwZWNpYWxDb21tb25B
bmNlc3RvciA9IG5ld1NwZWNpYWxDb21tb25BbmNlc3RvcjsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmNwcAkocmV2aXNpb24gMTU1MzY5
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3OSw3ICsxNzksNyBAQCBIVE1MVGFibGVDZWxsRWxlbWVudCogSFRNTFRh
YmxlQ2VsbEVsZW1lCiAgICAgaWYgKCFjZWxsQWJvdmVSZW5kZXJlcikKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQqPihjZWxs
QWJvdmVSZW5kZXJlci0+bm9kZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
Q2VsbEVsZW1lbnQqPihjZWxsQWJvdmVSZW5kZXJlci0+ZWxlbWVudCgpKTsKIH0KIAogI2lmbmRl
ZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVy
VGh1bWJFbGVtZW50LmNwcAkocmV2aXNpb24gMTU1MzY5KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDcg
KzExMiw3IEBAIHZvaWQgUmVuZGVyU2xpZGVyVGh1bWI6OnVwZGF0ZUFwcGVhcmFuY2UKICAgICBl
bHNlIGlmIChwYXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lZGlhRnVsbFNjcmVlblZvbHVt
ZVNsaWRlclBhcnQpCiAgICAgICAgIHN0eWxlKCktPnNldEFwcGVhcmFuY2UoTWVkaWFGdWxsU2Ny
ZWVuVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKICAgICBpZiAoc3R5bGUoKS0+aGFzQXBwZWFyYW5j
ZSgpKQotICAgICAgICB0aGVtZSgpLT5hZGp1c3RTbGlkZXJUaHVtYlNpemUoc3R5bGUoKSwgdG9F
bGVtZW50KG5vZGUoKSkpOworICAgICAgICB0aGVtZSgpLT5hZGp1c3RTbGlkZXJUaHVtYlNpemUo
c3R5bGUoKSwgZWxlbWVudCgpKTsKIH0KIAogYm9vbCBSZW5kZXJTbGlkZXJUaHVtYjo6aXNTbGlk
ZXJUaHVtYigpIGNvbnN0CkBAIC0xMzcsNyArMTM3LDcgQEAgcHJpdmF0ZToKIAogdm9pZCBSZW5k
ZXJTbGlkZXJDb250YWluZXI6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQgbG9naWNh
bEhlaWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1
ZXMmIGNvbXB1dGVkVmFsdWVzKSBjb25zdAogewotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
ID0gbm9kZSgpLT5zaGFkb3dIb3N0KCktPnRvSW5wdXRFbGVtZW50KCk7CisgICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPSBlbGVtZW50KCktPnNoYWRvd0hvc3QoKS0+dG9JbnB1dEVsZW1lbnQo
KTsKICAgICBib29sIGlzVmVydGljYWwgPSBoYXNWZXJ0aWNhbEFwcGVhcmFuY2UoaW5wdXQpOwog
CiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBS
ZW5kZXJTbGlkZXJDb250YWluZXI6OmNvbXB1dGVMb2dpYwogCiB2b2lkIFJlbmRlclNsaWRlckNv
bnRhaW5lcjo6bGF5b3V0KCkKIHsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IG5vZGUo
KS0+c2hhZG93SG9zdCgpLT50b0lucHV0RWxlbWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0ID0gZWxlbWVudCgpLT5zaGFkb3dIb3N0KCktPnRvSW5wdXRFbGVtZW50KCk7CiAgICAg
Ym9vbCBpc1ZlcnRpY2FsID0gaGFzVmVydGljYWxBcHBlYXJhbmNlKGlucHV0KTsKICAgICBzdHls
ZSgpLT5zZXRGbGV4RGlyZWN0aW9uKGlzVmVydGljYWwgPyBGbG93Q29sdW1uIDogRmxvd1Jvdyk7
CiAgICAgVGV4dERpcmVjdGlvbiBvbGRUZXh0RGlyZWN0aW9uID0gc3R5bGUoKS0+ZGlyZWN0aW9u
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMTU1MzY5KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4NSw4ICs1ODUsOCBA
QCBGcmFtZSogRnJhbWU6OmZyYW1lRm9yV2lkZ2V0KGNvbnN0IFdpZGdlCiAgICAgQVNTRVJUX0FS
Ryh3aWRnZXQsIHdpZGdldCk7CiAKICAgICBpZiAoUmVuZGVyV2lkZ2V0KiByZW5kZXJlciA9IFJl
bmRlcldpZGdldDo6ZmluZCh3aWRnZXQpKQotICAgICAgICBpZiAoTm9kZSogbm9kZSA9IHJlbmRl
cmVyLT5ub2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgp
OworICAgICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLT5lbGVtZW50KCkpCisg
ICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogCiAgICAgLy8g
QXNzdW1lIGFsbCB3aWRnZXRzIGFyZSBlaXRoZXIgYSBGcmFtZVZpZXcgb3Igb3duZWQgYnkgYSBS
ZW5kZXJXaWRnZXQuCiAgICAgLy8gRklYTUU6IFRoYXQgYXNzdW1wdGlvbiBpcyBub3QgcmlnaHQg
Zm9yIHNjcm9sbCBiYXJzIQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCShyZXZpc2lvbiAxNTUzNzApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGljOgog
ICAgICAgICBib29sIGhvcml6b250YWxMYXlvdXRPdmVyZmxvd0NoYW5nZWQgPSBoYXNIb3Jpem9u
dGFsTGF5b3V0T3ZlcmZsb3cgIT0gbV9oYWRIb3Jpem9udGFsTGF5b3V0T3ZlcmZsb3c7CiAgICAg
ICAgIGJvb2wgdmVydGljYWxMYXlvdXRPdmVyZmxvd0NoYW5nZWQgPSBoYXNWZXJ0aWNhbExheW91
dE92ZXJmbG93ICE9IG1faGFkVmVydGljYWxMYXlvdXRPdmVyZmxvdzsKICAgICAgICAgaWYgKGhv
cml6b250YWxMYXlvdXRPdmVyZmxvd0NoYW5nZWQgfHwgdmVydGljYWxMYXlvdXRPdmVyZmxvd0No
YW5nZWQpCi0gICAgICAgICAgICBtX2Jsb2NrLT52aWV3KCkuZnJhbWVWaWV3KCkuc2NoZWR1bGVF
dmVudChPdmVyZmxvd0V2ZW50OjpjcmVhdGUoaG9yaXpvbnRhbExheW91dE92ZXJmbG93Q2hhbmdl
ZCwgaGFzSG9yaXpvbnRhbExheW91dE92ZXJmbG93LCB2ZXJ0aWNhbExheW91dE92ZXJmbG93Q2hh
bmdlZCwgaGFzVmVydGljYWxMYXlvdXRPdmVyZmxvdyksIG1fYmxvY2stPm5vZGUoKSk7CisgICAg
ICAgICAgICBtX2Jsb2NrLT52aWV3KCkuZnJhbWVWaWV3KCkuc2NoZWR1bGVFdmVudChPdmVyZmxv
d0V2ZW50OjpjcmVhdGUoaG9yaXpvbnRhbExheW91dE92ZXJmbG93Q2hhbmdlZCwgaGFzSG9yaXpv
bnRhbExheW91dE92ZXJmbG93LCB2ZXJ0aWNhbExheW91dE92ZXJmbG93Q2hhbmdlZCwgaGFzVmVy
dGljYWxMYXlvdXRPdmVyZmxvdyksIG1fYmxvY2stPmVsZW1lbnQoKSk7CiAgICAgfQogCiBwcml2
YXRlOgpAQCAtMTkzLDggKzE5Myw4IEBAIFJlbmRlckJsb2NrOjpNYXJnaW5JbmZvOjpNYXJnaW5J
bmZvKFJlbmQKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi1SZW5kZXJCbG9jazo6UmVuZGVyQmxvY2soQ29udGFpbmVyTm9kZSogbm9kZSkKLSAg
ICA6IFJlbmRlckJveChub2RlKQorUmVuZGVyQmxvY2s6OlJlbmRlckJsb2NrKEVsZW1lbnQqIGVs
ZW1lbnQpCisgICAgOiBSZW5kZXJCb3goZWxlbWVudCkKICAgICAsIG1fbGluZUhlaWdodCgtMSkK
ICAgICAsIG1faGFzTWFyZ2luQmVmb3JlUXVpcmsoZmFsc2UpCiAgICAgLCBtX2hhc01hcmdpbkFm
dGVyUXVpcmsoZmFsc2UpCkBAIC01NzIsNyArNTcyLDcgQEAgUmVuZGVyQmxvY2sqIFJlbmRlckJs
b2NrOjpjbG9uZSgpIGNvbnN0CiAgICAgICAgIGNsb25lQmxvY2stPnNldENoaWxkcmVuSW5saW5l
KGNoaWxkcmVuSW5saW5lKCkpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBjbG9uZVJlbmRlcmVyID0gdG9FbGVtZW50KG5vZGUoKSktPmNyZWF0ZVJlbmRlcmVyKHJl
bmRlckFyZW5hKCksIHN0eWxlKCkpOworICAgICAgICBSZW5kZXJPYmplY3QqIGNsb25lUmVuZGVy
ZXIgPSBlbGVtZW50KCktPmNyZWF0ZVJlbmRlcmVyKHJlbmRlckFyZW5hKCksIHN0eWxlKCkpOwog
ICAgICAgICBjbG9uZUJsb2NrID0gdG9SZW5kZXJCbG9jayhjbG9uZVJlbmRlcmVyKTsKICAgICAg
ICAgY2xvbmVCbG9jay0+c2V0U3R5bGUoc3R5bGUoKSk7CiAKQEAgLTIwMTQsMTUgKzIwMTQsMTUg
QEAgdm9pZCBSZW5kZXJCbG9jazo6cGxhY2VSdW5JbklmTmVlZGVkKFJlbgogUmVuZGVyQm94TW9k
ZWxPYmplY3QqIFJlbmRlckJsb2NrOjpjcmVhdGVSZXBsYWNlbWVudFJ1bkluKFJlbmRlckJveE1v
ZGVsT2JqZWN0KiBydW5JbikKIHsKICAgICBBU1NFUlQocnVuSW4tPmlzUnVuSW4oKSk7Ci0gICAg
QVNTRVJUKHJ1bkluLT5ub2RlKCkpOworICAgIEFTU0VSVChydW5Jbi0+ZWxlbWVudCgpKTsKIAog
ICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBuZXdSdW5JbiA9IDA7CiAgICAgaWYgKCFydW5Jbi0+
aXNSZW5kZXJCbG9jaygpKQotICAgICAgICBuZXdSdW5JbiA9IG5ldyAocmVuZGVyQXJlbmEoKSkg
UmVuZGVyQmxvY2socnVuSW4tPm5vZGUoKSk7CisgICAgICAgIG5ld1J1bkluID0gbmV3IChyZW5k
ZXJBcmVuYSgpKSBSZW5kZXJCbG9jayhydW5Jbi0+ZWxlbWVudCgpKTsKICAgICBlbHNlCi0gICAg
ICAgIG5ld1J1bkluID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJJbmxpbmUodG9FbGVtZW50
KHJ1bkluLT5ub2RlKCkpKTsKKyAgICAgICAgbmV3UnVuSW4gPSBuZXcgKHJlbmRlckFyZW5hKCkp
IFJlbmRlcklubGluZShydW5Jbi0+ZWxlbWVudCgpKTsKIAotICAgIHJ1bkluLT5ub2RlKCktPnNl
dFJlbmRlcmVyKG5ld1J1bkluKTsKKyAgICBydW5Jbi0+ZWxlbWVudCgpLT5zZXRSZW5kZXJlcihu
ZXdSdW5Jbik7CiAgICAgbmV3UnVuSW4tPnNldFN0eWxlKHJ1bkluLT5zdHlsZSgpKTsKIAogICAg
IHJ1bkluLT5tb3ZlQWxsQ2hpbGRyZW5UbyhuZXdSdW5JbiwgdHJ1ZSk7CkBAIC0zMzg2LDcgKzMz
ODYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludE9iamVjdChQYWludEluZm8mCiAgICAgaWYg
KChwYWludFBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IHBhaW50UGhhc2UgPT0gUGFpbnRQ
aGFzZUNoaWxkT3V0bGluZXMpKSB7CiAgICAgICAgIFJlbmRlcklubGluZSogaW5saW5lQ29udCA9
IGlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKICAgICAgICAgaWYgKGlubGluZUNvbnQgJiYg
aW5saW5lQ29udC0+aGFzT3V0bGluZSgpICYmIGlubGluZUNvbnQtPnN0eWxlKCktPnZpc2liaWxp
dHkoKSA9PSBWSVNJQkxFKSB7Ci0gICAgICAgICAgICBSZW5kZXJJbmxpbmUqIGlubGluZVJlbmRl
cmVyID0gdG9SZW5kZXJJbmxpbmUoaW5saW5lQ29udC0+bm9kZSgpLT5yZW5kZXJlcigpKTsKKyAg
ICAgICAgICAgIFJlbmRlcklubGluZSogaW5saW5lUmVuZGVyZXIgPSB0b1JlbmRlcklubGluZShp
bmxpbmVDb250LT5lbGVtZW50KCktPnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgUmVuZGVyQmxv
Y2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7CiAKICAgICAgICAgICAgIGJvb2wgaW5saW5lRW5j
bG9zZWRJblNlbGZQYWludGluZ0xheWVyID0gZmFsc2U7CkBAIC0zNTQ1LDcgKzM1NDUsNyBAQCBi
b29sIFJlbmRlckJsb2NrOjppc1NlbGVjdGlvblJvb3QoKSBjb25zCiB7CiAgICAgaWYgKGlzUHNl
dWRvRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKG5vZGUoKSB8
fCBpc0Fub255bW91cygpKTsKKyAgICBBU1NFUlQoZWxlbWVudCgpIHx8IGlzQW5vbnltb3VzKCkp
OwogICAgICAgICAKICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB0YWJsZXMgc2hvdWxkIGhhdmUg
dG8gbGVhcm4gaG93IHRvIGZpbGwgZ2FwcyBiZXR3ZWVuIGNlbGxzLCBhdCBsZWFzdCBpbiBzaW1w
bGUgbm9uLXNwYW5uaW5nIGNhc2VzLgogICAgIGlmIChpc1RhYmxlKCkpCkBAIC0zNTYwLDcgKzM1
NjAsNyBAQCBib29sIFJlbmRlckJsb2NrOjppc1NlbGVjdGlvblJvb3QoKSBjb25zCiAgICAgCiAg
ICAgaWYgKHZpZXcoKS5zZWxlY3Rpb25TdGFydCgpKSB7CiAgICAgICAgIE5vZGUqIHN0YXJ0RWxl
bWVudCA9IHZpZXcoKS5zZWxlY3Rpb25TdGFydCgpLT5ub2RlKCk7Ci0gICAgICAgIGlmIChzdGFy
dEVsZW1lbnQgJiYgc3RhcnRFbGVtZW50LT5yb290RWRpdGFibGVFbGVtZW50KCkgPT0gbm9kZSgp
KQorICAgICAgICBpZiAoc3RhcnRFbGVtZW50ICYmIHN0YXJ0RWxlbWVudC0+cm9vdEVkaXRhYmxl
RWxlbWVudCgpID09IGVsZW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICAKQEAgLTUxNjcsNyArNTE2Nyw3IEBAIE5vZGUqIFJlbmRlckJsb2NrOjpub2RlRm9ySGl0
VGVzdCgpIGNvbnMKICAgICAvLyB0aGF0IHdhcyBzcGxpdC4gVXNlIHRoZSBhcHByb3ByaWF0ZSBp
bm5lciBub2RlLgogICAgIGlmIChpc1JlbmRlclZpZXcoKSkKICAgICAgICAgcmV0dXJuICZkb2N1
bWVudCgpOwotICAgIHJldHVybiBpc0Fub255bW91c0Jsb2NrQ29udGludWF0aW9uKCkgPyBjb250
aW51YXRpb24oKS0+bm9kZSgpIDogbm9kZSgpOworICAgIHJldHVybiBpc0Fub255bW91c0Jsb2Nr
Q29udGludWF0aW9uKCkgPyBjb250aW51YXRpb24oKS0+ZWxlbWVudCgpIDogZWxlbWVudCgpOwog
fQogCiBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxv
Y2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
SGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQpAQCAtNjY0OCwxMyArNjY0OCwxMCBAQCB2b2lk
IFJlbmRlckJsb2NrOjpjb21wdXRlQmxvY2tQcmVmZXJyZWRMCiAKIGJvb2wgUmVuZGVyQmxvY2s6
Omhhc0xpbmVJZkVtcHR5KCkgY29uc3QKIHsKLSAgICBpZiAoIW5vZGUoKSkKKyAgICBpZiAoIWVs
ZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmIChub2RlKCktPmlz
Um9vdEVkaXRhYmxlRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBp
ZiAobm9kZSgpLT5pc1NoYWRvd1Jvb3QoKSAmJiBpc0hUTUxJbnB1dEVsZW1lbnQodG9TaGFkb3dS
b290KG5vZGUoKSktPmhvc3RFbGVtZW50KCkpKQorICAgIGlmIChlbGVtZW50KCktPmlzUm9vdEVk
aXRhYmxlRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICByZXR1cm4g
ZmFsc2U7CkBAIC03NDgwLDcgKzc0NzcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRGb2N1c1Jp
bmdSZWN0cyhWZWN0CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nLiBUaGUgcHJpbmNp
cGFsIHJlbmRlcmVyIG1heSBub3QgYmUgdGhlIGNvbnRpbnVhdGlvbiBwcmVjZWRpbmcgdGhpcyBi
bG9jay4KICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcgZm9yIGJsb2NrLWZsb3dzIHRo
YXQgYXJlIGhvcml6b250YWwuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00Njc4MQotICAgICAgICBib29sIHByZXZJbmxpbmVIYXNMaW5lQm94ID0g
dG9SZW5kZXJJbmxpbmUoaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpLT5ub2RlKCktPnJlbmRl
cmVyKCkpLT5maXJzdExpbmVCb3goKTsKKyAgICAgICAgYm9vbCBwcmV2SW5saW5lSGFzTGluZUJv
eCA9IHRvUmVuZGVySW5saW5lKGlubGluZUVsZW1lbnRDb250aW51YXRpb24oKS0+ZWxlbWVudCgp
LT5yZW5kZXJlcigpKS0+Zmlyc3RMaW5lQm94KCk7CiAgICAgICAgIGZsb2F0IHRvcE1hcmdpbiA9
IHByZXZJbmxpbmVIYXNMaW5lQm94ID8gY29sbGFwc2VkTWFyZ2luQmVmb3JlKCkgOiBMYXlvdXRV
bml0KCk7CiAgICAgICAgIGZsb2F0IGJvdHRvbU1hcmdpbiA9IG5leHRJbmxpbmVIYXNMaW5lQm94
ID8gY29sbGFwc2VkTWFyZ2luQWZ0ZXIoKSA6IExheW91dFVuaXQoKTsKICAgICAgICAgTGF5b3V0
UmVjdCByZWN0KGFkZGl0aW9uYWxPZmZzZXQueCgpLCBhZGRpdGlvbmFsT2Zmc2V0LnkoKSAtIHRv
cE1hcmdpbiwgd2lkdGgoKSwgaGVpZ2h0KCkgKyB0b3BNYXJnaW4gKyBib3R0b21NYXJnaW4pOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDE1NTM2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcm90ZWN0ZWQ6Ci0gICAg
ZXhwbGljaXQgUmVuZGVyQmxvY2soQ29udGFpbmVyTm9kZSopOworICAgIGV4cGxpY2l0IFJlbmRl
ckJsb2NrKEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJCbG9jaygpOwogCiBwdWJsaWM6
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAko
cmV2aXNpb24gMTU1MzY5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1SZW5kZXJCbG9ja0Zsb3c6OlJlbmRlckJsb2NrRmxvdyhDb250YWluZXJOb2Rl
KiBub2RlKQotICAgIDogUmVuZGVyQmxvY2sobm9kZSkKK1JlbmRlckJsb2NrRmxvdzo6UmVuZGVy
QmxvY2tGbG93KEVsZW1lbnQqIGVsZW1lbnQpCisgICAgOiBSZW5kZXJCbG9jayhlbGVtZW50KQog
ewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5o
CShyZXZpc2lvbiAxNTUzNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tGbG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBSZW5kZXJCbG9ja0Zsb3cgOiBwdWJsaWMgUmVuZGVyQmxvY2sgewogcHVi
bGljOgotICAgIGV4cGxpY2l0IFJlbmRlckJsb2NrRmxvdyhDb250YWluZXJOb2RlKik7CisgICAg
ZXhwbGljaXQgUmVuZGVyQmxvY2tGbG93KEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJC
bG9ja0Zsb3coKTsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJCbG9ja0Zsb3coKSBj
b25zdCBPVkVSUklERSBGSU5BTCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24g
MTU1MzY5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NDksNyArMzU0OSw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmFkZE92ZXJmbG93RnJvbUlubGluZUMKIHsKICAgICBMYXlvdXRVbml0IGVuZFBhZGRpbmcg
PSBoYXNPdmVyZmxvd0NsaXAoKSA/IHBhZGRpbmdFbmQoKSA6IExheW91dFVuaXQoKTsKICAgICAv
LyBGSVhNRTogTmVlZCB0byBmaW5kIGFub3RoZXIgd2F5IHRvIGRvIHRoaXMsIHNpbmNlIHNjcm9s
bGJhcnMgY291bGQgc2hvdyB3aGVuIHdlIGRvbid0IHdhbnQgdGhlbSB0by4KLSAgICBpZiAoaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgIWVuZFBhZGRpbmcgJiYgbm9kZSgpICYmIG5vZGUoKS0+aXNSb290
RWRpdGFibGVFbGVtZW50KCkgJiYgc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQor
ICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhZW5kUGFkZGluZyAmJiBlbGVtZW50KCkgJiYg
ZWxlbWVudCgpLT5pc1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSAmJiBzdHlsZSgpLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkpCiAgICAgICAgIGVuZFBhZGRpbmcgPSAxOwogICAgIGZvciAoUm9vdElu
bGluZUJveCogY3VyciA9IGZpcnN0Um9vdEJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFJv
b3RCb3goKSkgewogICAgICAgICBhZGRMYXlvdXRPdmVyZmxvdyhjdXJyLT5wYWRkZWRMYXlvdXRP
dmVyZmxvd1JlY3QoZW5kUGFkZGluZykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAJKHJldmlzaW9uIDE1NTM3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw4ICs5NSw4IEBAIHN0YXRpYyBi
b29sIHNraXBCb2R5QmFja2dyb3VuZChjb25zdCBSZW4KICAgICAgICAgJiYgKGRvY3VtZW50RWxl
bWVudFJlbmRlcmVyID09IGJvZHlFbGVtZW50UmVuZGVyZXItPnBhcmVudCgpKTsKIH0KIAotUmVu
ZGVyQm94OjpSZW5kZXJCb3goQ29udGFpbmVyTm9kZSogbm9kZSkKLSAgICA6IFJlbmRlckJveE1v
ZGVsT2JqZWN0KG5vZGUpCitSZW5kZXJCb3g6OlJlbmRlckJveChFbGVtZW50KiBlbGVtZW50KQor
ICAgIDogUmVuZGVyQm94TW9kZWxPYmplY3QoZWxlbWVudCkKICAgICAsIG1fbWluUHJlZmVycmVk
TG9naWNhbFdpZHRoKC0xKQogICAgICwgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoLTEpCiAg
ICAgLCBtX2lubGluZUJveFdyYXBwZXIoMCkKQEAgLTQzOCw3ICs0MzgsNyBAQCB2b2lkIFJlbmRl
ckJveDo6dXBkYXRlRnJvbVN0eWxlKCkKICAgICAgICAgICAgIC8vICgyKSBXZSBhcmUgdGhlIHBy
aW1hcnkgPGJvZHk+IChjYW4gYmUgY2hlY2tlZCBieSBsb29raW5nIGF0IGRvY3VtZW50LmJvZHkp
LgogICAgICAgICAgICAgLy8gKDMpIFRoZSByb290IGVsZW1lbnQgaGFzIHZpc2libGUgb3ZlcmZs
b3cuCiAgICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKS0+aGFzVGFn
TmFtZShodG1sVGFnKQotICAgICAgICAgICAgICAgICYmIGRvY3VtZW50KCkuYm9keSgpID09IG5v
ZGUoKQorICAgICAgICAgICAgICAgICYmIGRvY3VtZW50KCkuYm9keSgpID09IGVsZW1lbnQoKQog
ICAgICAgICAgICAgICAgICYmIGRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlcmVy
KCktPnN0eWxlKCktPm92ZXJmbG93WCgpID09IE9WSVNJQkxFKSB7CiAgICAgICAgICAgICAgICAg
Ym94SGFzT3ZlcmZsb3dDbGlwID0gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC03NTEsMTEgKzc1
MSwxMSBAQCBib29sIFJlbmRlckJveDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkCiAgICAgUmVu
ZGVyTGF5ZXIqIGwgPSBsYXllcigpOwogICAgIGlmIChsICYmIGwtPnNjcm9sbChkaXJlY3Rpb24s
IGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkgewogICAgICAgICBpZiAoc3RvcE5vZGUpCi0gICAg
ICAgICAgICAqc3RvcE5vZGUgPSBub2RlKCk7CisgICAgICAgICAgICAqc3RvcE5vZGUgPSBlbGVt
ZW50KCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmIChzdG9wTm9kZSAm
JiAqc3RvcE5vZGUgJiYgKnN0b3BOb2RlID09IG5vZGUoKSkKKyAgICBpZiAoc3RvcE5vZGUgJiYg
KnN0b3BOb2RlICYmICpzdG9wTm9kZSA9PSBlbGVtZW50KCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgUmVuZGVyQmxvY2sqIGIgPSBjb250YWluaW5nQmxvY2soKTsKQEAgLTc4MCwxMiAr
NzgwLDEyIEBAIGJvb2wgUmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2kKICAgICAg
ICAgCiAgICAgICAgIGlmIChzY3JvbGxlZCkgewogICAgICAgICAgICAgaWYgKHN0b3BOb2RlKQot
ICAgICAgICAgICAgICAgICpzdG9wTm9kZSA9IG5vZGUoKTsKKyAgICAgICAgICAgICAgICAqc3Rv
cE5vZGUgPSBlbGVtZW50KCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChzdG9wTm9kZSAmJiAqc3RvcE5vZGUgJiYgKnN0b3BOb2RlID09IG5v
ZGUoKSkKKyAgICBpZiAoc3RvcE5vZGUgJiYgKnN0b3BOb2RlICYmICpzdG9wTm9kZSA9PSBlbGVt
ZW50KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgUmVuZGVyQmxvY2sqIGIgPSBjb250
YWluaW5nQmxvY2soKTsKQEAgLTgxMSw4ICs4MTEsNyBAQCBib29sIFJlbmRlckJveDo6Y2FuQmVQ
cm9ncmFtYXRpY2FsbHlTY3JvCiAgICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpICYmIGhhc1Njcm9s
bGFibGVPdmVyZmxvdykKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBOb2RlKiBub2RlID0g
dGhpcy0+bm9kZSgpOwotICAgIHJldHVybiBub2RlICYmIG5vZGUtPnJlbmRlcmVySXNFZGl0YWJs
ZSgpOworICAgIHJldHVybiBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5yZW5kZXJlcklzRWRpdGFi
bGUoKTsKIH0KIAogYm9vbCBSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29u
c3QKQEAgLTEwOTcsNyArMTA5Niw3IEBAIGJvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChjb25z
dCBIaXRUZXMKICAgICBib3VuZHNSZWN0Lm1vdmVCeShhZGp1c3RlZExvY2F0aW9uKTsKICAgICBp
ZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAm
JiBsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMoYm91bmRzUmVjdCkpIHsKICAgICAgICAg
dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSAt
IHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uKSk7Ci0gICAgICAgIGlmICghcmVzdWx0LmFk
ZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29u
dGFpbmVyLCBib3VuZHNSZWN0KSkKKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJh
c2VkVGVzdFJlc3VsdChlbGVtZW50KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIGJv
dW5kc1JlY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNTk0LDEw
ICsxNTkzLDEwIEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEN1c3RvbUhpZ2hsaWdodChjb24KICAg
ICBpZiAocikgewogICAgICAgICBGbG9hdFJlY3Qgcm9vdFJlY3QocGFpbnRPZmZzZXQueCgpICsg
ci0+eCgpLCBwYWludE9mZnNldC55KCkgKyByLT5zZWxlY3Rpb25Ub3AoKSwgci0+bG9naWNhbFdp
ZHRoKCksIHItPnNlbGVjdGlvbkhlaWdodCgpKTsKICAgICAgICAgRmxvYXRSZWN0IGltYWdlUmVj
dChwYWludE9mZnNldC54KCkgKyB4KCksIHJvb3RSZWN0LnkoKSwgd2lkdGgoKSwgcm9vdFJlY3Qu
aGVpZ2h0KCkpOwotICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5wYWludEN1c3RvbUhp
Z2hsaWdodChub2RlKCksIHR5cGUsIGltYWdlUmVjdCwgcm9vdFJlY3QsIGJlaGluZFRleHQsIGZh
bHNlKTsKKyAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkucGFpbnRDdXN0b21IaWdobGln
aHQoZWxlbWVudCgpLCB0eXBlLCBpbWFnZVJlY3QsIHJvb3RSZWN0LCBiZWhpbmRUZXh0LCBmYWxz
ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgRmxvYXRSZWN0IGltYWdlUmVjdChwYWludE9mZnNl
dC54KCkgKyB4KCksIHBhaW50T2Zmc2V0LnkoKSArIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwot
ICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5wYWludEN1c3RvbUhpZ2hsaWdodChub2Rl
KCksIHR5cGUsIGltYWdlUmVjdCwgaW1hZ2VSZWN0LCBiZWhpbmRUZXh0LCBmYWxzZSk7CisgICAg
ICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLnBhaW50Q3VzdG9tSGlnaGxpZ2h0KGVsZW1lbnQo
KSwgdHlwZSwgaW1hZ2VSZWN0LCBpbWFnZVJlY3QsIGJlaGluZFRleHQsIGZhbHNlKTsKICAgICB9
CiB9CiAKQEAgLTIxNzUsNyArMjE3NCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNh
bFdpZHRoSW5SZWcKICAgICB9CiAKICAgICAvLyBJZiBsYXlvdXQgaXMgbGltaXRlZCB0byBhIHN1
YnRyZWUsIHRoZSBzdWJ0cmVlIHJvb3QncyBsb2dpY2FsIHdpZHRoIGRvZXMgbm90IGNoYW5nZS4K
LSAgICBpZiAobm9kZSgpICYmIHZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRSb290KHRydWUpID09
IHRoaXMpCisgICAgaWYgKGVsZW1lbnQoKSAmJiB2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Um9v
dCh0cnVlKSA9PSB0aGlzKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBUaGUgcGFyZW50IGJv
eCBpcyBmbGV4aW5nIHVzLCBzbyBpdCBoYXMgaW5jcmVhc2VkIG9yIGRlY3JlYXNlZCBvdXIKQEAg
LTIzNzQsNyArMjM3Myw3IEBAIGJvb2wgUmVuZGVyQm94OjpzaXplc0xvZ2ljYWxXaWR0aFRvRml0
Q28KICAgICAvLyBzdHJldGNoaW5nIGNvbHVtbiBmbGV4Ym94LgogICAgIC8vIEZJWE1FOiBUaGlu
ayBhYm91dCBibG9jay1mbG93IGhlcmUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ2NDczCi0gICAgaWYgKGxvZ2ljYWxXaWR0aC50eXBlKCkgPT0gQXV0
byAmJiAhaXNTdHJldGNoaW5nQ29sdW1uRmxleEl0ZW0odGhpcykgJiYgbm9kZSgpICYmIChpc0hU
TUxJbnB1dEVsZW1lbnQobm9kZSgpKSB8fCBub2RlKCktPmhhc1RhZ05hbWUoc2VsZWN0VGFnKSB8
fCBub2RlKCktPmhhc1RhZ05hbWUoYnV0dG9uVGFnKSB8fCBpc0hUTUxUZXh0QXJlYUVsZW1lbnQo
bm9kZSgpKSB8fCBub2RlKCktPmhhc1RhZ05hbWUobGVnZW5kVGFnKSkpCisgICAgaWYgKGxvZ2lj
YWxXaWR0aC50eXBlKCkgPT0gQXV0byAmJiAhaXNTdHJldGNoaW5nQ29sdW1uRmxleEl0ZW0odGhp
cykgJiYgZWxlbWVudCgpICYmIChpc0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCgpKSB8fCBlbGVt
ZW50KCktPmhhc1RhZ05hbWUoc2VsZWN0VGFnKSB8fCBlbGVtZW50KCktPmhhc1RhZ05hbWUoYnV0
dG9uVGFnKSB8fCBpc0hUTUxUZXh0QXJlYUVsZW1lbnQoZWxlbWVudCgpKSB8fCBlbGVtZW50KCkt
Pmhhc1RhZ05hbWUobGVnZW5kVGFnKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYg
KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gY29udGFpbmluZ0Jsb2NrKCktPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpCkBAIC00MDU3LDcgKzQwNTYsNyBAQCBMYXlvdXRSZWN0IFJlbmRl
ckJveDo6bG9jYWxDYXJldFJlY3QoSW5sCiAgICAgLy8gRklYTUU6IEJvcmRlci9wYWRkaW5nIHNo
b3VsZCBiZSBhZGRlZCBmb3IgYWxsIGVsZW1lbnRzIGJ1dCB0aGlzIHdvcmthcm91bmQKICAgICAv
LyBpcyBuZWVkZWQgYmVjYXVzZSB3ZSB1c2Ugb2Zmc2V0cyBpbnNpZGUgYW4gImF0b21pYyIgZWxl
bWVudCB0byByZXByZXNlbnQKICAgICAvLyBwb3NpdGlvbnMgYmVmb3JlIGFuZCBhZnRlciB0aGUg
ZWxlbWVudCBpbiBkZXByZWNhdGVkIGVkaXRpbmcgb2Zmc2V0cy4KLSAgICBpZiAobm9kZSgpICYm
ICEoZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUoKSkgfHwgaXNUYWJsZUVsZW1lbnQobm9kZSgp
KSkpIHsKKyAgICBpZiAoZWxlbWVudCgpICYmICEoZWRpdGluZ0lnbm9yZXNDb250ZW50KGVsZW1l
bnQoKSkgfHwgaXNUYWJsZUVsZW1lbnQoZWxlbWVudCgpKSkpIHsKICAgICAgICAgcmVjdC5zZXRY
KHJlY3QueCgpICsgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSk7CiAgICAgICAgIHJlY3Qu
c2V0WShyZWN0LnkoKSArIHBhZGRpbmdUb3AoKSArIGJvcmRlclRvcCgpKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiAxNTUzNjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDcgKzQ0LDcgQEAgZW51bSBTaG91bGRDb21wdXRlUHJlZmVycmVkIHsgQ29tcHV0ZUFjdAogCiBj
bGFzcyBSZW5kZXJCb3ggOiBwdWJsaWMgUmVuZGVyQm94TW9kZWxPYmplY3QgewogcHVibGljOgot
ICAgIGV4cGxpY2l0IFJlbmRlckJveChDb250YWluZXJOb2RlKik7CisgICAgZXhwbGljaXQgUmVu
ZGVyQm94KEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJCb3goKTsKIAogICAgIC8vIGhh
c0F1dG9aSW5kZXggb25seSByZXR1cm5zIHRydWUgaWYgdGhlIGVsZW1lbnQgaXMgcG9zaXRpb25l
ZCBvciBhIGZsZXgtaXRlbSBzaW5jZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiAxNTUzNzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTksOCArMTU5LDggQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2hvdWxk
UGFpbnRBdAogICAgIHJldHVybiB2aWV3KCkuaW1hZ2VRdWFsaXR5Q29udHJvbGxlcigpLnNob3Vs
ZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRleHQsIHRoaXMsIGltYWdlLCBsYXllciwgc2l6ZSk7CiB9
CiAKLVJlbmRlckJveE1vZGVsT2JqZWN0OjpSZW5kZXJCb3hNb2RlbE9iamVjdChDb250YWluZXJO
b2RlKiBub2RlKQotICAgIDogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdChub2RlKQorUmVuZGVyQm94
TW9kZWxPYmplY3Q6OlJlbmRlckJveE1vZGVsT2JqZWN0KEVsZW1lbnQqIGVsZW1lbnQpCisgICAg
OiBSZW5kZXJMYXllck1vZGVsT2JqZWN0KGVsZW1lbnQpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCShyZXZpc2lvbiAx
NTUzNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBjbGFzcyBTdGlja3lQb3NpdGlvblZp
ZXdwb3J0Q29uc3RyYWludHM7CiAKIGNsYXNzIFJlbmRlckJveE1vZGVsT2JqZWN0IDogcHVibGlj
IFJlbmRlckxheWVyTW9kZWxPYmplY3QgewogcHVibGljOgotICAgIFJlbmRlckJveE1vZGVsT2Jq
ZWN0KENvbnRhaW5lck5vZGUqKTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdChFbGVtZW50Kik7
CiAgICAgdmlydHVhbCB+UmVuZGVyQm94TW9kZWxPYmplY3QoKTsKICAgICAKICAgICBMYXlvdXRT
aXplIHJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCShyZXZpc2lvbiAxNTUzNjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIy
LDggKzEyMiw4IEBAIHZvaWQgUmVuZGVyQnV0dG9uOjpzZXR1cElubmVyU3R5bGUoUmVuZGUKIHZv
aWQgUmVuZGVyQnV0dG9uOjp1cGRhdGVGcm9tRWxlbWVudCgpCiB7CiAgICAgLy8gSWYgd2UncmUg
YW4gaW5wdXQgZWxlbWVudCwgd2UgbWF5IG5lZWQgdG8gY2hhbmdlIG91ciBidXR0b24gdGV4dC4K
LSAgICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpIHsKLSAgICAgICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSgpKTsKKyAgICBpZiAoaXNI
VE1MSW5wdXRFbGVtZW50KGVsZW1lbnQoKSkpIHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCgpKTsKICAgICAgICAgU3RyaW5nIHZh
bHVlID0gaW5wdXQtPnZhbHVlV2l0aERlZmF1bHQoKTsKICAgICAgICAgc2V0VGV4dCh2YWx1ZSk7
CiAgICAgfQpAQCAtMTU3LDcgKzE1Nyw3IEBAIGJvb2wgUmVuZGVyQnV0dG9uOjpjYW5IYXZlR2Vu
ZXJhdGVkQ2hpbGQKICAgICAvLyBJbnB1dCBlbGVtZW50cyBjYW4ndCBoYXZlIGdlbmVyYXRlZCBj
aGlsZHJlbiwgYnV0IGJ1dHRvbiBlbGVtZW50cyBjYW4uIFdlJ2xsCiAgICAgLy8gd3JpdGUgdGhl
IGNvZGUgYXNzdW1pbmcgYW55IG90aGVyIGJ1dHRvbiB0eXBlcyB0aGF0IG1pZ2h0IGVtZXJnZSBp
biB0aGUgZnV0dXJlCiAgICAgLy8gY2FuIGFsc28gaGF2ZSBjaGlsZHJlbi4KLSAgICByZXR1cm4g
IWlzSFRNTElucHV0RWxlbWVudChub2RlKCkpOworICAgIHJldHVybiAhaXNIVE1MSW5wdXRFbGVt
ZW50KGVsZW1lbnQoKSk7CiB9CiAKIExheW91dFJlY3QgUmVuZGVyQnV0dG9uOjpjb250cm9sQ2xp
cFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5oCShyZXZpc2lvbiAxNTUzNjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVy
TmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJCdXR0b24iOyB9CiAgICAgdmlydHVhbCBib29s
IGlzUmVuZGVyQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCBi
b29sIGNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG5vZGUoKSAm
JiBub2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpOyB9CisgICAgdmlydHVhbCBib29sIGNhbkJl
U2VsZWN0aW9uTGVhZigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVt
ZW50KCktPnJlbmRlcmVySXNFZGl0YWJsZSgpOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hp
bGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0ICpiZWZvcmVDaGlsZCA9IDAp
OwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqKTsKQEAgLTYxLDcg
KzYxLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKICAgICB2aXJ0dWFsIHZv
aWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xk
U3R5bGUpOwogCi0gICAgdmlydHVhbCBib29sIGhhc0xpbmVJZkVtcHR5KCkgY29uc3QgeyByZXR1
cm4gbm9kZSgpICYmIG5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsgfQorICAgIHZpcnR1YWwgYm9v
bCBoYXNMaW5lSWZFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCkt
PnRvSW5wdXRFbGVtZW50KCk7IH0KIAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0ZvcmNlZFN0
eWxlUmVjYWxjUHJvcGFnYXRpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAko
cmV2aXNpb24gMTU1MzY5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVk
ZGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDExICsyMDUsMTAgQEAgdm9pZCBS
ZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRTbmFwc2hvdAogCiB2b2lkIFJlbmRlckVtYmVkZGVk
T2JqZWN0OjpwYWludENvbnRlbnRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQ
b2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChu
b2RlKCkpOwotICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+aXNQbHVnaW5FbGVtZW50KCkp
CisgICAgaWYgKCFlbGVtZW50KCkgfHwgIWVsZW1lbnQoKS0+aXNQbHVnaW5FbGVtZW50KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEhUTUxQbHVnSW5FbGVtZW50KiBwbHVnSW5FbGVtZW50ID0g
dG9IVE1MUGx1Z0luRWxlbWVudChlbGVtZW50KTsKKyAgICBIVE1MUGx1Z0luRWxlbWVudCogcGx1
Z0luRWxlbWVudCA9IHRvSFRNTFBsdWdJbkVsZW1lbnQoZWxlbWVudCgpKTsKIAogICAgIGlmIChw
bHVnSW5FbGVtZW50LT5kaXNwbGF5U3RhdGUoKSA+IEhUTUxQbHVnSW5FbGVtZW50OjpEaXNwbGF5
aW5nU25hcHNob3QpIHsKICAgICAgICAgUmVuZGVyUGFydDo6cGFpbnRDb250ZW50cyhwYWludElu
Zm8sIHBhaW50T2Zmc2V0KTsKQEAgLTQyMSwyNyArNDIwLDI3IEBAIGJvb2wgUmVuZGVyRW1iZWRk
ZWRPYmplY3Q6OmlzUmVwbGFjZW1lbnQKICAgICBib29sIGhpdCA9IGZhbHNlOwogICAgIGxvY2F0
aW9uID0gTGF5b3V0UG9pbnQoeCArIHdpZHRoIC8gMiwgeSArIGhlaWdodCAvIDIpOwogICAgIGhp
dCA9IHJvb3RSZW5kZXJWaWV3LT5oaXRUZXN0KHJlcXVlc3QsIGxvY2F0aW9uLCByZXN1bHQpOwot
ICAgIGlmICghaGl0IHx8IHJlc3VsdC5pbm5lck5vZGUoKSAhPSBub2RlKCkpCisgICAgaWYgKCFo
aXQgfHwgcmVzdWx0LmlubmVyTm9kZSgpICE9IGVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgCiAgICAgbG9jYXRpb24gPSBMYXlvdXRQb2ludCh4LCB5KTsKICAgICBoaXQgPSBy
b290UmVuZGVyVmlldy0+aGl0VGVzdChyZXF1ZXN0LCBsb2NhdGlvbiwgcmVzdWx0KTsKLSAgICBp
ZiAoIWhpdCB8fCByZXN1bHQuaW5uZXJOb2RlKCkgIT0gbm9kZSgpKQorICAgIGlmICghaGl0IHx8
IHJlc3VsdC5pbm5lck5vZGUoKSAhPSBlbGVtZW50KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIAogICAgIGxvY2F0aW9uID0gTGF5b3V0UG9pbnQoeCArIHdpZHRoLCB5KTsKICAgICBoaXQg
PSByb290UmVuZGVyVmlldy0+aGl0VGVzdChyZXF1ZXN0LCBsb2NhdGlvbiwgcmVzdWx0KTsKLSAg
ICBpZiAoIWhpdCB8fCByZXN1bHQuaW5uZXJOb2RlKCkgIT0gbm9kZSgpKQorICAgIGlmICghaGl0
IHx8IHJlc3VsdC5pbm5lck5vZGUoKSAhPSBlbGVtZW50KCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIAogICAgIGxvY2F0aW9uID0gTGF5b3V0UG9pbnQoeCArIHdpZHRoLCB5ICsgaGVpZ2h0
KTsKICAgICBoaXQgPSByb290UmVuZGVyVmlldy0+aGl0VGVzdChyZXF1ZXN0LCBsb2NhdGlvbiwg
cmVzdWx0KTsKLSAgICBpZiAoIWhpdCB8fCByZXN1bHQuaW5uZXJOb2RlKCkgIT0gbm9kZSgpKQor
ICAgIGlmICghaGl0IHx8IHJlc3VsdC5pbm5lck5vZGUoKSAhPSBlbGVtZW50KCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIAogICAgIGxvY2F0aW9uID0gTGF5b3V0UG9pbnQoeCwgeSArIGhl
aWdodCk7CiAgICAgaGl0ID0gcm9vdFJlbmRlclZpZXctPmhpdFRlc3QocmVxdWVzdCwgbG9jYXRp
b24sIHJlc3VsdCk7Ci0gICAgaWYgKCFoaXQgfHwgcmVzdWx0LmlubmVyTm9kZSgpICE9IG5vZGUo
KSkKKyAgICBpZiAoIWhpdCB8fCByZXN1bHQuaW5uZXJOb2RlKCkgIT0gZWxlbWVudCgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTQ3NSw3ICs0NzQsNyBA
QCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpsYXlvdXQoKQogICAgIExheW91dFNpemUgbmV3
U2l6ZSA9IGNvbnRlbnRCb3hSZWN0KCkuc2l6ZSgpOwogCiAgICAgaWYgKCF3YXNNaXNzaW5nV2lk
Z2V0ICYmIG5ld1NpemUud2lkdGgoKSA+PSBvbGRTaXplLndpZHRoKCkgJiYgbmV3U2l6ZS5oZWln
aHQoKSA+PSBvbGRTaXplLmhlaWdodCgpKSB7Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0
b0VsZW1lbnQobm9kZSgpKTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRoaXMtPmVsZW1l
bnQoKTsKICAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aXNQbHVnaW5FbGVtZW50KCkg
JiYgdG9IVE1MUGx1Z0luRWxlbWVudChlbGVtZW50KS0+aXNQbHVnSW5JbWFnZUVsZW1lbnQoKSkg
ewogICAgICAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCogcGx1Z0luSW1hZ2VFbGVtZW50
ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KGVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKHBs
dWdJbkltYWdlRWxlbWVudC0+ZGlzcGxheVN0YXRlKCkgPiBIVE1MUGx1Z0luRWxlbWVudDo6RGlz
cGxheWluZ1NuYXBzaG90ICYmIHBsdWdJbkltYWdlRWxlbWVudC0+c25hcHNob3REZWNpc2lvbigp
ID09IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6Ok1heVNuYXBzaG90V2hlblJlc2l6ZWQpIHsKQEAg
LTUyMCwxMiArNTE5LDEyIEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmxheW91dCgpCiB2
b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojp2aWV3Q2xlYXJlZCgpCiB7CiAgICAgLy8gVGhpcyBp
cyByZXF1aXJlZCBmb3IgPG9iamVjdD4gZWxlbWVudHMgd2hvc2UgY29udGVudHMgYXJlIHJlbmRl
cmVkIGJ5IFdlYkNvcmUgKGUuZy4gc3JjPSJmb28uaHRtbCIpLgotICAgIGlmIChub2RlKCkgJiYg
d2lkZ2V0KCkgJiYgd2lkZ2V0KCktPmlzRnJhbWVWaWV3KCkpIHsKKyAgICBpZiAoZWxlbWVudCgp
ICYmIHdpZGdldCgpICYmIHdpZGdldCgpLT5pc0ZyYW1lVmlldygpKSB7CiAgICAgICAgIEZyYW1l
VmlldyogdmlldyA9IHRvRnJhbWVWaWV3KHdpZGdldCgpKTsKICAgICAgICAgaW50IG1hcmdpbldp
ZHRoID0gLTE7CiAgICAgICAgIGludCBtYXJnaW5IZWlnaHQgPSAtMTsKLSAgICAgICAgaWYgKG5v
ZGUoKS0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKSB7Ci0gICAgICAgICAgICBIVE1MSUZyYW1lRWxl
bWVudCogZnJhbWUgPSB0b0hUTUxJRnJhbWVFbGVtZW50KG5vZGUoKSk7CisgICAgICAgIGlmIChl
bGVtZW50KCktPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSkgeworICAgICAgICAgICAgSFRNTElGcmFt
ZUVsZW1lbnQqIGZyYW1lID0gdG9IVE1MSUZyYW1lRWxlbWVudChlbGVtZW50KCkpOwogICAgICAg
ICAgICAgbWFyZ2luV2lkdGggPSBmcmFtZS0+bWFyZ2luV2lkdGgoKTsKICAgICAgICAgICAgIG1h
cmdpbkhlaWdodCA9IGZyYW1lLT5tYXJnaW5IZWlnaHQoKTsKICAgICAgICAgfQpAQCAtNjA2LDcg
KzYwNSw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmhhbmRsZVVuYXZhaWwKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1v
dXNlRXZlbnQqPihldmVudCk7Ci0gICAgSFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQgPSB0b0hU
TUxQbHVnSW5FbGVtZW50KG5vZGUoKSk7CisgICAgSFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQg
PSB0b0hUTUxQbHVnSW5FbGVtZW50KHRoaXMtPmVsZW1lbnQoKSk7CiAgICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIHN0YXRpY19jYXN0PE1vdXNl
RXZlbnQqPihldmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAgbV9tb3Vz
ZURvd25XYXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yID0gaXNJblVuYXZhaWxhYmxlUGx1
Z2luSW5kaWNhdG9yKG1vdXNlRXZlbnQpOwogICAgICAgICBpZiAobV9tb3VzZURvd25XYXNJblVu
YXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHJldmlzaW9uIDE1NTM2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgYm9vbCBSZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbDo6Y2FuQmVSZXBsYQogCiB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp1cGRh
dGVGcm9tRWxlbWVudCgpCiB7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJ
bnB1dEVsZW1lbnQobm9kZSgpKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvSFRN
TElucHV0RWxlbWVudChlbGVtZW50KCkpOwogICAgIEFTU0VSVChpbnB1dC0+aXNGaWxlVXBsb2Fk
KCkpOwogCiAgICAgaWYgKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbiA9IHVwbG9hZEJ1dHRvbigp
KSB7CkBAIC05Myw3ICs5Myw3IEBAIHN0YXRpYyBpbnQgbm9kZVdpZHRoKE5vZGUqIG5vZGUpCiAK
IGludCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6bWF4RmlsZW5hbWVXaWR0aCgpIGNvbnN0CiB7
Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVsZW1lbnQobm9kZSgp
KTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvSFRNTElucHV0RWxlbWVudChlbGVt
ZW50KCkpOwogICAgIHJldHVybiBtYXgoMCwgY29udGVudEJveFJlY3QoKS5waXhlbFNuYXBwZWRX
aWR0aCgpIC0gbm9kZVdpZHRoKHVwbG9hZEJ1dHRvbigpKSAtIGFmdGVyQnV0dG9uU3BhY2luZwog
ICAgICAgICAtIChpbnB1dC0+aWNvbigpID8gaWNvbldpZHRoICsgaWNvbkZpbGVuYW1lU3BhY2lu
ZyA6IDApKTsKIH0KQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250
cm9sOjpwYWludE9iamVjCiAgICAgICAgIGlmICghYnV0dG9uKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50
KG5vZGUoKSk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRF
bGVtZW50KGVsZW1lbnQoKSk7CiAgICAgICAgIExheW91dFVuaXQgYnV0dG9uV2lkdGggPSBub2Rl
V2lkdGgoYnV0dG9uKTsKICAgICAgICAgTGF5b3V0VW5pdCBidXR0b25BbmRJY29uV2lkdGggPSBi
dXR0b25XaWR0aCArIGFmdGVyQnV0dG9uU3BhY2luZwogICAgICAgICAgICAgKyAoaW5wdXQtPmlj
b24oKSA/IGljb25XaWR0aCArIGljb25GaWxlbmFtZVNwYWNpbmcgOiAwKTsKQEAgLTE3OCw3ICsx
NzgsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpjb21wdXRlSW50CiAgICAgUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2wqIHJlbmRlcmVyID0gY29uc3RfY2FzdDxSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbCo+KHRoaXMpOwogICAgIGZsb2F0IG1pbkRlZmF1bHRMYWJlbFdpZHRoID0gZGVm
YXVsdFdpZHRoTnVtQ2hhcnMgKiBmb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIs
IGZvbnQsIGNoYXJhY3RlckFzU3RyaW5nLCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5n
RXhwYW5zaW9uKSk7CiAKLSAgICBjb25zdCBTdHJpbmcgbGFiZWwgPSB0aGVtZSgpLT5maWxlTGlz
dERlZmF1bHRMYWJlbChub2RlKCktPnRvSW5wdXRFbGVtZW50KCktPm11bHRpcGxlKCkpOworICAg
IGNvbnN0IFN0cmluZyBsYWJlbCA9IHRoZW1lKCktPmZpbGVMaXN0RGVmYXVsdExhYmVsKGVsZW1l
bnQoKS0+dG9JbnB1dEVsZW1lbnQoKS0+bXVsdGlwbGUoKSk7CiAgICAgZmxvYXQgZGVmYXVsdExh
YmVsV2lkdGggPSBmb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIsIGZvbnQsIGxh
YmVsLCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSk7CiAgICAgaWYg
KEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbiA9IHVwbG9hZEJ1dHRvbigpKQogICAgICAgICBpZiAo
UmVuZGVyT2JqZWN0KiBidXR0b25SZW5kZXJlciA9IGJ1dHRvbi0+cmVuZGVyZXIoKSkKQEAgLTIy
NSw3ICsyMjUsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6CiAK
IEhUTUxJbnB1dEVsZW1lbnQqIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp1cGxvYWRCdXR0b24o
KSBjb25zdAogewotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVt
ZW50KG5vZGUoKSk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSB0b0hUTUxJbnB1dEVs
ZW1lbnQoZWxlbWVudCgpKTsKIAogICAgIEFTU0VSVChpbnB1dC0+c2hhZG93Um9vdCgpKTsKIApA
QCAtMjQzLDcgKzI0Myw3IEBAIFN0cmluZyBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YnV0dG9u
VmEKIAogU3RyaW5nIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpmaWxlVGV4dFZhbHVlKCkgY29u
c3QKIHsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvSFRNTElucHV0RWxlbWVudChu
b2RlKCkpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9IVE1MSW5wdXRFbGVtZW50
KGVsZW1lbnQoKSk7CiAgICAgQVNTRVJUKGlucHV0LT5maWxlcygpKTsKICAgICByZXR1cm4gdGhl
bWUoKS0+ZmlsZUxpc3ROYW1lRm9yV2lkdGgoaW5wdXQtPmZpbGVzKCksIHN0eWxlKCktPmZvbnQo
KSwgbWF4RmlsZW5hbWVXaWR0aCgpLCBpbnB1dC0+bXVsdGlwbGUoKSk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZS5jcHAJKHJldmlzaW9uIDE1NTM2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDggKzM4LDggQEAgUmVuZGVyRnJhbWU6OlJlbmRlckZyYW1lKEhUTUxGcmFtZUVsZW1l
bgogCiBGcmFtZUVkZ2VJbmZvIFJlbmRlckZyYW1lOjplZGdlSW5mbygpIGNvbnN0CiB7Ci0gICAg
SFRNTEZyYW1lRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnQq
Pihub2RlKCkpOwotICAgIHJldHVybiBGcmFtZUVkZ2VJbmZvKGVsZW1lbnQtPm5vUmVzaXplKCks
IGVsZW1lbnQtPmhhc0ZyYW1lQm9yZGVyKCkpOworICAgIEhUTUxGcmFtZUVsZW1lbnQqIGZyYW1l
RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnQqPihlbGVtZW50KCkpOworICAg
IHJldHVybiBGcmFtZUVkZ2VJbmZvKGZyYW1lRWxlbWVudC0+bm9SZXNpemUoKSwgZnJhbWVFbGVt
ZW50LT5oYXNGcmFtZUJvcmRlcigpKTsKIH0KIAogdm9pZCBSZW5kZXJGcmFtZTo6dXBkYXRlRnJv
bUVsZW1lbnQoKQpAQCAtNTAsMTQgKzUwLDE0IEBAIHZvaWQgUmVuZGVyRnJhbWU6OnVwZGF0ZUZy
b21FbGVtZW50KCkKIAogdm9pZCBSZW5kZXJGcmFtZTo6dmlld0NsZWFyZWQoKQogewotICAgIEhU
TUxGcmFtZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50Kj4o
bm9kZSgpKTsKLSAgICBpZiAoIWVsZW1lbnQgfHwgIXdpZGdldCgpIHx8ICF3aWRnZXQoKS0+aXNG
cmFtZVZpZXcoKSkKKyAgICBIVE1MRnJhbWVFbGVtZW50KiBmcmFtZUVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxIVE1MRnJhbWVFbGVtZW50Kj4oZWxlbWVudCgpKTsKKyAgICBpZiAoIWZyYW1lRWxlbWVu
dCB8fCAhd2lkZ2V0KCkgfHwgIXdpZGdldCgpLT5pc0ZyYW1lVmlldygpKQogICAgICAgICByZXR1
cm47CiAKICAgICBGcmFtZVZpZXcqIHZpZXcgPSB0b0ZyYW1lVmlldyh3aWRnZXQoKSk7CiAKLSAg
ICBpbnQgbWFyZ2luV2lkdGggPSBlbGVtZW50LT5tYXJnaW5XaWR0aCgpOwotICAgIGludCBtYXJn
aW5IZWlnaHQgPSBlbGVtZW50LT5tYXJnaW5IZWlnaHQoKTsKKyAgICBpbnQgbWFyZ2luV2lkdGgg
PSBmcmFtZUVsZW1lbnQtPm1hcmdpbldpZHRoKCk7CisgICAgaW50IG1hcmdpbkhlaWdodCA9IGZy
YW1lRWxlbWVudC0+bWFyZ2luSGVpZ2h0KCk7CiAKICAgICBpZiAobWFyZ2luV2lkdGggIT0gLTEp
CiAgICAgICAgIHZpZXctPnNldE1hcmdpbldpZHRoKG1hcmdpbldpZHRoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZUJhc2UuY3BwCShyZXZpc2lvbiAxNTUz
NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVCYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIFJlbmRlckZyYW1lQmFzZTo6bGF5b3V0
V2l0aEZsYXR0ZW5pCiAgICAgLy8gd2Ugb2JleSB0aGVtIGFuZCBkbyBub3QgZXhwYW5kLiBXaXRo
IGZyYW1lIGZsYXR0ZW5pbmcKICAgICAvLyBubyBzdWJmcmFtZSBtdWNoIGV2ZXIgYmVjb21lIHNj
cm9sbGFibGUuCiAKLSAgICBib29sIGlzU2Nyb2xsYWJsZSA9IHRvSFRNTEZyYW1lRWxlbWVudEJh
c2Uobm9kZSgpKS0+c2Nyb2xsaW5nTW9kZSgpICE9IFNjcm9sbGJhckFsd2F5c09mZjsKKyAgICBi
b29sIGlzU2Nyb2xsYWJsZSA9IHRvSFRNTEZyYW1lRWxlbWVudEJhc2UoZWxlbWVudCgpKS0+c2Ny
b2xsaW5nTW9kZSgpICE9IFNjcm9sbGJhckFsd2F5c09mZjsKIAogICAgIC8vIGNvbnNpZGVyIGlm
cmFtZSBpbnNldCBib3JkZXIKICAgICBpbnQgaEJvcmRlciA9IGJvcmRlckxlZnQoKSArIGJvcmRl
clJpZ2h0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNl
dC5jcHAJKHJldmlzaW9uIDE1NTM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGcmFtZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgUmVuZGVyRnJh
bWVTZXQ6OkdyaWRBeGlzOjpHcmlkQXhpcygpCiAKIGlubGluZSBIVE1MRnJhbWVTZXRFbGVtZW50
KiBSZW5kZXJGcmFtZVNldDo6ZnJhbWVTZXQoKSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxG
cmFtZVNldEVsZW1lbnQobm9kZSgpKTsKKyAgICByZXR1cm4gdG9IVE1MRnJhbWVTZXRFbGVtZW50
KGVsZW1lbnQoKSk7CiB9CiAKIHN0YXRpYyBDb2xvciBib3JkZXJTdGFydEVkZ2VDb2xvcigpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCShy
ZXZpc2lvbiAxNTUzNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENh
bnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgYm9vbCBSZW5kZXJIVE1M
Q2FudmFzOjpyZXF1aXJlc0xheWVyKCkgYwogICAgIGlmIChSZW5kZXJSZXBsYWNlZDo6cmVxdWly
ZXNMYXllcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKLSAgICBIVE1MQ2FudmFzRWxl
bWVudCogY2FudmFzID0gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihub2RlKCkpOwor
ICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxl
bWVudCo+KGVsZW1lbnQoKSk7CiAgICAgcmV0dXJuIGNhbnZhcyAmJiBjYW52YXMtPnJlbmRlcmlu
Z0NvbnRleHQoKSAmJiBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKS0+aXNBY2NlbGVyYXRlZCgp
OwogfQogCkBAIC03OCwxMiArNzgsMTIgQEAgdm9pZCBSZW5kZXJIVE1MQ2FudmFzOjpwYWludFJl
cGxhY2VkKFBhaQogICAgIH0KIAogICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gc3R5bGUo
KS0+aW1hZ2VSZW5kZXJpbmcoKSA9PSBJbWFnZVJlbmRlcmluZ0NyaXNwRWRnZXMgfHwgc3R5bGUo
KS0+aW1hZ2VSZW5kZXJpbmcoKSA9PSBJbWFnZVJlbmRlcmluZ09wdGltaXplU3BlZWQ7Ci0gICAg
c3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihub2RlKCkpLT5wYWludChjb250ZXh0LCBw
YWludFJlY3QsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgc3RhdGljX2Nhc3Q8SFRNTENhbnZh
c0VsZW1lbnQqPihlbGVtZW50KCkpLT5wYWludChjb250ZXh0LCBwYWludFJlY3QsIHVzZUxvd1F1
YWxpdHlTY2FsZSk7CiB9CiAKIHZvaWQgUmVuZGVySFRNTENhbnZhczo6Y2FudmFzU2l6ZUNoYW5n
ZWQoKQogewotICAgIEludFNpemUgY2FudmFzU2l6ZSA9IHN0YXRpY19jYXN0PEhUTUxDYW52YXNF
bGVtZW50Kj4obm9kZSgpKS0+c2l6ZSgpOworICAgIEludFNpemUgY2FudmFzU2l6ZSA9IHN0YXRp
Y19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4oZWxlbWVudCgpKS0+c2l6ZSgpOwogICAgIExheW91
dFNpemUgem9vbWVkU2l6ZShjYW52YXNTaXplLndpZHRoKCkgKiBzdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkgKiBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwog
CiAgICAgaWYgKHpvb21lZFNpemUgPT0gaW50cmluc2ljU2l6ZSgpKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5jcHAJKHJldmlzaW9uIDE1NTM2OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MSw3ICs4MSw3IEBAIExheW91dFVuaXQgUmVuZGVySUZyYW1lOjptYXhQcmVmZXJyZWRMb2cK
IAogYm9vbCBSZW5kZXJJRnJhbWU6OmlzU2VhbWxlc3MoKSBjb25zdAogewotICAgIHJldHVybiBu
b2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKGlmcmFtZVRhZykgJiYgdG9IVE1MSUZyYW1lRWxl
bWVudChub2RlKCkpLT5zaG91bGREaXNwbGF5U2VhbWxlc3NseSgpOworICAgIHJldHVybiBlbGVt
ZW50KCkgJiYgZWxlbWVudCgpLT5oYXNUYWdOYW1lKGlmcmFtZVRhZykgJiYgdG9IVE1MSUZyYW1l
RWxlbWVudChlbGVtZW50KCkpLT5zaG91bGREaXNwbGF5U2VhbWxlc3NseSgpOwogfQogCiBib29s
IFJlbmRlcklGcmFtZTo6cmVxdWlyZXNMYXllcigpIGNvbnN0CkBAIC05OSwxMSArOTksMTEgQEAg
UmVuZGVyVmlldyogUmVuZGVySUZyYW1lOjpjb250ZW50Um9vdFJlbgogCiBib29sIFJlbmRlcklG
cmFtZTo6ZmxhdHRlbkZyYW1lKCkgY29uc3QKIHsKLSAgICBpZiAoIW5vZGUoKSB8fCAhbm9kZSgp
LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpCisgICAgaWYgKCFlbGVtZW50KCkgfHwgIWVsZW1lbnQo
KS0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBI
VE1MSUZyYW1lRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTElGcmFtZUVsZW1lbnQobm9kZSgpKTsK
LSAgICBGcmFtZSogZnJhbWUgPSBlbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgSFRN
TElGcmFtZUVsZW1lbnQqIGlGcmFtZUVsZW1lbnQgPSB0b0hUTUxJRnJhbWVFbGVtZW50KGVsZW1l
bnQoKSk7CisgICAgRnJhbWUqIGZyYW1lID0gaUZyYW1lRWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFt
ZSgpOwogCiAgICAgaWYgKGlzU2VhbWxlc3MoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBT
ZWFtbGVzcyBpZnJhbWVzIGFyZSBhbHJlYWR5ICJmbGF0IiwgZG9uJ3QgdHJ5IHRvIGZsYXR0ZW4g
dGhlbS4KQEAgLTExNSw3ICsxMTUsNyBAQCBib29sIFJlbmRlcklGcmFtZTo6ZmxhdHRlbkZyYW1l
KCkgY29uc3QKIAogICAgIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgp
LT5oZWlnaHQoKS5pc0ZpeGVkKCkpIHsKICAgICAgICAgLy8gRG8gbm90IGZsYXR0ZW4gaWZyYW1l
cyB3aXRoIHNjcm9sbGluZz0ibm8iLgotICAgICAgICBpZiAoZWxlbWVudC0+c2Nyb2xsaW5nTW9k
ZSgpID09IFNjcm9sbGJhckFsd2F5c09mZikKKyAgICAgICAgaWYgKGlGcmFtZUVsZW1lbnQtPnNj
cm9sbGluZ01vZGUoKSA9PSBTY3JvbGxiYXJBbHdheXNPZmYpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIGlmIChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkgPD0gMCB8fCBzdHls
ZSgpLT5oZWlnaHQoKS52YWx1ZSgpIDw9IDApCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDE1
NTM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4MywxMCArMTgzLDEwIEBAIHZvaWQgUmVuZGVySW1hZ2U6OmltYWdlQ2hh
bmdlZChXcmFwcGVkSW0KICAgICAvLyBTZXQgaW1hZ2UgZGltZW5zaW9ucywgdGFraW5nIGludG8g
YWNjb3VudCB0aGUgc2l6ZSBvZiB0aGUgYWx0IHRleHQuCiAgICAgaWYgKG1faW1hZ2VSZXNvdXJj
ZS0+ZXJyb3JPY2N1cnJlZCgpKSB7CiAgICAgICAgIGlmICghbV9hbHRUZXh0LmlzRW1wdHkoKSAm
JiBkb2N1bWVudCgpLmhhc1BlbmRpbmdTdHlsZVJlY2FsYygpKSB7Ci0gICAgICAgICAgICBBU1NF
UlQobm9kZSgpKTsKLSAgICAgICAgICAgIGlmIChub2RlKCkpIHsKKyAgICAgICAgICAgIEFTU0VS
VChlbGVtZW50KCkpOworICAgICAgICAgICAgaWYgKGVsZW1lbnQoKSkgewogICAgICAgICAgICAg
ICAgIG1fbmVlZHNUb1NldFNpemVGb3JBbHRUZXh0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBu
b2RlKCktPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAg
ICAgICAgICAgIGVsZW1lbnQoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNo
YW5nZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAg
LTQ1OCw3ICs0NTgsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludEFyZWFFbGVtZW50Rm9jdXNS
CiAgICAgICAgIHJldHVybjsKIAogICAgIEhUTUxBcmVhRWxlbWVudCogYXJlYUVsZW1lbnQgPSB0
b0hUTUxBcmVhRWxlbWVudChmb2N1c2VkRWxlbWVudCk7Ci0gICAgaWYgKGFyZWFFbGVtZW50LT5p
bWFnZUVsZW1lbnQoKSAhPSBub2RlKCkpCisgICAgaWYgKGFyZWFFbGVtZW50LT5pbWFnZUVsZW1l
bnQoKSAhPSBlbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEV2ZW4gaWYgdGhl
IHRoZW1lIGhhbmRsZXMgZm9jdXMgcmluZyBkcmF3aW5nIGZvciBlbnRpcmUgZWxlbWVudHMsIGl0
IHdvbid0IGRvIGl0IGZvcgpAQCAtNDgyLDcgKzQ4Miw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBh
aW50QXJlYUVsZW1lbnRGb2N1c1IKIAogdm9pZCBSZW5kZXJJbWFnZTo6YXJlYUVsZW1lbnRGb2N1
c0NoYW5nZWQoSFRNTEFyZWFFbGVtZW50KiBlbGVtZW50KQogewotICAgIEFTU0VSVF9VTlVTRUQo
ZWxlbWVudCwgZWxlbWVudC0+aW1hZ2VFbGVtZW50KCkgPT0gbm9kZSgpKTsKKyAgICBBU1NFUlRf
VU5VU0VEKGVsZW1lbnQsIGVsZW1lbnQtPmltYWdlRWxlbWVudCgpID09IHRoaXMtPmVsZW1lbnQo
KSk7CiAKICAgICAvLyBJdCB3b3VsZCBiZSBtb3JlIGVmZmljaWVudCB0byBvbmx5IHJlcGFpbnQg
dGhlIGZvY3VzIHJpbmcgcmVjdGFuZ2xlCiAgICAgLy8gZm9yIHRoZSBwYXNzZWQtaW4gYXJlYSBl
bGVtZW50LiBUaGF0IHdvdWxkIHJlcXVpcmUgYWRkaW5nIGZ1bmN0aW9ucwpAQCAtNTAwLDcgKzUw
MCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3QoR3JhcGhpY3MKICAgICBpZiAo
IWltZyB8fCBpbWctPmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIVE1MSW1hZ2VF
bGVtZW50KiBpbWFnZUVsdCA9IChub2RlKCkgJiYgaXNIVE1MSW1hZ2VFbGVtZW50KG5vZGUoKSkp
ID8gdG9IVE1MSW1hZ2VFbGVtZW50KG5vZGUoKSkgOiAwOworICAgIEhUTUxJbWFnZUVsZW1lbnQq
IGltYWdlRWx0ID0gKGVsZW1lbnQoKSAmJiBpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCgpKSkg
PyB0b0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCgpKSA6IDA7CiAgICAgQ29tcG9zaXRlT3BlcmF0
b3IgY29tcG9zaXRlT3BlcmF0b3IgPSBpbWFnZUVsdCA/IGltYWdlRWx0LT5jb21wb3NpdGVPcGVy
YXRvcigpIDogQ29tcG9zaXRlU291cmNlT3ZlcjsKICAgICBJbWFnZSogaW1hZ2UgPSBtX2ltYWdl
UmVzb3VyY2UtPmltYWdlKCkuZ2V0KCk7CiAgICAgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGluZyA9
IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRleHQsIGltYWdlLCBpbWFnZSwgYWxpZ25lZFJl
Y3Quc2l6ZSgpKTsKQEAgLTU2Miw3ICs1NjIsNyBAQCBMYXlvdXRVbml0IFJlbmRlckltYWdlOjpt
aW5pbXVtUmVwbGFjZWRICiAKIEhUTUxNYXBFbGVtZW50KiBSZW5kZXJJbWFnZTo6aW1hZ2VNYXAo
KSBjb25zdAogewotICAgIEhUTUxJbWFnZUVsZW1lbnQqIGkgPSBub2RlKCkgJiYgaXNIVE1MSW1h
Z2VFbGVtZW50KG5vZGUoKSkgPyB0b0hUTUxJbWFnZUVsZW1lbnQobm9kZSgpKSA6IDA7CisgICAg
SFRNTEltYWdlRWxlbWVudCogaSA9IGVsZW1lbnQoKSAmJiBpc0hUTUxJbWFnZUVsZW1lbnQoZWxl
bWVudCgpKSA/IHRvSFRNTEltYWdlRWxlbWVudChlbGVtZW50KCkpIDogMDsKICAgICByZXR1cm4g
aSA/IGktPnRyZWVTY29wZSgpLT5nZXRJbWFnZU1hcChpLT5mYXN0R2V0QXR0cmlidXRlKHVzZW1h
cEF0dHIpKSA6IDA7CiB9CiAKQEAgLTU3MSw3ICs1NzEsNyBAQCBib29sIFJlbmRlckltYWdlOjpu
b2RlQXRQb2ludChjb25zdCBIaXRUCiAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3Vs
dC5oaXRUZXN0TG9jYXRpb24oKSk7CiAgICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJSZXBsYWNlZDo6
bm9kZUF0UG9pbnQocmVxdWVzdCwgdGVtcFJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNj
dW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pOwogCi0gICAgaWYgKHRlbXBSZXN1bHQuaW5u
ZXJOb2RlKCkgJiYgbm9kZSgpKSB7CisgICAgaWYgKHRlbXBSZXN1bHQuaW5uZXJOb2RlKCkgJiYg
ZWxlbWVudCgpKSB7CiAgICAgICAgIGlmIChIVE1MTWFwRWxlbWVudCogbWFwID0gaW1hZ2VNYXAo
KSkgewogICAgICAgICAgICAgTGF5b3V0UmVjdCBjb250ZW50Qm94ID0gY29udGVudEJveFJlY3Qo
KTsKICAgICAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMSAvIHN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKTsKQEAgLTU3OSw3ICs1NzksNyBAQCBib29sIFJlbmRlckltYWdlOjpub2RlQXRQb2lu
dChjb25zdCBIaXRUCiAgICAgICAgICAgICBtYXBMb2NhdGlvbi5zY2FsZShzY2FsZUZhY3Rvciwg
c2NhbGVGYWN0b3IpOwogCiAgICAgICAgICAgICBpZiAobWFwLT5tYXBNb3VzZUV2ZW50KG1hcExv
Y2F0aW9uLCBjb250ZW50Qm94LnNpemUoKSwgdGVtcFJlc3VsdCkpCi0gICAgICAgICAgICAgICAg
dGVtcFJlc3VsdC5zZXRJbm5lck5vblNoYXJlZE5vZGUobm9kZSgpKTsKKyAgICAgICAgICAgICAg
ICB0ZW1wUmVzdWx0LnNldElubmVyTm9uU2hhcmVkTm9kZShlbGVtZW50KCkpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC01OTIsMTMgKzU5MiwxMyBAQCBib29sIFJlbmRlckltYWdlOjpub2RlQXRQ
b2ludChjb25zdCBIaXRUCiAKIHZvaWQgUmVuZGVySW1hZ2U6OnVwZGF0ZUFsdFRleHQoKQogewot
ICAgIGlmICghbm9kZSgpKQorICAgIGlmICghZWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUoKSkpCi0gICAgICAgIG1fYWx0VGV4dCA9
IHRvSFRNTElucHV0RWxlbWVudChub2RlKCkpLT5hbHRUZXh0KCk7Ci0gICAgZWxzZSBpZiAoaXNI
VE1MSW1hZ2VFbGVtZW50KG5vZGUoKSkpCi0gICAgICAgIG1fYWx0VGV4dCA9IHRvSFRNTEltYWdl
RWxlbWVudChub2RlKCkpLT5hbHRUZXh0KCk7CisgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChl
bGVtZW50KCkpKQorICAgICAgICBtX2FsdFRleHQgPSB0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVu
dCgpKS0+YWx0VGV4dCgpOworICAgIGVsc2UgaWYgKGlzSFRNTEltYWdlRWxlbWVudChlbGVtZW50
KCkpKQorICAgICAgICBtX2FsdFRleHQgPSB0b0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCgpKS0+
YWx0VGV4dCgpOwogfQogCiB2b2lkIFJlbmRlckltYWdlOjpsYXlvdXQoKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDE1NTM2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzQsNyArMzM0LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmFkZENoaWxkSWdub3JpbmdD
b250aQogCiBSZW5kZXJJbmxpbmUqIFJlbmRlcklubGluZTo6Y2xvbmUoKSBjb25zdAogewotICAg
IFJlbmRlcklubGluZSogY2xvbmVJbmxpbmUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlcklu
bGluZShub2RlKCkpOworICAgIFJlbmRlcklubGluZSogY2xvbmVJbmxpbmUgPSBuZXcgKHJlbmRl
ckFyZW5hKCkpIFJlbmRlcklubGluZShlbGVtZW50KCkpOwogICAgIGNsb25lSW5saW5lLT5zZXRT
dHlsZShzdHlsZSgpKTsKICAgICBjbG9uZUlubGluZS0+c2V0Rmxvd1RocmVhZFN0YXRlKGZsb3dU
aHJlYWRTdGF0ZSgpKTsKICAgICByZXR1cm4gY2xvbmVJbmxpbmU7CkBAIC04MDIsNyArODAyLDcg
QEAgYm9vbCBSZW5kZXJJbmxpbmU6OmhpdFRlc3RDdWxsZWRJbmxpbmUoYwogICAgICAgICB1cGRh
dGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG1wTG9jYXRpb24ucG9pbnQoKSk7CiAgICAgICAgIC8v
IFdlIGNhbiBub3QgdXNlIGFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQgdG8gZGV0ZXJtaW5l
IGlmIHdlIGZ1bGx5IGVuY2xvc2UgdGhlIGhpdC10ZXN0IGFyZWEKICAgICAgICAgLy8gYmVjYXVz
ZSBpdCBjYW4gb25seSBoYW5kbGUgcmVjdGFuZ3VsYXIgdGFyZ2V0cy4KLSAgICAgICAgcmVzdWx0
LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCByZXF1ZXN0LCBsb2NhdGlvbklu
Q29udGFpbmVyKTsKKyAgICAgICAgcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQo
ZWxlbWVudCgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyKTsKICAgICAgICAgcmV0dXJu
IHJlZ2lvblJlc3VsdC5jb250YWlucyh0bXBMb2NhdGlvbi5ib3VuZGluZ0JveCgpKTsKICAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI1MCwyMiArMTI1MCwyMSBAQCB2b2lkIFJlbmRlcklu
bGluZTo6dXBkYXRlSGl0VGVzdFJlc3VsdChICiAgICAgaWYgKHJlc3VsdC5pbm5lck5vZGUoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgTm9kZSogbiA9IG5vZGUoKTsKICAgICBMYXlvdXRQb2lu
dCBsb2NhbFBvaW50KHBvaW50KTsKLSAgICBpZiAobikgeworICAgIGlmIChFbGVtZW50KiBlbGVt
ZW50ID0gdGhpcy0+ZWxlbWVudCgpKSB7CiAgICAgICAgIGlmIChpc0lubGluZUVsZW1lbnRDb250
aW51YXRpb24oKSkgewogICAgICAgICAgICAgLy8gV2UncmUgaW4gdGhlIGNvbnRpbnVhdGlvbiBv
ZiBhIHNwbGl0IGlubGluZS4gIEFkanVzdCBvdXIgbG9jYWwgcG9pbnQgdG8gYmUgaW4gdGhlIGNv
b3JkaW5hdGUgc3BhY2UKICAgICAgICAgICAgIC8vIG9mIHRoZSBwcmluY2lwYWwgcmVuZGVyZXIn
cyBjb250YWluaW5nIGJsb2NrLiAgVGhpcyB3aWxsIGVuZCB1cCBiZWluZyB0aGUgaW5uZXJOb25T
aGFyZWROb2RlLgotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGZpcnN0QmxvY2sgPSBuLT5yZW5k
ZXJlcigpLT5jb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgICAgIFJlbmRlckJsb2NrKiBmaXJz
dEJsb2NrID0gZWxlbWVudC0+cmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIC8vIEdldCBvdXIgY29udGFpbmluZyBibG9jay4KICAgICAgICAg
ICAgIFJlbmRlckJveCogYmxvY2sgPSBjb250YWluaW5nQmxvY2soKTsKICAgICAgICAgICAgIGxv
Y2FsUG9pbnQubW92ZUJ5KGJsb2NrLT5sb2NhdGlvbigpIC0gZmlyc3RCbG9jay0+bG9jYXRpb25P
ZmZzZXQoKSk7CiAgICAgICAgIH0KIAotICAgICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKG4pOwor
ICAgICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKGVsZW1lbnQpOwogICAgICAgICBpZiAoIXJlc3Vs
dC5pbm5lck5vblNoYXJlZE5vZGUoKSkKLSAgICAgICAgICAgIHJlc3VsdC5zZXRJbm5lck5vblNo
YXJlZE5vZGUobik7CisgICAgICAgICAgICByZXN1bHQuc2V0SW5uZXJOb25TaGFyZWROb2RlKGVs
ZW1lbnQpOwogICAgICAgICByZXN1bHQuc2V0TG9jYWxQb2ludChsb2NhbFBvaW50KTsKICAgICB9
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCShyZXZpc2lv
biAxNTUzNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hp
bGQgPSAwKTsKIAotICAgIEVsZW1lbnQqIG5vZGUoKSBjb25zdCB7IHJldHVybiB0b0VsZW1lbnQo
UmVuZGVyQm94TW9kZWxPYmplY3Q6Om5vZGUoKSk7IH0KLQogICAgIHZpcnR1YWwgTGF5b3V0VW5p
dCBtYXJnaW5MZWZ0KCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CiAgICAgdmlydHVhbCBMYXlvdXRV
bml0IG1hcmdpblJpZ2h0KCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CiAgICAgdmlydHVhbCBMYXlv
dXRVbml0IG1hcmdpblRvcCgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAxNTUzNjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjEsMTAgKzIyMSw4IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGUK
ICAgICAgICAgbV9oYXNWaXNpYmxlQ29udGVudCA9IHJlbmRlcmVyKCkuc3R5bGUoKS0+dmlzaWJp
bGl0eSgpID09IFZJU0lCTEU7CiAgICAgfQogCi0gICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyKCku
bm9kZSgpOwotICAgIGlmIChub2RlICYmIG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgeworICAgIGlm
IChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpIHsKICAgICAgICAgLy8g
V2Ugc2F2ZSBhbmQgcmVzdG9yZSBvbmx5IHRoZSBzY3JvbGxPZmZzZXQgYXMgdGhlIG90aGVyIHNj
cm9sbCB2YWx1ZXMgYXJlIHJlY2FsY3VsYXRlZC4KLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9
IHRvRWxlbWVudChub2RlKTsKICAgICAgICAgbV9zY3JvbGxPZmZzZXQgPSBlbGVtZW50LT5zYXZl
ZExheWVyU2Nyb2xsT2Zmc2V0KCk7CiAgICAgICAgIGlmICghbV9zY3JvbGxPZmZzZXQuaXNaZXJv
KCkpCiAgICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLT5zZXRDdXJyZW50UG9zaXRpb24oRmxv
YXRQb2ludChtX3Njcm9sbE9mZnNldC53aWR0aCgpLCBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSkp
OwpAQCAtMjQwLDkgKzIzOCw4IEBAIFJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIoKQogICAgIHJl
bmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwog
CiAgICAgaWYgKCFyZW5kZXJlcigpLmRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSkgewotICAgICAg
ICBOb2RlKiBub2RlID0gcmVuZGVyZXIoKS5ub2RlKCk7Ci0gICAgICAgIGlmIChub2RlICYmIG5v
ZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgIHRvRWxlbWVudChub2RlKS0+c2V0U2F2
ZWRMYXllclNjcm9sbE9mZnNldChtX3Njcm9sbE9mZnNldCk7CisgICAgICAgIGlmIChFbGVtZW50
KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpCisgICAgICAgICAgICBlbGVtZW50LT5z
ZXRTYXZlZExheWVyU2Nyb2xsT2Zmc2V0KG1fc2Nyb2xsT2Zmc2V0KTsKICAgICB9CiAKICAgICBk
ZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwpAQCAtMjc4LDcgKzI3NSw3IEBA
IFN0cmluZyBSZW5kZXJMYXllcjo6bmFtZSgpIGNvbnN0CiAgICAgU3RyaW5nQnVpbGRlciBuYW1l
OwogICAgIG5hbWUuYXBwZW5kKHJlbmRlcmVyKCkucmVuZGVyTmFtZSgpKTsKIAotICAgIGlmIChF
bGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5ub2RlKCkgJiYgcmVuZGVyZXIoKS5ub2RlKCkt
PmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVudChyZW5kZXJlcigpLm5vZGUoKSkgOiAwKSB7Cisg
ICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkgewogICAgICAg
ICBuYW1lLmFwcGVuZCgnICcpOwogICAgICAgICBuYW1lLmFwcGVuZChlbGVtZW50LT50YWdOYW1l
KCkpOwogCkBAIC0xNTc5LDcgKzE1NzYsNyBAQCBib29sIFJlbmRlckxheWVyOjpjYW5ub3RCbGl0
VG9XaW5kb3coKSBjCiBib29sIFJlbmRlckxheWVyOjppc1RyYW5zcGFyZW50KCkgY29uc3QKIHsK
ICNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChyZW5kZXJlcigpLm5vZGUoKSAmJiByZW5kZXJlcigp
Lm5vZGUoKS0+bmFtZXNwYWNlVVJJKCkgPT0gU1ZHTmFtZXM6OnN2Z05hbWVzcGFjZVVSSSkKKyAg
ICBpZiAocmVuZGVyZXIoKS5lbGVtZW50KCkgJiYgcmVuZGVyZXIoKS5lbGVtZW50KCktPm5hbWVz
cGFjZVVSSSgpID09IFNWR05hbWVzOjpzdmdOYW1lc3BhY2VVUkkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICNlbmRpZgogICAgIHJldHVybiByZW5kZXJlcigpLmlzVHJhbnNwYXJlbnQoKSB8fCBy
ZW5kZXJlcigpLmhhc01hc2soKTsKQEAgLTIyNjIsOCArMjI1OSw4IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnNjcm9sbFRvKGludCB4LCBpbnQgeSkKICAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50VXNp
bmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgcGl4ZWxTbmFwcGVkSW50UmVjdChtX3JlcGFp
bnRSZWN0KSk7CiAKICAgICAvLyBTY2hlZHVsZSB0aGUgc2Nyb2xsIERPTSBldmVudC4KLSAgICBp
ZiAoTm9kZSogbm9kZSA9IHJlbmRlcmVyKCkubm9kZSgpKQotICAgICAgICBub2RlLT5kb2N1bWVu
dCgpLmV2ZW50UXVldWUoKS5lbnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2ZW50KCpub2RlKTsKKyAg
ICBpZiAoTm9kZSogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQorICAgICAgICBlbGVt
ZW50LT5kb2N1bWVudCgpLmV2ZW50UXVldWUoKS5lbnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2ZW50
KCplbGVtZW50KTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU2Nyb2xsTGF5
ZXIoJmZyYW1lKTsKICAgICBpZiAoc2Nyb2xsc092ZXJmbG93KCkpCkBAIC0yNDgyLDExICsyNDc5
LDEyIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmNhblJlc2l6ZSgpIGNvbnN0CiB2b2lkIFJlbmRlckxh
eWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQsIGNvbnN0IExheW91dFNp
emUmIG9sZE9mZnNldCkKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcG9zc2libGUg
b24gZ2VuZXJhdGVkIGNvbnRlbnQgYnV0IGlzIG5vdCByaWdodCBub3cuCi0gICAgaWYgKCFpblJl
c2l6ZU1vZGUoKSB8fCAhY2FuUmVzaXplKCkgfHwgIXJlbmRlcmVyKCkubm9kZSgpKQorICAgIGlm
ICghaW5SZXNpemVNb2RlKCkgfHwgIWNhblJlc2l6ZSgpIHx8ICFyZW5kZXJlcigpLmVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKHJlbmRlcmVyKCkubm9kZSgpLT5pc0Vs
ZW1lbnROb2RlKCkpOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQocmVuZGVyZXIo
KS5ub2RlKCkpOworICAgIC8vIEZJWE1FOiBUaGUgb25seSBjYXNlIHdoZXJlIHJlbmRlcmVyLT5l
bGVtZW50KCktPnJlbmRlcmVyKCkgIT0gcmVuZGVyZXIgaXMgd2l0aCBjb250aW51YXRpb25zLiBE
byB0aGV5IG1hdHRlciBoZXJlPworICAgIC8vIElmIHRoZXkgZG8gaXQgd291bGQgc3RpbGwgYmUg
YmV0dGVyIHRvIGRlYWwgd2l0aCB0aGVtIGV4cGxpY2l0bHkuCisgICAgRWxlbWVudCogZWxlbWVu
dCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpOwogICAgIFJlbmRlckJveCogcmVuZGVyZXIgPSB0b1Jl
bmRlckJveChlbGVtZW50LT5yZW5kZXJlcigpKTsKIAogICAgIERvY3VtZW50JiBkb2N1bWVudCA9
IGVsZW1lbnQtPmRvY3VtZW50KCk7CkBAIC02NDgwLDcgKzY0NzgsNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVPclJlbW92ZUZpbHRlckVmCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OmZpbHRlck5l
ZWRzUmVwYWludCgpCiB7Ci0gICAgcmVuZGVyZXIoKS5ub2RlKCktPnNldE5lZWRzU3R5bGVSZWNh
bGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgIHJlbmRlcmVyKCkuZWxlbWVudCgpLT5zZXRO
ZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKICAgICByZW5kZXJlcigpLnJl
cGFpbnQoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDE1NTM3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsNyAr
MzEzLDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmNyZWF0ZVByaW1hcnlHcgogCiAjaWYg
UExBVEZPUk0oTUFDKSAmJiBVU0UoQ0EpCiAgICAgaWYgKCFjb21wb3NpdG9yKCkuYWNjZWxlcmF0
ZWREcmF3aW5nRW5hYmxlZCgpICYmIHJlbmRlcmVyKCkuaXNDYW52YXMoKSkgewotICAgICAgICBj
b25zdCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gdG9IVE1MQ2FudmFzRWxlbWVudChyZW5k
ZXJlcigpLm5vZGUoKSk7CisgICAgICAgIGNvbnN0IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMg
PSB0b0hUTUxDYW52YXNFbGVtZW50KHJlbmRlcmVyKCkuZWxlbWVudCgpKTsKICAgICAgICAgaWYg
KGNhbnZhcy0+c2hvdWxkQWNjZWxlcmF0ZShjYW52YXMtPnNpemUoKSkpCiAgICAgICAgICAgICBt
X2dyYXBoaWNzTGF5ZXItPnNldEFjY2VsZXJhdGVzRHJhd2luZyh0cnVlKTsKICAgICB9CkBAIC01
NTYsMTMgKzU1NiwxMyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NM
CiAgICAgfQogI2lmIEVOQUJMRShWSURFTykKICAgICBlbHNlIGlmIChyZW5kZXJlcigpLmlzVmlk
ZW8oKSkgewotICAgICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b0hUTUxN
ZWRpYUVsZW1lbnQocmVuZGVyZXIoKS5ub2RlKCkpOworICAgICAgICBIVE1MTWVkaWFFbGVtZW50
KiBtZWRpYUVsZW1lbnQgPSB0b0hUTUxNZWRpYUVsZW1lbnQocmVuZGVyZXIoKS5lbGVtZW50KCkp
OwogICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShtZWRpYUVsZW1l
bnQtPnBsYXRmb3JtTGF5ZXIoKSk7CiAgICAgfQogI2VuZGlmCiAjaWYgRU5BQkxFKFdFQkdMKSB8
fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGVsc2UgaWYgKGlzQWNjZWxlcmF0
ZWRDYW52YXMoJnJlbmRlcmVyKCkpKSB7Ci0gICAgICAgIGNvbnN0IEhUTUxDYW52YXNFbGVtZW50
KiBjYW52YXMgPSB0b0hUTUxDYW52YXNFbGVtZW50KHJlbmRlcmVyKCkubm9kZSgpKTsKKyAgICAg
ICAgY29uc3QgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IHRvSFRNTENhbnZhc0VsZW1lbnQo
cmVuZGVyZXIoKS5lbGVtZW50KCkpOwogICAgICAgICBpZiAoQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpKQogICAgICAgICAgICAgbV9n
cmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvQ2FudmFzKGNvbnRleHQtPnBsYXRmb3JtTGF5ZXIo
KSk7CiAgICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNp
b24gMTU1MzY5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDksMTAgKzE0MDksMTAgQEAgU3RyaW5nIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJUcmVlQQogCiBSZW5kZXJMYXllckNvbXBvc2l0b3Iq
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZnJhbWVDb250ZW50c0NvbXBvc2l0b3IoUmVuZGVyUGFy
dCogcmVuZGVyZXIpCiB7Ci0gICAgaWYgKCFyZW5kZXJlci0+bm9kZSgpLT5pc0ZyYW1lT3duZXJF
bGVtZW50KCkpCisgICAgaWYgKCFyZW5kZXJlci0+ZWxlbWVudCgpLT5pc0ZyYW1lT3duZXJFbGVt
ZW50KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKLSAgICBIVE1MRnJhbWVPd25lckVs
ZW1lbnQqIGVsZW1lbnQgPSB0b0ZyYW1lT3duZXJFbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpOwor
ICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogZWxlbWVudCA9IHRvRnJhbWVPd25lckVsZW1lbnQo
cmVuZGVyZXItPmVsZW1lbnQoKSk7CiAgICAgaWYgKERvY3VtZW50KiBjb250ZW50RG9jdW1lbnQg
PSBlbGVtZW50LT5jb250ZW50RG9jdW1lbnQoKSkgewogICAgICAgICBpZiAoUmVuZGVyVmlldyog
dmlldyA9IGNvbnRlbnREb2N1bWVudC0+cmVuZGVyVmlldygpKQogICAgICAgICAgICAgcmV0dXJu
ICZ2aWV3LT5jb21wb3NpdG9yKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcAkocmV2aXNpb24gMTU1MzY5KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpGaWx0ZXJJbmZvOjpz
ZXRSZW5kZXJlCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OkZpbHRlckluZm86Om5vdGlmeUZpbmlzaGVk
KENhY2hlZFJlc291cmNlKikKIHsKLSAgICBtX2xheWVyLnJlbmRlcmVyKCkubm9kZSgpLT5zZXRO
ZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICBtX2xheWVyLnJlbmRl
cmVyKCkuZWxlbWVudCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdl
KTsKICAgICBtX2xheWVyLnJlbmRlcmVyKCkucmVwYWludCgpOwogfQogCkBAIC0xMjQsNyArMTI0
LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6RmlsdGVySW5mbzo6dXBkYXRlUmVmZQogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgLy8gUmVmZXJlbmNlIGlzIGludGVybmFsOyBhZGQgbGF5ZXIg
YXMgYSBjbGllbnQgc28gd2UgY2FuIHRyaWdnZXIKICAgICAgICAgICAgIC8vIGZpbHRlciByZXBh
aW50IG9uIFNWRyBhdHRyaWJ1dGUgY2hhbmdlLgotICAgICAgICAgICAgRWxlbWVudCogZmlsdGVy
ID0gbV9sYXllci5yZW5kZXJlcigpLm5vZGUoKS0+ZG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJZChy
ZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24tPmZyYWdtZW50KCkpOworICAgICAgICAgICAgRWxlbWVu
dCogZmlsdGVyID0gbV9sYXllci5yZW5kZXJlcigpLmVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5nZXRF
bGVtZW50QnlJZChyZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24tPmZyYWdtZW50KCkpOwogICAgICAg
ICAgICAgaWYgKCFmaWx0ZXIgfHwgIWZpbHRlci0+cmVuZGVyZXIoKSB8fCAhZmlsdGVyLT5yZW5k
ZXJlcigpLT5pc1NWR1Jlc291cmNlRmlsdGVyKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBmaWx0ZXItPnJlbmRlcmVyKCktPnRvUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIoKS0+YWRkQ2xpZW50UmVuZGVyTGF5ZXIoJm1fbGF5ZXIpOwpAQCAtMTUzLDcgKzE1Myw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OkZpbHRlckluZm86OnJlbW92ZVJlZmUKIAogdm9pZCBSZW5k
ZXJMYXllcjo6RmlsdGVySW5mbzo6bm90aWZ5Q3VzdG9tRmlsdGVyUHJvZ3JhbUxvYWRlZChDdXN0
b21GaWx0ZXJQcm9ncmFtKikKIHsKLSAgICBtX2xheWVyLnJlbmRlcmVyKCkubm9kZSgpLT5zZXRO
ZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICBtX2xheWVyLnJlbmRl
cmVyKCkuZWxlbWVudCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdl
KTsKICAgICBtX2xheWVyLnJlbmRlcmVyKCkucmVwYWludCgpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCShy
ZXZpc2lvbiAxNTUzNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAgYm9vbCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0OjpzX2hhZExheWVyIAogYm9vbCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0OjpzX2hhZFRyYW5zZm9ybSA9IGZhbHNlOwogYm9vbCBSZW5kZXJMYXllck1vZGVsT2JqZWN0
OjpzX2xheWVyV2FzU2VsZlBhaW50aW5nID0gZmFsc2U7CiAKLVJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q6OlJlbmRlckxheWVyTW9kZWxPYmplY3QoQ29udGFpbmVyTm9kZSogbm9kZSkKLSAgICA6IFJl
bmRlck9iamVjdChub2RlKQorUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6UmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdChFbGVtZW50KiBlbGVtZW50KQorICAgIDogUmVuZGVyT2JqZWN0KGVsZW1lbnQpCiAg
ICAgLCBtX2xheWVyKDApCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgJKHJldmlzaW9uIDE1NTM2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDcgKzMxLDcgQEAgY2xhc3MgUmVuZGVyTGF5ZXI7CiAKIGNsYXNzIFJlbmRlckxh
eWVyTW9kZWxPYmplY3QgOiBwdWJsaWMgUmVuZGVyT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBleHBs
aWNpdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KENvbnRhaW5lck5vZGUqKTsKKyAgICBleHBsaWNp
dCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJM
YXllck1vZGVsT2JqZWN0KCk7CiAKICAgICAvLyBDYWxsZWQgYnkgUmVuZGVyT2JqZWN0Ojp3aWxs
QmVEZXN0cm95ZWQoKSBhbmQgaXMgdGhlIG9ubHkgd2F5IGxheWVycyBzaG91bGQgZXZlciBiZSBk
ZXN0cm95ZWQKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBiYWNr
Z3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBUaGlzIGlzIG51bGwgZm9yIGFub255bW91cyByZW5k
ZXJlcnMuCi0gICAgQ29udGFpbmVyTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRvQ29udGFp
bmVyTm9kZShSZW5kZXJPYmplY3Q6Om5vZGUoKSk7IH0KKyAgICBFbGVtZW50KiBlbGVtZW50KCkg
Y29uc3QgeyByZXR1cm4gdG9FbGVtZW50KFJlbmRlck9iamVjdDo6bm9kZSgpKTsgfQogCiBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBlbnN1cmVMYXllcigpOwpAQCAtNjIsNiArNjIsOCBAQCBwcm90ZWN0
ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0xheWVyTW9kZWxPYmplY3QoKSBjb25z
dCBPVkVSUklERSBGSU5BTCB7IHJldHVybiB0cnVlOyB9CiAKKyAgICB2b2lkIG5vZGUoKSBjb25z
dCBXVEZfREVMRVRFRF9GVU5DVElPTjsKKwogICAgIFJlbmRlckxheWVyKiBtX2xheWVyOwogCiAg
ICAgLy8gVXNlZCB0byBzdG9yZSBzdGF0ZSBiZXR3ZWVuIHN0eWxlV2lsbENoYW5nZSBhbmQgc3R5
bGVEaWRDaGFuZ2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAJKHJldmlzaW9uIDE1NTM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIFJlbmRlckxp
c3RCb3g6On5SZW5kZXJMaXN0Qm94KCkKIAogaW5saW5lIEhUTUxTZWxlY3RFbGVtZW50KiBSZW5k
ZXJMaXN0Qm94OjpzZWxlY3RFbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MU2Vs
ZWN0RWxlbWVudChub2RlKCkpOworICAgIHJldHVybiB0b0hUTUxTZWxlY3RFbGVtZW50KGVsZW1l
bnQoKSk7CiB9CiAKIHZvaWQgUmVuZGVyTGlzdEJveDo6dXBkYXRlRnJvbUVsZW1lbnQoKQpAQCAt
MzkxLDkgKzM5MSw5IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCgK
ICAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gc2VsZWN0RWxlbWVudCgpOwogCiAgICAg
Y29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdC0+bGlzdEl0ZW1z
KCk7Ci0gICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKKyAg
ICBIVE1MRWxlbWVudCogbGlzdEl0ZW1FbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRleF07CiAK
LSAgICBSZW5kZXJTdHlsZSogaXRlbVN0eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAg
ICBSZW5kZXJTdHlsZSogaXRlbVN0eWxlID0gbGlzdEl0ZW1FbGVtZW50LT5yZW5kZXJTdHlsZSgp
OwogICAgIGlmICghaXRlbVN0eWxlKQogICAgICAgICBpdGVtU3R5bGUgPSBzdHlsZSgpOwogCkBA
IC00MDEsMTkgKzQwMSwxOSBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91
bmQoCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBpdGVtVGV4dDsKLSAgICBib29sIGlz
T3B0aW9uRWxlbWVudCA9IGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCk7CisgICAgYm9vbCBp
c09wdGlvbkVsZW1lbnQgPSBpc0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtRWxlbWVudCk7CiAg
ICAgaWYgKGlzT3B0aW9uRWxlbWVudCkKLSAgICAgICAgaXRlbVRleHQgPSB0b0hUTUxPcHRpb25F
bGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7Ci0gICAg
ZWxzZSBpZiAoaXNIVE1MT3B0R3JvdXBFbGVtZW50KGVsZW1lbnQpKQotICAgICAgICBpdGVtVGV4
dCA9IHRvSFRNTE9wdEdyb3VwRWxlbWVudChlbGVtZW50KS0+Z3JvdXBMYWJlbFRleHQoKTsKKyAg
ICAgICAgaXRlbVRleHQgPSB0b0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtRWxlbWVudCktPnRl
eHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKKyAgICBlbHNlIGlmIChpc0hUTUxPcHRH
cm91cEVsZW1lbnQobGlzdEl0ZW1FbGVtZW50KSkKKyAgICAgICAgaXRlbVRleHQgPSB0b0hUTUxP
cHRHcm91cEVsZW1lbnQobGlzdEl0ZW1FbGVtZW50KS0+Z3JvdXBMYWJlbFRleHQoKTsKICAgICBh
cHBseVRleHRUcmFuc2Zvcm0oc3R5bGUoKSwgaXRlbVRleHQsICcgJyk7CiAKLSAgICBDb2xvciB0
ZXh0Q29sb3IgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpID8gZWxlbWVudC0+cmVuZGVyU3R5bGUo
KS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpIDogc3R5bGUoKS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwotICAgIGlmIChpc09wdGlvbkVs
ZW1lbnQgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0ZWQoKSkgewotICAg
ICAgICBpZiAoZnJhbWUoKS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1
bWVudCgpLmZvY3VzZWRFbGVtZW50KCkgPT0gbm9kZSgpKQorICAgIENvbG9yIHRleHRDb2xvciA9
IGxpc3RJdGVtRWxlbWVudC0+cmVuZGVyU3R5bGUoKSA/IGxpc3RJdGVtRWxlbWVudC0+cmVuZGVy
U3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpIDogc3R5bGUo
KS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOworICAgIGlmIChpc09w
dGlvbkVsZW1lbnQgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChsaXN0SXRlbUVsZW1lbnQpLT5zZWxl
Y3RlZCgpKSB7CisgICAgICAgIGlmIChmcmFtZSgpLnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFj
dGl2ZSgpICYmIGRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKSA9PSBlbGVtZW50KCkpCiAgICAg
ICAgICAgICB0ZXh0Q29sb3IgPSB0aGVtZSgpLT5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yKCk7CiAgICAgICAgIC8vIEhvbm9yIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIGZvciBk
aXNhYmxlZCBpdGVtcwotICAgICAgICBlbHNlIGlmICghZWxlbWVudC0+aXNEaXNhYmxlZEZvcm1D
b250cm9sKCkgJiYgIXNlbGVjdC0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkpCisgICAgICAgIGVs
c2UgaWYgKCFsaXN0SXRlbUVsZW1lbnQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpICYmICFzZWxl
Y3QtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQogICAgICAgICAgICAgdGV4dENvbG9yID0gdGhl
bWUoKS0+aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7CiAgICAgfQog
CkBAIC00MjUsNyArNDI1LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1Gb3JlZ3Jv
dW5kKAogICAgIExheW91dFJlY3QgciA9IGl0ZW1Cb3VuZGluZ0JveFJlY3QocGFpbnRPZmZzZXQs
IGxpc3RJbmRleCk7CiAgICAgci5tb3ZlKGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQodGV4dFJ1biwg
aXRlbVN0eWxlLCBpdGVtRm9udCwgcikpOwogCi0gICAgaWYgKGlzSFRNTE9wdEdyb3VwRWxlbWVu
dChlbGVtZW50KSkgeworICAgIGlmIChpc0hUTUxPcHRHcm91cEVsZW1lbnQobGlzdEl0ZW1FbGVt
ZW50KSkgewogICAgICAgICBGb250RGVzY3JpcHRpb24gZCA9IGl0ZW1Gb250LmZvbnREZXNjcmlw
dGlvbigpOwogICAgICAgICBkLnNldFdlaWdodChkLmJvbGRlcldlaWdodCgpKTsKICAgICAgICAg
aXRlbUZvbnQgPSBGb250KGQsIGl0ZW1Gb250LmxldHRlclNwYWNpbmcoKSwgaXRlbUZvbnQud29y
ZFNwYWNpbmcoKSk7CkBAIC00MzksMjAgKzQzOSwyMCBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBh
aW50SXRlbUZvcmVncm91bmQoCiB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUJhY2tncm91
bmQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwg
aW50IGxpc3RJbmRleCkKIHsKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0
ZW1zID0gc2VsZWN0RWxlbWVudCgpLT5saXN0SXRlbXMoKTsKLSAgICBIVE1MRWxlbWVudCogZWxl
bWVudCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOworICAgIEhUTUxFbGVtZW50KiBsaXN0SXRlbUVs
ZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKIAogICAgIENvbG9yIGJhY2tDb2xvcjsKLSAg
ICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSAmJiB0b0hUTUxPcHRpb25FbGVtZW50
KGVsZW1lbnQpLT5zZWxlY3RlZCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZSgpLnNlbGVjdGlvbigp
LmlzRm9jdXNlZEFuZEFjdGl2ZSgpICYmIGRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKSA9PSBu
b2RlKCkpCisgICAgaWYgKGlzSFRNTE9wdGlvbkVsZW1lbnQobGlzdEl0ZW1FbGVtZW50KSAmJiB0
b0hUTUxPcHRpb25FbGVtZW50KGxpc3RJdGVtRWxlbWVudCktPnNlbGVjdGVkKCkpIHsKKyAgICAg
ICAgaWYgKGZyYW1lKCkuc2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkgJiYgZG9jdW1l
bnQoKS5mb2N1c2VkRWxlbWVudCgpID09IGVsZW1lbnQoKSkKICAgICAgICAgICAgIGJhY2tDb2xv
ciA9IHRoZW1lKCktPmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgYmFja0NvbG9yID0gdGhlbWUoKS0+aW5hY3RpdmVMaXN0
Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGJhY2tD
b2xvciA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgPyBlbGVtZW50LT5yZW5kZXJTdHlsZSgpLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpIDogc3R5bGUo
KS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKKyAg
ICAgICAgYmFja0NvbG9yID0gbGlzdEl0ZW1FbGVtZW50LT5yZW5kZXJTdHlsZSgpID8gbGlzdEl0
ZW1FbGVtZW50LT5yZW5kZXJTdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kQ29sb3IpIDogc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yKTsKIAogICAgIC8vIERyYXcgdGhlIGJhY2tncm91bmQgZm9y
IHRoaXMgbGlzdCBib3ggaXRlbQotICAgIGlmICghZWxlbWVudC0+cmVuZGVyU3R5bGUoKSB8fCBl
bGVtZW50LT5yZW5kZXJTdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gSElEREVOKSB7Ci0gICAgICAg
IENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgPyBlbGVtZW50
LT5yZW5kZXJTdHlsZSgpLT5jb2xvclNwYWNlKCkgOiBzdHlsZSgpLT5jb2xvclNwYWNlKCk7Cisg
ICAgaWYgKCFsaXN0SXRlbUVsZW1lbnQtPnJlbmRlclN0eWxlKCkgfHwgbGlzdEl0ZW1FbGVtZW50
LT5yZW5kZXJTdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gSElEREVOKSB7CisgICAgICAgIENvbG9y
U3BhY2UgY29sb3JTcGFjZSA9IGxpc3RJdGVtRWxlbWVudC0+cmVuZGVyU3R5bGUoKSA/IGxpc3RJ
dGVtRWxlbWVudC0+cmVuZGVyU3R5bGUoKS0+Y29sb3JTcGFjZSgpIDogc3R5bGUoKS0+Y29sb3JT
cGFjZSgpOwogICAgICAgICBMYXlvdXRSZWN0IGl0ZW1SZWN0ID0gaXRlbUJvdW5kaW5nQm94UmVj
dChwYWludE9mZnNldCwgbGlzdEluZGV4KTsKICAgICAgICAgaXRlbVJlY3QuaW50ZXJzZWN0KGNv
bnRyb2xDbGlwUmVjdChwYWludE9mZnNldCkpOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+
ZmlsbFJlY3QocGl4ZWxTbmFwcGVkSW50UmVjdChpdGVtUmVjdCksIGJhY2tDb2xvciwgY29sb3JT
cGFjZSk7CkBAIC02NDUsNyArNjQ1LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxUbyhp
bnQgbmV3T2ZmcwogCiAgICAgbV9pbmRleE9mZnNldCA9IG5ld09mZnNldDsKICAgICByZXBhaW50
KCk7Ci0gICAgbm9kZSgpLT5kb2N1bWVudCgpLmV2ZW50UXVldWUoKS5lbnF1ZXVlT3JEaXNwYXRj
aFNjcm9sbEV2ZW50KCpub2RlKCkpOworICAgIGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5ldmVudFF1
ZXVlKCkuZW5xdWV1ZU9yRGlzcGF0Y2hTY3JvbGxFdmVudCgqZWxlbWVudCgpKTsKIH0KIAogTGF5
b3V0VW5pdCBSZW5kZXJMaXN0Qm94OjppdGVtSGVpZ2h0KCkgY29uc3QKQEAgLTgzMCw3ICs4MzAs
NyBAQCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyTGlzdEJveDo6Y3JlCiAgICAgUmVmUHRy
PFNjcm9sbGJhcj4gd2lkZ2V0OwogICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBz
dHlsZSgpLT5oYXNQc2V1ZG9TdHlsZShTQ1JPTExCQVIpOwogICAgIGlmIChoYXNDdXN0b21TY3Jv
bGxiYXJTdHlsZSkKLSAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0
b21TY3JvbGxiYXIodGhpcywgVmVydGljYWxTY3JvbGxiYXIsIHRoaXMtPm5vZGUoKSk7CisgICAg
ICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMs
IFZlcnRpY2FsU2Nyb2xsYmFyLCBlbGVtZW50KCkpOwogICAgIGVsc2UgewogICAgICAgICB3aWRn
ZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcih0aGlzLCBWZXJ0aWNhbFNjcm9s
bGJhciwgdGhlbWUoKS0+c2Nyb2xsYmFyQ29udHJvbFNpemVGb3JQYXJ0KExpc3Rib3hQYXJ0KSk7
CiAgICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIFZlcnRpY2FsU2Nyb2xsYmFy
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAko
cmV2aXNpb24gMTU1MzY5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJ
dGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTkgKzkzLDE5IEBAIHZvaWQgUmVuZGVyTGlz
dEl0ZW06OndpbGxCZVJlbW92ZWRGcm9tVHIKICAgICB1cGRhdGVMaXN0TWFya2VyTnVtYmVycygp
OwogfQogCi1zdGF0aWMgYm9vbCBpc0xpc3QoY29uc3QgTm9kZSogbm9kZSkKK3N0YXRpYyBib29s
IGlzTGlzdChjb25zdCBFbGVtZW50KiBlbGVtZW50KQogewotICAgIHJldHVybiAobm9kZS0+aGFz
VGFnTmFtZSh1bFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShvbFRhZykpOworICAgIHJldHVybiBl
bGVtZW50LT5oYXNUYWdOYW1lKHVsVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKG9sVGFnKTsK
IH0KIAogLy8gUmV0dXJucyB0aGUgZW5jbG9zaW5nIGxpc3Qgd2l0aCByZXNwZWN0IHRvIHRoZSBE
T00gb3JkZXIuCi1zdGF0aWMgTm9kZSogZW5jbG9zaW5nTGlzdChjb25zdCBSZW5kZXJMaXN0SXRl
bSogbGlzdEl0ZW0pCitzdGF0aWMgRWxlbWVudCogZW5jbG9zaW5nTGlzdChjb25zdCBSZW5kZXJM
aXN0SXRlbSogbGlzdEl0ZW0pCiB7Ci0gICAgTm9kZSogbGlzdEl0ZW1Ob2RlID0gbGlzdEl0ZW0t
Pm5vZGUoKTsKLSAgICBOb2RlKiBmaXJzdE5vZGUgPSAwOwotICAgIE5vZGUqIHBhcmVudCA9IGxp
c3RJdGVtTm9kZS0+aXNQc2V1ZG9FbGVtZW50KCkgPyB0b1BzZXVkb0VsZW1lbnQobGlzdEl0ZW1O
b2RlKS0+aG9zdEVsZW1lbnQoKSA6IGxpc3RJdGVtTm9kZS0+cGFyZW50Tm9kZSgpOworICAgIEVs
ZW1lbnQqIGxpc3RJdGVtTm9kZSA9IGxpc3RJdGVtLT5lbGVtZW50KCk7CisgICAgRWxlbWVudCog
Zmlyc3ROb2RlID0gMDsKKyAgICBFbGVtZW50KiBwYXJlbnQgPSBsaXN0SXRlbU5vZGUtPmlzUHNl
dWRvRWxlbWVudCgpID8gdG9Qc2V1ZG9FbGVtZW50KGxpc3RJdGVtTm9kZSktPmhvc3RFbGVtZW50
KCkgOiBsaXN0SXRlbU5vZGUtPnBhcmVudEVsZW1lbnQoKTsKICAgICAvLyBXZSB1c2UgcGFyZW50
Tm9kZSBiZWNhdXNlIHRoZSBlbmNsb3NpbmcgbGlzdCBjb3VsZCBiZSBhIFNoYWRvd1Jvb3QgdGhh
dCdzIG5vdCBFbGVtZW50LgotICAgIGZvciAoOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFy
ZW50Tm9kZSgpKSB7CisgICAgZm9yICg7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRF
bGVtZW50KCkpIHsKICAgICAgICAgaWYgKGlzTGlzdChwYXJlbnQpKQogICAgICAgICAgICAgcmV0
dXJuIHBhcmVudDsKICAgICAgICAgaWYgKCFmaXJzdE5vZGUpCkBAIC0xMTksMTIgKzExOSwxMiBA
QCBzdGF0aWMgTm9kZSogZW5jbG9zaW5nTGlzdChjb25zdCBSZW5kZXJMCiB9CiAKIC8vIFJldHVy
bnMgdGhlIG5leHQgbGlzdCBpdGVtIHdpdGggcmVzcGVjdCB0byB0aGUgRE9NIG9yZGVyLgotc3Rh
dGljIFJlbmRlckxpc3RJdGVtKiBuZXh0TGlzdEl0ZW0oY29uc3QgTm9kZSogbGlzdE5vZGUsIGNv
bnN0IFJlbmRlckxpc3RJdGVtKiBpdGVtID0gMCkKK3N0YXRpYyBSZW5kZXJMaXN0SXRlbSogbmV4
dExpc3RJdGVtKGNvbnN0IEVsZW1lbnQqIGxpc3ROb2RlLCBjb25zdCBSZW5kZXJMaXN0SXRlbSog
aXRlbSA9IDApCiB7CiAgICAgaWYgKCFsaXN0Tm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICBjb25zdCBOb2RlKiBjdXJyZW50ID0gaXRlbSA/IGl0ZW0tPm5vZGUoKSA6IGxpc3ROb2RlOwor
ICAgIGNvbnN0IEVsZW1lbnQqIGN1cnJlbnQgPSBpdGVtID8gaXRlbS0+ZWxlbWVudCgpIDogbGlz
dE5vZGU7CiAgICAgY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1
ZG8oY3VycmVudCwgbGlzdE5vZGUpOwogCiAgICAgd2hpbGUgKGN1cnJlbnQpIHsKQEAgLTE0Niw5
ICsxNDYsOSBAQCBzdGF0aWMgUmVuZGVyTGlzdEl0ZW0qIG5leHRMaXN0SXRlbShjb25zCiB9CiAK
IC8vIFJldHVybnMgdGhlIHByZXZpb3VzIGxpc3QgaXRlbSB3aXRoIHJlc3BlY3QgdG8gdGhlIERP
TSBvcmRlci4KLXN0YXRpYyBSZW5kZXJMaXN0SXRlbSogcHJldmlvdXNMaXN0SXRlbShjb25zdCBO
b2RlKiBsaXN0Tm9kZSwgY29uc3QgUmVuZGVyTGlzdEl0ZW0qIGl0ZW0pCitzdGF0aWMgUmVuZGVy
TGlzdEl0ZW0qIHByZXZpb3VzTGlzdEl0ZW0oY29uc3QgRWxlbWVudCogbGlzdE5vZGUsIGNvbnN0
IFJlbmRlckxpc3RJdGVtKiBpdGVtKQogewotICAgIE5vZGUqIGN1cnJlbnQgPSBpdGVtLT5ub2Rl
KCk7CisgICAgRWxlbWVudCogY3VycmVudCA9IGl0ZW0tPmVsZW1lbnQoKTsKICAgICBmb3IgKGN1
cnJlbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c0luY2x1ZGluZ1BzZXVkbyhjdXJyZW50
LCBsaXN0Tm9kZSk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91
c0luY2x1ZGluZ1BzZXVkbyhjdXJyZW50LCBsaXN0Tm9kZSkpIHsKICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IGN1cnJlbnQtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghcmVuZGVy
ZXIgfHwgKHJlbmRlcmVyICYmICFyZW5kZXJlci0+aXNMaXN0SXRlbSgpKSkKQEAgLTE5MSw3ICsx
OTEsNyBAQCBpbmxpbmUgaW50IFJlbmRlckxpc3RJdGVtOjpjYWxjVmFsdWUoKSBjCiAgICAgaWYg
KG1faGFzRXhwbGljaXRWYWx1ZSkKICAgICAgICAgcmV0dXJuIG1fZXhwbGljaXRWYWx1ZTsKIAot
ICAgIE5vZGUqIGxpc3QgPSBlbmNsb3NpbmdMaXN0KHRoaXMpOworICAgIEVsZW1lbnQqIGxpc3Qg
PSBlbmNsb3NpbmdMaXN0KHRoaXMpOwogICAgIEhUTUxPTGlzdEVsZW1lbnQqIG9MaXN0RWxlbWVu
dCA9IChsaXN0ICYmIGxpc3QtPmhhc1RhZ05hbWUob2xUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxP
TGlzdEVsZW1lbnQqPihsaXN0KSA6IDA7CiAgICAgaW50IHZhbHVlU3RlcCA9IDE7CiAgICAgaWYg
KG9MaXN0RWxlbWVudCAmJiBvTGlzdEVsZW1lbnQtPmlzUmV2ZXJzZWQoKSkKQEAgLTQ2NCwxNCAr
NDY0LDE0IEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OmV4cGxpY2l0VmFsdWVDaGFuZ2UKIHsKICAg
ICBpZiAobV9tYXJrZXIpCiAgICAgICAgIG1fbWFya2VyLT5zZXROZWVkc0xheW91dEFuZFByZWZX
aWR0aHNSZWNhbGMoKTsKLSAgICBOb2RlKiBsaXN0Tm9kZSA9IGVuY2xvc2luZ0xpc3QodGhpcyk7
CisgICAgRWxlbWVudCogbGlzdE5vZGUgPSBlbmNsb3NpbmdMaXN0KHRoaXMpOwogICAgIGZvciAo
UmVuZGVyTGlzdEl0ZW0qIGl0ZW0gPSB0aGlzOyBpdGVtOyBpdGVtID0gbmV4dExpc3RJdGVtKGxp
c3ROb2RlLCBpdGVtKSkKICAgICAgICAgaXRlbS0+dXBkYXRlVmFsdWUoKTsKIH0KIAogdm9pZCBS
ZW5kZXJMaXN0SXRlbTo6c2V0RXhwbGljaXRWYWx1ZShpbnQgdmFsdWUpCiB7Ci0gICAgQVNTRVJU
KG5vZGUoKSk7CisgICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAKICAgICBpZiAobV9oYXNFeHBsaWNp
dFZhbHVlICYmIG1fZXhwbGljaXRWYWx1ZSA9PSB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwpAQCAt
NDgzLDcgKzQ4Myw3IEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OnNldEV4cGxpY2l0VmFsdWUoaW4K
IAogdm9pZCBSZW5kZXJMaXN0SXRlbTo6Y2xlYXJFeHBsaWNpdFZhbHVlKCkKIHsKLSAgICBBU1NF
UlQobm9kZSgpKTsKKyAgICBBU1NFUlQoZWxlbWVudCgpKTsKIAogICAgIGlmICghbV9oYXNFeHBs
aWNpdFZhbHVlKQogICAgICAgICByZXR1cm47CkBAIC00OTIsMTQgKzQ5MiwxNCBAQCB2b2lkIFJl
bmRlckxpc3RJdGVtOjpjbGVhckV4cGxpY2l0VmFsdWUoCiAgICAgZXhwbGljaXRWYWx1ZUNoYW5n
ZWQoKTsKIH0KIAotc3RhdGljIFJlbmRlckxpc3RJdGVtKiBwcmV2aW91c09yTmV4dEl0ZW0oYm9v
bCBpc0xpc3RSZXZlcnNlZCwgTm9kZSogbGlzdCwgUmVuZGVyTGlzdEl0ZW0qIGl0ZW0pCitzdGF0
aWMgUmVuZGVyTGlzdEl0ZW0qIHByZXZpb3VzT3JOZXh0SXRlbShib29sIGlzTGlzdFJldmVyc2Vk
LCBFbGVtZW50KiBsaXN0LCBSZW5kZXJMaXN0SXRlbSogaXRlbSkKIHsKICAgICByZXR1cm4gaXNM
aXN0UmV2ZXJzZWQgPyBwcmV2aW91c0xpc3RJdGVtKGxpc3QsIGl0ZW0pIDogbmV4dExpc3RJdGVt
KGxpc3QsIGl0ZW0pOwogfQogCiB2b2lkIFJlbmRlckxpc3RJdGVtOjp1cGRhdGVMaXN0TWFya2Vy
TnVtYmVycygpCiB7Ci0gICAgTm9kZSogbGlzdE5vZGUgPSBlbmNsb3NpbmdMaXN0KHRoaXMpOwor
ICAgIEVsZW1lbnQqIGxpc3ROb2RlID0gZW5jbG9zaW5nTGlzdCh0aGlzKTsKICAgICAvLyBUaGUg
bGlzdCBub2RlIGNhbiBiZSB0aGUgc2hhZG93IHJvb3Qgd2hpY2ggaGFzIG5vIHJlbmRlcmVyLgog
ICAgIEFTU0VSVChsaXN0Tm9kZSk7CiAgICAgaWYgKCFsaXN0Tm9kZSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAJKHJldmlzaW9uIDE1NTM2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzQsMTAgKzc0LDEwIEBAIFJlbmRlck1hcnF1ZWU6On5SZW5kZXJNYXJxdWVlKCkKIGlu
dCBSZW5kZXJNYXJxdWVlOjptYXJxdWVlU3BlZWQoKSBjb25zdAogewogICAgIGludCByZXN1bHQg
PSBtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCktPm1hcnF1ZWVTcGVlZCgpOwotICAgIE5vZGUq
IG4gPSBtX2xheWVyLT5yZW5kZXJlcigpLm5vZGUoKTsKLSAgICBpZiAobiAmJiBuLT5oYXNUYWdO
YW1lKG1hcnF1ZWVUYWcpKSB7Ci0gICAgICAgIEhUTUxNYXJxdWVlRWxlbWVudCogbWFycXVlZUVs
dCA9IHN0YXRpY19jYXN0PEhUTUxNYXJxdWVlRWxlbWVudCo+KG4pOwotICAgICAgICByZXN1bHQg
PSBtYXgocmVzdWx0LCBtYXJxdWVlRWx0LT5taW5pbXVtRGVsYXkoKSk7CisgICAgRWxlbWVudCog
ZWxlbWVudCA9IG1fbGF5ZXItPnJlbmRlcmVyKCkuZWxlbWVudCgpOworICAgIGlmIChlbGVtZW50
ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUobWFycXVlZVRhZykpIHsKKyAgICAgICAgSFRNTE1hcnF1
ZWVFbGVtZW50KiBtYXJxdWVlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxNYXJxdWVlRWxlbWVu
dCo+KGVsZW1lbnQpOworICAgICAgICByZXN1bHQgPSBtYXgocmVzdWx0LCBtYXJxdWVlRWxlbWVu
dC0+bWluaW11bURlbGF5KCkpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCShyZXZpc2lvbiAxNTUzNjkp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw3ICs1NCw3IEBAIFJlbmRlck1lZGlhOjp+UmVuZGVyTWVkaWEoKQogCiBIVE1M
TWVkaWFFbGVtZW50KiBSZW5kZXJNZWRpYTo6bWVkaWFFbGVtZW50KCkgY29uc3QKIHsgCi0gICAg
cmV0dXJuIHRvSFRNTE1lZGlhRWxlbWVudChub2RlKCkpOyAKKyAgICByZXR1cm4gdG9IVE1MTWVk
aWFFbGVtZW50KGVsZW1lbnQoKSk7IAogfQogCiB2b2lkIFJlbmRlck1lZGlhOjpsYXlvdXQoKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFD
b250cm9sRWxlbWVudHMuY3BwCShyZXZpc2lvbiAxNTUzNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Myw3ICs3Myw3IEBAIHZvaWQgUmVuZGVyTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXIK
ICAgICBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0KCk7CiAKICAgICBMYXlvdXRTdGF0ZURpc2Fi
bGVyIGxheW91dFN0YXRlRGlzYWJsZXIoJnZpZXcoKSk7Ci0gICAgTWVkaWFDb250cm9sVGltZWxp
bmVDb250YWluZXJFbGVtZW50KiBjb250YWluZXIgPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lckVsZW1lbnQqPihub2RlKCkpOworICAgIE1lZGlhQ29udHJvbFRpbWVs
aW5lQ29udGFpbmVyRWxlbWVudCogY29udGFpbmVyID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9s
VGltZWxpbmVDb250YWluZXJFbGVtZW50Kj4oZWxlbWVudCgpKTsKICAgICBjb250YWluZXItPnNl
dFRpbWVEaXNwbGF5c0hpZGRlbih3aWR0aCgpLnRvSW50KCkgPCBtaW5XaWR0aFRvRGlzcGxheVRp
bWVEaXNwbGF5cyk7CiB9CiAKQEAgLTkyLDEwICs5MiwxMCBAQCB2b2lkIFJlbmRlclRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ6OmxhCiAgICAgaWYgKHN0eWxlKCktPmRpc3BsYXkoKSA9PSBOT05F
KQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobWVkaWFDb250cm9sRWxlbWVudFR5cGUo
bm9kZSgpKSA9PSBNZWRpYVRleHRUcmFja0Rpc3BsYXlDb250YWluZXIpOworICAgIEFTU0VSVCht
ZWRpYUNvbnRyb2xFbGVtZW50VHlwZShlbGVtZW50KCkpID09IE1lZGlhVGV4dFRyYWNrRGlzcGxh
eUNvbnRhaW5lcik7CiAKICAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJs
ZXIoJnZpZXcoKSk7Ci0gICAgc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudCo+KG5vZGUoKSktPnVwZGF0ZVNpemVzKCk7CisgICAgc3RhdGljX2Nhc3Q8TWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCo+KGVsZW1lbnQoKSktPnVwZGF0ZVNp
emVzKCk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHJldmlzaW9uIDE1NTM2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIFJlbmRlck1lbnVMaXN0OjphZGp1c3RJbm5l
clN0eWxlKCkKIAogaW5saW5lIEhUTUxTZWxlY3RFbGVtZW50KiBSZW5kZXJNZW51TGlzdDo6c2Vs
ZWN0RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvSFRNTFNlbGVjdEVsZW1lbnQobm9k
ZSgpKTsKKyAgICByZXR1cm4gdG9IVE1MU2VsZWN0RWxlbWVudChlbGVtZW50KCkpOwogfQogCiB2
b2lkIFJlbmRlck1lbnVMaXN0OjphZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkKQpAQCAtMzU2LDcgKzM1Niw3IEBAIHZvaWQgUmVuZGVyTWVu
dUxpc3Q6OnZhbHVlQ2hhbmdlZCh1bnNpZ24KIHsKICAgICAvLyBDaGVjayB0byBlbnN1cmUgYSBw
YWdlIG5hdmlnYXRpb24gaGFzIG5vdCBvY2N1cnJlZCB3aGlsZQogICAgIC8vIHRoZSBwb3B1cCB3
YXMgdXAuCi0gICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gdG9FbGVtZW50KG5vZGUoKSktPmRvY3Vt
ZW50KCk7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZWxlbWVudCgpLT5kb2N1bWVudCgpOwog
ICAgIGlmICgmZG9jdW1lbnQgIT0gZG9jdW1lbnQuZnJhbWUoKS0+ZG9jdW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIApAQCAtNTM5LDcgKzUzOSw3IEBAIFBhc3NSZWZQdHI8U2Nyb2xsYmFy
PiBSZW5kZXJNZW51TGlzdDo6Y3IKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7CiAgICAg
Ym9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IHN0eWxlKCktPmhhc1BzZXVkb1N0eWxlKFND
Uk9MTEJBUik7CiAgICAgaWYgKGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQotICAgICAgICB3aWRn
ZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcihzY3JvbGxhYmxlQXJl
YSwgb3JpZW50YXRpb24sIHRoaXMtPm5vZGUoKSk7CisgICAgICAgIHdpZGdldCA9IFJlbmRlclNj
cm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlv
biwgZWxlbWVudCgpKTsKICAgICBlbHNlCiAgICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3Jl
YXRlTmF0aXZlU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbiwgY29udHJvbFNp
emUpOwogICAgIHJldHVybiB3aWRnZXQucmVsZWFzZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwCShyZXZpc2lvbiAxNTUzNjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMyAr
NDMsMTMgQEAgUmVuZGVyTWV0ZXI6On5SZW5kZXJNZXRlcigpCiAKIEhUTUxNZXRlckVsZW1lbnQq
IFJlbmRlck1ldGVyOjptZXRlckVsZW1lbnQoKSBjb25zdAogewotICAgIEFTU0VSVChub2RlKCkp
OworICAgIEFTU0VSVChlbGVtZW50KCkpOwogCi0gICAgaWYgKGlzSFRNTE1ldGVyRWxlbWVudChu
b2RlKCkpKQotICAgICAgICByZXR1cm4gdG9IVE1MTWV0ZXJFbGVtZW50KG5vZGUoKSk7CisgICAg
aWYgKGlzSFRNTE1ldGVyRWxlbWVudChlbGVtZW50KCkpKQorICAgICAgICByZXR1cm4gdG9IVE1M
TWV0ZXJFbGVtZW50KGVsZW1lbnQoKSk7CiAKLSAgICBBU1NFUlQobm9kZSgpLT5zaGFkb3dIb3N0
KCkpOwotICAgIHJldHVybiB0b0hUTUxNZXRlckVsZW1lbnQobm9kZSgpLT5zaGFkb3dIb3N0KCkp
OworICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7CisgICAgcmV0dXJuIHRvSFRN
TE1ldGVyRWxlbWVudChlbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7CiB9CiAKIHZvaWQgUmVuZGVy
TWV0ZXI6OnVwZGF0ZUxvZ2ljYWxXaWR0aCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUGFydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclBhcnQuY3BwCShyZXZpc2lvbiAxNTUzNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUGFydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDExICs4MywxMSBAQCBi
b29sIFJlbmRlclBhcnQ6OnJlcXVpcmVzQWNjZWxlcmF0ZWRDb21wCiAgICAgaWYgKHdpZGdldCgp
ICYmIHdpZGdldCgpLT5pc1BsdWdpblZpZXdCYXNlKCkgJiYgdG9QbHVnaW5WaWV3QmFzZSh3aWRn
ZXQoKSktPnBsYXRmb3JtTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAo
IW5vZGUoKSB8fCAhbm9kZSgpLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpCisgICAgaWYgKCFlbGVt
ZW50KCkgfHwgIWVsZW1lbnQoKS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIGVsZW1lbnQgPSB0b0ZyYW1l
T3duZXJFbGVtZW50KG5vZGUoKSk7Ci0gICAgaWYgKERvY3VtZW50KiBjb250ZW50RG9jdW1lbnQg
PSBlbGVtZW50LT5jb250ZW50RG9jdW1lbnQoKSkgeworICAgIEhUTUxGcmFtZU93bmVyRWxlbWVu
dCogZnJhbWVPd25lckVsZW1lbnQgPSB0b0ZyYW1lT3duZXJFbGVtZW50KGVsZW1lbnQoKSk7Cisg
ICAgaWYgKERvY3VtZW50KiBjb250ZW50RG9jdW1lbnQgPSBmcmFtZU93bmVyRWxlbWVudC0+Y29u
dGVudERvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBjb250ZW50
RG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKICAgICAgICAgICAgIHJldHVybiB2aWV3LT51c2VzQ29t
cG9zaXRpbmcoKTsKICAgICB9CkBAIC0xMDUsNyArMTA1LDcgQEAgYm9vbCBSZW5kZXJQYXJ0Ojpu
ZWVkc1ByZWZlcnJlZFdpZHRoc1JlYwogCiBSZW5kZXJCb3gqIFJlbmRlclBhcnQ6OmVtYmVkZGVk
Q29udGVudEJveCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFub2RlKCkgfHwgIXdpZGdldCgpIHx8ICF3
aWRnZXQoKS0+aXNGcmFtZVZpZXcoKSkKKyAgICBpZiAoIWVsZW1lbnQoKSB8fCAhd2lkZ2V0KCkg
fHwgIXdpZGdldCgpLT5pc0ZyYW1lVmlldygpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1
cm4gdG9GcmFtZVZpZXcod2lkZ2V0KCkpLT5lbWJlZGRlZENvbnRlbnRCb3goKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAkocmV2aXNpb24g
MTU1MzY5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTAyLDE0ICsxMDIsMTQgQEAgdm9pZCBSZW5kZXJQcm9ncmVzczo6
dXBkYXRlQW5pbWF0aW9uU3RhdAogCiBIVE1MUHJvZ3Jlc3NFbGVtZW50KiBSZW5kZXJQcm9ncmVz
czo6cHJvZ3Jlc3NFbGVtZW50KCkgY29uc3QKIHsKLSAgICBpZiAoIW5vZGUoKSkKKyAgICBpZiAo
IWVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoaXNIVE1MUHJvZ3Jlc3NF
bGVtZW50KG5vZGUoKSkpCi0gICAgICAgIHJldHVybiB0b0hUTUxQcm9ncmVzc0VsZW1lbnQobm9k
ZSgpKTsKKyAgICBpZiAoaXNIVE1MUHJvZ3Jlc3NFbGVtZW50KGVsZW1lbnQoKSkpCisgICAgICAg
IHJldHVybiB0b0hUTUxQcm9ncmVzc0VsZW1lbnQoZWxlbWVudCgpKTsKIAotICAgIEFTU0VSVChu
b2RlKCktPnNoYWRvd0hvc3QoKSk7Ci0gICAgcmV0dXJuIHRvSFRNTFByb2dyZXNzRWxlbWVudChu
b2RlKCktPnNoYWRvd0hvc3QoKSk7CisgICAgQVNTRVJUKGVsZW1lbnQoKS0+c2hhZG93SG9zdCgp
KTsKKyAgICByZXR1cm4gdG9IVE1MUHJvZ3Jlc3NFbGVtZW50KGVsZW1lbnQoKS0+c2hhZG93SG9z
dCgpKTsKIH0gICAgCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkocmV2aXNpb24gMTU1MzY5KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTA1LDcgKzUwNSw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJSZXBsYWNlZDo6cG9z
aXRpb24KICAgICBpZiAoYmxvY2tEaXJlY3Rpb25Qb3NpdGlvbiA+PSBib3R0b20pCiAgICAgICAg
IHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oY2FyZXRNYXhPZmZzZXQoKSwgRE9XTlNUUkVB
TSk7IC8vIGNvb3JkaW5hdGVzIGFyZSBiZWxvdwogICAgIAotICAgIGlmIChub2RlKCkpIHsKKyAg
ICBpZiAoZWxlbWVudCgpKSB7CiAgICAgICAgIGlmIChsaW5lRGlyZWN0aW9uUG9zaXRpb24gPD0g
bG9naWNhbExlZnQoKSArIChsb2dpY2FsV2lkdGgoKSAvIDIpKQogICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZVZpc2libGVQb3NpdGlvbigwLCBET1dOU1RSRUFNKTsKICAgICAgICAgcmV0dXJuIGNy
ZWF0ZVZpc2libGVQb3NpdGlvbigxLCBET1dOU1RSRUFNKTsKQEAgLTU2OCw3ICs1NjgsNyBAQCBi
b29sIFJlbmRlclJlcGxhY2VkOjppc1NlbGVjdGVkKCkgY29uc3QKICAgICBpZiAocyA9PSBTZWxl
Y3Rpb25TdGFydCkKICAgICAgICAgcmV0dXJuIHNlbGVjdGlvblN0YXJ0ID09IDA7CiAgICAgICAg
IAotICAgIGludCBlbmQgPSBub2RlKCktPmhhc0NoaWxkTm9kZXMoKSA/IG5vZGUoKS0+Y2hpbGRO
b2RlQ291bnQoKSA6IDE7CisgICAgaW50IGVuZCA9IGVsZW1lbnQoKS0+aGFzQ2hpbGROb2Rlcygp
ID8gZWxlbWVudCgpLT5jaGlsZE5vZGVDb3VudCgpIDogMTsKICAgICBpZiAocyA9PSBTZWxlY3Rp
b25FbmQpCiAgICAgICAgIHJldHVybiBzZWxlY3Rpb25FbmQgPT0gZW5kOwogICAgIGlmIChzID09
IFNlbGVjdGlvbkJvdGgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Vh
cmNoRmllbGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTZWFyY2hGaWVsZC5jcHAJKHJldmlzaW9uIDE1NTM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw3ICsx
OTksNyBAQCBFVmlzaWJpbGl0eSBSZW5kZXJTZWFyY2hGaWVsZDo6dmlzaWJpbGl0CiAKIGNvbnN0
IEF0b21pY1N0cmluZyYgUmVuZGVyU2VhcmNoRmllbGQ6OmF1dG9zYXZlTmFtZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHRvRWxlbWVudChub2RlKCkpLT5nZXRBdHRyaWJ1dGUoYXV0b3NhdmVBdHRy
KTsKKyAgICByZXR1cm4gZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoYXV0b3NhdmVBdHRyKTsKIH0K
IAogLy8gUG9wdXBNZW51Q2xpZW50IG1ldGhvZHMKQEAgLTM1Nyw3ICszNTcsNyBAQCBQYXNzUmVm
UHRyPFNjcm9sbGJhcj4gUmVuZGVyU2VhcmNoRmllbGQ6CiAgICAgUmVmUHRyPFNjcm9sbGJhcj4g
d2lkZ2V0OwogICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBzdHlsZSgpLT5oYXNQ
c2V1ZG9TdHlsZShTQ1JPTExCQVIpOwogICAgIGlmIChoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSkK
LSAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIo
c2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCB0aGlzLT5ub2RlKCkpOworICAgICAgICB3aWRn
ZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcihzY3JvbGxhYmxlQXJl
YSwgb3JpZW50YXRpb24sIGVsZW1lbnQoKSk7CiAgICAgZWxzZQogICAgICAgICB3aWRnZXQgPSBT
Y3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihzY3JvbGxhYmxlQXJlYSwgb3JpZW50YXRp
b24sIGNvbnRyb2xTaXplKTsKICAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2UoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCShyZXZpc2lvbiAxNTUzNjkp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgUmVuZGVyU2xpZGVyOjpsYXlvdXQoKQogICAg
IFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAgICAvLyBG
SVhNRTogRmluZCBhIHdheSB0byBjYXNjYWRlIGFwcGVhcmFuY2UuCiAgICAgLy8gaHR0cDovL3dl
YmtpdC5vcmcvYi82MjUzNQotICAgIFJlbmRlckJveCogdGh1bWJCb3ggPSBzbGlkZXJUaHVtYkVs
ZW1lbnRPZihub2RlKCkpLT5yZW5kZXJCb3goKTsKKyAgICBSZW5kZXJCb3gqIHRodW1iQm94ID0g
c2xpZGVyVGh1bWJFbGVtZW50T2YoZWxlbWVudCgpKS0+cmVuZGVyQm94KCk7CiAgICAgaWYgKHRo
dW1iQm94ICYmIHRodW1iQm94LT5pc1NsaWRlclRodW1iKCkpCiAgICAgICAgIHN0YXRpY19jYXN0
PFJlbmRlclNsaWRlclRodW1iKj4odGh1bWJCb3gpLT51cGRhdGVBcHBlYXJhbmNlKHN0eWxlKCkp
OwogCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBSZW5kZXJTbGlkZXI6OmxheW91dCgpCiAKIGJv
b2wgUmVuZGVyU2xpZGVyOjppbkRyYWdNb2RlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc2xpZGVy
VGh1bWJFbGVtZW50T2Yobm9kZSgpKS0+YWN0aXZlKCk7CisgICAgcmV0dXJuIHNsaWRlclRodW1i
RWxlbWVudE9mKGVsZW1lbnQoKSktPmFjdGl2ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU25hcHNob3R0ZWRQbHVn
SW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbmFw
c2hvdHRlZFBsdWdJbi5jcHAJKHJldmlzaW9uIDE1NTM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYy
LDcgKzYyLDcgQEAgUmVuZGVyU25hcHNob3R0ZWRQbHVnSW46On5SZW5kZXJTbmFwc2hvdAogCiBI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbjo6cGx1Z0luSW1h
Z2VFbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50
KG5vZGUoKSk7CisgICAgcmV0dXJuIHRvSFRNTFBsdWdJbkltYWdlRWxlbWVudChlbGVtZW50KCkp
OwogfQogCiB2b2lkIFJlbmRlclNuYXBzaG90dGVkUGx1Z0luOjpsYXlvdXQoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiAxNTUzNjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMjAsNyArMzIwLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZTo6Y29udmVydFN0eWxl
TG9naQogCiAgICAgLy8gSFRNTCB0YWJsZXMnIHdpZHRoIHN0eWxlcyBhbHJlYWR5IGluY2x1ZGUg
Ym9yZGVycyBhbmQgcGFkZGluZ3MsIGJ1dCBDU1MgdGFibGVzJyB3aWR0aCBzdHlsZXMgZG8gbm90
LgogICAgIExheW91dFVuaXQgYm9yZGVycyA9IDA7Ci0gICAgYm9vbCBpc0NTU1RhYmxlID0gIW5v
ZGUoKSB8fCAhaXNIVE1MVGFibGVFbGVtZW50KG5vZGUoKSk7CisgICAgYm9vbCBpc0NTU1RhYmxl
ID0gIWVsZW1lbnQoKSB8fCAhaXNIVE1MVGFibGVFbGVtZW50KGVsZW1lbnQoKSk7CiAgICAgaWYg
KGlzQ1NTVGFibGUgJiYgc3R5bGVMb2dpY2FsV2lkdGguaXNTcGVjaWZpZWQoKSAmJiBzdHlsZUxv
Z2ljYWxXaWR0aC5pc1Bvc2l0aXZlKCkgJiYgc3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVO
VF9CT1gpCiAgICAgICAgIGJvcmRlcnMgPSBib3JkZXJTdGFydCgpICsgYm9yZGVyRW5kKCkgKyAo
Y29sbGFwc2VCb3JkZXJzKCkgPyBMYXlvdXRVbml0KCkgOiBwYWRkaW5nU3RhcnQoKSArIHBhZGRp
bmdFbmQoKSk7CiAKQEAgLTMzNCw3ICszMzQsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlOjpj
b252ZXJ0U3R5bGVMb2dpCiAgICAgICAgIC8vIEhUTUwgdGFibGVzIHNpemUgYXMgdGhvdWdoIENT
UyBoZWlnaHQgaW5jbHVkZXMgYm9yZGVyL3BhZGRpbmcsIENTUyB0YWJsZXMgZG8gbm90LgogICAg
ICAgICBMYXlvdXRVbml0IGJvcmRlcnMgPSBMYXlvdXRVbml0KCk7CiAgICAgICAgIC8vIEZJWE1F
OiBXZSBjYW5ub3QgYXBwbHkgYm94LXNpemluZzogY29udGVudC1ib3ggb24gPHRhYmxlPiB3aGlj
aCBvdGhlciBicm93c2VycyBhbGxvdy4KLSAgICAgICAgaWYgKChub2RlKCkgJiYgaXNIVE1MVGFi
bGVFbGVtZW50KG5vZGUoKSkpIHx8IHN0eWxlKCktPmJveFNpemluZygpID09IEJPUkRFUl9CT1gp
IHsKKyAgICAgICAgaWYgKChlbGVtZW50KCkgJiYgaXNIVE1MVGFibGVFbGVtZW50KGVsZW1lbnQo
KSkpIHx8IHN0eWxlKCktPmJveFNpemluZygpID09IEJPUkRFUl9CT1gpIHsKICAgICAgICAgICAg
IExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSA9IGJvcmRlckJlZm9yZSgpICsgKGNv
bGxhcHNlQm9yZGVycygpID8gTGF5b3V0VW5pdCgpIDogcGFkZGluZ0JlZm9yZSgpKTsKICAgICAg
ICAgICAgIExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZ0FmdGVyID0gYm9yZGVyQWZ0ZXIoKSAr
IChjb2xsYXBzZUJvcmRlcnMoKSA/IExheW91dFVuaXQoKSA6IHBhZGRpbmdBZnRlcigpKTsKICAg
ICAgICAgICAgIGJvcmRlcnMgPSBib3JkZXJBbmRQYWRkaW5nQmVmb3JlICsgYm9yZGVyQW5kUGFk
ZGluZ0FmdGVyOwpAQCAtMTQwNiw3ICsxNDA2LDcgQEAgYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VAogICAgIExheW91dFJlY3QgYm91bmRzUmVjdChhZGp1c3RlZExvY2F0
aW9uLCBzaXplKCkpOwogICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgKGFjdGlvbiA9
PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0Jh
Y2tncm91bmQpICYmIGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhib3VuZHNSZWN0KSkg
ewogICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2Rl
KGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0
aW9uKSkpOwotICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0
KG5vZGUoKSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYm91bmRzUmVjdCkpCisgICAg
ICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoZWxlbWVudCgpLCBy
ZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBib3VuZHNSZWN0KSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDE1NTM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwyNCArNzgs
MjQgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OndpbGxCZVJlbW92ZWRGcm9tVAogCiB1bnNpZ25l
ZCBSZW5kZXJUYWJsZUNlbGw6OnBhcnNlQ29sU3BhbkZyb21ET00oKSBjb25zdAogewotICAgIEFT
U0VSVChub2RlKCkpOwotICAgIGlmIChub2RlKCktPmhhc1RhZ05hbWUodGRUYWcpIHx8IG5vZGUo
KS0+aGFzVGFnTmFtZSh0aFRhZykpCi0gICAgICAgIHJldHVybiBtaW48dW5zaWduZWQ+KHRvSFRN
TFRhYmxlQ2VsbEVsZW1lbnQobm9kZSgpKS0+Y29sU3BhbigpLCBtYXhDb2x1bW5JbmRleCk7Cisg
ICAgQVNTRVJUKGVsZW1lbnQoKSk7CisgICAgaWYgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZSh0ZFRh
ZykgfHwgZWxlbWVudCgpLT5oYXNUYWdOYW1lKHRoVGFnKSkKKyAgICAgICAgcmV0dXJuIG1pbjx1
bnNpZ25lZD4odG9IVE1MVGFibGVDZWxsRWxlbWVudChlbGVtZW50KCkpLT5jb2xTcGFuKCksIG1h
eENvbHVtbkluZGV4KTsKICNpZiBFTkFCTEUoTUFUSE1MKQotICAgIGlmIChub2RlKCktPmhhc1Rh
Z05hbWUoTWF0aE1MTmFtZXM6Om10ZFRhZykpCi0gICAgICAgIHJldHVybiBtaW48dW5zaWduZWQ+
KHRvTWF0aE1MRWxlbWVudChub2RlKCkpLT5jb2xTcGFuKCksIG1heENvbHVtbkluZGV4KTsKKyAg
ICBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptdGRUYWcpKQorICAgICAg
ICByZXR1cm4gbWluPHVuc2lnbmVkPih0b01hdGhNTEVsZW1lbnQoZWxlbWVudCgpKS0+Y29sU3Bh
bigpLCBtYXhDb2x1bW5JbmRleCk7CiAjZW5kaWYKICAgICByZXR1cm4gMTsKIH0KIAogdW5zaWdu
ZWQgUmVuZGVyVGFibGVDZWxsOjpwYXJzZVJvd1NwYW5Gcm9tRE9NKCkgY29uc3QKIHsKLSAgICBB
U1NFUlQobm9kZSgpKTsKLSAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKHRkVGFnKSB8fCBub2Rl
KCktPmhhc1RhZ05hbWUodGhUYWcpKQotICAgICAgICByZXR1cm4gbWluPHVuc2lnbmVkPih0b0hU
TUxUYWJsZUNlbGxFbGVtZW50KG5vZGUoKSktPnJvd1NwYW4oKSwgbWF4Um93SW5kZXgpOworICAg
IEFTU0VSVChlbGVtZW50KCkpOworICAgIGlmIChlbGVtZW50KCktPmhhc1RhZ05hbWUodGRUYWcp
IHx8IGVsZW1lbnQoKS0+aGFzVGFnTmFtZSh0aFRhZykpCisgICAgICAgIHJldHVybiBtaW48dW5z
aWduZWQ+KHRvSFRNTFRhYmxlQ2VsbEVsZW1lbnQoZWxlbWVudCgpKS0+cm93U3BhbigpLCBtYXhS
b3dJbmRleCk7CiAjaWYgRU5BQkxFKE1BVEhNTCkKLSAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1l
KE1hdGhNTE5hbWVzOjptdGRUYWcpKQotICAgICAgICByZXR1cm4gbWluPHVuc2lnbmVkPih0b01h
dGhNTEVsZW1lbnQobm9kZSgpKS0+cm93U3BhbigpLCBtYXhSb3dJbmRleCk7CisgICAgaWYgKGVs
ZW1lbnQoKS0+aGFzVGFnTmFtZShNYXRoTUxOYW1lczo6bXRkVGFnKSkKKyAgICAgICAgcmV0dXJu
IG1pbjx1bnNpZ25lZD4odG9NYXRoTUxFbGVtZW50KGVsZW1lbnQoKSktPnJvd1NwYW4oKSwgbWF4
Um93SW5kZXgpOwogI2VuZGlmCiAgICAgcmV0dXJuIDE7CiB9CkBAIC0xMDQsMTcgKzEwNCwxNyBA
QCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6dXBkYXRlQ29sQW5kUm93U3BhCiB7CiAgICAgLy8gVGhl
IHZhc3QgbWFqb3JpdHkgb2YgdGFibGUgY2VsbHMgZG8gbm90IGhhdmUgYSBjb2xzcGFuIG9yIHJv
d3NwYW4sCiAgICAgLy8gc28gd2Uga2VlcCBhIGJvb2wgdG8ga25vdyBpZiB3ZSBuZWVkIHRvIGJv
dGhlciByZWFkaW5nIGZyb20gdGhlIERPTS4KLSAgICBtX2hhc0NvbFNwYW4gPSBub2RlKCkgJiYg
cGFyc2VDb2xTcGFuRnJvbURPTSgpICE9IDE7Ci0gICAgbV9oYXNSb3dTcGFuID0gbm9kZSgpICYm
IHBhcnNlUm93U3BhbkZyb21ET00oKSAhPSAxOworICAgIG1faGFzQ29sU3BhbiA9IGVsZW1lbnQo
KSAmJiBwYXJzZUNvbFNwYW5Gcm9tRE9NKCkgIT0gMTsKKyAgICBtX2hhc1Jvd1NwYW4gPSBlbGVt
ZW50KCkgJiYgcGFyc2VSb3dTcGFuRnJvbURPTSgpICE9IDE7CiB9CiAKIHZvaWQgUmVuZGVyVGFi
bGVDZWxsOjpjb2xTcGFuT3JSb3dTcGFuQ2hhbmdlZCgpCiB7Ci0gICAgQVNTRVJUKG5vZGUoKSk7
CisgICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAjaWYgRU5BQkxFKE1BVEhNTCkKLSAgICBBU1NFUlQo
bm9kZSgpLT5oYXNUYWdOYW1lKHRkVGFnKSB8fCBub2RlKCktPmhhc1RhZ05hbWUodGhUYWcpIHx8
IG5vZGUoKS0+aGFzVGFnTmFtZShNYXRoTUxOYW1lczo6bXRkVGFnKSk7CisgICAgQVNTRVJUKGVs
ZW1lbnQoKS0+aGFzVGFnTmFtZSh0ZFRhZykgfHwgZWxlbWVudCgpLT5oYXNUYWdOYW1lKHRoVGFn
KSB8fCBlbGVtZW50KCktPmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om10ZFRhZykpOwogI2Vsc2UK
LSAgICBBU1NFUlQobm9kZSgpLT5oYXNUYWdOYW1lKHRkVGFnKSB8fCBub2RlKCktPmhhc1RhZ05h
bWUodGhUYWcpKTsKKyAgICBBU1NFUlQoZWxlbWVudCgpLT5oYXNUYWdOYW1lKHRkVGFnKSB8fCBl
bGVtZW50KCktPmhhc1RhZ05hbWUodGhUYWcpKTsKICNlbmRpZgogCiAgICAgdXBkYXRlQ29sQW5k
Um93U3BhbkZsYWdzKCk7CkBAIC0xNjYsMTAgKzE2NiwxMCBAQCB2b2lkIFJlbmRlclRhYmxlQ2Vs
bDo6Y29tcHV0ZVByZWZlcnJlZExvCiAgICAgdGFibGUoKS0+cmVjYWxjU2VjdGlvbnNJZk5lZWRl
ZCgpOwogCiAgICAgUmVuZGVyQmxvY2s6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7
Ci0gICAgaWYgKG5vZGUoKSAmJiBzdHlsZSgpLT5hdXRvV3JhcCgpKSB7CisgICAgaWYgKGVsZW1l
bnQoKSAmJiBzdHlsZSgpLT5hdXRvV3JhcCgpKSB7CiAgICAgICAgIC8vIFNlZSBpZiBub3dyYXAg
d2FzIHNldC4KICAgICAgICAgTGVuZ3RoIHcgPSBzdHlsZU9yQ29sTG9naWNhbFdpZHRoKCk7Ci0g
ICAgICAgIFN0cmluZyBub3dyYXAgPSB0b0VsZW1lbnQobm9kZSgpKS0+Z2V0QXR0cmlidXRlKG5v
d3JhcEF0dHIpOworICAgICAgICBTdHJpbmcgbm93cmFwID0gZWxlbWVudCgpLT5nZXRBdHRyaWJ1
dGUobm93cmFwQXR0cik7CiAgICAgICAgIGlmICghbm93cmFwLmlzTnVsbCgpICYmIHcuaXNGaXhl
ZCgpKQogICAgICAgICAgICAgLy8gTm93cmFwIGlzIHNldCwgYnV0IHdlIGRpZG4ndCBhY3R1YWxs
eSB1c2UgaXQgYmVjYXVzZSBvZiB0aGUKICAgICAgICAgICAgIC8vIGZpeGVkIHdpZHRoIHNldCBv
biB0aGUgY2VsbC4gIEV2ZW4gc28sIGl0IGlzIGEgV2luSUUvTW96IHRyYWl0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAJKHJldmlzaW9uIDE1NTM2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDkgKzU5LDkgQEAgdm9pZCBSZW5kZXJUYWJsZUNvbDo6c3R5bGVEaWRD
aGFuZ2UoU3R5bAogdm9pZCBSZW5kZXJUYWJsZUNvbDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogewog
ICAgIHVuc2lnbmVkIG9sZFNwYW4gPSBtX3NwYW47Ci0gICAgTm9kZSogbiA9IG5vZGUoKTsKLSAg
ICBpZiAobiAmJiAobi0+aGFzVGFnTmFtZShjb2xUYWcpIHx8IG4tPmhhc1RhZ05hbWUoY29sZ3Jv
dXBUYWcpKSkgewotICAgICAgICBIVE1MVGFibGVDb2xFbGVtZW50KiB0YyA9IHN0YXRpY19jYXN0
PEhUTUxUYWJsZUNvbEVsZW1lbnQqPihuKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gdGhpcy0+
ZWxlbWVudCgpOworICAgIGlmIChlbGVtZW50ICYmIChlbGVtZW50LT5oYXNUYWdOYW1lKGNvbFRh
ZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShjb2xncm91cFRhZykpKSB7CisgICAgICAgIEhUTUxU
YWJsZUNvbEVsZW1lbnQqIHRjID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudCo+KGVs
ZW1lbnQpOwogICAgICAgICBtX3NwYW4gPSB0Yy0+c3BhbigpOwogICAgIH0gZWxzZQogICAgICAg
ICBtX3NwYW4gPSAhKHN0eWxlKCkgJiYgc3R5bGUoKS0+ZGlzcGxheSgpID09IFRBQkxFX0NPTFVN
Tl9HUk9VUCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbC5jcHAJKHJldmlzaW9uIDE1NTM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAg
UmVuZGVyVGV4dENvbnRyb2w6On5SZW5kZXJUZXh0Q29udHJvbCgpCiAKIEhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbDo6dGV4dEZvcm1Db250cm9sRWxlbWVudCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQobm9kZSgp
KTsKKyAgICByZXR1cm4gdG9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudChlbGVtZW50KCkpOwog
fQogCiBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2w6OmlubmVyVGV4dEVsZW1lbnQoKSBj
b25zdApAQCAtOTYsNyArOTYsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjphZGp1c3RJbm5l
clRleHRTCiAgICAgdGV4dEJsb2NrU3R5bGUtPnNldERpcmVjdGlvbihzdHlsZSgpLT5kaXJlY3Rp
b24oKSk7CiAgICAgdGV4dEJsb2NrU3R5bGUtPnNldFVuaWNvZGVCaWRpKHN0eWxlKCktPnVuaWNv
ZGVCaWRpKCkpOwogCi0gICAgYm9vbCBkaXNhYmxlZCA9IHVwZGF0ZVVzZXJNb2RpZnlQcm9wZXJ0
eShub2RlKCksIHRleHRCbG9ja1N0eWxlKTsKKyAgICBib29sIGRpc2FibGVkID0gdXBkYXRlVXNl
ck1vZGlmeVByb3BlcnR5KGVsZW1lbnQoKSwgdGV4dEJsb2NrU3R5bGUpOwogICAgIGlmIChkaXNh
YmxlZCkKICAgICAgICAgdGV4dEJsb2NrU3R5bGUtPnNldENvbG9yKHRoZW1lKCktPmRpc2FibGVk
VGV4dENvbG9yKHRleHRCbG9ja1N0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlDb2xvciksIHN0YXJ0U3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJh
Y2tncm91bmRDb2xvcikpKTsKIH0KQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIFJlbmRlclRleHRD
b250cm9sOjp1cGRhdGVGcm9tRWxlbWVuCiB7CiAgICAgRWxlbWVudCogaW5uZXJUZXh0ID0gaW5u
ZXJUZXh0RWxlbWVudCgpOwogICAgIGlmIChpbm5lclRleHQgJiYgaW5uZXJUZXh0LT5yZW5kZXJl
cigpKQotICAgICAgICB1cGRhdGVVc2VyTW9kaWZ5UHJvcGVydHkobm9kZSgpLCBpbm5lclRleHQt
PnJlbmRlcmVyKCktPnN0eWxlKCkpOworICAgICAgICB1cGRhdGVVc2VyTW9kaWZ5UHJvcGVydHko
ZWxlbWVudCgpLCBpbm5lclRleHQtPnJlbmRlcmVyKCktPnN0eWxlKCkpOwogfQogCiBpbnQgUmVu
ZGVyVGV4dENvbnRyb2w6OnNjcm9sbGJhclRoaWNrbmVzcygpIGNvbnN0CkBAIC0yOTcsNyArMjk3
LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6YWRkRm9jdXNSaW5nUmVjdAogCiBSZW5kZXJP
YmplY3QqIFJlbmRlclRleHRDb250cm9sOjpsYXlvdXRTcGVjaWFsRXhjbHVkZWRDaGlsZChib29s
IHJlbGF5b3V0Q2hpbGRyZW4pCiB7Ci0gICAgSFRNTEVsZW1lbnQqIHBsYWNlaG9sZGVyID0gdG9I
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudChub2RlKCkpLT5wbGFjZWhvbGRlckVsZW1lbnQoKTsK
KyAgICBIVE1MRWxlbWVudCogcGxhY2Vob2xkZXIgPSB0b0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50KGVsZW1lbnQoKSktPnBsYWNlaG9sZGVyRWxlbWVudCgpOwogICAgIFJlbmRlck9iamVjdCog
cGxhY2Vob2xkZXJSZW5kZXJlciA9IHBsYWNlaG9sZGVyID8gcGxhY2Vob2xkZXItPnJlbmRlcmVy
KCkgOiAwOwogICAgIGlmICghcGxhY2Vob2xkZXJSZW5kZXJlcikKICAgICAgICAgcmV0dXJuIDA7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbE11bHRpTGluZS5jcHAJKHJldmlzaW9uIDE1NTM2OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDggKzM5LDggQEAgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OlJlbmRlclRleHRD
bwogCiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6flJlbmRlclRleHRDb250cm9sTXVsdGlM
aW5lKCkKIHsKLSAgICBpZiAobm9kZSgpICYmIG5vZGUoKS0+aW5Eb2N1bWVudCgpKQotICAgICAg
ICB0b0hUTUxUZXh0QXJlYUVsZW1lbnQobm9kZSgpKS0+cmVuZGVyZXJXaWxsQmVEZXN0cm95ZWQo
KTsKKyAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aW5Eb2N1bWVudCgpKQorICAgICAg
ICB0b0hUTUxUZXh0QXJlYUVsZW1lbnQoZWxlbWVudCgpKS0+cmVuZGVyZXJXaWxsQmVEZXN0cm95
ZWQoKTsKIH0KIAogYm9vbCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKQEAgLTQ4
LDcgKzQ4LDcgQEAgYm9vbCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6bm9kZUF0UAogICAg
IGlmICghUmVuZGVyVGV4dENvbnRyb2w6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9j
YXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocmVzdWx0LmlubmVyTm9kZSgpID09IG5vZGUo
KSB8fCByZXN1bHQuaW5uZXJOb2RlKCkgPT0gaW5uZXJUZXh0RWxlbWVudCgpKQorICAgIGlmIChy
ZXN1bHQuaW5uZXJOb2RlKCkgPT0gZWxlbWVudCgpIHx8IHJlc3VsdC5pbm5lck5vZGUoKSA9PSBp
bm5lclRleHRFbGVtZW50KCkpCiAgICAgICAgIGhpdElubmVyVGV4dEVsZW1lbnQocmVzdWx0LCBs
b2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCksIGFjY3VtdWxhdGVkT2Zmc2V0KTsKIAogICAgIHJl
dHVybiB0cnVlOwpAQCAtNjcsMTMgKzY3LDEzIEBAIGZsb2F0IFJlbmRlclRleHRDb250cm9sTXVs
dGlMaW5lOjpnZXRBdmcKIAogTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6
cHJlZmVycmVkQ29udGVudExvZ2ljYWxXaWR0aChmbG9hdCBjaGFyV2lkdGgpIGNvbnN0CiB7Ci0g
ICAgaW50IGZhY3RvciA9IHRvSFRNTFRleHRBcmVhRWxlbWVudChub2RlKCkpLT5jb2xzKCk7Cisg
ICAgaW50IGZhY3RvciA9IHRvSFRNTFRleHRBcmVhRWxlbWVudChlbGVtZW50KCkpLT5jb2xzKCk7
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGNlaWxmKGNoYXJXaWR0aCAqIGZh
Y3RvcikpICsgc2Nyb2xsYmFyVGhpY2tuZXNzKCk7CiB9CiAKIExheW91dFVuaXQgUmVuZGVyVGV4
dENvbnRyb2xNdWx0aUxpbmU6OmNvbXB1dGVDb250cm9sTG9naWNhbEhlaWdodChMYXlvdXRVbml0
IGxpbmVIZWlnaHQsIExheW91dFVuaXQgbm9uQ29udGVudEhlaWdodCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbGluZUhlaWdodCAqIHRvSFRNTFRleHRBcmVhRWxlbWVudChub2RlKCkpLT5yb3dzKCkg
KyBub25Db250ZW50SGVpZ2h0OworICAgIHJldHVybiBsaW5lSGVpZ2h0ICogdG9IVE1MVGV4dEFy
ZWFFbGVtZW50KGVsZW1lbnQoKSktPnJvd3MoKSArIG5vbkNvbnRlbnRIZWlnaHQ7CiB9CiAKIGlu
dCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxp
bmUgYmFzZWxpbmVUeXBlLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0
aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmNwcAkocmV2aXNpb24gMTU1MzY5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3
ICsyMzMsNyBAQCBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0CiAgICAg
Ly8gIC0gd2UgaGl0IHRoZSA8aW5wdXQ+IGVsZW1lbnQgKGUuZy4gd2UncmUgb3ZlciB0aGUgYm9y
ZGVyIG9yIHBhZGRpbmcpLCBvcgogICAgIC8vICAtIHdlIGhpdCByZWdpb25zIG5vdCBpbiBhbnkg
ZGVjb3JhdGlvbiBidXR0b25zLgogICAgIEhUTUxFbGVtZW50KiBjb250YWluZXIgPSBjb250YWlu
ZXJFbGVtZW50KCk7Ci0gICAgaWYgKHJlc3VsdC5pbm5lck5vZGUoKS0+aXNEZXNjZW5kYW50T2Yo
aW5uZXJUZXh0RWxlbWVudCgpKSB8fCByZXN1bHQuaW5uZXJOb2RlKCkgPT0gbm9kZSgpIHx8IChj
b250YWluZXIgJiYgY29udGFpbmVyID09IHJlc3VsdC5pbm5lck5vZGUoKSkpIHsKKyAgICBpZiAo
cmVzdWx0LmlubmVyTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihpbm5lclRleHRFbGVtZW50KCkpIHx8
IHJlc3VsdC5pbm5lck5vZGUoKSA9PSBlbGVtZW50KCkgfHwgKGNvbnRhaW5lciAmJiBjb250YWlu
ZXIgPT0gcmVzdWx0LmlubmVyTm9kZSgpKSkgewogICAgICAgICBMYXlvdXRQb2ludCBwb2ludElu
UGFyZW50ID0gbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpOwogICAgICAgICBpZiAoY29udGFp
bmVyICYmIGlubmVyQmxvY2tFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlmIChpbm5lckJsb2Nr
RWxlbWVudCgpLT5yZW5kZXJCb3goKSkKQEAgLTI3Myw3ICsyNzMsNyBAQCB2b2lkIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6c3R5bGVECiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpjYXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWQoKQogewotICAgIGlmICghbm9kZSgp
KQorICAgIGlmICghZWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBPbmx5IGRy
YXcgdGhlIGNhcHMgbG9jayBpbmRpY2F0b3IgaWYgdGhlc2UgdGhpbmdzIGFyZSB0cnVlOgpAQCAt
Mjg0LDcgKzI4NCw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjYXBzTG8K
ICAgICBib29sIHNob3VsZERyYXdDYXBzTG9ja0luZGljYXRvciA9CiAgICAgICAgIGlucHV0RWxl
bWVudCgpLT5pc1Bhc3N3b3JkRmllbGQoKQogICAgICAgICAmJiBmcmFtZSgpLnNlbGVjdGlvbigp
LmlzRm9jdXNlZEFuZEFjdGl2ZSgpCi0gICAgICAgICYmIGRvY3VtZW50KCkuZm9jdXNlZEVsZW1l
bnQoKSA9PSBub2RlKCkKKyAgICAgICAgJiYgZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpID09
IGVsZW1lbnQoKQogICAgICAgICAmJiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmN1cnJlbnRDYXBz
TG9ja1N0YXRlKCk7CiAKICAgICBpZiAoc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yICE9IG1f
c2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yKSB7CkBAIC00MDQsNyArNDA0LDcgQEAgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRybwogCiBib29sIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6dGV4dFNob3VsZEJlVHJ1bmNhdGVkKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpICE9IG5vZGUoKQorICAgIHJldHVybiBkb2N1
bWVudCgpLmZvY3VzZWRFbGVtZW50KCkgIT0gZWxlbWVudCgpCiAgICAgICAgICYmIHN0eWxlKCkt
PnRleHRPdmVyZmxvdygpID09IFRleHRPdmVyZmxvd0VsbGlwc2lzOwogfQogCkBAIC00NzksNyAr
NDc5LDcgQEAgYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYQogCiBIVE1M
SW5wdXRFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlucHV0RWxlbWVudCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICByZXR1
cm4gZWxlbWVudCgpLT50b0lucHV0RWxlbWVudCgpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAxNTUzNjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTIwNDUsMTAgKzIwNDUsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hv
dHRlZFBsdQogICAgIC8vIGZyb20gb3VyIG5vZGUuIEFzc3VtaW5nIHRoaXMgbm9kZSBpcyB0aGUg
cGx1Z2luIG92ZXJsYXkgZWxlbWVudCwgd2Ugc2hvdWxkIGdldCB0byB0aGUKICAgICAvLyBwbHVn
aW4gaXRzZWxmIGJ5IGFza2luZyBmb3IgdGhlIHNoYWRvdyByb290IHBhcmVudCwgYW5kIHRoZW4g
aXRzIHBhcmVudC4KIAotICAgIGlmICghcmVuZGVyQmxvY2stPm5vZGUoKS0+aXNIVE1MRWxlbWVu
dCgpKQorICAgIGlmICghcmVuZGVyQmxvY2stPmVsZW1lbnQoKS0+aXNIVE1MRWxlbWVudCgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEhUTUxFbGVtZW50KiBwbHVnSW5PdmVybGF5ID0g
dG9IVE1MRWxlbWVudChyZW5kZXJCbG9jay0+bm9kZSgpKTsKKyAgICBIVE1MRWxlbWVudCogcGx1
Z0luT3ZlcmxheSA9IHRvSFRNTEVsZW1lbnQocmVuZGVyQmxvY2stPmVsZW1lbnQoKSk7CiAgICAg
RWxlbWVudCogcGFyZW50ID0gcGx1Z0luT3ZlcmxheS0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVu
dCgpOwogICAgIHdoaWxlIChwYXJlbnQgJiYgIXBhcmVudC0+aXNQbHVnaW5FbGVtZW50KCkpCiAg
ICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2
aXNpb24gMTU1MzcwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzAsNyArNjcwLDcgQEAgc3RhdGljIHZvaWQgd3Jp
dGVSZW5kZXJSZWdpb25MaXN0KGNvbnN0IAogICAgICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50
ICsgMik7CiAgICAgICAgIHRzIDw8ICJSZW5kZXJSZWdpb24iOwogICAgICAgICBpZiAocmVuZGVy
UmVnaW9uLT5nZW5lcmF0aW5nRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdGFnTmFt
ZSA9IGdldFRhZ05hbWUocmVuZGVyUmVnaW9uLT5ub2RlKCkpOworICAgICAgICAgICAgU3RyaW5n
IHRhZ05hbWUgPSBnZXRUYWdOYW1lKHJlbmRlclJlZ2lvbi0+ZWxlbWVudCgpKTsKICAgICAgICAg
ICAgIGlmICghdGFnTmFtZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgdHMgPDwgIiB7IiA8
PCB0YWdOYW1lIDw8ICJ9IjsKICAgICAgICAgICAgIGlmIChyZW5kZXJSZWdpb24tPmdlbmVyYXRp
bmdFbGVtZW50KCktPmhhc0lEKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlkZW8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWRlby5jcHAJKHJldmlzaW9uIDE1NTM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWRlby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBS
ZW5kZXJWaWRlbzo6dXBkYXRlSW50cmluc2ljU2l6ZSgpCiAgICAgc2l6ZS5zY2FsZShzdHlsZSgp
LT5lZmZlY3RpdmVab29tKCkpOwogCiAgICAgLy8gTmV2ZXIgc2V0IHRoZSBlbGVtZW50IHNpemUg
dG8gemVybyB3aGVuIGluIGEgbWVkaWEgZG9jdW1lbnQuCi0gICAgaWYgKHNpemUuaXNFbXB0eSgp
ICYmIG5vZGUoKS0+b3duZXJEb2N1bWVudCgpICYmIG5vZGUoKS0+b3duZXJEb2N1bWVudCgpLT5p
c01lZGlhRG9jdW1lbnQoKSkKKyAgICBpZiAoc2l6ZS5pc0VtcHR5KCkgJiYgZWxlbWVudCgpLT5k
b2N1bWVudCgpLmlzTWVkaWFEb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
c2l6ZSA9PSBpbnRyaW5zaWNTaXplKCkpCkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBSZW5kZXJW
aWRlbzo6bGF5b3V0KCkKICAgICAKIEhUTUxWaWRlb0VsZW1lbnQqIFJlbmRlclZpZGVvOjp2aWRl
b0VsZW1lbnQoKSBjb25zdAogewotICAgIHJldHVybiB0b0hUTUxWaWRlb0VsZW1lbnQobm9kZSgp
KTsgCisgICAgcmV0dXJuIHRvSFRNTFZpZGVvRWxlbWVudChlbGVtZW50KCkpOyAKIH0KIAogdm9p
ZCBSZW5kZXJWaWRlbzo6dXBkYXRlRnJvbUVsZW1lbnQoKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHJldmlzaW9uIDE1NTM2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAs
NyArMTQwLDcgQEAgc3RhdGljIGlubGluZSBJbnRSZWN0IHJvdW5kZWRJbnRSZWN0KGNvbgogCiBi
b29sIFJlbmRlcldpZGdldDo6c2V0V2lkZ2V0R2VvbWV0cnkoY29uc3QgTGF5b3V0UmVjdCYgZnJh
bWUpCiB7Ci0gICAgaWYgKCFub2RlKCkpCisgICAgaWYgKCFlbGVtZW50KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIEludFJlY3QgY2xpcFJlY3QgPSByb3VuZGVkSW50UmVjdChlbmNs
b3NpbmdMYXllcigpLT5jaGlsZHJlbkNsaXBSZWN0KCkpOwpAQCAtMTU0LDcgKzE1NCw3IEBAIGJv
b2wgUmVuZGVyV2lkZ2V0OjpzZXRXaWRnZXRHZW9tZXRyeShjb24KICAgICBtX2NsaXBSZWN0ID0g
Y2xpcFJlY3Q7CiAKICAgICBSZW5kZXJXaWRnZXRQcm90ZWN0b3IgcHJvdGVjdG9yKHRoaXMpOwot
ICAgIFJlZjxOb2RlPiBwcm90ZWN0Tm9kZSgqbm9kZSgpKTsKKyAgICBSZWY8RWxlbWVudD4gcHJv
dGVjdE5vZGUoKmVsZW1lbnQoKSk7CiAgICAgbV93aWRnZXQtPnNldEZyYW1lUmVjdChuZXdGcmFt
ZSk7CiAKICAgICBpZiAoY2xpcENoYW5nZWQgJiYgIWJvdW5kc0NoYW5nZWQpCkBAIC0zNDIsNyAr
MzQyLDcgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OmRlcmVmKFJlbmRlckFyZW5hICphcgogCiB2b2lk
IFJlbmRlcldpZGdldDo6dXBkYXRlV2lkZ2V0UG9zaXRpb24oKQogewotICAgIGlmICghbV93aWRn
ZXQgfHwgIW5vZGUoKSkgLy8gQ2hlY2sgdGhlIG5vZGUgaW4gY2FzZSBkZXN0cm95KCkgaGFzIGJl
ZW4gY2FsbGVkLgorICAgIGlmICghbV93aWRnZXQgfHwgIWVsZW1lbnQoKSkgLy8gQ2hlY2sgdGhl
IG5vZGUgaW4gY2FzZSBkZXN0cm95KCkgaGFzIGJlZW4gY2FsbGVkLgogICAgICAgICByZXR1cm47
CiAKICAgICBib29sIGJvdW5kc0NoYW5nZWQgPSB1cGRhdGVXaWRnZXRHZW9tZXRyeSgpOwpAQCAt
Mzk3LDcgKzM5Nyw3IEBAIGJvb2wgUmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXQK
ICAgICBib29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0LCBy
ZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBhY3Rpb24pOwog
CiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSByZWFsbHkgb3ZlciB0aGUgd2lkZ2V0IGl0
c2VsZiAoYW5kIG5vdCBqdXN0IGluIHRoZSBib3JkZXIvcGFkZGluZyBhcmVhKS4KLSAgICBpZiAo
KGluc2lkZSB8fCByZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpICYmICFoYWRSZXN1bHQgJiYgcmVz
dWx0LmlubmVyTm9kZSgpID09IG5vZGUoKSkKKyAgICBpZiAoKGluc2lkZSB8fCByZXN1bHQuaXNS
ZWN0QmFzZWRUZXN0KCkpICYmICFoYWRSZXN1bHQgJiYgcmVzdWx0LmlubmVyTm9kZSgpID09IGVs
ZW1lbnQoKSkKICAgICAgICAgcmVzdWx0LnNldElzT3ZlcldpZGdldChjb250ZW50Qm94UmVjdCgp
LmNvbnRhaW5zKHJlc3VsdC5sb2NhbFBvaW50KCkpKTsKICAgICByZXR1cm4gaW5zaWRlOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MRmVuY2VkLmNwcAkocmV2aXNpb24gMTU1MzY5KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NSw3ICs1NSw3IEBAIFJlbmRlck1hdGhNTEZlbmNlZDo6UmVuZGVyTWF0aE1MRmVuY2VkKEUKIAog
dm9pZCBSZW5kZXJNYXRoTUxGZW5jZWQ6OnVwZGF0ZUZyb21FbGVtZW50KCkKIHsKLSAgICBFbGVt
ZW50KiBmZW5jZWQgPSB0b0VsZW1lbnQobm9kZSgpKTsKKyAgICBFbGVtZW50KiBmZW5jZWQgPSBl
bGVtZW50KCk7CiAgCiAgICAgLy8gRklYTUU6IEhhbmRsZSBvcGVuL2Nsb3NlIHZhbHVlcyB3aXRo
IG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyICh0aGV5IHNob3VsZCBiZSB0cmVhdGVkIGxpa2UgdGV4
dCkuCiAgICAgQXRvbWljU3RyaW5nIG9wZW5WYWx1ZSA9IGZlbmNlZC0+Z2V0QXR0cmlidXRlKE1h
dGhNTE5hbWVzOjpvcGVuQXR0cik7CkBAIC04OSw3ICs4OSw3IEBAIFJlbmRlck1hdGhNTE9wZXJh
dG9yKiBSZW5kZXJNYXRoTUxGZW5jZWQKICAgICBuZXdTdHlsZS0+c2V0TWFyZ2luRW5kKExlbmd0
aCgob3BlcmF0b3JUeXBlID09IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpGZW5jZSA/IGdGZW5jZU1h
cmdpbkVtcyA6IGdTZXBhcmF0b3JNYXJnaW5FbmRFbXMpICogc3R5bGUoKS0+Zm9udFNpemUoKSwg
Rml4ZWQpKTsKICAgICBpZiAob3BlcmF0b3JUeXBlID09IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpG
ZW5jZSkKICAgICAgICAgbmV3U3R5bGUtPnNldE1hcmdpblN0YXJ0KExlbmd0aChnRmVuY2VNYXJn
aW5FbXMgKiBzdHlsZSgpLT5mb250U2l6ZSgpLCBGaXhlZCkpOwotICAgIFJlbmRlck1hdGhNTE9w
ZXJhdG9yKiBuZXdPcGVyYXRvciA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyTWF0aE1MT3Bl
cmF0b3IodG9FbGVtZW50KG5vZGUoKSksIHVDaGFyKTsKKyAgICBSZW5kZXJNYXRoTUxPcGVyYXRv
ciogbmV3T3BlcmF0b3IgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlck1hdGhNTE9wZXJhdG9y
KGVsZW1lbnQoKSwgdUNoYXIpOwogICAgIG5ld09wZXJhdG9yLT5zZXRPcGVyYXRvclR5cGUob3Bl
cmF0b3JUeXBlKTsKICAgICBuZXdPcGVyYXRvci0+c2V0U3R5bGUobmV3U3R5bGUucmVsZWFzZSgp
KTsKICAgICByZXR1cm4gbmV3T3BlcmF0b3I7CkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBSZW5k
ZXJNYXRoTUxGZW5jZWQ6OnN0eWxlRGlkQ2hhbmdlKAogICAgIFJlbmRlck1hdGhNTEJsb2NrOjpz
dHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CiAgICAgCiAgICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkgewotICAgICAgICBpZiAoY2hpbGQtPm5vZGUoKSA9PSBub2RlKCkpIHsKKyAgICAgICAg
aWYgKGNoaWxkLT5ub2RlKCkgPT0gZWxlbWVudCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoY2hp
bGQtPnN0eWxlKCktPnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgICAgICBjaGlsZC0+c3R5bGUo
KS0+aW5oZXJpdEZyb20oc3R5bGUoKSk7CiAgICAgICAgICAgICBib29sIGlzRmVuY2UgPSBjaGls
ZCA9PSBmaXJzdENoaWxkKCkgfHwgY2hpbGQgPT0gbGFzdENoaWxkKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0
aW9uLmNwcAkocmV2aXNpb24gMTU1MzY5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYz
LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6dXBkYXRlRnJvbUVsZQogICAgIGlmIChp
c0VtcHR5KCkpIAogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgRWxlbWVudCogZnJhY3Rpb24g
PSB0b0VsZW1lbnQobm9kZSgpKTsKKyAgICBFbGVtZW50KiBmcmFjdGlvbiA9IGVsZW1lbnQoKTsK
ICAgICAKICAgICBSZW5kZXJPYmplY3QqIG51bWVyYXRvcldyYXBwZXIgPSBmaXJzdENoaWxkKCk7
CiAgICAgUmVuZGVyT2JqZWN0KiBkZW5vbWluYXRvcldyYXBwZXIgPSBudW1lcmF0b3JXcmFwcGVy
LT5uZXh0U2libGluZygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJKHJldmlzaW9uIDE1NTM2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsMTQgKzEzNiwxNCBAQCBpbnQgUmVuZGVyTWF0aE1M
T3BlcmF0b3I6OmdseXBoSGVpZ2h0Rm9yCiAvLyBkeW5hbWljIERPTSBjaGFuZ2VzLgogdm9pZCBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlRnJvbUVsZW1lbnQoKQogewotICAgIFJlbmRlck9i
amVjdCogc2F2ZWRSZW5kZXJlciA9IG5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJPYmpl
Y3QqIHNhdmVkUmVuZGVyZXIgPSBlbGVtZW50KCktPnJlbmRlcmVyKCk7CiAKICAgICAvLyBEZXN0
cm95IG91ciBjdXJyZW50IGNoaWxkcmVuCiAgICAgY2hpbGRyZW4oKS0+ZGVzdHJveUxlZnRvdmVy
Q2hpbGRyZW4oKTsKIAogICAgIC8vIFNpbmNlIHdlIHNoYXJlIGEgbm9kZSB3aXRoIG91ciBjaGls
ZHJlbiwgZGVzdHJveWluZyBvdXIgY2hpbGRyZW4gbWF5IHNldCBvdXIgbm9kZSdzCiAgICAgLy8g
cmVuZGVyZXIgdG8gMCwgc28gd2UgbmVlZCB0byByZXN0b3JlIGl0LgotICAgIG5vZGUoKS0+c2V0
UmVuZGVyZXIoc2F2ZWRSZW5kZXJlcik7CisgICAgZWxlbWVudCgpLT5zZXRSZW5kZXJlcihzYXZl
ZFJlbmRlcmVyKTsKICAgICAKICAgICAvLyBJZiB0aGUgb3BlcmF0b3IgaXMgZml4ZWQsIGl0IHdp
bGwgYmUgY29udGFpbmVkIGluIG1fb3BlcmF0b3IKICAgICBVQ2hhciBmaXJzdENoYXIgPSBtX29w
ZXJhdG9yOwpAQCAtMTUyLDIyICsxNTIsMTkgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
dXBkYXRlRnJvbUVsZQogICAgIGJvb2wgc3RyZXRjaERpc2FibGVkID0gZmFsc2U7CiAgICAgCiAg
ICAgLy8gV2UgbWF5IG5lZWQgdGhlIGVsZW1lbnQgbGF0ZXIgaWYgd2UgY2FuJ3Qgc3RyZXRjaC4K
LSAgICBpZiAobm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKEVsZW1lbnQq
IG1vID0gdG9FbGVtZW50KG5vZGUoKSkpIHsKLSAgICAgICAgICAgIEF0b21pY1N0cmluZyBzdHJl
dGNoeUF0dHIgPSBtby0+Z2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpzdHJldGNoeUF0dHIpOwot
ICAgICAgICAgICAgc3RyZXRjaERpc2FibGVkID0gZXF1YWxJZ25vcmluZ0Nhc2Uoc3RyZXRjaHlB
dHRyLCAiZmFsc2UiKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gSWYgc3RyZXRjaGlu
ZyBpc24ndCBkaXNhYmxlZCwgZ2V0IHRoZSBjaGFyYWN0ZXIgZnJvbSB0aGUgdGV4dCBjb250ZW50
LgotICAgICAgICAgICAgaWYgKCFzdHJldGNoRGlzYWJsZWQgJiYgIWZpcnN0Q2hhcikgewotICAg
ICAgICAgICAgICAgIFN0cmluZyBvcFRleHQgPSBtby0+dGV4dENvbnRlbnQoKTsKLSAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgIWZpcnN0Q2hhciAmJiBpIDwgb3BUZXh0
Lmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwYWNlT3JOZXds
aW5lKG9wVGV4dFtpXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENoYXIgPSBvcFRl
eHRbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgIEVsZW1lbnQqIG1v
ID0gZWxlbWVudCgpOworICAgIEF0b21pY1N0cmluZyBzdHJldGNoeUF0dHIgPSBtby0+Z2V0QXR0
cmlidXRlKE1hdGhNTE5hbWVzOjpzdHJldGNoeUF0dHIpOworICAgIHN0cmV0Y2hEaXNhYmxlZCA9
IGVxdWFsSWdub3JpbmdDYXNlKHN0cmV0Y2h5QXR0ciwgImZhbHNlIik7CisgICAgCisgICAgLy8g
SWYgc3RyZXRjaGluZyBpc24ndCBkaXNhYmxlZCwgZ2V0IHRoZSBjaGFyYWN0ZXIgZnJvbSB0aGUg
dGV4dCBjb250ZW50LgorICAgIGlmICghc3RyZXRjaERpc2FibGVkICYmICFmaXJzdENoYXIpIHsK
KyAgICAgICAgU3RyaW5nIG9wVGV4dCA9IG1vLT50ZXh0Q29udGVudCgpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgIWZpcnN0Q2hhciAmJiBpIDwgb3BUZXh0Lmxlbmd0aCgpOyBp
KyspIHsKKyAgICAgICAgICAgIGlmICghaXNTcGFjZU9yTmV3bGluZShvcFRleHRbaV0pKQorICAg
ICAgICAgICAgICAgIGZpcnN0Q2hhciA9IG9wVGV4dFtpXTsKICAgICAgICAgfQogICAgIH0KLSAg
ICAKKwogICAgIC8vIFRoZSAnaW5kZXgnIGhvbGRzIHRoZSBzdHJldGNoYWJsZSBjaGFyYWN0ZXIn
cyBnbHlwaCBpbmZvcm1hdGlvbgogICAgIGludCBpbmRleCA9IC0xOwogICAgIApAQCAtMjA4LDcg
KzIwNSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZUZyb21FbGUKICAgICAv
LyBFaXRoZXIgc3RyZXRjaCBpcyBkaXNhYmxlZCBvciB3ZSBkb24ndCBoYXZlIGEgc3RyZXRjaGFi
bGUgY2hhcmFjdGVyIG92ZXIgdGhlIG1pbmltdW0gaGVpZ2h0CiAgICAgaWYgKHN0cmV0Y2hEaXNh
YmxlZCB8fCAhc2hvdWxkU3RhY2spIHsKICAgICAgICAgbV9pc1N0YWNrZWQgPSBmYWxzZTsKLSAg
ICAgICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVy
TWF0aE1MQmxvY2sodG9FbGVtZW50KG5vZGUoKSkpOworICAgICAgICBSZW5kZXJCbG9jayogY29u
dGFpbmVyID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJNYXRoTUxCbG9jayhlbGVtZW50KCkp
OwogICAgICAgICAvLyBUaGlzIGNvbnRhaW5lciBkb2Vzbid0IG9mZmVyIGFueSB1c2VmdWwgaW5m
b3JtYXRpb24gdG8gYWNjZXNzaWJpbGl0eS4KICAgICAgICAgdG9SZW5kZXJNYXRoTUxCbG9jayhj
b250YWluZXIpLT5zZXRJZ25vcmVJbkFjY2Vzc2liaWxpdHlUcmVlKHRydWUpOwogICAgICAgICAK
QEAgLTIzMiwxMCArMjI5LDkgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlRnJv
bUVsZQogICAgICAgICAvLyBCdWlsZCB0aGUgdGV4dCBvZiB0aGUgb3BlcmF0b3IuCiAgICAgICAg
IFJlbmRlclRleHQqIHRleHQgPSAwOwogICAgICAgICBpZiAobV9vcGVyYXRvcikgCi0gICAgICAg
ICAgICB0ZXh0ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJUZXh0KG5vZGUoKSwgU3RyaW5n
SW1wbDo6Y3JlYXRlKCZtX29wZXJhdG9yLCAxKSk7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUoKS0+
aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgaWYgKEVsZW1lbnQqIG1vID0gdG9FbGVtZW50
KG5vZGUoKSkpCi0gICAgICAgICAgICAgICAgdGV4dCA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVu
ZGVyVGV4dChub2RlKCksIG1vLT50ZXh0Q29udGVudCgpLnJlcGxhY2UoaHlwaGVuTWludXMsIG1p
bnVzU2lnbikuaW1wbCgpKTsKKyAgICAgICAgICAgIHRleHQgPSBuZXcgKHJlbmRlckFyZW5hKCkp
IFJlbmRlclRleHQoZWxlbWVudCgpLCBTdHJpbmdJbXBsOjpjcmVhdGUoJm1fb3BlcmF0b3IsIDEp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGV4dCA9IG5ldyAocmVuZGVyQXJlbmEoKSkg
UmVuZGVyVGV4dChlbGVtZW50KCksIGVsZW1lbnQoKS0+dGV4dENvbnRlbnQoKS5yZXBsYWNlKGh5
cGhlbk1pbnVzLCBtaW51c1NpZ24pLmltcGwoKSk7CiAgICAgICAgIC8vIElmIHdlIGNhbid0IGZp
Z3VyZSBvdXQgdGhlIHRleHQsIGxlYXZlIGl0IGJsYW5rLgogICAgICAgICBpZiAodGV4dCkgewog
ICAgICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiB0ZXh0U3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y3JlYXRlKCk7CkBAIC0zMDIsMTMgKzI5OCwxMyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBS
ZW5kZXJNYXRoTUxPcGVyCiAKIFJlbmRlckJsb2NrKiBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y3Jl
YXRlR2x5cGgoVUNoYXIgZ2x5cGgsIGludCBtYXhIZWlnaHRGb3JSZW5kZXJlciwgaW50IGNoYXJS
ZWxhdGl2ZSkKIHsKLSAgICBSZW5kZXJCbG9jayogY29udGFpbmVyID0gbmV3IChyZW5kZXJBcmVu
YSgpKSBSZW5kZXJNYXRoTUxCbG9jayh0b0VsZW1lbnQobm9kZSgpKSk7CisgICAgUmVuZGVyQmxv
Y2sqIGNvbnRhaW5lciA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyTWF0aE1MQmxvY2soZWxl
bWVudCgpKTsKICAgICB0b1JlbmRlck1hdGhNTEJsb2NrKGNvbnRhaW5lciktPnNldElnbm9yZUlu
QWNjZXNzaWJpbGl0eVRyZWUodHJ1ZSk7CiAgICAgY29udGFpbmVyLT5zZXRTdHlsZShjcmVhdGVT
dGFja2FibGVTdHlsZShtYXhIZWlnaHRGb3JSZW5kZXJlcikpOwogICAgIGFkZENoaWxkKGNvbnRh
aW5lcik7CiAgICAgUmVuZGVyQmxvY2sqIHBhcmVudCA9IGNvbnRhaW5lcjsKICAgICBpZiAoY2hh
clJlbGF0aXZlKSB7Ci0gICAgICAgIFJlbmRlckJsb2NrKiBjaGFyQmxvY2sgPSBuZXcgKHJlbmRl
ckFyZW5hKCkpIFJlbmRlckJsb2NrRmxvdyhub2RlKCkpOworICAgICAgICBSZW5kZXJCbG9jayog
Y2hhckJsb2NrID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJCbG9ja0Zsb3coZWxlbWVudCgp
KTsKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjaGFyU3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y3JlYXRlKCk7CiAgICAgICAgIGNoYXJTdHlsZS0+aW5oZXJpdEZyb20oY29udGFpbmVyLT5zdHls
ZSgpKTsKICAgICAgICAgY2hhclN0eWxlLT5zZXREaXNwbGF5KElOTElORV9CTE9DSyk7CkBAIC0z
MTksNyArMzE1LDcgQEAgUmVuZGVyQmxvY2sqIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjcmVhdAog
ICAgICAgICBwYXJlbnQgPSBjaGFyQmxvY2s7CiAgICAgfQogICAgIAotICAgIFJlbmRlclRleHQq
IHRleHQgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclRleHQobm9kZSgpLCBTdHJpbmdJbXBs
OjpjcmVhdGUoJmdseXBoLCAxKSk7CisgICAgUmVuZGVyVGV4dCogdGV4dCA9IG5ldyAocmVuZGVy
QXJlbmEoKSkgUmVuZGVyVGV4dChlbGVtZW50KCksIFN0cmluZ0ltcGw6OmNyZWF0ZSgmZ2x5cGgs
IDEpKTsKICAgICB0ZXh0LT5zZXRTdHlsZShjb250YWluZXItPnN0eWxlKCkpOwogICAgIHBhcmVu
dC0+YWRkQ2hpbGQodGV4dCk7CiAgICAgcmV0dXJuIGNvbnRhaW5lcjsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3BhY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3BhY2UuY3Bw
CShyZXZpc2lvbiAxNTUzNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCB2b2lk
IFJlbmRlck1hdGhNTFNwYWNlOjpjb21wdXRlSW50cmluc2ljCiAKIHZvaWQgUmVuZGVyTWF0aE1M
U3BhY2U6OnVwZGF0ZUZyb21FbGVtZW50KCkKIHsKLSAgICBFbGVtZW50KiBzcGFjZSA9IHRvRWxl
bWVudChub2RlKCkpOworICAgIEVsZW1lbnQqIHNwYWNlID0gZWxlbWVudCgpOwogCiAgICAgLy8g
VGhpcyBwYXJzZXMgdGhlIG1zcGFjZSBhdHRyaWJ1dGVzLCB1c2luZyAwIGFzIHRoZSBkZWZhdWx0
IHZhbHVlcy4KICAgICBtX3dpZHRoID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcAkocmV2aXNpb24g
MTU1MzY5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWdu
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgUmVuZGVy
U1ZHRm9yZWlnbk9iamVjdDo6bGF5b3V0KCkKICAgICBBU1NFUlQoIXZpZXcoKS5sYXlvdXRTdGF0
ZUVuYWJsZWQoKSk7IC8vIFJlbmRlclNWR1Jvb3QgZGlzYWJsZXMgbGF5b3V0U3RhdGUgZm9yIHRo
ZSBTVkcgcmVuZGVyaW5nIHRyZWUuCiAKICAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0
aGlzLCBTVkdSZW5kZXJTdXBwb3J0OjpjaGVja0ZvclNWR1JlcGFpbnREdXJpbmdMYXlvdXQodGhp
cykpOwotICAgIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50KiBmb3JlaWduID0gc3RhdGljX2Nhc3Q8
U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQqPihub2RlKCkpOworICAgIFNWR0ZvcmVpZ25PYmplY3RF
bGVtZW50KiBmb3JlaWduID0gc3RhdGljX2Nhc3Q8U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQqPihl
bGVtZW50KCkpOwogCiAgICAgYm9vbCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0g
ZmFsc2U7CiAgICAgaWYgKG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAkocmV2aXNpb24gMTU1
MzcwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OmNvbXB1
dGVJbnRyaW5zaWNSYXRpCiAgICAgLy8gdGhlIHNhbWUgYXMgdGhlIENTUyB3aWR0aCBhbmQgaGVp
Z2h0IHByb3BlcnRpZXMuIFNwZWNpZmljYWxseSwgcGVyY2VudGFnZSB2YWx1ZXMgZG8gbm90IHBy
b3ZpZGUgYW4gaW50cmluc2ljIHdpZHRoIG9yIGhlaWdodCwKICAgICAvLyBhbmQgZG8gbm90IGlu
ZGljYXRlIGEgcGVyY2VudGFnZSBvZiB0aGUgY29udGFpbmluZyBibG9jay4gUmF0aGVyLCBvbmNl
IHRoZSB2aWV3cG9ydCBpcyBlc3RhYmxpc2hlZCwgdGhleSBpbmRpY2F0ZSB0aGUgcG9ydGlvbgog
ICAgIC8vIG9mIHRoZSB2aWV3cG9ydCB0aGF0IGlzIGFjdHVhbGx5IGNvdmVyZWQgYnkgaW1hZ2Ug
ZGF0YS4KLSAgICBTVkdTVkdFbGVtZW50KiBzdmcgPSB0b1NWR1NWR0VsZW1lbnQobm9kZSgpKTsK
KyAgICBTVkdTVkdFbGVtZW50KiBzdmcgPSB0b1NWR1NWR0VsZW1lbnQoZWxlbWVudCgpKTsKICAg
ICBBU1NFUlQoc3ZnKTsKICAgICBMZW5ndGggaW50cmluc2ljV2lkdGhBdHRyaWJ1dGUgPSBzdmct
PmludHJpbnNpY1dpZHRoKFNWR1NWR0VsZW1lbnQ6Oklnbm9yZUNTU1Byb3BlcnRpZXMpOwogICAg
IExlbmd0aCBpbnRyaW5zaWNIZWlnaHRBdHRyaWJ1dGUgPSBzdmctPmludHJpbnNpY0hlaWdodChT
VkdTVkdFbGVtZW50OjpJZ25vcmVDU1NQcm9wZXJ0aWVzKTsKQEAgLTEyMywxNCArMTIzLDE0IEBA
IHZvaWQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZUludHJpbnNpY1JhdGkKIAogYm9vbCBSZW5kZXJT
VkdSb290Ojppc0VtYmVkZGVkVGhyb3VnaFNWR0ltYWdlKCkgY29uc3QKIHsKLSAgICBpZiAoIW5v
ZGUoKSkKKyAgICBpZiAoIWVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJl
dHVybiBpc0luU1ZHSW1hZ2UodG9TVkdTVkdFbGVtZW50KG5vZGUoKSkpOworICAgIHJldHVybiBp
c0luU1ZHSW1hZ2UodG9TVkdTVkdFbGVtZW50KGVsZW1lbnQoKSkpOwogfQogCiBib29sIFJlbmRl
clNWR1Jvb3Q6OmlzRW1iZWRkZWRUaHJvdWdoRnJhbWVDb250YWluaW5nU1ZHRG9jdW1lbnQoKSBj
b25zdAogewotICAgIGlmICghbm9kZSgpKQorICAgIGlmICghZWxlbWVudCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBJZiBvdXIgZnJhbWUgaGFzIGFuIG93bmVyIHJlbmRlcmVy
LCB3ZSdyZSBlbWJlZGRlZCB0aHJvdWdoIGVnLiBvYmplY3QvZW1iZWQvaWZyYW1lLApAQCAtMTQ3
LDcgKzE0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCByZXNvbHZlTGVuZ3RoQXQKIAog
TGF5b3V0VW5pdCBSZW5kZXJTVkdSb290Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoU2hv
dWxkQ29tcHV0ZVByZWZlcnJlZCBzaG91bGRDb21wdXRlUHJlZmVycmVkKSBjb25zdAogewotICAg
IFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHRvU1ZHU1ZHRWxlbWVudChub2RlKCkpOworICAgIFNWR1NW
R0VsZW1lbnQqIHN2ZyA9IHRvU1ZHU1ZHRWxlbWVudChlbGVtZW50KCkpOwogICAgIEFTU0VSVChz
dmcpOwogCiAgICAgLy8gV2hlbiB3ZSdyZSBlbWJlZGRlZCB0aHJvdWdoIFNWR0ltYWdlIChib3Jk
ZXItaW1hZ2UvYmFja2dyb3VuZC1pbWFnZS88aHRtbDppbWc+Ly4uLikgd2UncmUgZm9yY2VkIHRv
IHJlc2l6ZSB0byBhIHNwZWNpZmljIHNpemUuCkBAIC0xNzAsNyArMTcwLDcgQEAgTGF5b3V0VW5p
dCBSZW5kZXJTVkdSb290Ojpjb21wdXRlUmVwbGFjZQogCiBMYXlvdXRVbml0IFJlbmRlclNWR1Jv
b3Q6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKSBjb25zdAogewotICAgIFNWR1NWR0Vs
ZW1lbnQqIHN2ZyA9IHRvU1ZHU1ZHRWxlbWVudChub2RlKCkpOworICAgIFNWR1NWR0VsZW1lbnQq
IHN2ZyA9IHRvU1ZHU1ZHRWxlbWVudChlbGVtZW50KCkpOwogICAgIEFTU0VSVChzdmcpOwogCiAg
ICAgLy8gV2hlbiB3ZSdyZSBlbWJlZGRlZCB0aHJvdWdoIFNWR0ltYWdlIChib3JkZXItaW1hZ2Uv
YmFja2dyb3VuZC1pbWFnZS88aHRtbDppbWc+Ly4uLikgd2UncmUgZm9yY2VkIHRvIHJlc2l6ZSB0
byBhIHNwZWNpZmljIHNpemUuCkBAIC0yMjEsNyArMjIxLDcgQEAgdm9pZCBSZW5kZXJTVkdSb290
OjpsYXlvdXQoKQogICAgIHVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKICAgICBidWlsZExvY2FsVG9C
b3JkZXJCb3hUcmFuc2Zvcm0oKTsKIAotICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHRvU1ZHU1ZH
RWxlbWVudChub2RlKCkpOworICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHRvU1ZHU1ZHRWxlbWVu
dChlbGVtZW50KCkpOwogICAgIEFTU0VSVChzdmcpOwogICAgIG1faXNMYXlvdXRTaXplQ2hhbmdl
ZCA9IG5lZWRzTGF5b3V0IHx8IChzdmctPmhhc1JlbGF0aXZlTGVuZ3RocygpICYmIG9sZFNpemUg
IT0gc2l6ZSgpKTsKICAgICBTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbih0aGlzLCBu
ZWVkc0xheW91dCB8fCBTVkdSZW5kZXJTdXBwb3J0OjpmaWx0ZXJzRm9yY2VDb250YWluZXJMYXlv
dXQodGhpcykpOwpAQCAtMjYyLDcgKzI2Miw3IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6cGFpbnRS
ZXBsYWNlZChQYWludEkKIAogICAgIC8vIEFuIGVtcHR5IHZpZXdCb3ggYWxzbyBkaXNhYmxlcyBy
ZW5kZXJpbmcuCiAgICAgLy8gKGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNW
aWV3Qm94QXR0cmlidXRlKQotICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHRvU1ZHU1ZHRWxlbWVu
dChub2RlKCkpOworICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHRvU1ZHU1ZHRWxlbWVudChlbGVt
ZW50KCkpOwogICAgIEFTU0VSVChzdmcpOwogICAgIGlmIChzdmctPmhhc0VtcHR5Vmlld0JveCgp
KQogICAgICAgICByZXR1cm47CkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBSZW5kZXJTVkdSb290
OjpyZW1vdmVDaGlsZChSZW5kZXJPYgogLy8gcmVsYXRpdmUgdG8gb3VyIGJvcmRlckJveCBvcmln
aW4uICBUaGlzIG1ldGhvZCBnaXZlcyB1cyBleGFjdGx5IHRoYXQuCiB2b2lkIFJlbmRlclNWR1Jv
b3Q6OmJ1aWxkTG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgpCiB7Ci0gICAgU1ZHU1ZHRWxlbWVu
dCogc3ZnID0gdG9TVkdTVkdFbGVtZW50KG5vZGUoKSk7CisgICAgU1ZHU1ZHRWxlbWVudCogc3Zn
ID0gdG9TVkdTVkdFbGVtZW50KGVsZW1lbnQoKSk7CiAgICAgQVNTRVJUKHN2Zyk7CiAgICAgZmxv
YXQgc2NhbGUgPSBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAgICAgU1ZHUG9pbnQgdHJhbnNs
YXRlID0gc3ZnLT5jdXJyZW50VHJhbnNsYXRlKCk7CkBAIC00NDgsNyArNDQ4LDcgQEAgYm9vbCBS
ZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBIaQogICAgICAgICBMYXlvdXRSZWN0IGJv
dW5kc1JlY3QoYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpLCBzaXplKCkpOwogICAgICAg
ICBpZiAobG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7CiAgICAg
ICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkJvcmRlckJveCk7Ci0g
ICAgICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUo
KSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYm91bmRzUmVjdCkpCisgICAgICAgICAg
ICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KGVsZW1lbnQoKSwgcmVx
dWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYm91bmRzUmVjdCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC00NTgsNyArNDU4LDcgQEAgYm9vbCBS
ZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBIaQogCiBib29sIFJlbmRlclNWR1Jvb3Q6
Omhhc1JlbGF0aXZlRGltZW5zaW9ucygpIGNvbnN0CiB7Ci0gICAgU1ZHU1ZHRWxlbWVudCogc3Zn
ID0gdG9TVkdTVkdFbGVtZW50KG5vZGUoKSk7CisgICAgU1ZHU1ZHRWxlbWVudCogc3ZnID0gdG9T
VkdTVkdFbGVtZW50KGVsZW1lbnQoKSk7CiAgICAgQVNTRVJUKHN2Zyk7CiAKICAgICByZXR1cm4g
c3ZnLT5pbnRyaW5zaWNIZWlnaHQoU1ZHU1ZHRWxlbWVudDo6SWdub3JlQ1NTUHJvcGVydGllcyku
aXNQZXJjZW50KCkgfHwgc3ZnLT5pbnRyaW5zaWNXaWR0aChTVkdTVkdFbGVtZW50OjpJZ25vcmVD
U1NQcm9wZXJ0aWVzKS5pc1BlcmNlbnQoKTsKQEAgLTQ2NiwxNCArNDY2LDE0IEBAIGJvb2wgUmVu
ZGVyU1ZHUm9vdDo6aGFzUmVsYXRpdmVEaW1lbnNpb24KIAogYm9vbCBSZW5kZXJTVkdSb290Ojpo
YXNSZWxhdGl2ZUludHJpbnNpY0xvZ2ljYWxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgU1ZHU1ZHRWxl
bWVudCogc3ZnID0gdG9TVkdTVkdFbGVtZW50KG5vZGUoKSk7CisgICAgU1ZHU1ZHRWxlbWVudCog
c3ZnID0gdG9TVkdTVkdFbGVtZW50KGVsZW1lbnQoKSk7CiAgICAgQVNTRVJUKHN2Zyk7CiAgICAg
cmV0dXJuIHN2Zy0+aW50cmluc2ljV2lkdGgoU1ZHU1ZHRWxlbWVudDo6SWdub3JlQ1NTUHJvcGVy
dGllcykuaXNQZXJjZW50KCk7CiB9CiAKIGJvb2wgUmVuZGVyU1ZHUm9vdDo6aGFzUmVsYXRpdmVM
b2dpY2FsSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBTVkdTVkdFbGVtZW50KiBzdmcgPSB0b1NWR1NW
R0VsZW1lbnQobm9kZSgpKTsKKyAgICBTVkdTVkdFbGVtZW50KiBzdmcgPSB0b1NWR1NWR0VsZW1l
bnQoZWxlbWVudCgpKTsKICAgICBBU1NFUlQoc3ZnKTsKIAogICAgIHJldHVybiBzdmctPmludHJp
bnNpY0hlaWdodChTVkdTVkdFbGVtZW50OjpJZ25vcmVDU1NQcm9wZXJ0aWVzKS5pc1BlcmNlbnQo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0
LmNwcAkocmV2aXNpb24gMTU1MzY5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDcgKzM1NCw3IEBAIHZvaWQg
UmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkKIAogICAgIGJvb2wgdXBkYXRlQ2FjaGVkQm91bmRhcmll
c0luUGFyZW50cyA9IGZhbHNlOwogICAgIGlmIChtX25lZWRzVHJhbnNmb3JtVXBkYXRlKSB7Ci0g
ICAgICAgIFNWR1RleHRFbGVtZW50KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dEVsZW1lbnQq
Pihub2RlKCkpOworICAgICAgICBTVkdUZXh0RWxlbWVudCogdGV4dCA9IHN0YXRpY19jYXN0PFNW
R1RleHRFbGVtZW50Kj4oZWxlbWVudCgpKTsKICAgICAgICAgbV9sb2NhbFRyYW5zZm9ybSA9IHRl
eHQtPmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKICAgICAgICAgbV9uZWVkc1RyYW5zZm9ybVVw
ZGF0ZSA9IGZhbHNlOwogICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0g
dHJ1ZTsKQEAgLTUxMiw5ICs1MTIsOSBAQCBGbG9hdFJlY3QgUmVuZGVyU1ZHVGV4dDo6c3Ryb2tl
Qm91bmRpbmdCCiAgICAgaWYgKCFzdmdTdHlsZS0+aGFzU3Ryb2tlKCkpCiAgICAgICAgIHJldHVy
biBzdHJva2VCb3VuZGFyaWVzOwogCi0gICAgQVNTRVJUKG5vZGUoKSk7Ci0gICAgQVNTRVJUKG5v
ZGUoKS0+aXNTVkdFbGVtZW50KCkpOwotICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4
dCh0b1NWR0VsZW1lbnQobm9kZSgpKSk7CisgICAgQVNTRVJUKGVsZW1lbnQoKSk7CisgICAgQVNT
RVJUKGVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkpOworICAgIFNWR0xlbmd0aENvbnRleHQgbGVu
Z3RoQ29udGV4dCh0b1NWR0VsZW1lbnQoZWxlbWVudCgpKSk7CiAgICAgc3Ryb2tlQm91bmRhcmll
cy5pbmZsYXRlKHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZhbHVlKGxlbmd0aENvbnRleHQpKTsK
ICAgICByZXR1cm4gc3Ryb2tlQm91bmRhcmllczsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwCShyZXZpc2lvbiAxNTUz
NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBSZW5kZXJTVkdUZXh0UGF0aDo6UmVu
ZGVyU1ZHVGV4dFBhdGgoRWxlCiAKIFBhdGggUmVuZGVyU1ZHVGV4dFBhdGg6OmxheW91dFBhdGgo
KSBjb25zdAogewotICAgIFNWR1RleHRQYXRoRWxlbWVudCogdGV4dFBhdGhFbGVtZW50ID0gdG9T
VkdUZXh0UGF0aEVsZW1lbnQobm9kZSgpKTsKKyAgICBTVkdUZXh0UGF0aEVsZW1lbnQqIHRleHRQ
YXRoRWxlbWVudCA9IHRvU1ZHVGV4dFBhdGhFbGVtZW50KGVsZW1lbnQoKSk7CiAgICAgRWxlbWVu
dCogdGFyZ2V0RWxlbWVudCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklT
dHJpbmcodGV4dFBhdGhFbGVtZW50LT5ocmVmKCksICZ0ZXh0UGF0aEVsZW1lbnQtPmRvY3VtZW50
KCkpOwogICAgIGlmICghdGFyZ2V0RWxlbWVudCB8fCAhdGFyZ2V0RWxlbWVudC0+aGFzVGFnTmFt
ZShTVkdOYW1lczo6cGF0aFRhZykpCiAgICAgICAgIHJldHVybiBQYXRoKCk7CkBAIC02MiwxNyAr
NjIsMTcgQEAgUGF0aCBSZW5kZXJTVkdUZXh0UGF0aDo6bGF5b3V0UGF0aCgpIGNvbgogCiBmbG9h
dCBSZW5kZXJTVkdUZXh0UGF0aDo6c3RhcnRPZmZzZXQoKSBjb25zdAogewotICAgIHJldHVybiB0
b1NWR1RleHRQYXRoRWxlbWVudChub2RlKCkpLT5zdGFydE9mZnNldCgpLnZhbHVlQXNQZXJjZW50
YWdlKCk7CisgICAgcmV0dXJuIHRvU1ZHVGV4dFBhdGhFbGVtZW50KGVsZW1lbnQoKSktPnN0YXJ0
T2Zmc2V0KCkudmFsdWVBc1BlcmNlbnRhZ2UoKTsKIH0KIAogYm9vbCBSZW5kZXJTVkdUZXh0UGF0
aDo6ZXhhY3RBbGlnbm1lbnQoKSBjb25zdAogewotICAgIHJldHVybiB0b1NWR1RleHRQYXRoRWxl
bWVudChub2RlKCkpLT5zcGFjaW5nKCkgPT0gU1ZHVGV4dFBhdGhTcGFjaW5nRXhhY3Q7CisgICAg
cmV0dXJuIHRvU1ZHVGV4dFBhdGhFbGVtZW50KGVsZW1lbnQoKSktPnNwYWNpbmcoKSA9PSBTVkdU
ZXh0UGF0aFNwYWNpbmdFeGFjdDsKIH0KIAogYm9vbCBSZW5kZXJTVkdUZXh0UGF0aDo6c3RyZXRj
aE1ldGhvZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvU1ZHVGV4dFBhdGhFbGVtZW50KG5vZGUo
KSktPm1ldGhvZCgpID09IFNWR1RleHRQYXRoTWV0aG9kU3RyZXRjaDsKKyAgICByZXR1cm4gdG9T
VkdUZXh0UGF0aEVsZW1lbnQoZWxlbWVudCgpKS0+bWV0aG9kKCkgPT0gU1ZHVGV4dFBhdGhNZXRo
b2RTdHJldGNoOwogfQogCiB9Cg==
</data>
<flag name="review"
          id="233117"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>