<?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>62302</bug_id>
          
          <creation_ts>2011-06-08 12:04:03 -0700</creation_ts>
          <short_desc>Remove &quot;const&quot; from obviously non-const accessors</short_desc>
          <delta_ts>2011-07-20 14:12:50 -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="Peter Kasting">pkasting</reporter>
          <assigned_to name="Peter Kasting">pkasting</assigned_to>
          <cc>darin</cc>
    
    <cc>mjs</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>417389</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-06-08 12:04:03 -0700</bug_when>
    <thetext>Some accessors have obvious side effects, e.g. calling updateLayoutIgnorePendingStylesheets().  These should never be &quot;const&quot;.  Other accessors call these and thus are transitively non-const as well.

There are also accessors that e.g. return collections of raw pointers that can be used to mutate state.  Where it isn&apos;t clear how to simply and efficiently provide a const version of these, we should probably mark them non-const as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422892</commentid>
    <comment_count>1</comment_count>
      <attachid>97654</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-06-17 14:36:36 -0700</bug_when>
    <thetext>Created attachment 97654
First patch v1

I also covered this in the ChangeLog, but for ease of reading/sorting, below are the functions made non-const, grouped as to why.  Sorry there&apos;s so many of these, but like most const-related patches, you wind up fixing chains of functions from a few source points :).  Please do look through these to see if I have any bogus rationale.

One unresolved question: Is it possible to provide a const version of Document::images() (and similar nearby accessors) that returns a collection of const pointers/objects that cannot be used to mutate the tree?  If so, we can avoid making some imageElement() accessors necessarily-non-const in this patch.


Functions marked newly non-const because they call existing functions with side effects:

Element::boundsInWindowSpace(): Calls Document::updateLayoutIgnorePendingStylesheets()
Element::cloneElementWithoutAttributesAndChildren(): Calls Document::createElement()
Element::getBoundingClientRect(): Calls Document::updateLayoutIgnorePendingStylesheets()
Element::getClientRects(): Calls Document::updateLayoutIgnorePendingStylesheets()
Element::innerText(): Calls Document::updateLayoutIgnorePendingStylesheets()
Element::scrollHeight(): Calls Document::updateLayoutIgnorePendingStylesheets()
Element::scrollLeft(): Calls Document::updateLayoutIgnorePendingStylesheets()
Element::scrollTop(): Calls Document::updateLayoutIgnorePendingStylesheets()
Element::scrollWidth(): Calls Document::updateLayoutIgnorePendingStylesheets()
HTMLAppletElement::renderWidgetForJSBindings(): Calls RenderApplet::createWidgetIfNecessary()
HTMLBodyElement::scrollHeight(): Calls Document::updateLayoutIgnorePendingStylesheets()
HTMLBodyElement::scrollLeft(): Calls Document::updateLayoutIgnorePendingStylesheets()
HTMLBodyElement::scrollTop(): Calls Document::updateLayoutIgnorePendingStylesheets()
HTMLBodyElement::scrollWidth(): Calls Document::updateLayoutIgnorePendingStylesheets()
HTMLEmbedElement::renderWidgetForJSBindings(): Calls Document::createElement()
HTMLFrameElementBase::height(): Calls Document::updateLayoutIgnorePendingStylesheets()
HTMLFrameElementBase::width(): Calls Document::updateLayoutIgnorePendingStylesheets()
HTMLImageElement::height():  Calls Document::updateLayoutIgnorePendingStylesheets()
HTMLImageElement::width(): Calls Document::updateLayoutIgnorePendingStylesheets()
HTMLMapElement::imageElement(): Calls Document::images()
HTMLObjectElement::renderWidgetForJSBindings(): Calls Document::updateLayoutIgnorePendingStylesheets()
HTMLOptionElement::selected(): Calls HTMLSelectElement::recalcListItemsIfNeeded()
Node::isContentEditable(): Calls Document::updateLayoutIgnorePendingStylesheets()
SVGElement::accessDocumentSVGExtensions():: Calls Document::accessSVGExtensions()
SVGSMILElement::targetElement(): Calls Document::accessSVGExtensions()
SVGStyledElement::buildPendingResourcesIfNeeded(): Calls Document::accessSVGExtensions()
SVGTextContentElement::getCharNumAtPosition(): Calls Document::updateLayoutIgnorePendingStylesheets()
SVGTextContentElement::getComputedTextLength(): Calls Document::updateLayoutIgnorePendingStylesheets()
SVGTextContentElement::getEndPositionOfChar(): Calls Document::updateLayoutIgnorePendingStylesheets()
SVGTextContentElement::getExtentOfChar(): Calls Document::updateLayoutIgnorePendingStylesheets()
SVGTextContentElement::getNumberOfChars(): Calls Document::updateLayoutIgnorePendingStylesheets()
SVGTextContentElement::getRotationOfChar(): Calls Document::updateLayoutIgnorePendingStylesheets()
SVGTextContentElement::getStartPositionOfChar(): Calls Document::updateLayoutIgnorePendingStylesheets()
SVGTextContentElement::getSubStringLength(): Calls Document::updateLayoutIgnorePendingStylesheets()
SVGUseElement::instanceRoot(): Calls Document::updateLayoutIgnorePendingStylesheets()
SVGUseElement::toClipPath(): Calls Document::accessSVGExtensions()


Static functions with a newly-non-const argument, for similar reasons:

static SVGLocatable::computeCTM(): Calls Document::updateLayoutIgnorePendingStylesheets() on arg
static SVGLocatable::getBBox(): Calls Document::updateLayoutIgnorePendingStylesheets() on arg


Virtual functions marked non-const because other implementations in the inheritance hierarchy are newly non-const:

HTMLInputElement::shouldUseInputMethod(): Node version is not const
HTMLPlugInElement::renderWidgetForJSBindings: Various subclass versions are not const
HTMLScriptElement::cloneElementWithoutAttributesAndChildren(): Element version is not const
HTMLTextAreaElement::shouldUseInputMethod(): Node version is not const
KeygenSelectElement::cloneElementWithoutAttributesAndChildren(): Element version is not const
OptionElement::selected(): HTMLOptionElement version is not const
SliderThumbElement::cloneElementWithoutAttributesAndChildren(): Element version is not const
SVGLocatable::getBBox(): Various subclass versions are not const
SVGLocatable::getCTM(): Various subclass versions are not const
SVGLocatable::getScreenCTM(): Various subclass versions are not const
SVGScriptElement::cloneElementWithoutAttributesAndChildren(): Element version is not const
SVGShadowTreeContainerElement::cloneElementWithoutAttributesOrChildren(): Element version is not const
SVGSMILElement::hasValidAttributeType(): Various subclass versions are not const
SVGStyledTransformableElement::toClipPath(): SVGUseElement version is not const


Functions marked newly non-const because they call other functions newly marked non-const:

Element::outerText(): Calls Element::innerText()
HTMLAnchorElement::text(): Calls Element::innerText()
HTMLAreaElement::imageElement(): Calls HTMLMapElement::imageElement()
HTMLPlugInElement::getInstance(): Calls HTMLPlugInElement::pluginWidget()
HTMLPlugInElement::pluginWidget(): Calls HTMLPlugInElement::renderWidgetForJSBindings()
Node::shouldUseInputMethod(): Calls Node::isContentEditable()
SVGAnimateElement::hasValidAttributeType(): Calls SVGSMILElement::targetElement()
SVGAnimateMotionElement::hasValidAttributeType(): Calls SVGSMILElement::targetElement()
SVGAnimateTransformElement::hasValidAttributeType(): Calls SVGSMILElement::targetElement()
SVGElement::boundingBox(): Calls SVGStyledLocatableElement::getBBox()
SVGLocatable::getTransformToElement(): Calls SVGLocatable::getCTM()
SVGSMILElement::eventBaseFor(): Calls SVGSMILElement::targetElement()
SVGStyledLocatableElement::getBBox(): Calls static SVGLocatable::getBBox()
SVGStyledLocatableElement::getCTM(): Calls static SVGLocatable::computeCTM()
SVGStyledLocatableElement::getScreenCTM(): Calls static SVGLocatable::computeCTM()
SVGStyledTransformableElement::getCTM(): Calls static SVGLocatable::computeCTM()
SVGStyledTransformableElement::getScreenCTM(): Calls static SVGLocatable::computeCTM()
SVGStyledTransformableElement::getBBox(): Calls static SVGLocatable::getBBox()
SVGTextContentElement::selectSubString(): Calls SVGTextContentElement::getNumberOfChars()
SVGTextElement::getBBox(): Calls static SVGLocatable::getBBox()
SVGTextElement::getCTM(): Calls static SVGLocatable::computeCTM()
SVGTextElement::getScreenCTM(): Calls static SVGLocatable::computeCTM()
WebElement::innerText(): Calls Element::innerText()


Finally, note the above reasons are not necessarily complete explanations, e.g. the cloneElementWithoutAttributesAndChildren() functions also generally create new objects, return pointers that allow tree mutation, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423031</commentid>
    <comment_count>2</comment_count>
      <attachid>97654</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-17 20:22:09 -0700</bug_when>
    <thetext>Comment on attachment 97654
First patch v1

Attachment 97654 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/8876801</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423036</commentid>
    <comment_count>3</comment_count>
      <attachid>97654</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-17 21:15:20 -0700</bug_when>
    <thetext>Comment on attachment 97654
First patch v1

Attachment 97654 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/8874764</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423125</commentid>
    <comment_count>4</comment_count>
      <attachid>97654</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-18 10:04:21 -0700</bug_when>
    <thetext>Comment on attachment 97654
First patch v1

Need to figure out why Mac EWS build failed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423807</commentid>
    <comment_count>5</comment_count>
      <attachid>97828</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-06-20 11:40:24 -0700</bug_when>
    <thetext>Created attachment 97828
First patch v2

This should fix the Mac EWS build error.  I adjusted two function names in the exported symbols list to reflect their dropping of &quot;const&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437936</commentid>
    <comment_count>6</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-07-15 13:14:09 -0700</bug_when>
    <thetext>Any chance of a review on this?  I keep needing to fix small merge conflicts due to carrying this...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438066</commentid>
    <comment_count>7</comment_count>
      <attachid>97828</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-15 17:02:48 -0700</bug_when>
    <thetext>Comment on attachment 97828
First patch v2

From reviewing the patch, I can’t tell if there is a mistake where we removed const from a function in a class and not from the same function in a derived class. That’s the main thing I’d worry about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438071</commentid>
    <comment_count>8</comment_count>
      <attachid>97828</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-15 17:09:36 -0700</bug_when>
    <thetext>Comment on attachment 97828
First patch v2

Rejecting attachment 97828 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=ec2-cq-02&apos;, &apos;--port...&quot; exit_code: 2

Last 500 characters of output:
85 with fuzz 1 (offset -1 lines).
patching file Source/WebKit/chromium/src/WebSearchableFormData.cpp
patching file Source/WebKit/chromium/src/WebViewImpl.cpp
Hunk #1 succeeded at 1385 (offset 30 lines).
Hunk #2 succeeded at 1434 (offset 30 lines).
Hunk #3 FAILED at 1453.
1 out of 3 hunks FAILED -- saving rejects to file Source/WebKit/chromium/src/WebViewImpl.cpp.rej

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Darin Adler&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/9099485</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439960</commentid>
    <comment_count>9</comment_count>
      <attachid>101501</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-07-20 13:20:28 -0700</bug_when>
    <thetext>Created attachment 101501
First patch v3

Updated to apply to latest trunk.  I also manually rechecked all the virtual function changes to ensure that when one virtual function was changed, all others along the hierarchy were as well.  (This led me to add the missing &quot;virtual&quot; keyword to a couple of function declarations.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440008</commentid>
    <comment_count>10</comment_count>
      <attachid>101501</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-20 14:12:45 -0700</bug_when>
    <thetext>Comment on attachment 101501
First patch v3

Clearing flags on attachment: 101501

Committed r91404: &lt;http://trac.webkit.org/changeset/91404&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440009</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-20 14:12:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97654</attachid>
            <date>2011-06-17 14:36:36 -0700</date>
            <delta_ts>2011-06-20 11:40:24 -0700</delta_ts>
            <desc>First patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>75080</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5MTcxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQ1IEBACisyMDExLTA2LTE3ICBQZXRlciBL
YXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgImNvbnN0IiBmcm9tIG9idmlvdXNseS1ub24t
Y29uc3QgYWNjZXNzb3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02MjMwMgorCisgICAgICAgIE5vIGZ1bmN0aW9uYWwgY2hhbmdlLCBzbyBubyBuZXcg
dGVzdHMuCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKTogTm90IGNv
bnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OmNyZWF0ZUVsZW1lbnQoKS4K
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNjcm9sbExlZnQpOiBOb3QgY29uc3QsIGNhbGxz
IG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzY3JvbGxUb3ApOiBOb3Qg
Y29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzY3Jv
bGxXaWR0aCk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1
cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OnNjcm9sbEhlaWdodCk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0
aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmJvdW5kc0luV2luZG93U3BhY2UpOiBOb3QgY29uc3Qs
IGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6dXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXRDbGllbnRS
ZWN0cyk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRh
dGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OmdldEJvdW5kaW5nQ2xpZW50UmVjdCk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0
IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMo
KS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmlubmVyVGV4dCk6IE5vdCBjb25zdCwgY2Fs
bHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5n
U3R5bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Om91dGVyVGV4dCk6IE5v
dCBjb25zdCwgY2FsbHMgbmV3bHkgbm9uLWNvbnN0IGZ1bmN0aW9uIEVsZW1lbnQ6OmlubmVyVGV4
dCgpLgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICogZG9tL05vZGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNDb250ZW50RWRpdGFibGUpOiBOb3QgY29uc3QsIGNh
bGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGlu
Z1N0eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzaG91bGRVc2VJbnB1dE1l
dGhvZCk6IE5vdCBjb25zdCwgY2FsbHMgbmV3bHkgbm9uLWNvbnN0IGZ1bmN0aW9uIE5vZGU6Omlz
Q29udGVudEVkaXRhYmxlKCkuCisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKiBkb20v
T3B0aW9uRWxlbWVudC5oOiBWaXJ0dWFsIGZ1bmN0aW9uIE9wdGlvbkVsZW1lbnQ6OnNlbGVjdGVk
KCkgbm90IGNvbnN0IGJlY2F1c2UgSFRNTE9wdGlvbkVsZW1lbnQgaW1wbGVtZW50YXRpb24gaXMg
bm9uLWNvbnN0LgorICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnRleHQpOiBOb3QgY29uc3QsIGNhbGxzIG5l
d2x5IG5vbi1jb25zdCBmdW5jdGlvbiBFbGVtZW50Ojppbm5lclRleHQoKS4KKyAgICAgICAgKiBo
dG1sL0hUTUxBbmNob3JFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MQXBwbGV0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudDo6cmVuZGVyV2lkZ2V0
Rm9ySlNCaW5kaW5ncyk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIFJlbmRl
ckFwcGxldDo6Y3JlYXRlV2lkZ2V0SWZOZWNlc3NhcnkoKS4KKyAgICAgICAgKiBodG1sL0hUTUxB
cHBsZXRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50OjppbWFnZUVsZW1lbnQpOiBOb3QgY29uc3Qs
IGNhbGxzIG5ld2x5IG5vbi1jb25zdCBmdW5jdGlvbiBIVE1MTWFwRWxlbWVudDo6aW1hZ2VFbGVt
ZW50KCkuCisgICAgICAgICogaHRtbC9IVE1MQXJlYUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1s
L0hUTUxCb2R5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQ6
OnNjcm9sbExlZnQpOiBOb3QgY29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVu
dDo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJD
b3JlOjpIVE1MQm9keUVsZW1lbnQ6OnNjcm9sbFRvcCk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNv
bnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6c2Nyb2xsSGVpZ2h0KTog
Tm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJvZHlF
bGVtZW50OjpzY3JvbGxXaWR0aCk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9u
IERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAg
ICAgKiBodG1sL0hUTUxCb2R5RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50OjpyZW5kZXJXaWRn
ZXRGb3JKU0JpbmRpbmdzKTogTm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9j
dW1lbnQ6OmNyZWF0ZUVsZW1lbnQoKS4KKyAgICAgICAgKiBodG1sL0hUTUxFbWJlZEVsZW1lbnQu
aDoKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjp3aWR0aCk6IE5vdCBjb25zdCwgY2FsbHMgbm9u
LWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpoZWlnaHQp
OiBOb3QgY29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAgICogaHRtbC9IVE1MRnJhbWVF
bGVtZW50QmFzZS5oOgorICAgICAgICAqIGh0bWwvSFRNTEltYWdlRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Ojp3aWR0aCk6IE5vdCBjb25zdCwgY2FsbHMg
bm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5
bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OmhlaWdodCk6
IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUVs
ZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2hvdWxkVXNlSW5wdXRNZXRob2QpOiBWaXJ0dWFs
IGZ1bmN0aW9uIG5vdCBjb25zdCBiZWNhdXNlIE5vZGUgaW1wbGVtZW50YXRpb24gaXMgbm9uLWNv
bnN0LgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwv
SFRNTEtleWdlbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5Z2VuU2VsZWN0RWxl
bWVudDo6Y2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbik6IFZpcnR1YWwg
ZnVuY3Rpb24gbm90IGNvbnN0IGJlY2F1c2UgRWxlbWVudCBpbXBsZW1lbnRhdGlvbiBpcyBub24t
Y29uc3QuCisgICAgICAgICogaHRtbC9IVE1MTWFwRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWFwRWxlbWVudDo6aW1hZ2VFbGVtZW50KTogTm90IGNvbnN0LCBjYWxscyBub24t
Y29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OmltYWdlcygpLgorICAgICAgICAqIGh0bWwvSFRNTE1h
cEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpyZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdz
KTogTm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OnVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpLgorICAgICAgICAqIGh0bWwvSFRNTE9iamVj
dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpzZWxlY3RlZCk6IE5vdCBjb25zdCwgY2Fs
bHMgbm9uLWNvbnN0IGZ1bmN0aW9uIEhUTUxTZWxlY3RFbGVtZW50OjpyZWNhbGNMaXN0SXRlbXNJ
Zk5lZWRlZCgpLgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaDoKKyAgICAgICAg
KiBodG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcDogVmlydHVhbCBmdW5jdGlvbiBIVE1MUGx1Z0lu
RWxlbWVudDo6cmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygpIG5vdCBjb25zdCBiZWNhdXNlIHZh
cmlvdXMgc3ViY2xhc3MgaW1wbGVtZW50YXRpb25zIGFyZSBub24tY29uc3QuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudDo6Z2V0SW5zdGFuY2UpOiBOb3QgY29uc3QsIGNhbGxz
IG5ld2x5IG5vbi1jb25zdCBmdW5jdGlvbiBIVE1MUGx1Z0luRWxlbWVudDo6cGx1Z2luV2lkZ2V0
KCkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudDo6cGx1Z2luV2lkZ2V0KTog
Tm90IGNvbnN0LCBjYWxscyBuZXdseSBub24tY29uc3QgZnVuY3Rpb24gSFRNTFBsdWdJbkVsZW1l
bnQ6OnJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKS4KKyAgICAgICAgKiBodG1sL0hUTUxQbHVn
SW5FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91dEF0dHJp
YnV0ZXNBbmRDaGlsZHJlbik6IFZpcnR1YWwgZnVuY3Rpb24gbm90IGNvbnN0IGJlY2F1c2UgRWxl
bWVudCBpbXBsZW1lbnRhdGlvbiBpcyBub24tY29uc3QuCisgICAgICAgICogaHRtbC9IVE1MU2Ny
aXB0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpzaG91bGRVc2VJbnB1dE1ldGhv
ZCk6IFZpcnR1YWwgZnVuY3Rpb24gbm90IGNvbnN0IGJlY2F1c2UgTm9kZSBpbXBsZW1lbnRhdGlv
biBpcyBub24tY29uc3QuCisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50Lmg6Cisg
ICAgICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpTbGlkZXJUaHVtYkVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5k
Q2hpbGRyZW4pOiBWaXJ0dWFsIGZ1bmN0aW9uIG5vdCBjb25zdCBiZWNhdXNlIEVsZW1lbnQgaW1w
bGVtZW50YXRpb24gaXMgbm9uLWNvbnN0LgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHU2hh
ZG93VHJlZUVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NoYWRvd1RyZWVDb250
YWluZXJFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKTog
VmlydHVhbCBmdW5jdGlvbiBub3QgY29uc3QgYmVjYXVzZSBFbGVtZW50IGltcGxlbWVudGF0aW9u
IGlzIG5vbi1jb25zdC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVt
ZW50cy5oOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKTogTm90IGNv
bnN0LCBjYWxscyBuZXdseSBub24tY29uc3QgZnVuY3Rpb24gU1ZHU01JTEVsZW1lbnQ6OnRhcmdl
dEVsZW1lbnQoKS4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaDoKKyAgICAgICAg
KiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSk6IE5vdCBjb25zdCwg
Y2FsbHMgbmV3bHkgbm9uLWNvbnN0IGZ1bmN0aW9uIFNWR1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVt
ZW50KCkuCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50Lmg6CisgICAgICAg
ICogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUpOiBOb3Qg
Y29uc3QsIGNhbGxzIG5ld2x5IG5vbi1jb25zdCBmdW5jdGlvbiBTVkdTTUlMRWxlbWVudDo6dGFy
Z2V0RWxlbWVudCgpLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Vs
ZW1lbnQ6OmFjY2Vzc0RvY3VtZW50U1ZHRXh0ZW5zaW9ucyk6IE5vdCBjb25zdCwgY2FsbHMgbm9u
LWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50OjphY2Nlc3NTVkdFeHRlbnNpb25zKCkuCisgICAgICAg
IChXZWJDb3JlOjpTVkdFbGVtZW50Ojpib3VuZGluZ0JveCk6IE5vdCBjb25zdCwgY2FsbHMgbmV3
bHkgbm9uLWNvbnN0IGZ1bmN0aW9uIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmdldEJCb3go
KS4KKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdMb2NhdGFi
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTG9jYXRhYmxlOjpnZXRCQm94KTogQXJndW1l
bnQgbm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OnVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpIG9uIGFyZ3VtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHTG9jYXRhYmxlOjpjb21wdXRlQ1RNKTogQXJndW1lbnQgbm90IGNvbnN0LCBjYWxs
cyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cygpIG9uIGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6U1ZHTG9jYXRhYmxl
OjpnZXRUcmFuc2Zvcm1Ub0VsZW1lbnQpOiBOb3QgY29uc3QsIGNhbGxzIG5ld2x5IG5vbi1jb25z
dCBmdW5jdGlvbiBTVkdMb2NhdGFibGU6OmdldENUTSgpLgorICAgICAgICAqIHN2Zy9TVkdMb2Nh
dGFibGUuaDogVmlydHVhbCBmdW5jdGlvbnMgU1ZHTG9jYXRhYmxlOjpnZXRCQm94KCksIFNWR0xv
Y2F0YWJsZTo6Z2V0Q1RNKCksIGFuZCBTVkdMb2NhdGFibGU6OmdldFNjcmVlbkNUTSgpIG5vdCBj
b25zdCBiZWNhdXNlIHZhcmlvdXMgc3ViY2xhc3MgaW1wbGVtZW50YXRpb25zIGFyZSBub24tY29u
c3QuCisgICAgICAgICogc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU2NyaXB0RWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGls
ZHJlbik6IFZpcnR1YWwgZnVuY3Rpb24gbm90IGNvbnN0IGJlY2F1c2UgRWxlbWVudCBpbXBsZW1l
bnRhdGlvbiBpcyBub24tY29uc3QuCisgICAgICAgICogc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdTdHlsZWRFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZXNJZk5lZWRlZCk6IE5vdCBjb25z
dCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50OjphY2Nlc3NTVkdFeHRlbnNpb25z
KCkuCisgICAgICAgICogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZH
U3R5bGVkTG9jYXRhYmxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRM
b2NhdGFibGVFbGVtZW50OjpnZXRCQm94KTogTm90IGNvbnN0LCBjYWxscyBuZXdseSBub24tY29u
c3Qgc3RhdGljIGZ1bmN0aW9uIFNWR0xvY2F0YWJsZTo6Z2V0QkJveCgpLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0Q1RNKTogTm90IGNvbnN0LCBjYWxs
cyBuZXdseSBub24tY29uc3Qgc3RhdGljIGZ1bmN0aW9uIFNWR0xvY2F0YWJsZTo6Y29tcHV0ZUNU
TSgpLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0U2Ny
ZWVuQ1RNKTogTm90IGNvbnN0LCBjYWxscyBuZXdseSBub24tY29uc3Qgc3RhdGljIGZ1bmN0aW9u
IFNWR0xvY2F0YWJsZTo6Y29tcHV0ZUNUTSgpLgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRMb2Nh
dGFibGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
OjpnZXRDVE0pOiBOb3QgY29uc3QsIGNhbGxzIG5ld2x5IG5vbi1jb25zdCBzdGF0aWMgZnVuY3Rp
b24gU1ZHTG9jYXRhYmxlOjpjb21wdXRlQ1RNKCkuCisgICAgICAgIChXZWJDb3JlOjpTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKTogTm90IGNvbnN0LCBjYWxscyBu
ZXdseSBub24tY29uc3Qgc3RhdGljIGZ1bmN0aW9uIFNWR0xvY2F0YWJsZTo6Y29tcHV0ZUNUTSgp
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmdldEJC
b3gpOiBOb3QgY29uc3QsIGNhbGxzIG5ld2x5IG5vbi1jb25zdCBzdGF0aWMgZnVuY3Rpb24gU1ZH
TG9jYXRhYmxlOjpnZXRCQm94KCkuCisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudDo6dG9DbGlwUGF0aCk6IFZpcnR1YWwgZnVuY3Rpb24gbm90IGNvbnN0IGJl
Y2F1c2UgU1ZHVXNlRWxlbWVudCBpbXBsZW1lbnRhdGlvbiBpcyBub24tY29uc3QuCisgICAgICAg
ICogc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R1RleHRDb250ZW50RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q29udGVu
dEVsZW1lbnQ6OmdldE51bWJlck9mQ2hhcnMpOiBOb3QgY29uc3QsIGNhbGxzIG5vbi1jb25zdCBm
dW5jdGlvbiBEb2N1bWVudDo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCku
CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldENvbXB1dGVkVGV4
dExlbmd0aCk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1
cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0U3ViU3RyaW5nTGVuZ3RoKTogTm90IGNvbnN0LCBj
YWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50
OjpnZXRTdGFydFBvc2l0aW9uT2ZDaGFyKTogTm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVu
Y3Rpb24gRG9jdW1lbnQ6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRFbmRQb3NpdGlvbk9m
Q2hhcik6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRh
dGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRDb250ZW50RWxlbWVudDo6Z2V0RXh0ZW50T2ZDaGFyKTogTm90IGNvbnN0LCBjYWxscyBu
b24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRS
b3RhdGlvbk9mQ2hhcik6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3Vt
ZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0Q2hhck51bUF0UG9zaXRpb24pOiBOb3Qg
Y29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q29udGVu
dEVsZW1lbnQ6OnNlbGVjdFN1YlN0cmluZyk6IE5vdCBjb25zdCwgY2FsbHMgbmV3bHkgbm9uLWNv
bnN0IHN0YXRpYyBmdW5jdGlvbiBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldE51bWJlck9mQ2hh
cnMoKS4KKyAgICAgICAgKiBzdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50Lmg6CisgICAgICAgICog
c3ZnL1NWR1RleHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRFbGVtZW50
OjpnZXRCQm94KTogTm90IGNvbnN0LCBjYWxscyBuZXdseSBub24tY29uc3Qgc3RhdGljIGZ1bmN0
aW9uIFNWR0xvY2F0YWJsZTo6Z2V0QkJveCgpLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVs
ZW1lbnQ6OmdldENUTSk6IE5vdCBjb25zdCwgY2FsbHMgbmV3bHkgbm9uLWNvbnN0IHN0YXRpYyBm
dW5jdGlvbiBTVkdMb2NhdGFibGU6OmNvbXB1dGVDVE0oKS4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRFbGVtZW50OjpnZXRTY3JlZW5DVE0pOiBOb3QgY29uc3QsIGNhbGxzIG5ld2x5IG5vbi1j
b25zdCBzdGF0aWMgZnVuY3Rpb24gU1ZHTG9jYXRhYmxlOjpjb21wdXRlQ1RNKCkuCisgICAgICAg
ICogc3ZnL1NWR1RleHRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6aW5zdGFuY2VSb290KTogTm90IGNv
bnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OnVwZGF0ZUxheW91dElnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cygpLgorICAgICAgICAoV2ViQ29yZTo6aXNEaXJlY3RSZWZlcmVu
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6dG9DbGlwUGF0aCk6IE5vdCBj
b25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50OjphY2Nlc3NTVkdFeHRlbnNp
b25zKCkuCisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvYW5p
bWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVt
ZW50OjpldmVudEJhc2VGb3IpOiBOb3QgY29uc3QsIGNhbGxzIG5ld2x5IG5vbi1jb25zdCBmdW5j
dGlvbiBTVkdTTUlMRWxlbWVudDo6dGFyZ2V0RWxlbWVudCgpLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU01JTEVsZW1lbnQ6OnRhcmdldEVsZW1lbnQpOiBOb3QgY29uc3QsIGNhbGxzIG5vbi1jb25z
dCBmdW5jdGlvbiBEb2N1bWVudDo6YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLgorICAgICAgICAqIHN2
Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaDogVmlydHVhbCBmdW5jdGlvbiBTVkdTTUlMRWxl
bWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgbm90IGNvbnN0IGJlY2F1c2UgdmFyaW91cyBz
dWJjbGFzcyBpbXBsZW1lbnRhdGlvbnMgYXJlIG5vbi1jb25zdC4KKwogMjAxMS0wNi0xNyAgQWJo
aXNoZWsgQXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhdmUgSHlhdHQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4ODk1MykK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4
LDcgKzIwOCw3IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gRWxlbWVudDo6Y2xvbmVFbGVtZW4KICAg
ICByZXR1cm4gY2xvbmUucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEVsZW1lbnQ+IEVsZW1l
bnQ6OmNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKSBjb25zdAorUGFz
c1JlZlB0cjxFbGVtZW50PiBFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0Fu
ZENoaWxkcmVuKCkKIHsKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudCh0YWdR
TmFtZSgpLCBmYWxzZSk7CiB9CkBAIC00NjMsNyArNDYzLDcgQEAgaW50IEVsZW1lbnQ6OmNsaWVu
dEhlaWdodCgpCiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBFbGVtZW50OjpzY3JvbGxMZWZ0KCkg
Y29uc3QKK2ludCBFbGVtZW50OjpzY3JvbGxMZWZ0KCkKIHsKICAgICBkb2N1bWVudCgpLT51cGRh
dGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICBpZiAoUmVuZGVyQm94KiBy
ZW5kID0gcmVuZGVyQm94KCkpCkBAIC00NzEsNyArNDcxLDcgQEAgaW50IEVsZW1lbnQ6OnNjcm9s
bExlZnQoKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCi1pbnQgRWxlbWVudDo6c2Nyb2xsVG9w
KCkgY29uc3QKK2ludCBFbGVtZW50OjpzY3JvbGxUb3AoKQogewogICAgIGRvY3VtZW50KCktPnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIGlmIChSZW5kZXJCb3gq
IHJlbmQgPSByZW5kZXJCb3goKSkKQEAgLTQ5Myw3ICs0OTMsNyBAQCB2b2lkIEVsZW1lbnQ6OnNl
dFNjcm9sbFRvcChpbnQgbmV3VG9wKQogICAgICAgICByZW5kLT5zZXRTY3JvbGxUb3Aoc3RhdGlj
X2Nhc3Q8aW50PihuZXdUb3AgKiByZW5kLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKTsKIH0K
IAotaW50IEVsZW1lbnQ6OnNjcm9sbFdpZHRoKCkgY29uc3QKK2ludCBFbGVtZW50OjpzY3JvbGxX
aWR0aCgpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7CiAgICAgaWYgKFJlbmRlckJveCogcmVuZCA9IHJlbmRlckJveCgpKQpAQCAtNTAx
LDcgKzUwMSw3IEBAIGludCBFbGVtZW50OjpzY3JvbGxXaWR0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IDA7CiB9CiAKLWludCBFbGVtZW50OjpzY3JvbGxIZWlnaHQoKSBjb25zdAoraW50IEVsZW1lbnQ6
OnNjcm9sbEhlaWdodCgpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgaWYgKFJlbmRlckJveCogcmVuZCA9IHJlbmRlckJveCgp
KQpAQCAtNTA5LDcgKzUwOSw3IEBAIGludCBFbGVtZW50OjpzY3JvbGxIZWlnaHQoKSBjb25zdAog
ICAgIHJldHVybiAwOwogfQogCi1JbnRSZWN0IEVsZW1lbnQ6OmJvdW5kc0luV2luZG93U3BhY2Uo
KSBjb25zdAorSW50UmVjdCBFbGVtZW50Ojpib3VuZHNJbldpbmRvd1NwYWNlKCkKIHsKICAgICBk
b2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIApAQCAt
NTIxLDcgKzUyMSw3IEBAIEludFJlY3QgRWxlbWVudDo6Ym91bmRzSW5XaW5kb3dTcGFjZSgpIGMK
ICNpZiBFTkFCTEUoU1ZHKQogICAgIGlmIChpc1NWR0VsZW1lbnQoKSAmJiByZW5kZXJlcigpKSB7
CiAgICAgICAgIC8vIEdldCB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIGZyb20gdGhlIFNWRyBtb2Rl
bC4KLSAgICAgICAgY29uc3QgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PGNv
bnN0IFNWR0VsZW1lbnQqPih0aGlzKTsKKyAgICAgICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9
IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPih0aGlzKTsKICAgICAgICAgRmxvYXRSZWN0IGxvY2Fs
UmVjdDsKICAgICAgICAgaWYgKHN2Z0VsZW1lbnQtPmJvdW5kaW5nQm94KGxvY2FsUmVjdCkpCiAg
ICAgICAgICAgICBxdWFkcy5hcHBlbmQocmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChs
b2NhbFJlY3QpKTsKQEAgLTU0NCw3ICs1NDQsNyBAQCBJbnRSZWN0IEVsZW1lbnQ6OmJvdW5kc0lu
V2luZG93U3BhY2UoKSBjCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUGFzc1JlZlB0cjxDbGll
bnRSZWN0TGlzdD4gRWxlbWVudDo6Z2V0Q2xpZW50UmVjdHMoKSBjb25zdAorUGFzc1JlZlB0cjxD
bGllbnRSZWN0TGlzdD4gRWxlbWVudDo6Z2V0Q2xpZW50UmVjdHMoKQogewogICAgIGRvY3VtZW50
KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCkBAIC01NzcsNyAr
NTc3LDcgQEAgUGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4gRWxlbWVudDo6Z2V0QwogICAgIHJl
dHVybiBDbGllbnRSZWN0TGlzdDo6Y3JlYXRlKHF1YWRzKTsKIH0KIAotUGFzc1JlZlB0cjxDbGll
bnRSZWN0PiBFbGVtZW50OjpnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSBjb25zdAorUGFzc1JlZlB0
cjxDbGllbnRSZWN0PiBFbGVtZW50OjpnZXRCb3VuZGluZ0NsaWVudFJlY3QoKQogewogICAgIGRv
Y3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCkBAIC01
ODUsNyArNTg1LDcgQEAgUGFzc1JlZlB0cjxDbGllbnRSZWN0PiBFbGVtZW50OjpnZXRCb3VuZAog
I2lmIEVOQUJMRShTVkcpCiAgICAgaWYgKGlzU1ZHRWxlbWVudCgpICYmIHJlbmRlcmVyKCkpIHsK
ICAgICAgICAgLy8gR2V0IHRoZSBib3VuZGluZyByZWN0YW5nbGUgZnJvbSB0aGUgU1ZHIG1vZGVs
LgotICAgICAgICBjb25zdCBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgU1ZHRWxlbWVudCo+KHRoaXMpOworICAgICAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHRoaXMpOwogICAgICAgICBGbG9hdFJlY3QgbG9jYWxS
ZWN0OwogICAgICAgICBpZiAoc3ZnRWxlbWVudC0+Ym91bmRpbmdCb3gobG9jYWxSZWN0KSkKICAg
ICAgICAgICAgIHF1YWRzLmFwcGVuZChyZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKGxv
Y2FsUmVjdCkpOwpAQCAtMTY0MSw3ICsxNjQxLDcgQEAgdm9pZCBFbGVtZW50OjpibHVyKCkKICAg
ICB9CiB9CiAKLVN0cmluZyBFbGVtZW50Ojppbm5lclRleHQoKSBjb25zdAorU3RyaW5nIEVsZW1l
bnQ6OmlubmVyVGV4dCgpCiB7CiAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgbGF5b3V0LCBzaW5j
ZSBwbGFpblRleHQgdXNlcyBsaW5lIGJveGVzIGluIHRoZSByZW5kZXIgdHJlZS4KICAgICBkb2N1
bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKQEAgLTE2NTIs
NyArMTY1Miw3IEBAIFN0cmluZyBFbGVtZW50Ojppbm5lclRleHQoKSBjb25zdAogICAgIHJldHVy
biBwbGFpblRleHQocmFuZ2VPZkNvbnRlbnRzKGNvbnN0X2Nhc3Q8RWxlbWVudCo+KHRoaXMpKS5n
ZXQoKSk7CiB9CiAKLVN0cmluZyBFbGVtZW50OjpvdXRlclRleHQoKSBjb25zdAorU3RyaW5nIEVs
ZW1lbnQ6Om91dGVyVGV4dCgpCiB7CiAgICAgLy8gR2V0dGluZyBvdXRlclRleHQgaXMgdGhlIHNh
bWUgYXMgZ2V0dGluZyBpbm5lclRleHQsIG9ubHkKICAgICAvLyBzZXR0aW5nIGlzIGRpZmZlcmVu
dC4gWW91IHdvdWxkIHRoaW5rIHRoaXMgc2hvdWxkIGdldCB0aGUgcGxhaW4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuaAkocmV2aXNpb24gODg5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsMTcgKzE2MCwxNyBAQCBwdWJsaWM6CiAgICAgaW50
IGNsaWVudFRvcCgpOwogICAgIGludCBjbGllbnRXaWR0aCgpOwogICAgIGludCBjbGllbnRIZWln
aHQoKTsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxMZWZ0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBp
bnQgc2Nyb2xsVG9wKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsTGVmdCgpOworICAg
IHZpcnR1YWwgaW50IHNjcm9sbFRvcCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxMZWZ0
KGludCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChpbnQpOwotICAgIHZpcnR1YWwg
aW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsSGVpZ2h0KCkg
Y29uc3Q7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsV2lkdGgoKTsKKyAgICB2aXJ0dWFsIGludCBz
Y3JvbGxIZWlnaHQoKTsKIAotICAgIEludFJlY3QgYm91bmRzSW5XaW5kb3dTcGFjZSgpIGNvbnN0
OworICAgIEludFJlY3QgYm91bmRzSW5XaW5kb3dTcGFjZSgpOwogCi0gICAgUGFzc1JlZlB0cjxD
bGllbnRSZWN0TGlzdD4gZ2V0Q2xpZW50UmVjdHMoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPENs
aWVudFJlY3Q+IGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8
Q2xpZW50UmVjdExpc3Q+IGdldENsaWVudFJlY3RzKCk7CisgICAgUGFzc1JlZlB0cjxDbGllbnRS
ZWN0PiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAKICAgICAvLyBSZXR1cm5zIHRoZSBh
YnNvbHV0ZSBib3VuZGluZyBib3ggdHJhbnNsYXRlZCBpbnRvIHNjcmVlbiBjb29yZGluYXRlczoK
ICAgICBJbnRSZWN0IHNjcmVlblJlY3QoKSBjb25zdDsKQEAgLTI1Nyw4ICsyNTcsOCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZvY3VzQXBwZWFyYW5jZShib29sIHJlc3RvcmVQ
cmV2aW91c1NlbGVjdGlvbik7CiAgICAgdm9pZCBibHVyKCk7CiAKLSAgICBTdHJpbmcgaW5uZXJU
ZXh0KCkgY29uc3Q7Ci0gICAgU3RyaW5nIG91dGVyVGV4dCgpIGNvbnN0OworICAgIFN0cmluZyBp
bm5lclRleHQoKTsKKyAgICBTdHJpbmcgb3V0ZXJUZXh0KCk7CiAgCiAgICAgdmlydHVhbCBTdHJp
bmcgdGl0bGUoKSBjb25zdDsKIApAQCAtNDE3LDcgKzQxNyw3IEBAIHByaXZhdGU6CiAgICAgLy8g
Y2xvbmVOb2RlIGlzIHByaXZhdGUgc28gdGhhdCBub24tdmlydHVhbCBjbG9uZUVsZW1lbnRXaXRo
Q2hpbGRyZW4gYW5kIGNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbgogICAgIC8vIGFyZSB1c2Vk
IGluc3RlYWQuCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IGNsb25lTm9kZShib29sIGRl
ZXApOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxFbGVtZW50PiBjbG9uZUVsZW1lbnRXaXRob3V0
QXR0cmlidXRlc0FuZENoaWxkcmVuKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEVs
ZW1lbnQ+IGNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKTsKIAogICAg
IFF1YWxpZmllZE5hbWUgbV90YWdOYW1lOwogICAgIHZpcnR1YWwgTm9kZVJhcmVEYXRhKiBjcmVh
dGVSYXJlRGF0YSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gODg5NTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1Nyw3ICs3NTcs
NyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIE5vZGU6OnZpcnR1YWxOYW1lc3BhCiAgICAgcmV0dXJu
IG51bGxBdG9tOwogfQogCi1ib29sIE5vZGU6OmlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QKK2Jv
b2wgTm9kZTo6aXNDb250ZW50RWRpdGFibGUoKQogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIHJldHVybiByZW5kZXJlcklzRWRp
dGFibGUoRWRpdGFibGUpOwpAQCAtNzkwLDcgKzc5MCw3IEBAIGJvb2wgTm9kZTo6cmVuZGVyZXJJ
c0VkaXRhYmxlKEVkaXRhYmxlTGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgTm9kZTo6
c2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdAorYm9vbCBOb2RlOjpzaG91bGRVc2VJbnB1dE1l
dGhvZCgpCiB7CiAgICAgcmV0dXJuIGlzQ29udGVudEVkaXRhYmxlKCk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmgJKHJldmlzaW9uIDg4OTUzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzM3LDExICszMzcsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBOb2RlKiBmb2N1c0RlbGVn
YXRlKCk7CiAKLSAgICBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7CisgICAgYm9vbCBp
c0NvbnRlbnRFZGl0YWJsZSgpOwogCiAgICAgYm9vbCByZW5kZXJlcklzRWRpdGFibGUoKSBjb25z
dCB7IHJldHVybiByZW5kZXJlcklzRWRpdGFibGUoRWRpdGFibGUpOyB9CiAgICAgYm9vbCByZW5k
ZXJlcklzUmljaGx5RWRpdGFibGUoKSBjb25zdCB7IHJldHVybiByZW5kZXJlcklzRWRpdGFibGUo
UmljaGx5RWRpdGFibGUpOyB9Ci0gICAgdmlydHVhbCBib29sIHNob3VsZFVzZUlucHV0TWV0aG9k
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUlucHV0TWV0aG9kKCk7CiAgICAg
dmlydHVhbCBJbnRSZWN0IGdldFJlY3QoKSBjb25zdDsKICAgICBJbnRSZWN0IHJlbmRlclJlY3Qo
Ym9vbCogaXNSZXBsYWNlZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9PcHRpb25FbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL09wdGlvbkVsZW1lbnQuaAko
cmV2aXNpb24gODg5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vT3B0aW9uRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5PcHRp
b25FbGVtZW50KCkgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWQoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBib29sIHNlbGVjdGVkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBzZWxlY3RlZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRTdGF0ZShib29s
KSA9IDA7CiAKICAgICB2aXJ0dWFsIFN0cmluZyB0ZXh0KCkgY29uc3QgPSAwOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDg4OTUzKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2Nyw3ICs0NjcsNyBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpzZXRTZWFyY2go
Y29uc3QKICAgICBzZXRIcmVmKHVybC5zdHJpbmcoKSk7CiB9CiAKLVN0cmluZyBIVE1MQW5jaG9y
RWxlbWVudDo6dGV4dCgpIGNvbnN0CitTdHJpbmcgSFRNTEFuY2hvckVsZW1lbnQ6OnRleHQoKQog
ewogICAgIHJldHVybiBpbm5lclRleHQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEFuY2hvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBbmNob3JFbGVtZW50LmgJKHJldmlzaW9uIDg4OTUzKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQW5jaG9yRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHB1
YmxpYzoKIAogICAgIFN0cmluZyBnZXRQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAK
LSAgICBTdHJpbmcgdGV4dCgpIGNvbnN0OworICAgIFN0cmluZyB0ZXh0KCk7CiAKICAgICBTdHJp
bmcgdG9TdHJpbmcoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBw
bGV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBw
bGV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDg4OTUzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQXBwbGV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAsNyBAQCB2
b2lkIEhUTUxBcHBsZXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kCiAgICAgd2lkZ2V0LT5oYW5k
bGVFdmVudChldmVudCk7CiB9CiAKLVJlbmRlcldpZGdldCogSFRNTEFwcGxldEVsZW1lbnQ6OnJl
bmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdAorUmVuZGVyV2lkZ2V0KiBIVE1MQXBwbGV0
RWxlbWVudDo6cmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygpCiB7CiAgICAgaWYgKCFjYW5FbWJl
ZEphdmEoKSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBcHBsZXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
QXBwbGV0RWxlbWVudC5oCShyZXZpc2lvbiA4ODk1MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEFwcGxldEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwcml2
YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKIAot
ICAgIHZpcnR1YWwgUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29u
c3Q7CisgICAgdmlydHVhbCBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldEZvckpTQmluZGluZ3Mo
KTsKIAogICAgIHZvaWQgc2V0dXBBcHBsZXQoKSBjb25zdDsKICAgICBib29sIGNhbkVtYmVkSmF2
YSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAko
cmV2aXNpb24gODg5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw3ICsxNzksNyBAQCBQYXRoIEhUTUxBcmVhRWxlbWVu
dDo6Z2V0UmVnaW9uKGNvbnN0IEluCiAgICAgcmV0dXJuIHBhdGg7CiB9CiAKLUhUTUxJbWFnZUVs
ZW1lbnQqIEhUTUxBcmVhRWxlbWVudDo6aW1hZ2VFbGVtZW50KCkgY29uc3QKK0hUTUxJbWFnZUVs
ZW1lbnQqIEhUTUxBcmVhRWxlbWVudDo6aW1hZ2VFbGVtZW50KCkKIHsKICAgICBOb2RlKiBtYXBF
bGVtZW50ID0gcGFyZW50Tm9kZSgpOwogICAgIGlmICghbWFwRWxlbWVudCB8fCAhbWFwRWxlbWVu
dC0+aGFzVGFnTmFtZShtYXBUYWcpKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJl
YUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxl
bWVudC5oCShyZXZpc2lvbiA4ODk1MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIFBh
dGggY29tcHV0ZVBhdGgoUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAKICAgICAvLyBUaGUgcGFyZW50
IG1hcCdzIGltYWdlLgotICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCgpIGNvbnN0
OworICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCgpOwogICAgIAogcHJpdmF0ZToK
ICAgICBIVE1MQXJlYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4ODk1
MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAyLDcgKzMwMiw3IEBAIHN0YXRpYyBpbnQgYWRqdXN0Rm9yWm9vbShpbnQgdmFs
dWUsIERvY3UKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSAvIHpvb21GYWN0b3Ip
OwogfQogCi1pbnQgSFRNTEJvZHlFbGVtZW50OjpzY3JvbGxMZWZ0KCkgY29uc3QKK2ludCBIVE1M
Qm9keUVsZW1lbnQ6OnNjcm9sbExlZnQoKQogewogICAgIC8vIFVwZGF0ZSB0aGUgZG9jdW1lbnQn
cyBsYXlvdXQuCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKTsKQEAg
LTMyNCw3ICszMjQsNyBAQCB2b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0U2Nyb2xsTGVmdChpbnQK
ICAgICB2aWV3LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KHNj
cm9sbExlZnQgKiBmcmFtZS0+cGFnZVpvb21GYWN0b3IoKSAqIGZyYW1lLT5wYWdlU2NhbGVGYWN0
b3IoKSksIHZpZXctPnNjcm9sbFkoKSkpOwogfQogCi1pbnQgSFRNTEJvZHlFbGVtZW50OjpzY3Jv
bGxUb3AoKSBjb25zdAoraW50IEhUTUxCb2R5RWxlbWVudDo6c2Nyb2xsVG9wKCkKIHsKICAgICAv
LyBVcGRhdGUgdGhlIGRvY3VtZW50J3MgbGF5b3V0LgogICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IHRoaXMtPmRvY3VtZW50KCk7CkBAIC0zNDYsNyArMzQ2LDcgQEAgdm9pZCBIVE1MQm9keUVsZW1l
bnQ6OnNldFNjcm9sbFRvcChpbnQgcwogICAgIHZpZXctPnNldFNjcm9sbFBvc2l0aW9uKEludFBv
aW50KHZpZXctPnNjcm9sbFgoKSwgc3RhdGljX2Nhc3Q8aW50PihzY3JvbGxUb3AgKiBmcmFtZS0+
cGFnZVpvb21GYWN0b3IoKSAqIGZyYW1lLT5wYWdlU2NhbGVGYWN0b3IoKSkpKTsKIH0KIAotaW50
IEhUTUxCb2R5RWxlbWVudDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKK2ludCBIVE1MQm9keUVsZW1l
bnQ6OnNjcm9sbEhlaWdodCgpCiB7CiAgICAgLy8gVXBkYXRlIHRoZSBkb2N1bWVudCdzIGxheW91
dC4KICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOwpAQCAtMzU1LDcg
KzM1NSw3IEBAIGludCBIVE1MQm9keUVsZW1lbnQ6OnNjcm9sbEhlaWdodCgpIGNvbnMKICAgICBy
ZXR1cm4gdmlldyA/IGFkanVzdEZvclpvb20odmlldy0+Y29udGVudHNIZWlnaHQoKSwgZG9jdW1l
bnQpIDogMDsgICAgCiB9CiAKLWludCBIVE1MQm9keUVsZW1lbnQ6OnNjcm9sbFdpZHRoKCkgY29u
c3QKK2ludCBIVE1MQm9keUVsZW1lbnQ6OnNjcm9sbFdpZHRoKCkKIHsKICAgICAvLyBVcGRhdGUg
dGhlIGRvY3VtZW50J3MgbGF5b3V0LgogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMtPmRv
Y3VtZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmgJKHJldmlz
aW9uIDg4OTUzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtODMsMTQgKzgzLDE0IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IHNjcm9sbExl
ZnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxMZWZ0KCk7CiAgICAgdmlydHVhbCB2
b2lkIHNldFNjcm9sbExlZnQoaW50IHNjcm9sbExlZnQpOwogICAgIAotICAgIHZpcnR1YWwgaW50
IHNjcm9sbFRvcCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHNjcm9sbFRvcCgpOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRTY3JvbGxUb3AoaW50IHNjcm9sbFRvcCk7CiAgICAgCi0gICAgdmlydHVh
bCBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsV2lkdGgo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxIZWlnaHQoKTsKKyAgICB2aXJ0dWFsIGlu
dCBzY3JvbGxXaWR0aCgpOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJjZUF0
dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4ODk1MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4
LDcgKzY4LDcgQEAgc3RhdGljIGlubGluZSBSZW5kZXJXaWRnZXQqIGZpbmRXaWRnZXRSZQogICAg
IHJldHVybiAwOwogfQogCi1SZW5kZXJXaWRnZXQqIEhUTUxFbWJlZEVsZW1lbnQ6OnJlbmRlcldp
ZGdldEZvckpTQmluZGluZ3MoKSBjb25zdAorUmVuZGVyV2lkZ2V0KiBIVE1MRW1iZWRFbGVtZW50
OjpyZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVM
YXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICByZXR1cm4gZmluZFdpZGdldFJl
bmRlcmVyKHRoaXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmgJ
KHJldmlzaW9uIDg4OTUzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7CiAgICAgdmlydHVhbCBjb25z
dCBRdWFsaWZpZWROYW1lJiBpbWFnZVNvdXJjZUF0dHJpYnV0ZU5hbWUoKSBjb25zdDsKIAotICAg
IHZpcnR1YWwgUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29uc3Q7
CisgICAgdmlydHVhbCBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKTsK
IAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVXaWRnZXQoUGx1Z2luQ3JlYXRpb25PcHRpb24pOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAko
cmV2aXNpb24gODg5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRC
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw3IEBAIGJvb2wgSFRNTEZyYW1l
RWxlbWVudEJhc2U6OmlzVVJMQXR0cmlidXQKICAgICByZXR1cm4gYXR0ci0+bmFtZSgpID09IHNy
Y0F0dHI7CiB9CiAKLWludCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6d2lkdGgoKSBjb25zdAoraW50
IEhUTUxGcmFtZUVsZW1lbnRCYXNlOjp3aWR0aCgpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgaWYgKCFyZW5kZXJCb3goKSkK
QEAgLTI0Myw3ICsyNDMsNyBAQCBpbnQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OndpZHRoKCkgY29u
c3QKICAgICByZXR1cm4gcmVuZGVyQm94KCktPndpZHRoKCk7CiB9CiAKLWludCBIVE1MRnJhbWVF
bGVtZW50QmFzZTo6aGVpZ2h0KCkgY29uc3QKK2ludCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6aGVp
Z2h0KCkKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKICAgICBpZiAoIXJlbmRlckJveCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuaAkocmV2aXNpb24gODg5NTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDgg
KzM5LDggQEAgcHVibGljOgogICAgIGludCBtYXJnaW5XaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFyZ2luV2lkdGg7IH0KICAgICBpbnQgbWFyZ2luSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9t
YXJnaW5IZWlnaHQ7IH0KIAotICAgIGludCB3aWR0aCgpIGNvbnN0OwotICAgIGludCBoZWlnaHQo
KSBjb25zdDsKKyAgICBpbnQgd2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0KCk7CiAKICAgICB2b2lk
IHNldFJlbWFpbnNBbGl2ZU9uUmVtb3ZhbEZyb21UcmVlKGJvb2wpOwogI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNw
cAkocmV2aXNpb24gODg5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBIVE1MSW1hZ2VF
bGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoYgogICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbVRy
ZWUoZGVlcCk7CiB9CiAKLWludCBIVE1MSW1hZ2VFbGVtZW50Ojp3aWR0aChib29sIGlnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cykgY29uc3QKK2ludCBIVE1MSW1hZ2VFbGVtZW50Ojp3aWR0aChib29s
IGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cykKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkpIHsKICAg
ICAgICAgLy8gY2hlY2sgdGhlIGF0dHJpYnV0ZSBmaXJzdCBmb3IgYW4gZXhwbGljaXQgcGl4ZWwg
dmFsdWUKQEAgLTI4MCw3ICsyODAsNyBAQCBpbnQgSFRNTEltYWdlRWxlbWVudDo6d2lkdGgoYm9v
bCBpZ25vcmVQCiAgICAgcmV0dXJuIGJveCA/IGFkanVzdEZvckFic29sdXRlWm9vbShib3gtPmNv
bnRlbnRXaWR0aCgpLCBib3gpIDogMDsKIH0KIAotaW50IEhUTUxJbWFnZUVsZW1lbnQ6OmhlaWdo
dChib29sIGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cykgY29uc3QKK2ludCBIVE1MSW1hZ2VFbGVt
ZW50OjpoZWlnaHQoYm9vbCBpZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMpCiB7CiAgICAgaWYgKCFy
ZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIGNoZWNrIHRoZSBhdHRyaWJ1dGUgZmlyc3QgZm9yIGFu
IGV4cGxpY2l0IHBpeGVsIHZhbHVlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFn
ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVs
ZW1lbnQuaAkocmV2aXNpb24gODg5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFn
ZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsOCBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIH5IVE1MSW1hZ2VFbGVtZW50KCk7CiAKLSAgICBpbnQgd2lkdGgoYm9vbCBpZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMgPSBmYWxzZSkgY29uc3Q7Ci0gICAgaW50IGhlaWdodChib29s
IGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyA9IGZhbHNlKSBjb25zdDsKKyAgICBpbnQgd2lkdGgo
Ym9vbCBpZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMgPSBmYWxzZSk7CisgICAgaW50IGhlaWdodChi
b29sIGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyA9IGZhbHNlKTsKIAogICAgIGludCBuYXR1cmFs
V2lkdGgoKSBjb25zdDsKICAgICBpbnQgbmF0dXJhbEhlaWdodCgpIGNvbnN0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4ODk1MykKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ4MSw3ICs0ODEsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmFib3V0VG9VbmxvYWQo
KQogICAgIGZyYW1lLT5lZGl0b3IoKS0+dGV4dEZpZWxkRGlkRW5kRWRpdGluZyh0aGlzKTsKIH0K
IAotYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0Citi
b29sIEhUTUxJbnB1dEVsZW1lbnQ6OnNob3VsZFVzZUlucHV0TWV0aG9kKCkKIHsKICAgICByZXR1
cm4gbV9pbnB1dFR5cGUtPnNob3VsZFVzZUlucHV0TWV0aG9kKCk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gODg5NTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDcg
KzI1OCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZvY3VzQXBwZWFyYW5jZShib29sIHJlc3RvcmVQ
cmV2aW91c1NlbGVjdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIGFib3V0VG9VbmxvYWQoKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkVXNlSW5wdXRNZXRob2QoKTsKIAogICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBmb3JtQ29udHJvbE5hbWUoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAJKHJldmlzaW9uIDg4OTUzKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcg
KzYyLDcgQEAgcHJvdGVjdGVkOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8RWxlbWVudD4gY2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigp
IGNvbnN0CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNsb25lRWxlbWVudFdpdGhv
dXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKQogICAgIHsKICAgICAgICAgcmV0dXJuIGNyZWF0ZShk
b2N1bWVudCgpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50
LmNwcAkocmV2aXNpb24gODg5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBib29sIEhUTUxNYXBFbGVt
ZW50OjptYXBNb3VzZUV2ZW50KGludCB4CiAgICAgcmV0dXJuIGRlZmF1bHRBcmVhOwogfQogCi1I
VE1MSW1hZ2VFbGVtZW50KiBIVE1MTWFwRWxlbWVudDo6aW1hZ2VFbGVtZW50KCkgY29uc3QKK0hU
TUxJbWFnZUVsZW1lbnQqIEhUTUxNYXBFbGVtZW50OjppbWFnZUVsZW1lbnQoKQogewogICAgIFJl
ZlB0cjxIVE1MQ29sbGVjdGlvbj4gY29sbCA9IGRvY3VtZW50KCktPmltYWdlcygpOwogICAgIGZv
ciAoTm9kZSogY3VyciA9IGNvbGwtPmZpcnN0SXRlbSgpOyBjdXJyOyBjdXJyID0gY29sbC0+bmV4
dEl0ZW0oKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuaAkocmV2aXNp
b24gODg5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBtYXBNb3VzZUV2
ZW50KGludCB4LCBpbnQgeSwgY29uc3QgSW50U2l6ZSYsIEhpdFRlc3RSZXN1bHQmKTsKICAgICAK
LSAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQoKSBjb25zdDsKKyAgICBIVE1MSW1h
Z2VFbGVtZW50KiBpbWFnZUVsZW1lbnQoKTsKICAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiBhcmVhcygpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2Jq
ZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2Jq
ZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDg4OTUzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MT2JqZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgUGFz
c1JlZlB0cjxIVE1MT2JqZWN0RWxlbWVudD4gSFRNTE9iamVjdAogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSFRNTE9iamVjdEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0sIGNyZWF0ZWRC
eVBhcnNlcikpOwogfQogCi1SZW5kZXJXaWRnZXQqIEhUTUxPYmplY3RFbGVtZW50OjpyZW5kZXJX
aWRnZXRGb3JKU0JpbmRpbmdzKCkgY29uc3QKK1JlbmRlcldpZGdldCogSFRNTE9iamVjdEVsZW1l
bnQ6OnJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKQogewogICAgIGRvY3VtZW50KCktPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIHJldHVybiByZW5kZXJQYXJ0
KCk7IC8vIFRoaXMgd2lsbCByZXR1cm4gMCBpZiB0aGUgcmVuZGVyZXIgaXMgbm90IGEgUmVuZGVy
UGFydC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmgJKHJldmlz
aW9uIDg4OTUzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29s
IGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgaW1hZ2VTb3VyY2VBdHRyaWJ1dGVOYW1lKCkgY29uc3Q7CiAKLSAgICB2aXJ0
dWFsIFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygpIGNvbnN0OworICAg
IHZpcnR1YWwgUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtV
Ukw+JikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1l
bnQuY3BwCShyZXZpc2lvbiA4ODk1MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlv
bkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBIVE1M
T3B0aW9uRWxlbWVudDo6c2V0VmFsdWUoY29uc3QgUwogICAgIHNldEF0dHJpYnV0ZSh2YWx1ZUF0
dHIsIHZhbHVlKTsKIH0KIAotYm9vbCBIVE1MT3B0aW9uRWxlbWVudDo6c2VsZWN0ZWQoKSBjb25z
dAorYm9vbCBIVE1MT3B0aW9uRWxlbWVudDo6c2VsZWN0ZWQoKQogewogICAgIGlmIChIVE1MU2Vs
ZWN0RWxlbWVudCogc2VsZWN0ID0gb3duZXJTZWxlY3RFbGVtZW50KCkpCiAgICAgICAgIHNlbGVj
dC0+cmVjYWxjTGlzdEl0ZW1zSWZOZWVkZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE9wdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxPcHRpb25FbGVtZW50LmgJKHJldmlzaW9uIDg4OTUzKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MT3B0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VmFs
dWUoY29uc3QgU3RyaW5nJik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0ZWQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0ZWQoKTsKICAgICB2b2lkIHNldFNlbGVjdGVkKGJvb2wp
OwogCiAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIG93bmVyU2VsZWN0RWxlbWVudCgpIGNvbnN0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAJKHJldmlzaW9u
IDg4OTUzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6ZGV0
YWNoKCkKICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OmRldGFjaCgpOwogfQogCi1QYXNzU2Ny
aXB0SW5zdGFuY2UgSFRNTFBsdWdJbkVsZW1lbnQ6OmdldEluc3RhbmNlKCkgY29uc3QKK1Bhc3NT
Y3JpcHRJbnN0YW5jZSBIVE1MUGx1Z0luRWxlbWVudDo6Z2V0SW5zdGFuY2UoKQogewogICAgIEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTk4
LDcgKzk4LDcgQEAgUGFzc1NjcmlwdEluc3RhbmNlIEhUTUxQbHVnSW5FbGVtZW50OjpnZQogICAg
IHJldHVybiBtX2luc3RhbmNlOwogfQogCi1XaWRnZXQqIEhUTUxQbHVnSW5FbGVtZW50OjpwbHVn
aW5XaWRnZXQoKSBjb25zdAorV2lkZ2V0KiBIVE1MUGx1Z0luRWxlbWVudDo6cGx1Z2luV2lkZ2V0
KCkKIHsKICAgICBpZiAobV9pbkJlZm9yZUxvYWRFdmVudEhhbmRsZXIpIHsKICAgICAgICAgLy8g
VGhlIHBsdWctaW4gaGFzbid0IGxvYWRlZCB5ZXQsIGFuZCBpdCBtYWtlcyBubyBzZW5zZSB0byB0
cnkgdG8gbG9hZCBpZiBiZWZvcmVsb2FkIGhhbmRsZXIgaGFwcGVuZWQgdG8gdG91Y2ggdGhlIHBs
dWctaW4gZWxlbWVudC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50
LmgJKHJldmlzaW9uIDg4OTUzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCw5IEBAIGNsYXNzIEhUTUxQbHVnSW5F
bGVtZW50IDogcHVibGljIEhUTUxGcmEKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5IVE1MUGx1Z0lu
RWxlbWVudCgpOwogCi0gICAgUGFzc1NjcmlwdEluc3RhbmNlIGdldEluc3RhbmNlKCkgY29uc3Q7
CisgICAgUGFzc1NjcmlwdEluc3RhbmNlIGdldEluc3RhbmNlKCk7CiAKLSAgICBXaWRnZXQqIHBs
dWdpbldpZGdldCgpIGNvbnN0OworICAgIFdpZGdldCogcGx1Z2luV2lkZ2V0KCk7CiAKICNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBOUE9iamVjdCogZ2V0TlBPYmplY3QoKTsK
QEAgLTY2LDcgKzY2LDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwogCi0gICAgdmlydHVhbCBSZW5kZXJXaWRnZXQq
IHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZW5k
ZXJXaWRnZXQqIHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSA9IDA7CiAKIHByb3RlY3RlZDoK
ICAgICBBdG9taWNTdHJpbmcgbV9uYW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
U2NyaXB0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
U2NyaXB0RWxlbWVudC5jcHAJKHJldmlzaW9uIDg4OTUzKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU2NyaXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw3ICsyMTEsNyBA
QCB2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpkaXNwYXRjaExvYWRFdmVuCiAgICAgZGlzcGF0Y2hF
dmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSkp
OwogfQogCi1QYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxTY3JpcHRFbGVtZW50OjpjbG9uZUVsZW1l
bnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKCkgY29uc3QKK1Bhc3NSZWZQdHI8RWxlbWVu
dD4gSFRNTFNjcmlwdEVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hp
bGRyZW4oKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFNjcmlwdEVsZW1lbnQodGFn
UU5hbWUoKSwgZG9jdW1lbnQoKSwgZmFsc2UsIGFscmVhZHlTdGFydGVkKCkpKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmgJKHJldmlzaW9uIDg4OTUzKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hM
b2FkRXZlbnQoKTsKIAotICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY2xvbmVFbGVtZW50V2l0aG91
dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8RWxlbWVudD4g
Y2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigpOwogfTsKIAogfSAvL25h
bWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA4ODk1MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVh
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOSw3ICs0MzksNyBAQCBib29sIEhUTUxU
ZXh0QXJlYUVsZW1lbnQ6Omxhc3RDaGFuZ2VXYXNVCiAgICAgcmV0dXJuIHRvUmVuZGVyVGV4dENv
bnRyb2wocmVuZGVyZXIoKSktPmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOwogfQogCi1ib29sIEhU
TUxUZXh0QXJlYUVsZW1lbnQ6OnNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3QKK2Jvb2wgSFRN
TFRleHRBcmVhRWxlbWVudDo6c2hvdWxkVXNlSW5wdXRNZXRob2QoKQogewogICAgIHJldHVybiB0
cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgJ
KHJldmlzaW9uIDg4OTUzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCBwcml2YXRlOgogCiAgICAg
dmlydHVhbCB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29sIHNlbmRUb0FueUVsZW1lbnQpOwogCi0g
ICAgdmlydHVhbCBib29sIHNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIHNob3VsZFVzZUlucHV0TWV0aG9kKCk7CiAKICAgICBpbnQgbV9yb3dzOwogICAgIGlu
dCBtX2NvbHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJU
aHVtYkVsZW1lbnQuaAkocmV2aXNpb24gODg5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNsaWRlclRodW1iRWxlbWVudChEb2N1bWVudCopOwog
ICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJl
bmRlclN0eWxlKik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNsb25lRWxlbWVu
dFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8RWxlbWVudD4gY2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigp
OwogICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWRGb3JtQ29udHJvbCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBpc1JlYWRPbmx5Rm9ybUNvbnRyb2woKSBjb25zdDsKICAgICB2aXJ0dWFsIE5v
ZGUqIGZvY3VzRGVsZWdhdGUoKTsKQEAgLTgyLDcgKzgyLDcgQEAgaW5saW5lIFBhc3NSZWZQdHI8
U2xpZGVyVGh1bWJFbGVtZW50PiBTbAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2xpZGVyVGh1
bWJFbGVtZW50KGRvY3VtZW50KSk7CiB9CiAKLWlubGluZSBQYXNzUmVmUHRyPEVsZW1lbnQ+IFNs
aWRlclRodW1iRWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJl
bigpIGNvbnN0CitpbmxpbmUgUGFzc1JlZlB0cjxFbGVtZW50PiBTbGlkZXJUaHVtYkVsZW1lbnQ6
OmNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKQogewogICAgIHJldHVy
biBjcmVhdGUoZG9jdW1lbnQoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCShyZXZpc2lvbiA4ODk1
MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBGbG9hdFNpemUgU1ZHU2hhZG93
VHJlZUNvbnRhaW5lckVsZW1lbnQ6CiAgICAgcmV0dXJuIEZsb2F0U2l6ZShtX3hPZmZzZXQudmFs
dWUodGhpcyksIG1feU9mZnNldC52YWx1ZSh0aGlzKSk7CiB9CiAKLVBhc3NSZWZQdHI8RWxlbWVu
dD4gU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRBdHRy
aWJ1dGVzQW5kQ2hpbGRyZW4oKSBjb25zdAorUGFzc1JlZlB0cjxFbGVtZW50PiBTVkdTaGFkb3dU
cmVlQ29udGFpbmVyRWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGls
ZHJlbigpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdTaGFkb3dUcmVlQ29udGFpbmVy
RWxlbWVudChkb2N1bWVudCgpKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmgJKHJldmlzaW9uIDg4OTUzKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgU1ZHU2hhZG93
VHJlZUNvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQqKTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8RWxlbWVudD4gY2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGls
ZHJlbigpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxFbGVtZW50PiBjbG9uZUVsZW1l
bnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKCk7CiAgICAgdmlydHVhbCBib29sIGlzU2hh
ZG93VHJlZUNvbnRhaW5lckVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBT
VkdMZW5ndGggbV94T2Zmc2V0OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA4ODk1MykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIFNW
R0FuaW1hdGVFbGVtZW50OjphZGp1c3RGb3JJbmhlcml0CiAgICAgICAgIGdldFByb3BlcnR5VmFs
dWUoc3ZnUGFyZW50LCBhdHRyaWJ1dGVOYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0
ZUVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0Citib29sIFNWR0FuaW1hdGVF
bGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKQogewogICAgIFNWR0VsZW1lbnQqIHRhcmdl
dEVsZW1lbnQgPSB0aGlzLT50YXJnZXRFbGVtZW50KCk7CiAgICAgaWYgKCF0YXJnZXRFbGVtZW50
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgJKHJldmlzaW9uIDg4
OTUzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgSW5oZXJpdFZhbHVlCiAg
ICAgfTsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpOwogICAgIEFuaW1h
dGVkQXR0cmlidXRlVHlwZSBkZXRlcm1pbmVBbmltYXRlZEF0dHJpYnV0ZVR5cGUoU1ZHRWxlbWVu
dCopIGNvbnN0OwogICAgIEFuaW1hdGVkQXR0cmlidXRlVHlwZSBtX2FuaW1hdGVkQXR0cmlidXRl
VHlwZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA4ODk1MykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlTW90aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgUGFz
c1JlZlB0cjxTVkdBbmltYXRlTW90aW9uRWxlbWVudD4gU1ZHQQogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAot
Ym9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29u
c3QKK2Jvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSgp
CiB7CiAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQo
KTsKICAgICBpZiAoIXRhcmdldEVsZW1lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gODg5NTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NyArMzQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi0gICAgdmlydHVhbCBib29sIGhh
c1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0
dHJpYnV0ZVR5cGUoKTsKIAogICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRy
aWJ1dGUqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gODg5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2
MCw3IEBAIFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ+IFMKICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50KSk7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6Omhhc1ZhbGlkQXR0
cmlidXRlVHlwZSgpIGNvbnN0Citib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpoYXNW
YWxpZEF0dHJpYnV0ZVR5cGUoKQogewogICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSB0
aGlzLT50YXJnZXRFbGVtZW50KCk7CiAgICAgaWYgKCF0YXJnZXRFbGVtZW50KQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgJKHJldmlz
aW9uIDg4OTUzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqKTsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpOwogICAgIEFu
aW1hdGVkQXR0cmlidXRlVHlwZSBkZXRlcm1pbmVBbmltYXRlZEF0dHJpYnV0ZVR5cGUoU1ZHRWxl
bWVudCopIGNvbnN0OwogCiAgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4
ODk1MykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTUyLDcgKzE1Miw3IEBAIFNWR0VsZW1lbnQqIFNWR0VsZW1lbnQ6OnZpZXdwb3J0RWxl
bWVudCgKICAgICByZXR1cm4gMDsKIH0KIAotU1ZHRG9jdW1lbnRFeHRlbnNpb25zKiBTVkdFbGVt
ZW50OjphY2Nlc3NEb2N1bWVudFNWR0V4dGVuc2lvbnMoKSBjb25zdAorU1ZHRG9jdW1lbnRFeHRl
bnNpb25zKiBTVkdFbGVtZW50OjphY2Nlc3NEb2N1bWVudFNWR0V4dGVuc2lvbnMoKQogewogICAg
IC8vIFRoaXMgZnVuY3Rpb24gaXMgcHJvdmlkZWQgZm9yIHVzZSBieSBTVkdBbmltYXRlZFByb3Bl
cnR5IHRvIGF2b2lkCiAgICAgLy8gZ2xvYmFsIGluY2x1c2lvbiBvZiBEb2N1bWVudC5oIGluIFNW
RyBjb2RlLgpAQCAtMTg5LDE0ICsxODksMTQgQEAgY29uc3QgSGFzaFNldDxTVkdFbGVtZW50SW5z
dGFuY2UqPiYgU1ZHRQogICAgIHJldHVybiByYXJlU1ZHRGF0YSgpLT5lbGVtZW50SW5zdGFuY2Vz
KCk7CiB9CiAKLWJvb2wgU1ZHRWxlbWVudDo6Ym91bmRpbmdCb3goRmxvYXRSZWN0JiByZWN0LCBT
VkdMb2NhdGFibGU6OlN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkgY29u
c3QKK2Jvb2wgU1ZHRWxlbWVudDo6Ym91bmRpbmdCb3goRmxvYXRSZWN0JiByZWN0LCBTVkdMb2Nh
dGFibGU6OlN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkKIHsKICAgICBp
ZiAoaXNTdHlsZWRMb2NhdGFibGUoKSkgewotICAgICAgICByZWN0ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCo+KHRoaXMpLT5nZXRCQm94KHN0eWxlVXBkYXRl
U3RyYXRlZ3kpOworICAgICAgICByZWN0ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkTG9jYXRhYmxl
RWxlbWVudCo+KHRoaXMpLT5nZXRCQm94KHN0eWxlVXBkYXRlU3RyYXRlZ3kpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGhhc1RhZ05hbWUoU1ZHTmFtZXM6OnRleHRUYWcp
KSB7Ci0gICAgICAgIHJlY3QgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdUZXh0RWxlbWVudCo+KHRo
aXMpLT5nZXRCQm94KHN0eWxlVXBkYXRlU3RyYXRlZ3kpOworICAgICAgICByZWN0ID0gc3RhdGlj
X2Nhc3Q8U1ZHVGV4dEVsZW1lbnQqPih0aGlzKS0+Z2V0QkJveChzdHlsZVVwZGF0ZVN0cmF0ZWd5
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAkocmV2aXNpb24gODg5NTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHB1Ymxp
YzoKICAgICBTVkdTVkdFbGVtZW50KiBvd25lclNWR0VsZW1lbnQoKSBjb25zdDsKICAgICBTVkdF
bGVtZW50KiB2aWV3cG9ydEVsZW1lbnQoKSBjb25zdDsKIAotICAgIFNWR0RvY3VtZW50RXh0ZW5z
aW9ucyogYWNjZXNzRG9jdW1lbnRTVkdFeHRlbnNpb25zKCkgY29uc3Q7CisgICAgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zKiBhY2Nlc3NEb2N1bWVudFNWR0V4dGVuc2lvbnMoKTsKIAogICAgIHZpcnR1
YWwgYm9vbCBpc1N0eWxlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzU3R5bGVkVHJhbnNmb3JtYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0x
MDAsNyArMTAwLDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgSGFzaFNldDxTVkdFbGVtZW50SW5z
dGFuY2UqPiYgaW5zdGFuY2VzRm9yRWxlbWVudCgpIGNvbnN0OwogCi0gICAgYm9vbCBib3VuZGlu
Z0JveChGbG9hdFJlY3QmLCBTVkdMb2NhdGFibGU6OlN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBTVkdM
b2NhdGFibGU6OkFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OworICAgIGJvb2wgYm91bmRpbmdCb3go
RmxvYXRSZWN0JiwgU1ZHTG9jYXRhYmxlOjpTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gU1ZHTG9jYXRh
YmxlOjpBbGxvd1N0eWxlVXBkYXRlKTsKIAogICAgIHZvaWQgc2V0Q3Vyc29yRWxlbWVudChTVkdD
dXJzb3JFbGVtZW50Kik7CiAgICAgdm9pZCBjdXJzb3JFbGVtZW50UmVtb3ZlZCgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0xvY2F0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0xvY2F0YWJsZS5jcHAJKHJldmlzaW9uIDg4OTUzKQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0xvY2F0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0
LDcgQEAgU1ZHRWxlbWVudCogU1ZHTG9jYXRhYmxlOjpmYXJ0aGVzdFZpZXdwbwogICAgIHJldHVy
biBmYXJ0aGVzdDsKIH0KIAotRmxvYXRSZWN0IFNWR0xvY2F0YWJsZTo6Z2V0QkJveChjb25zdCBT
VkdFbGVtZW50KiBlbGVtZW50LCBTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRl
Z3kpCitGbG9hdFJlY3QgU1ZHTG9jYXRhYmxlOjpnZXRCQm94KFNWR0VsZW1lbnQqIGVsZW1lbnQs
IFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkKIHsKICAgICBBU1NFUlQo
ZWxlbWVudCk7CiAgICAgaWYgKHN0eWxlVXBkYXRlU3RyYXRlZ3kgPT0gQWxsb3dTdHlsZVVwZGF0
ZSkKQEAgLTc3LDcgKzc3LDcgQEAgRmxvYXRSZWN0IFNWR0xvY2F0YWJsZTo6Z2V0QkJveChjb25z
dCBTVgogICAgIHJldHVybiBlbGVtZW50LT5yZW5kZXJlcigpLT5vYmplY3RCb3VuZGluZ0JveCgp
OwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gU1ZHTG9jYXRhYmxlOjpjb21wdXRlQ1RNKGNvbnN0IFNW
R0VsZW1lbnQqIGVsZW1lbnQsIENUTVNjb3BlIG1vZGUsIFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5
bGVVcGRhdGVTdHJhdGVneSkKK0FmZmluZVRyYW5zZm9ybSBTVkdMb2NhdGFibGU6OmNvbXB1dGVD
VE0oU1ZHRWxlbWVudCogZWxlbWVudCwgQ1RNU2NvcGUgbW9kZSwgU3R5bGVVcGRhdGVTdHJhdGVn
eSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KQogewogICAgIEFTU0VSVChlbGVtZW50KTsKICAgICBpZiAo
c3R5bGVVcGRhdGVTdHJhdGVneSA9PSBBbGxvd1N0eWxlVXBkYXRlKQpAQCAtMTA0LDcgKzEwNCw3
IEBAIEFmZmluZVRyYW5zZm9ybSBTVkdMb2NhdGFibGU6OmNvbXB1dGVDVE0KICAgICByZXR1cm4g
Y3RtOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gU1ZHTG9jYXRhYmxlOjpnZXRUcmFuc2Zvcm1Ub0Vs
ZW1lbnQoU1ZHRWxlbWVudCogdGFyZ2V0LCBFeGNlcHRpb25Db2RlJiBlYywgU3R5bGVVcGRhdGVT
dHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFNWR0xv
Y2F0YWJsZTo6Z2V0VHJhbnNmb3JtVG9FbGVtZW50KFNWR0VsZW1lbnQqIHRhcmdldCwgRXhjZXB0
aW9uQ29kZSYgZWMsIFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkKIHsK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gZ2V0Q1RNKHN0eWxlVXBkYXRlU3RyYXRlZ3kpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0xvY2F0YWJsZS5oCShyZXZpc2lvbiA4ODk1MykKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAg
KzQxLDEwIEBAIHB1YmxpYzoKIAogICAgIGVudW0gU3R5bGVVcGRhdGVTdHJhdGVneSB7IEFsbG93
U3R5bGVVcGRhdGUsIERpc2FsbG93U3R5bGVVcGRhdGUgfTsKICAgICAKLSAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oU3R5bGVVcGRhdGVTdHJhdGVneSkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldFNjcmVlbkNUTShTdHlsZVVwZGF0ZVN0
cmF0ZWd5KSBjb25zdCA9IDA7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldFRyYW5zZm9ybVRvRWxl
bWVudChTVkdFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYsIFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBB
bGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBnZXRCQm94KFN0
eWxlVXBkYXRlU3RyYXRlZ3kpID0gMDsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRD
VE0oU3R5bGVVcGRhdGVTdHJhdGVneSkgPSAwOworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3Jt
IGdldFNjcmVlbkNUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5KSA9IDA7CisgICAgQWZmaW5lVHJhbnNm
b3JtIGdldFRyYW5zZm9ybVRvRWxlbWVudChTVkdFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYsIFN0
eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKTsKIAogICAgIHN0YXRpYyBTVkdF
bGVtZW50KiBuZWFyZXN0Vmlld3BvcnRFbGVtZW50KGNvbnN0IFNWR0VsZW1lbnQqKTsKICAgICBz
dGF0aWMgU1ZHRWxlbWVudCogZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQoY29uc3QgU1ZHRWxlbWVu
dCopOwpAQCAtNTcsOCArNTcsOCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBB
ZmZpbmVUcmFuc2Zvcm0gbG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxl
OjpDVE1TY29wZSkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KIAotICAgIHN0
YXRpYyBGbG9hdFJlY3QgZ2V0QkJveChjb25zdCBTVkdFbGVtZW50KiwgU3R5bGVVcGRhdGVTdHJh
dGVneSk7Ci0gICAgc3RhdGljIEFmZmluZVRyYW5zZm9ybSBjb21wdXRlQ1RNKGNvbnN0IFNWR0Vs
ZW1lbnQqLCBDVE1TY29wZSwgU3R5bGVVcGRhdGVTdHJhdGVneSk7CisgICAgc3RhdGljIEZsb2F0
UmVjdCBnZXRCQm94KFNWR0VsZW1lbnQqLCBTdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKKyAgICBzdGF0
aWMgQWZmaW5lVHJhbnNmb3JtIGNvbXB1dGVDVE0oU1ZHRWxlbWVudCosIENUTVNjb3BlLCBTdHls
ZVVwZGF0ZVN0cmF0ZWd5KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAJKHJldmlzaW9uIDg4OTUzKQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTQsNyArMjk0LDcgQEAgdm9pZCBTVkdTY3JpcHRFbGVtZW50OjpkaXNwYXRjaExvYWRFdmVu
dAogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxFbGVtZW50PiBTVkdTY3JpcHRFbGVtZW50OjpjbG9u
ZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKCkgY29uc3QKK1Bhc3NSZWZQdHI8
RWxlbWVudD4gU1ZHU2NyaXB0RWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNB
bmRDaGlsZHJlbigpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdTY3JpcHRFbGVtZW50
KHRhZ1FOYW1lKCksIGRvY3VtZW50KCksIGZhbHNlLCBhbHJlYWR5U3RhcnRlZCgpKSk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgJKHJldmlzaW9uIDg4OTUzKQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNzMsNyArNzMsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoTG9h
ZEV2ZW50KCk7CiAKLSAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNsb25lRWxlbWVudFdpdGhvdXRB
dHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNs
b25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKTsKIAogICAgIC8vIEFuaW1h
dGVkIHByb3BlcnR5IGRlY2xhcmF0aW9ucwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
U3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0
eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4ODk1MykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcyLDcgKzM3Miw3IEBAIHZv
aWQgU1ZHU3R5bGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW0KICAgICBidWlsZFBlbmRpbmdS
ZXNvdXJjZXNJZk5lZWRlZCgpOwogfQogCi12b2lkIFNWR1N0eWxlZEVsZW1lbnQ6OmJ1aWxkUGVu
ZGluZ1Jlc291cmNlc0lmTmVlZGVkKCkgY29uc3QKK3ZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6YnVp
bGRQZW5kaW5nUmVzb3VyY2VzSWZOZWVkZWQoKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IHRoaXMtPmRvY3VtZW50KCk7CiAgICAgaWYgKCFuZWVkc1BlbmRpbmdSZXNvdXJjZUhhbmRsaW5n
KCkgfHwgIWRvY3VtZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5o
CShyZXZpc2lvbiA4ODk1MykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsKIAotICAgIHZvaWQgYnVpbGRQZW5k
aW5nUmVzb3VyY2VzSWZOZWVkZWQoKSBjb25zdDsKKyAgICB2b2lkIGJ1aWxkUGVuZGluZ1Jlc291
cmNlc0lmTmVlZGVkKCk7CiAKICAgICBIYXNoU2V0PFNWR1N0eWxlZEVsZW1lbnQqPiBtX2VsZW1l
bnRzV2l0aFJlbGF0aXZlTGVuZ3RoczsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0
eWxlZExvY2F0YWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gODg5NTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDE3ICs0NCwxNyBAQCBTVkdFbGVtZW50KiBTVkdTdHlsZWRMb2NhdGFibGVFbGVt
ZW50OjpmCiAgICAgcmV0dXJuIFNWR0xvY2F0YWJsZTo6ZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQo
dGhpcyk7CiB9CiAKLUZsb2F0UmVjdCBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50OjpnZXRCQm94
KFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkgY29uc3QKK0Zsb2F0UmVj
dCBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50OjpnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kg
c3R5bGVVcGRhdGVTdHJhdGVneSkKIHsKICAgICByZXR1cm4gU1ZHTG9jYXRhYmxlOjpnZXRCQm94
KHRoaXMsIHN0eWxlVXBkYXRlU3RyYXRlZ3kpOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gU1ZHU3R5
bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0Q1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRh
dGVTdHJhdGVneSkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBTVkdTdHlsZWRMb2NhdGFibGVFbGVt
ZW50OjpnZXRDVE0oU3R5bGVVcGRhdGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KQogewog
ICAgIHJldHVybiBTVkdMb2NhdGFibGU6OmNvbXB1dGVDVE0odGhpcywgU1ZHTG9jYXRhYmxlOjpO
ZWFyZXN0Vmlld3BvcnRTY29wZSwgc3R5bGVVcGRhdGVTdHJhdGVneSk7CiB9CiAKLUFmZmluZVRy
YW5zZm9ybSBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50OjpnZXRTY3JlZW5DVE0oU3R5bGVVcGRh
dGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFNW
R1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmdldFNjcmVlbkNUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5
IHN0eWxlVXBkYXRlU3RyYXRlZ3kpCiB7CiAgICAgcmV0dXJuIFNWR0xvY2F0YWJsZTo6Y29tcHV0
ZUNUTSh0aGlzLCBTVkdMb2NhdGFibGU6OlNjcmVlblNjb3BlLCBzdHlsZVVwZGF0ZVN0cmF0ZWd5
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVs
ZW1lbnQuaAkocmV2aXNpb24gODg5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVk
TG9jYXRhYmxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw5IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIG5lYXJlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25z
dDsKICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIGZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KCkgY29u
c3Q7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kg
PSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBn
ZXRDVE0oU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OwotICAg
IHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldFNjcmVlbkNUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5
ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFJlY3QgZ2V0QkJv
eChTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSk7CisgICAgdmlydHVhbCBB
ZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBk
YXRlKTsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRTY3JlZW5DVE0oU3R5bGVVcGRh
dGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpOwogCiAgICAgdmlydHVhbCBBZmZpbmVUcmFu
c2Zvcm0gbG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29w
ZSBtb2RlKSBjb25zdCB7IHJldHVybiBTVkdMb2NhdGFibGU6OmxvY2FsQ29vcmRpbmF0ZVNwYWNl
VHJhbnNmb3JtKG1vZGUpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gODg5NTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCwxMiArNDQsMTIgQEAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQ6On5TVkdTdHlsZQogewogfQogCi1BZmZpbmVUcmFuc2Zvcm0gU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQ6OmdldENUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRl
Z3kpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6
OmdldENUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpCiB7CiAgICAg
cmV0dXJuIFNWR0xvY2F0YWJsZTo6Y29tcHV0ZUNUTSh0aGlzLCBTVkdMb2NhdGFibGU6Ok5lYXJl
c3RWaWV3cG9ydFNjb3BlLCBzdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKIH0KIAotQWZmaW5lVHJhbnNm
b3JtIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpnZXRTY3JlZW5DVE0oU3R5bGVVcGRh
dGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpnZXRTY3JlZW5DVE0oU3R5bGVVcGRhdGVTdHJh
dGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KQogewogICAgIHJldHVybiBTVkdMb2NhdGFibGU6OmNv
bXB1dGVDVE0odGhpcywgU1ZHTG9jYXRhYmxlOjpTY3JlZW5TY29wZSwgc3R5bGVVcGRhdGVTdHJh
dGVneSk7CiB9CkBAIC0xNTAsNyArMTUwLDcgQEAgU1ZHRWxlbWVudCogU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbgogICAgIHJldHVybiBTVkdUcmFuc2Zvcm1hYmxlOjpmYXJ0aGVzdFZpZXdw
b3J0RWxlbWVudCh0aGlzKTsKIH0KIAotRmxvYXRSZWN0IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50OjpnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkg
Y29uc3QKK0Zsb2F0UmVjdCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6Z2V0QkJveChT
dHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpCiB7CiAgICAgcmV0dXJuIFNW
R1RyYW5zZm9ybWFibGU6OmdldEJCb3godGhpcywgc3R5bGVVcGRhdGVTdHJhdGVneSk7CiB9CkBA
IC0xNjgsNyArMTY4LDcgQEAgdm9pZCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6Zmls
bAogICAgIGF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwLnNldChTVkdOYW1lczo6dHJhbnNmb3Jt
QXR0ciwgQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0KTsKIH0KIAotdm9pZCBTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudDo6dG9DbGlwUGF0aChQYXRoJiBwYXRoKSBjb25zdAordm9pZCBTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6dG9DbGlwUGF0aChQYXRoJiBwYXRoKQogewogICAgIHRv
UGF0aERhdGEocGF0aCk7CiAgICAgLy8gRklYTUU6IEhvdyBkbyB3ZSBrbm93IHRoZSBlbGVtZW50
IGhhcyBkb25lIGEgbGF5b3V0PwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgJKHJldmlzaW9uIDg4OTUzKQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDggKzM2LDggQEAgY2xhc3MgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQg
OiBwdQogcHVibGljOgogICAgIHZpcnR1YWwgflNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
KCk7CiAKLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oU3R5bGVVcGRhdGVTdHJh
dGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OwotICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNm
b3JtIGdldFNjcmVlbkNUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSkg
Y29uc3Q7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFN0eWxlVXBkYXRlU3Ry
YXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKTsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBn
ZXRTY3JlZW5DVE0oU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpOwogICAg
IHZpcnR1YWwgU1ZHRWxlbWVudCogbmVhcmVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgU1ZHRWxlbWVudCogZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdDsKIApA
QCAtNDUsMTEgKzQ1LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBh
bmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29uc3Q7CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zv
cm0qIHN1cHBsZW1lbnRhbFRyYW5zZm9ybSgpOwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3QgZ2V0
QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7CisgICAg
dmlydHVhbCBGbG9hdFJlY3QgZ2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHls
ZVVwZGF0ZSk7CiAKICAgICAvLyAiYmFzZSBjbGFzcyIgbWV0aG9kcyBmb3IgYWxsIHRoZSBlbGVt
ZW50cyB3aGljaCByZW5kZXIgYXMgcGF0aHMKICAgICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQ
YXRoJikgY29uc3QgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHRvQ2xpcFBhdGgoUGF0aCYpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCB0b0NsaXBQYXRoKFBhdGgmKTsKICAgICB2aXJ0dWFsIFJlbmRl
ck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwogCiBw
cm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVt
ZW50LmNwcAkocmV2aXNpb24gODg5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENv
bnRlbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTkgKzcwLDE5IEBAIFBhc3NS
ZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IFNWR1RleHRDb24KICAgICByZXR1cm4gU1ZHQW5pbWF0
ZWRQcm9wZXJ0eTo6bG9va3VwT3JDcmVhdGVXcmFwcGVyPFNWR0FuaW1hdGVkTGVuZ3RoLCBTVkdM
ZW5ndGg+KHRoaXMsIFNWR05hbWVzOjp0ZXh0TGVuZ3RoQXR0ciwgU1ZHTmFtZXM6OnRleHRMZW5n
dGhBdHRyLmxvY2FsTmFtZSgpLCBtX3RleHRMZW5ndGgudmFsdWUpOwogfQogCi11bnNpZ25lZCBT
VkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldE51bWJlck9mQ2hhcnMoKSBjb25zdAordW5zaWduZWQg
U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXROdW1iZXJPZkNoYXJzKCkKIHsKICAgICBkb2N1bWVu
dCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICByZXR1cm4g
U1ZHVGV4dFF1ZXJ5KHJlbmRlcmVyKCkpLm51bWJlck9mQ2hhcmFjdGVycygpOwogfQogCi1mbG9h
dCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldENvbXB1dGVkVGV4dExlbmd0aCgpIGNvbnN0Citm
bG9hdCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldENvbXB1dGVkVGV4dExlbmd0aCgpCiB7CiAg
ICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAg
ICAgcmV0dXJuIFNWR1RleHRRdWVyeShyZW5kZXJlcigpKS50ZXh0TGVuZ3RoKCk7CiB9CiAKLWZs
b2F0IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0U3ViU3RyaW5nTGVuZ3RoKHVuc2lnbmVkIGNo
YXJudW0sIHVuc2lnbmVkIG5jaGFycywgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitmbG9hdCBT
VkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldFN1YlN0cmluZ0xlbmd0aCh1bnNpZ25lZCBjaGFybnVt
LCB1bnNpZ25lZCBuY2hhcnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGRvY3VtZW50KCkt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCkBAIC05NSw3ICs5NSw3
IEBAIGZsb2F0IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0U3ViU3RyaW4KICAgICByZXR1cm4g
U1ZHVGV4dFF1ZXJ5KHJlbmRlcmVyKCkpLnN1YlN0cmluZ0xlbmd0aChjaGFybnVtLCBuY2hhcnMp
OwogfQogCi1GbG9hdFBvaW50IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0U3RhcnRQb3NpdGlv
bk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK0Zsb2F0
UG9pbnQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRTdGFydFBvc2l0aW9uT2ZDaGFyKHVuc2ln
bmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGRvY3VtZW50KCktPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCkBAIC0xMDcsNyArMTA3LDcgQEAg
RmxvYXRQb2ludCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldFN0YQogICAgIHJldHVybiBTVkdU
ZXh0UXVlcnkocmVuZGVyZXIoKSkuc3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyKGNoYXJudW0pOwog
fQogCi1GbG9hdFBvaW50IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0RW5kUG9zaXRpb25PZkNo
YXIodW5zaWduZWQgY2hhcm51bSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitGbG9hdFBvaW50
IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0RW5kUG9zaXRpb25PZkNoYXIodW5zaWduZWQgY2hh
cm51bSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKQEAgLTExOSw3ICsxMTksNyBAQCBGbG9hdFBv
aW50IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0RW5kCiAgICAgcmV0dXJuIFNWR1RleHRRdWVy
eShyZW5kZXJlcigpKS5lbmRQb3NpdGlvbk9mQ2hhcmFjdGVyKGNoYXJudW0pOwogfQogCi1GbG9h
dFJlY3QgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRFeHRlbnRPZkNoYXIodW5zaWduZWQgY2hh
cm51bSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitGbG9hdFJlY3QgU1ZHVGV4dENvbnRlbnRF
bGVtZW50OjpnZXRFeHRlbnRPZkNoYXIodW5zaWduZWQgY2hhcm51bSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKCk7CiAKQEAgLTEzMSw3ICsxMzEsNyBAQCBGbG9hdFJlY3QgU1ZHVGV4dENvbnRlbnRFbGVt
ZW50OjpnZXRFeHRlCiAgICAgcmV0dXJuIFNWR1RleHRRdWVyeShyZW5kZXJlcigpKS5leHRlbnRP
ZkNoYXJhY3RlcihjaGFybnVtKTsKIH0KIAotZmxvYXQgU1ZHVGV4dENvbnRlbnRFbGVtZW50Ojpn
ZXRSb3RhdGlvbk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJiBlYykgY29u
c3QKK2Zsb2F0IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0Um90YXRpb25PZkNoYXIodW5zaWdu
ZWQgY2hhcm51bSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKQEAgLTE0MywxMyArMTQzLDEzIEBA
IGZsb2F0IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0Um90YXRpb24KICAgICByZXR1cm4gU1ZH
VGV4dFF1ZXJ5KHJlbmRlcmVyKCkpLnJvdGF0aW9uT2ZDaGFyYWN0ZXIoY2hhcm51bSk7CiB9CiAK
LWludCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldENoYXJOdW1BdFBvc2l0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50KSBjb25zdAoraW50IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0Q2hh
ck51bUF0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7CiAgICAgZG9jdW1lbnQo
KS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgcmV0dXJuIFNW
R1RleHRRdWVyeShyZW5kZXJlcigpKS5jaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uKHBvaW50KTsK
IH0KIAotdm9pZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnNlbGVjdFN1YlN0cmluZyh1bnNpZ25l
ZCBjaGFybnVtLCB1bnNpZ25lZCBuY2hhcnMsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAordm9p
ZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnNlbGVjdFN1YlN0cmluZyh1bnNpZ25lZCBjaGFybnVt
LCB1bnNpZ25lZCBuY2hhcnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIHVuc2lnbmVkIG51
bWJlck9mQ2hhcnMgPSBnZXROdW1iZXJPZkNoYXJzKCk7CiAgICAgaWYgKGNoYXJudW0gPj0gbnVt
YmVyT2ZDaGFycykgewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVs
ZW1lbnQuaAkocmV2aXNpb24gODg5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENv
bnRlbnRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE1ICs0MywxNSBAQCBwdWJsaWM6
CiAgICAgICAgIExFTkdUSEFESlVTVF9TUEFDSU5HQU5ER0xZUEhTICAgPSAyCiAgICAgfTsKIAot
ICAgIHVuc2lnbmVkIGdldE51bWJlck9mQ2hhcnMoKSBjb25zdDsKLSAgICBmbG9hdCBnZXRDb21w
dXRlZFRleHRMZW5ndGgoKSBjb25zdDsKLSAgICBmbG9hdCBnZXRTdWJTdHJpbmdMZW5ndGgodW5z
aWduZWQgY2hhcm51bSwgdW5zaWduZWQgbmNoYXJzLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0g
ICAgRmxvYXRQb2ludCBnZXRTdGFydFBvc2l0aW9uT2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICBGbG9hdFBvaW50IGdldEVuZFBvc2l0aW9uT2ZDaGFy
KHVuc2lnbmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICBGbG9hdFJlY3Qg
Z2V0RXh0ZW50T2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsK
LSAgICBmbG9hdCBnZXRSb3RhdGlvbk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25D
b2RlJikgY29uc3Q7Ci0gICAgaW50IGdldENoYXJOdW1BdFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmKSBjb25zdDsKLSAgICB2b2lkIHNlbGVjdFN1YlN0cmluZyh1bnNpZ25lZCBjaGFybnVtLCB1
bnNpZ25lZCBuY2hhcnMsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICB1bnNpZ25lZCBnZXRO
dW1iZXJPZkNoYXJzKCk7CisgICAgZmxvYXQgZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk7CisgICAg
ZmxvYXQgZ2V0U3ViU3RyaW5nTGVuZ3RoKHVuc2lnbmVkIGNoYXJudW0sIHVuc2lnbmVkIG5jaGFy
cywgRXhjZXB0aW9uQ29kZSYpOworICAgIEZsb2F0UG9pbnQgZ2V0U3RhcnRQb3NpdGlvbk9mQ2hh
cih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJik7CisgICAgRmxvYXRQb2ludCBnZXRF
bmRQb3NpdGlvbk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJik7CisgICAg
RmxvYXRSZWN0IGdldEV4dGVudE9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgZmxvYXQgZ2V0Um90YXRpb25PZkNoYXIodW5zaWduZWQgY2hhcm51bSwgRXhjZXB0
aW9uQ29kZSYpOworICAgIGludCBnZXRDaGFyTnVtQXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50
Jik7CisgICAgdm9pZCBzZWxlY3RTdWJTdHJpbmcodW5zaWduZWQgY2hhcm51bSwgdW5zaWduZWQg
bmNoYXJzLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBzdGF0aWMgU1ZHVGV4dENvbnRlbnRFbGVt
ZW50KiBlbGVtZW50RnJvbVJlbmRlcmVyKFJlbmRlck9iamVjdCopOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAJKHJldmlzaW9uIDg4OTUzKQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMTcgKzg3
LDE3IEBAIFNWR0VsZW1lbnQqIFNWR1RleHRFbGVtZW50OjpmYXJ0aGVzdFZpZXcKICAgICByZXR1
cm4gU1ZHVHJhbnNmb3JtYWJsZTo6ZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQodGhpcyk7CiB9CiAK
LUZsb2F0UmVjdCBTVkdUZXh0RWxlbWVudDo6Z2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0
eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0CitGbG9hdFJlY3QgU1ZHVGV4dEVsZW1lbnQ6OmdldEJC
b3goU3R5bGVVcGRhdGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KQogewogICAgIHJldHVy
biBTVkdUcmFuc2Zvcm1hYmxlOjpnZXRCQm94KHRoaXMsIHN0eWxlVXBkYXRlU3RyYXRlZ3kpOwog
fQogCi1BZmZpbmVUcmFuc2Zvcm0gU1ZHVGV4dEVsZW1lbnQ6OmdldENUTShTdHlsZVVwZGF0ZVN0
cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gU1ZHVGV4
dEVsZW1lbnQ6OmdldENUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kp
CiB7CiAgICAgcmV0dXJuIFNWR0xvY2F0YWJsZTo6Y29tcHV0ZUNUTSh0aGlzLCBTVkdMb2NhdGFi
bGU6Ok5lYXJlc3RWaWV3cG9ydFNjb3BlLCBzdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKIH0KIAotQWZm
aW5lVHJhbnNmb3JtIFNWR1RleHRFbGVtZW50OjpnZXRTY3JlZW5DVE0oU3R5bGVVcGRhdGVTdHJh
dGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFNWR1RleHRF
bGVtZW50OjpnZXRTY3JlZW5DVE0oU3R5bGVVcGRhdGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0
ZWd5KQogewogICAgIHJldHVybiBTVkdMb2NhdGFibGU6OmNvbXB1dGVDVE0odGhpcywgU1ZHTG9j
YXRhYmxlOjpTY3JlZW5TY29wZSwgc3R5bGVVcGRhdGVTdHJhdGVneSk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuaAkocmV2aXNpb24gODg5NTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOSArMzYsOSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBTVkdFbGVtZW50KiBuZWFyZXN0Vmlld3BvcnRFbGVtZW50
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBTVkdFbGVtZW50KiBmYXJ0aGVzdFZpZXdwb3J0RWxlbWVu
dCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3QgZ2V0QkJveChTdHlsZVVwZGF0ZVN0
cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFu
c2Zvcm0gZ2V0Q1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25z
dDsKLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRTY3JlZW5DVE0oU3R5bGVVcGRhdGVT
dHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0
IGdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpOworICAgIHZp
cnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dT
dHlsZVVwZGF0ZSk7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0U2NyZWVuQ1RNKFN0
eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKTsKICAgICB2aXJ0dWFsIEFmZmlu
ZVRyYW5zZm9ybSBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29uc3Q7CiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4ODk1MykKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODAsNyArODAsNyBAQCBQYXNzUmVmUHRyPFNWR1VzZUVsZW1lbnQ+IFNWR1VzZUVsZW1lbnQ6CiAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdVc2VFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7
CiB9CiAKLVNWR0VsZW1lbnRJbnN0YW5jZSogU1ZHVXNlRWxlbWVudDo6aW5zdGFuY2VSb290KCkg
Y29uc3QKK1NWR0VsZW1lbnRJbnN0YW5jZSogU1ZHVXNlRWxlbWVudDo6aW5zdGFuY2VSb290KCkK
IHsKICAgICAvLyBJZiB0aGVyZSBpcyBubyBlbGVtZW50IGluc3RhbmNlIHRyZWUsIGZvcmNlIGlt
bWVkaWF0ZSBTVkdFbGVtZW50SW5zdGFuY2UgdHJlZQogICAgIC8vIGNyZWF0aW9uIGJ5IGFza2lu
ZyB0aGUgZG9jdW1lbnQgdG8gaW52b2tlIG91ciByZWNhbGNTdHlsZSBmdW5jdGlvbiAtIGFzIHdl
IGNhbid0CkBAIC03MzcsNyArNzM3LDcgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpkZXRhY2goKQog
ICAgIGRldGFjaEluc3RhbmNlKCk7CiB9CiAKLXN0YXRpYyBib29sIGlzRGlyZWN0UmVmZXJlbmNl
KE5vZGUqIG5vZGUpCitzdGF0aWMgYm9vbCBpc0RpcmVjdFJlZmVyZW5jZShjb25zdCBOb2RlKiBu
b2RlKQogewogICAgIHJldHVybiBub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpwYXRoVGFnKQog
ICAgICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpyZWN0VGFnKQpAQCAtNzQ4
LDcgKzc0OCw3IEBAIHN0YXRpYyBib29sIGlzRGlyZWN0UmVmZXJlbmNlKE5vZGUqIG5vZGUKICAg
ICAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6dGV4dFRhZyk7CiB9CiAKLXZv
aWQgU1ZHVXNlRWxlbWVudDo6dG9DbGlwUGF0aChQYXRoJiBwYXRoKSBjb25zdAordm9pZCBTVkdV
c2VFbGVtZW50Ojp0b0NsaXBQYXRoKFBhdGgmIHBhdGgpCiB7CiAgICAgQVNTRVJUKHBhdGguaXNF
bXB0eSgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5oCShyZXZpc2lvbiA4
ODk1MykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgU1ZHVXNlRWxlbWVudCA6IHB1YmxpYyBTVkdTdHls
ZWRUcgogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1VzZUVsZW1lbnQ+IGNyZWF0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIFNWR0VsZW1lbnRJbnN0
YW5jZSogaW5zdGFuY2VSb290KCkgY29uc3Q7CisgICAgU1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0
YW5jZVJvb3QoKTsKICAgICBTVkdFbGVtZW50SW5zdGFuY2UqIGFuaW1hdGVkSW5zdGFuY2VSb290
KCkgY29uc3Q7CiAgICAgU1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0YW5jZUZvclNoYWRvd1RyZWVF
bGVtZW50KE5vZGUqKSBjb25zdDsKICAgICB2b2lkIGludmFsaWRhdGVTaGFkb3dUcmVlKCk7CkBA
IC03Miw3ICs3Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAg
IHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKIAotICAgIHZpcnR1YWwgdm9pZCB0b0NsaXBQYXRoKFBh
dGgmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdG9DbGlwUGF0aChQYXRoJik7CiAKICAgICBz
dGF0aWMgdm9pZCByZW1vdmVEaXNhbGxvd2VkRWxlbWVudHNGcm9tU3VidHJlZShOb2RlKiBlbGVt
ZW50KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlM
RWxlbWVudC5jcHAJKHJldmlzaW9uIDg4OTUzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxOSw3ICs0MTksNyBA
QCB2b2lkIFNWR1NNSUxFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKEF0CiAgICAgfQogfQogCi1p
bmxpbmUgRWxlbWVudCogU1ZHU01JTEVsZW1lbnQ6OmV2ZW50QmFzZUZvcihjb25zdCBDb25kaXRp
b24mIGNvbmRpdGlvbikgY29uc3QKK2lubGluZSBFbGVtZW50KiBTVkdTTUlMRWxlbWVudDo6ZXZl
bnRCYXNlRm9yKGNvbnN0IENvbmRpdGlvbiYgY29uZGl0aW9uKQogewogICAgIHJldHVybiBjb25k
aXRpb24ubV9iYXNlSUQuaXNFbXB0eSgpID8gdGFyZ2V0RWxlbWVudCgpIDogdHJlZVNjb3BlKCkt
PmdldEVsZW1lbnRCeUlkKGNvbmRpdGlvbi5tX2Jhc2VJRCk7CiB9CkBAIC00ODksNyArNDg5LDcg
QEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6cmVzY2hlZHVsZSgpCiAgICAgICAgIG1fdGltZUNvbnRh
aW5lci0+c2NoZWR1bGUodGhpcyk7CiB9CiAKLVNWR0VsZW1lbnQqIFNWR1NNSUxFbGVtZW50Ojp0
YXJnZXRFbGVtZW50KCkgY29uc3QKK1NWR0VsZW1lbnQqIFNWR1NNSUxFbGVtZW50Ojp0YXJnZXRF
bGVtZW50KCkKIHsKICAgICBpZiAobV90YXJnZXRFbGVtZW50KQogICAgICAgICByZXR1cm4gbV90
YXJnZXRFbGVtZW50OwpAQCAtNTAwLDcgKzUwMCw3IEBAIFNWR0VsZW1lbnQqIFNWR1NNSUxFbGVt
ZW50Ojp0YXJnZXRFbGVtZW4KICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgbV90YXJnZXRF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHRhcmdldCk7Ci0gICAgZG9jdW1lbnQo
KS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5hZGRBbmltYXRpb25FbGVtZW50VG9UYXJnZXQoY29u
c3RfY2FzdDxTVkdTTUlMRWxlbWVudCo+KHRoaXMpLCBtX3RhcmdldEVsZW1lbnQpOworICAgIGRv
Y3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+YWRkQW5pbWF0aW9uRWxlbWVudFRvVGFy
Z2V0KHRoaXMsIG1fdGFyZ2V0RWxlbWVudCk7CiAgICAgcmV0dXJuIG1fdGFyZ2V0RWxlbWVudDsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1l
bnQuaAkocmV2aXNpb24gODg5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDExICs0OSwxMSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2
b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaGFzVmFs
aWRBdHRyaWJ1dGVUeXBlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0
dHJpYnV0ZVR5cGUoKSA9IDA7CiAKICAgICBTTUlMVGltZUNvbnRhaW5lciogdGltZUNvbnRhaW5l
cigpIGNvbnN0IHsgcmV0dXJuIG1fdGltZUNvbnRhaW5lci5nZXQoKTsgfQogCi0gICAgU1ZHRWxl
bWVudCogdGFyZ2V0RWxlbWVudCgpIGNvbnN0OworICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1l
bnQoKTsKICAgICB2b2lkIHJlc2V0VGFyZ2V0RWxlbWVudCgpIHsgbV90YXJnZXRFbGVtZW50ID0g
MDsgfQogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX2F0dHJpYnV0ZU5hbWU7IH0KIApAQCAtMTU0LDcgKzE1NCw3IEBAIHByaXZhdGU6CiAg
ICAgfTsKICAgICBib29sIHBhcnNlQ29uZGl0aW9uKGNvbnN0IFN0cmluZyYsIEJlZ2luT3JFbmQg
YmVnaW5PckVuZCk7CiAgICAgdm9pZCBwYXJzZUJlZ2luT3JFbmQoY29uc3QgU3RyaW5nJiwgQmVn
aW5PckVuZCBiZWdpbk9yRW5kKTsKLSAgICBFbGVtZW50KiBldmVudEJhc2VGb3IoY29uc3QgQ29u
ZGl0aW9uJikgY29uc3Q7CisgICAgRWxlbWVudCogZXZlbnRCYXNlRm9yKGNvbnN0IENvbmRpdGlv
biYpOwogCiAgICAgdm9pZCBjb25uZWN0Q29uZGl0aW9ucygpOwogICAgIHZvaWQgZGlzY29ubmVj
dENvbmRpdGlvbnMoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4
OTE3MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDYtMTcgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bn
b29nbGUuY29tPgorCisgICAgICAgIFJlbW92ZSAiY29uc3QiIGZyb20gb2J2aW91c2x5LW5vbi1j
b25zdCBhY2Nlc3NvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTYyMzAyCisKKyAgICAgICAgKiBwdWJsaWMvV2ViRWxlbWVudC5oOgorICAgICAgICAq
IHNyYy9XZWJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRWxlbWVudDo6aW5uZXJU
ZXh0KTogTm90IGNvbnN0IGR1ZSB0byBjYWxsIHRvIG5ld2x5LW5vbi1jb25zdCBFbGVtZW50Ojpp
bm5lclRleHQoKS4KKyAgICAgICAgKiBzcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcDogVXNl
IG5vbi1jb25zdCBOb2RlKnMgZm9yIGNvZGUgdGhhdCBjYWxscyBuZXdseSBub24tY29uc3QgYWNj
ZXNzb3JzLgorICAgICAgICAoSFRNTE5hbWVzOjpJc1NlbGVjdEluRGVmYXVsdFN0YXRlKToKKyAg
ICAgICAgKEhUTUxOYW1lczo6SXNJbkRlZmF1bHRTdGF0ZSk6CisgICAgICAgICogc3JjL1dlYlZp
ZXdJbXBsLmNwcDogVXNlIG5vbi1jb25zdCBOb2RlKnMgZm9yIGNvZGUgdGhhdCBjYWxscyBuZXds
eSBub24tY29uc3QgYWNjZXNzb3JzLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0
Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29uZmlybUNvbXBv
c2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnRleHRJbnB1dFR5cGUpOgor
CiAyMDExLTA2LTE3ICBDaHJpcyBSb2dlcnMgIDxjcm9nZXJzQGdvb2dsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJFbGVtZW50LmgJKHJldmlzaW9uIDg4OTUzKQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3
IEBAIGNsYXNzIFdlYk5hbWVkTm9kZU1hcDsKICAgICAgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcg
Z2V0QXR0cmlidXRlKGNvbnN0IFdlYlN0cmluZyYpIGNvbnN0OwogICAgICAgICBXRUJLSVRfQVBJ
IGJvb2wgc2V0QXR0cmlidXRlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5n
JiB2YWx1ZSk7CiAgICAgICAgIFdFQktJVF9BUEkgV2ViTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMo
KSBjb25zdDsKLSAgICAgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgaW5uZXJUZXh0KCkgY29uc3Q7
CisgICAgICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGlubmVyVGV4dCgpOwogCiAgICAgICAgIFdF
QktJVF9BUEkgV2ViTm9kZSBzaGFkb3dSb290KCk7CiAgICAgICAgIFdFQktJVF9BUEkgV2ViTm9k
ZSBlbnN1cmVTaGFkb3dSb290KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJFbGVtZW50LmNwcAkocmV2aXNpb24gODg5NTMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsOSArODYsOSBAQCBXZWJO
YW1lZE5vZGVNYXAgV2ViRWxlbWVudDo6YXR0cmlidXRlcygpCiAgICAgcmV0dXJuIFdlYk5hbWVk
Tm9kZU1hcChtX3ByaXZhdGUtPmF0dHJpYnV0ZXMoKSk7CiB9CiAKLVdlYlN0cmluZyBXZWJFbGVt
ZW50Ojppbm5lclRleHQoKSBjb25zdAorV2ViU3RyaW5nIFdlYkVsZW1lbnQ6OmlubmVyVGV4dCgp
CiB7Ci0gICAgcmV0dXJuIGNvbnN0VW53cmFwPEVsZW1lbnQ+KCktPmlubmVyVGV4dCgpOworICAg
IHJldHVybiB1bndyYXA8RWxlbWVudD4oKS0+aW5uZXJUZXh0KCk7CiB9CiAKIFdlYk5vZGUgV2Vi
RWxlbWVudDo6c2hhZG93Um9vdCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAJKHJldmlzaW9uIDg4OTUzKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTUsMTQgKzk1LDE0IEBAIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIEdl
dEJ1dHRvblRvQWN0aXYKIAogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzZWxlY3RlZCBzdGF0ZSBv
ZiBhbGwgdGhlIG9wdGlvbnMgbWF0Y2hlcyB0aGUgZGVmYXVsdAogLy8gc2VsZWN0ZWQgc3RhdGUu
Ci1ib29sIElzU2VsZWN0SW5EZWZhdWx0U3RhdGUoY29uc3QgSFRNTFNlbGVjdEVsZW1lbnQqIHNl
bGVjdCkKK2Jvb2wgSXNTZWxlY3RJbkRlZmF1bHRTdGF0ZShIVE1MU2VsZWN0RWxlbWVudCogc2Vs
ZWN0KQogewogICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdC0+
bGlzdEl0ZW1zKCk7CiAgICAgaWYgKHNlbGVjdC0+bXVsdGlwbGUoKSB8fCBzZWxlY3QtPnNpemUo
KSA+IDEpIHsKICAgICAgICAgZm9yIChWZWN0b3I8RWxlbWVudCo+Ojpjb25zdF9pdGVyYXRvciBp
KGxpc3RJdGVtcy5iZWdpbigpKTsgaSAhPSBsaXN0SXRlbXMuZW5kKCk7ICsraSkgewogICAgICAg
ICAgICAgaWYgKCEoKmkpLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb25UYWcpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY29uc3QgSFRNTE9wdGlvbkVsZW1l
bnQqIG9wdGlvbkVsZW1lbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MT3B0aW9uRWxlbWVudCo+
KCppKTsKKyAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPigqaSk7CiAgICAgICAgICAgICBpZiAob3B0aW9u
RWxlbWVudC0+c2VsZWN0ZWQoKSAhPSBvcHRpb25FbGVtZW50LT5kZWZhdWx0U2VsZWN0ZWQoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTExMSwxMSArMTEx
LDExIEBAIGJvb2wgSXNTZWxlY3RJbkRlZmF1bHRTdGF0ZShjb25zdCBIVE1MU2UKIAogICAgIC8v
IFRoZSBzZWxlY3QgaXMgcmVuZGVyZWQgYXMgYSBjb21ib2JveCAoY2FsbGVkIG1lbnVsaXN0IGlu
IFdlYktpdCkuIEF0CiAgICAgLy8gbGVhc3Qgb25lIGl0ZW0gaXMgc2VsZWN0ZWQsIGRldGVybWlu
ZSB3aGljaCBvbmUuCi0gICAgY29uc3QgSFRNTE9wdGlvbkVsZW1lbnQqIGluaXRpYWxTZWxlY3Rl
ZCA9IDA7CisgICAgSFRNTE9wdGlvbkVsZW1lbnQqIGluaXRpYWxTZWxlY3RlZCA9IDA7CiAgICAg
Zm9yIChWZWN0b3I8RWxlbWVudCo+Ojpjb25zdF9pdGVyYXRvciBpKGxpc3RJdGVtcy5iZWdpbigp
KTsgaSAhPSBsaXN0SXRlbXMuZW5kKCk7ICsraSkgewogICAgICAgICBpZiAoISgqaSktPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvblRhZykpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgY29uc3QgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxjb25zdCBIVE1MT3B0aW9uRWxlbWVudCo+KCppKTsKKyAgICAgICAgSFRNTE9wdGlvbkVsZW1l
bnQqIG9wdGlvbkVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KCppKTsK
ICAgICAgICAgaWYgKG9wdGlvbkVsZW1lbnQtPmRlZmF1bHRTZWxlY3RlZCgpKSB7CiAgICAgICAg
ICAgICAvLyBUaGUgcGFnZSBzcGVjaWZpZWQgdGhlIG9wdGlvbiB0byBzZWxlY3QuCiAgICAgICAg
ICAgICBpbml0aWFsU2VsZWN0ZWQgPSBvcHRpb25FbGVtZW50OwpAQCAtMTI0LDIxICsxMjQsMjEg
QEAgYm9vbCBJc1NlbGVjdEluRGVmYXVsdFN0YXRlKGNvbnN0IEhUTUxTZQogICAgICAgICBpZiAo
IWluaXRpYWxTZWxlY3RlZCkKICAgICAgICAgICAgIGluaXRpYWxTZWxlY3RlZCA9IG9wdGlvbkVs
ZW1lbnQ7CiAgICAgfQotICAgIHJldHVybiBpbml0aWFsU2VsZWN0ZWQgPyBpbml0aWFsU2VsZWN0
ZWQtPnNlbGVjdGVkKCkgOiB0cnVlOworICAgIHJldHVybiAhaW5pdGlhbFNlbGVjdGVkIHx8IGlu
aXRpYWxTZWxlY3RlZC0+c2VsZWN0ZWQoKTsKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBm
b3JtIGVsZW1lbnQgaXMgaW4gaXRzIGRlZmF1bHQgc3RhdGUsIGZhbHNlIG90aGVyd2lzZS4KIC8v
IFRoZSBkZWZhdWx0IHN0YXRlIGlzIHRoZSBzdGF0ZSBvZiB0aGUgZm9ybSBlbGVtZW50IG9uIGlu
aXRpYWwgbG9hZCBvZiB0aGUKIC8vIHBhZ2UsIGFuZCB2YXJpZXMgZGVwZW5kaW5nIHVwb24gdGhl
IGZvcm0gZWxlbWVudC4gRm9yIGV4YW1wbGUsIGEgY2hlY2tib3ggaXMKIC8vIGluIGl0cyBkZWZh
dWx0IHN0YXRlIGlmIHRoZSBjaGVja2VkIHN0YXRlIG1hdGNoZXMgdGhlIHN0YXRlIG9mIHRoZSBj
aGVja2VkIGF0dHJpYnV0ZS4KLWJvb2wgSXNJbkRlZmF1bHRTdGF0ZShjb25zdCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KiBmb3JtRWxlbWVudCkKK2Jvb2wgSXNJbkRlZmF1bHRTdGF0ZShIVE1MRm9y
bUNvbnRyb2xFbGVtZW50KiBmb3JtRWxlbWVudCkKIHsKICAgICBpZiAoZm9ybUVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpIHsKLSAgICAgICAgY29uc3QgSFRNTElucHV0
RWxlbWVudCogaW5wdXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTElucHV0RWxlbWVu
dCo+KGZvcm1FbGVtZW50KTsKKyAgICAgICAgY29uc3QgSFRNTElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGZvcm1FbGVtZW50KTsKICAg
ICAgICAgaWYgKGlucHV0RWxlbWVudC0+aXNDaGVja2JveCgpIHx8IGlucHV0RWxlbWVudC0+aXNS
YWRpb0J1dHRvbigpKQogICAgICAgICAgICAgcmV0dXJuIGlucHV0RWxlbWVudC0+Y2hlY2tlZCgp
ID09IGlucHV0RWxlbWVudC0+aGFzQXR0cmlidXRlKGNoZWNrZWRBdHRyKTsKICAgICB9IGVsc2Ug
aWYgKGZvcm1FbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0VGFnKSkKLSAgICAg
ICAgcmV0dXJuIElzU2VsZWN0SW5EZWZhdWx0U3RhdGUoc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTFNl
bGVjdEVsZW1lbnQqPihmb3JtRWxlbWVudCkpOworICAgICAgICByZXR1cm4gSXNTZWxlY3RJbkRl
ZmF1bHRTdGF0ZShzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KGZvcm1FbGVtZW50KSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDg4OTUzKQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzU1LDcgKzEzNTUs
NyBAQCBib29sIFdlYlZpZXdJbXBsOjpzZXRDb21wb3NpdGlvbigKICAgICAvLyBub2RlLCB3aGlj
aCBkb2Vzbid0IGV4aXN0IGFueSBsb25nZXIuCiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBlZGl0b3ItPmNvbXBvc2l0aW9uUmFuZ2UoKTsKICAgICBpZiAocmFuZ2UpIHsKLSAgICAgICAg
Y29uc3QgTm9kZSogbm9kZSA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpOworICAgICAgICBOb2Rl
KiBub2RlID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7CiAgICAgICAgIGlmICghbm9kZSB8fCAh
bm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CkBAIC0xNDA0LDcgKzE0MDQsNyBAQCBib29sIFdlYlZpZXdJbXBsOjpjb25maXJtQ29tcG9z
aXRpb24oY29uCiAgICAgLy8gbm9kZSwgd2hpY2ggZG9lc24ndCBleGlzdCBhbnkgbG9uZ2VyLgog
ICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZWRpdG9yLT5jb21wb3NpdGlvblJhbmdlKCk7
CiAgICAgaWYgKHJhbmdlKSB7Ci0gICAgICAgIGNvbnN0IE5vZGUqIG5vZGUgPSByYW5nZS0+c3Rh
cnRDb250YWluZXIoKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IHJhbmdlLT5zdGFydENvbnRhaW5l
cigpOwogICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTQ1Myw3ICsxNDUzLDcgQEAgV2Vi
VGV4dElucHV0VHlwZSBXZWJWaWV3SW1wbDo6dGV4dElucHV0VAogICAgIGlmICghc2VsZWN0aW9u
KQogICAgICAgICByZXR1cm4gdHlwZTsKIAotICAgIGNvbnN0IE5vZGUqIG5vZGUgPSBzZWxlY3Rp
b24tPnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gc2VsZWN0aW9u
LT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm4gdHlwZTsKIAo=
</data>
<flag name="commit-queue"
          id="91670"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97828</attachid>
            <date>2011-06-20 11:40:24 -0700</date>
            <delta_ts>2011-07-20 13:20:28 -0700</delta_ts>
            <desc>First patch v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>76235</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5MjY0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQ2IEBACisyMDExLTA2LTIwICBQZXRlciBL
YXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgImNvbnN0IiBmcm9tIG9idmlvdXNseS1ub24t
Y29uc3QgYWNjZXNzb3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02MjMwMgorCisgICAgICAgIE5vIGZ1bmN0aW9uYWwgY2hhbmdlLCBzbyBubyBuZXcg
dGVzdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjogQWRqdXN0IGZ1bmN0aW9uIG5hbWVz
IHRvIHJlZmxlY3Qgbm9uLWNvbnN0bmVzcy4KKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0Fu
ZENoaWxkcmVuKTogTm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6
OmNyZWF0ZUVsZW1lbnQoKS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNjcm9sbExlZnQp
OiBOb3QgY29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpzY3JvbGxUb3ApOiBOb3QgY29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVu
dDo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50OjpzY3JvbGxXaWR0aCk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1
bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4K
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNjcm9sbEhlaWdodCk6IE5vdCBjb25zdCwgY2Fs
bHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5n
U3R5bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmJvdW5kc0luV2luZG93
U3BhY2UpOiBOb3QgY29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6dXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50OjpnZXRDbGllbnRSZWN0cyk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0
aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldEJvdW5kaW5nQ2xpZW50UmVjdCk6IE5vdCBjb25z
dCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmlubmVyVGV4
dCk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVM
YXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6Om91dGVyVGV4dCk6IE5vdCBjb25zdCwgY2FsbHMgbmV3bHkgbm9uLWNvbnN0IGZ1bmN0aW9u
IEVsZW1lbnQ6OmlubmVyVGV4dCgpLgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAg
ICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNDb250ZW50RWRpdGFi
bGUpOiBOb3QgY29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJDb3JlOjpOb2Rl
OjpzaG91bGRVc2VJbnB1dE1ldGhvZCk6IE5vdCBjb25zdCwgY2FsbHMgbmV3bHkgbm9uLWNvbnN0
IGZ1bmN0aW9uIE5vZGU6OmlzQ29udGVudEVkaXRhYmxlKCkuCisgICAgICAgICogZG9tL05vZGUu
aDoKKyAgICAgICAgKiBkb20vT3B0aW9uRWxlbWVudC5oOiBWaXJ0dWFsIGZ1bmN0aW9uIE9wdGlv
bkVsZW1lbnQ6OnNlbGVjdGVkKCkgbm90IGNvbnN0IGJlY2F1c2UgSFRNTE9wdGlvbkVsZW1lbnQg
aW1wbGVtZW50YXRpb24gaXMgbm9uLWNvbnN0LgorICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnRleHQpOiBO
b3QgY29uc3QsIGNhbGxzIG5ld2x5IG5vbi1jb25zdCBmdW5jdGlvbiBFbGVtZW50Ojppbm5lclRl
eHQoKS4KKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50Lmg6CisgICAgICAgICogaHRt
bC9IVE1MQXBwbGV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXBwbGV0RWxl
bWVudDo6cmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncyk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNv
bnN0IGZ1bmN0aW9uIFJlbmRlckFwcGxldDo6Y3JlYXRlV2lkZ2V0SWZOZWNlc3NhcnkoKS4KKyAg
ICAgICAgKiBodG1sL0hUTUxBcHBsZXRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MQXJl
YUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50OjppbWFnZUVs
ZW1lbnQpOiBOb3QgY29uc3QsIGNhbGxzIG5ld2x5IG5vbi1jb25zdCBmdW5jdGlvbiBIVE1MTWFw
RWxlbWVudDo6aW1hZ2VFbGVtZW50KCkuCisgICAgICAgICogaHRtbC9IVE1MQXJlYUVsZW1lbnQu
aDoKKyAgICAgICAgKiBodG1sL0hUTUxCb2R5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQm9keUVsZW1lbnQ6OnNjcm9sbExlZnQpOiBOb3QgY29uc3QsIGNhbGxzIG5vbi1jb25z
dCBmdW5jdGlvbiBEb2N1bWVudDo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQ6OnNjcm9sbFRvcCk6IE5vdCBj
b25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVu
dDo6c2Nyb2xsSGVpZ2h0KTogTm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9j
dW1lbnQ6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50OjpzY3JvbGxXaWR0aCk6IE5vdCBjb25zdCwgY2FsbHMg
bm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5
bGVzaGVldHMoKS4KKyAgICAgICAgKiBodG1sL0hUTUxCb2R5RWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRW1iZWRF
bGVtZW50OjpyZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKTogTm90IGNvbnN0LCBjYWxscyBub24t
Y29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OmNyZWF0ZUVsZW1lbnQoKS4KKyAgICAgICAgKiBodG1s
L0hUTUxFbWJlZEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjp3aWR0aCk6IE5v
dCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVs
ZW1lbnRCYXNlOjpoZWlnaHQpOiBOb3QgY29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBE
b2N1bWVudDo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAg
ICogaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oOgorICAgICAgICAqIGh0bWwvSFRNTEltYWdl
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Ojp3aWR0aCk6
IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFn
ZUVsZW1lbnQ6OmhlaWdodCk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERv
Y3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAgICAg
KiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2hvdWxkVXNlSW5w
dXRNZXRob2QpOiBWaXJ0dWFsIGZ1bmN0aW9uIG5vdCBjb25zdCBiZWNhdXNlIE5vZGUgaW1wbGVt
ZW50YXRpb24gaXMgbm9uLWNvbnN0LgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5o
OgorICAgICAgICAqIGh0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5Z2VuU2VsZWN0RWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRD
aGlsZHJlbik6IFZpcnR1YWwgZnVuY3Rpb24gbm90IGNvbnN0IGJlY2F1c2UgRWxlbWVudCBpbXBs
ZW1lbnRhdGlvbiBpcyBub24tY29uc3QuCisgICAgICAgICogaHRtbC9IVE1MTWFwRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFwRWxlbWVudDo6aW1hZ2VFbGVtZW50KTogTm90
IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OmltYWdlcygpLgorICAg
ICAgICAqIGh0bWwvSFRNTE1hcEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpyZW5kZXJX
aWRnZXRGb3JKU0JpbmRpbmdzKTogTm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24g
RG9jdW1lbnQ6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpLgorICAgICAg
ICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpzZWxlY3Rl
ZCk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIEhUTUxTZWxlY3RFbGVtZW50
OjpyZWNhbGNMaXN0SXRlbXNJZk5lZWRlZCgpLgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVs
ZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcDogVmlydHVhbCBm
dW5jdGlvbiBIVE1MUGx1Z0luRWxlbWVudDo6cmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygpIG5v
dCBjb25zdCBiZWNhdXNlIHZhcmlvdXMgc3ViY2xhc3MgaW1wbGVtZW50YXRpb25zIGFyZSBub24t
Y29uc3QuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudDo6Z2V0SW5zdGFuY2Up
OiBOb3QgY29uc3QsIGNhbGxzIG5ld2x5IG5vbi1jb25zdCBmdW5jdGlvbiBIVE1MUGx1Z0luRWxl
bWVudDo6cGx1Z2luV2lkZ2V0KCkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVu
dDo6cGx1Z2luV2lkZ2V0KTogTm90IGNvbnN0LCBjYWxscyBuZXdseSBub24tY29uc3QgZnVuY3Rp
b24gSFRNTFBsdWdJbkVsZW1lbnQ6OnJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKS4KKyAgICAg
ICAgKiBodG1sL0hUTUxQbHVnSW5FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MU2NyaXB0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6Y2xvbmVF
bGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbik6IFZpcnR1YWwgZnVuY3Rpb24gbm90
IGNvbnN0IGJlY2F1c2UgRWxlbWVudCBpbXBsZW1lbnRhdGlvbiBpcyBub24tY29uc3QuCisgICAg
ICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRB
cmVhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50Ojpz
aG91bGRVc2VJbnB1dE1ldGhvZCk6IFZpcnR1YWwgZnVuY3Rpb24gbm90IGNvbnN0IGJlY2F1c2Ug
Tm9kZSBpbXBsZW1lbnRhdGlvbiBpcyBub24tY29uc3QuCisgICAgICAgICogaHRtbC9IVE1MVGV4
dEFyZWFFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJUaHVtYkVsZW1lbnQ6OmNsb25lRWxlbWVudFdp
dGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4pOiBWaXJ0dWFsIGZ1bmN0aW9uIG5vdCBjb25zdCBi
ZWNhdXNlIEVsZW1lbnQgaW1wbGVtZW50YXRpb24gaXMgbm9uLWNvbnN0LgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmli
dXRlc0FuZENoaWxkcmVuKTogVmlydHVhbCBmdW5jdGlvbiBub3QgY29uc3QgYmVjYXVzZSBFbGVt
ZW50IGltcGxlbWVudGF0aW9uIGlzIG5vbi1jb25zdC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1NWR1NoYWRvd1RyZWVFbGVtZW50cy5oOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6aGFzVmFsaWRBdHRy
aWJ1dGVUeXBlKTogTm90IGNvbnN0LCBjYWxscyBuZXdseSBub24tY29uc3QgZnVuY3Rpb24gU1ZH
U01JTEVsZW1lbnQ6OnRhcmdldEVsZW1lbnQoKS4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRl
VHlwZSk6IE5vdCBjb25zdCwgY2FsbHMgbmV3bHkgbm9uLWNvbnN0IGZ1bmN0aW9uIFNWR1NNSUxF
bGVtZW50Ojp0YXJnZXRFbGVtZW50KCkuCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpoYXNWYWxpZEF0
dHJpYnV0ZVR5cGUpOiBOb3QgY29uc3QsIGNhbGxzIG5ld2x5IG5vbi1jb25zdCBmdW5jdGlvbiBT
VkdTTUlMRWxlbWVudDo6dGFyZ2V0RWxlbWVudCgpLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRl
VHJhbnNmb3JtRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmFjY2Vzc0RvY3VtZW50U1ZHRXh0ZW5zaW9ucyk6IE5v
dCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50OjphY2Nlc3NTVkdFeHRl
bnNpb25zKCkuCisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojpib3VuZGluZ0JveCk6IE5v
dCBjb25zdCwgY2FsbHMgbmV3bHkgbm9uLWNvbnN0IGZ1bmN0aW9uIFNWR1N0eWxlZExvY2F0YWJs
ZUVsZW1lbnQ6OmdldEJCb3goKS4KKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5oOgorICAgICAg
ICAqIHN2Zy9TVkdMb2NhdGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTG9jYXRhYmxl
OjpnZXRCQm94KTogQXJndW1lbnQgbm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24g
RG9jdW1lbnQ6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpIG9uIGFyZ3Vt
ZW50LgorICAgICAgICAoV2ViQ29yZTo6U1ZHTG9jYXRhYmxlOjpjb21wdXRlQ1RNKTogQXJndW1l
bnQgbm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OnVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpIG9uIGFyZ3VtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHTG9jYXRhYmxlOjpnZXRUcmFuc2Zvcm1Ub0VsZW1lbnQpOiBOb3QgY29uc3QsIGNh
bGxzIG5ld2x5IG5vbi1jb25zdCBmdW5jdGlvbiBTVkdMb2NhdGFibGU6OmdldENUTSgpLgorICAg
ICAgICAqIHN2Zy9TVkdMb2NhdGFibGUuaDogVmlydHVhbCBmdW5jdGlvbnMgU1ZHTG9jYXRhYmxl
OjpnZXRCQm94KCksIFNWR0xvY2F0YWJsZTo6Z2V0Q1RNKCksIGFuZCBTVkdMb2NhdGFibGU6Omdl
dFNjcmVlbkNUTSgpIG5vdCBjb25zdCBiZWNhdXNlIHZhcmlvdXMgc3ViY2xhc3MgaW1wbGVtZW50
YXRpb25zIGFyZSBub24tY29uc3QuCisgICAgICAgICogc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0RWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91
dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbik6IFZpcnR1YWwgZnVuY3Rpb24gbm90IGNvbnN0IGJlY2F1
c2UgRWxlbWVudCBpbXBsZW1lbnRhdGlvbiBpcyBub24tY29uc3QuCisgICAgICAgICogc3ZnL1NW
R1NjcmlwdEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZXNJ
Zk5lZWRlZCk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojph
Y2Nlc3NTVkdFeHRlbnNpb25zKCkuCisgICAgICAgICogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50OjpnZXRCQm94KTogTm90IGNvbnN0LCBj
YWxscyBuZXdseSBub24tY29uc3Qgc3RhdGljIGZ1bmN0aW9uIFNWR0xvY2F0YWJsZTo6Z2V0QkJv
eCgpLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0Q1RN
KTogTm90IGNvbnN0LCBjYWxscyBuZXdseSBub24tY29uc3Qgc3RhdGljIGZ1bmN0aW9uIFNWR0xv
Y2F0YWJsZTo6Y29tcHV0ZUNUTSgpLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkTG9jYXRh
YmxlRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKTogTm90IGNvbnN0LCBjYWxscyBuZXdseSBub24tY29u
c3Qgc3RhdGljIGZ1bmN0aW9uIFNWR0xvY2F0YWJsZTo6Y29tcHV0ZUNUTSgpLgorICAgICAgICAq
IHN2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50OjpnZXRDVE0pOiBOb3QgY29uc3QsIGNhbGxzIG5ld2x5IG5vbi1j
b25zdCBzdGF0aWMgZnVuY3Rpb24gU1ZHTG9jYXRhYmxlOjpjb21wdXRlQ1RNKCkuCisgICAgICAg
IChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKTog
Tm90IGNvbnN0LCBjYWxscyBuZXdseSBub24tY29uc3Qgc3RhdGljIGZ1bmN0aW9uIFNWR0xvY2F0
YWJsZTo6Y29tcHV0ZUNUTSgpLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQ6OmdldEJCb3gpOiBOb3QgY29uc3QsIGNhbGxzIG5ld2x5IG5vbi1jb25zdCBz
dGF0aWMgZnVuY3Rpb24gU1ZHTG9jYXRhYmxlOjpnZXRCQm94KCkuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6dG9DbGlwUGF0aCk6IFZpcnR1YWwgZnVu
Y3Rpb24gbm90IGNvbnN0IGJlY2F1c2UgU1ZHVXNlRWxlbWVudCBpbXBsZW1lbnRhdGlvbiBpcyBu
b24tY29uc3QuCisgICAgICAgICogc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Lmg6
CisgICAgICAgICogc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldE51bWJlck9mQ2hhcnMpOiBOb3QgY29uc3Qs
IGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6dXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q29udGVudEVsZW1l
bnQ6OmdldENvbXB1dGVkVGV4dExlbmd0aCk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1
bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0U3ViU3RyaW5nTGVu
Z3RoKTogTm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dENvbnRlbnRFbGVtZW50OjpnZXRTdGFydFBvc2l0aW9uT2ZDaGFyKTogTm90IGNvbnN0LCBj
YWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50
OjpnZXRFbmRQb3NpdGlvbk9mQ2hhcik6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0
aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0RXh0ZW50T2ZDaGFyKTog
Tm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENv
bnRlbnRFbGVtZW50OjpnZXRSb3RhdGlvbk9mQ2hhcik6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNv
bnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0Q2hhck51
bUF0UG9zaXRpb24pOiBOb3QgY29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVu
dDo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnNlbGVjdFN1YlN0cmluZyk6IE5vdCBjb25zdCwg
Y2FsbHMgbmV3bHkgbm9uLWNvbnN0IHN0YXRpYyBmdW5jdGlvbiBTVkdUZXh0Q29udGVudEVsZW1l
bnQ6OmdldE51bWJlck9mQ2hhcnMoKS4KKyAgICAgICAgKiBzdmcvU1ZHVGV4dENvbnRlbnRFbGVt
ZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1RleHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRFbGVtZW50OjpnZXRCQm94KTogTm90IGNvbnN0LCBjYWxscyBuZXdseSBub24t
Y29uc3Qgc3RhdGljIGZ1bmN0aW9uIFNWR0xvY2F0YWJsZTo6Z2V0QkJveCgpLgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6OmdldENUTSk6IE5vdCBjb25zdCwgY2FsbHMgbmV3bHkg
bm9uLWNvbnN0IHN0YXRpYyBmdW5jdGlvbiBTVkdMb2NhdGFibGU6OmNvbXB1dGVDVE0oKS4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRFbGVtZW50OjpnZXRTY3JlZW5DVE0pOiBOb3QgY29uc3Qs
IGNhbGxzIG5ld2x5IG5vbi1jb25zdCBzdGF0aWMgZnVuY3Rpb24gU1ZHTG9jYXRhYmxlOjpjb21w
dXRlQ1RNKCkuCisgICAgICAgICogc3ZnL1NWR1RleHRFbGVtZW50Lmg6CisgICAgICAgICogc3Zn
L1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6aW5z
dGFuY2VSb290KTogTm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6
OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpLgorICAgICAgICAoV2ViQ29y
ZTo6aXNEaXJlY3RSZWZlcmVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6
dG9DbGlwUGF0aCk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50
OjphY2Nlc3NTVkdFeHRlbnNpb25zKCkuCisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1NNSUxFbGVtZW50OjpldmVudEJhc2VGb3IpOiBOb3QgY29uc3QsIGNhbGxzIG5l
d2x5IG5vbi1jb25zdCBmdW5jdGlvbiBTVkdTTUlMRWxlbWVudDo6dGFyZ2V0RWxlbWVudCgpLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnRhcmdldEVsZW1lbnQpOiBOb3QgY29u
c3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6YWNjZXNzU1ZHRXh0ZW5zaW9u
cygpLgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaDogVmlydHVhbCBm
dW5jdGlvbiBTVkdTTUlMRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgbm90IGNvbnN0
IGJlY2F1c2UgdmFyaW91cyBzdWJjbGFzcyBpbXBsZW1lbnRhdGlvbnMgYXJlIG5vbi1jb25zdC4K
KwogMjAxMS0wNi0yMCAgS2V2aW4gT2xsaXZpZXIgIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4K
IAogICAgICAgICBbd3hdIFVucmV2aWV3ZWQgYnVpbGQgZml4LCBmaXggdGhlIGNvZGVwYXRocyBy
dW4gdW5kZXIgZWFjaCBDUFUgdHlwZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lv
biA4OTI2MikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkp
CkBAIC04MTksOCArODE5LDEwIEBAIF9fWk43V2ViQ29yZTZXaWRnZXREMkV2CiBfX1pON1dlYkNv
cmU2dG9Ob2RlRU4zSlNDN0pTVmFsdWVFCiBfX1pON1dlYkNvcmU3Q29uc29sZTIxc2hvdWxkUHJp
bnRFeGNlcHRpb25zRXYKIF9fWk43V2ViQ29yZTdDb25zb2xlMjRzZXRTaG91bGRQcmludEV4Y2Vw
dGlvbnNFYgorX19aTjdXZWJDb3JlN0VsZW1lbnQxOWJvdW5kc0luV2luZG93U3BhY2VFdgogX19a
TjdXZWJDb3JlN0VsZW1lbnQxNmVuc3VyZVNoYWRvd1Jvb3RFdgogX19aTjdXZWJDb3JlN0VsZW1l
bnQxNnJlbW92ZVNoYWRvd1Jvb3RFdgorX19aTjdXZWJDb3JlN0VsZW1lbnQ5aW5uZXJUZXh0RXYK
IF9fWk43V2ViQ29yZTdJbnRSZWN0NXNjYWxlRWYKIF9fWk43V2ViQ29yZTdJbnRSZWN0NXVuaXRl
RVJLUzBfCiBfX1pON1dlYkNvcmU3SW50UmVjdDlpbnRlcnNlY3RFUktTMF8KQEAgLTEyODAsOCAr
MTI4Miw2IEBAIF9fWk5LN1dlYkNvcmU2V2lkZ2V0OWZyYW1lUmVjdEV2CiBfX1pOSzdXZWJDb3Jl
N0VsZW1lbnQxMHNjcmVlblJlY3RFdgogX19aTks3V2ViQ29yZTdFbGVtZW50MTBzaGFkb3dSb290
RXYKIF9fWk5LN1dlYkNvcmU3RWxlbWVudDEyZ2V0QXR0cmlidXRlRVJLTlNfMTNRdWFsaWZpZWRO
YW1lRQotX19aTks3V2ViQ29yZTdFbGVtZW50MTlib3VuZHNJbldpbmRvd1NwYWNlRXYKLV9fWk5L
N1dlYkNvcmU3RWxlbWVudDlpbm5lclRleHRFdgogX19aTks3V2ViQ29yZTdJbnRSZWN0MTBpbnRl
cnNlY3RzRVJLUzBfCiBfX1pOSzdXZWJDb3JlN0ludFJlY3Q4Y29udGFpbnNFUktTMF8KIF9fWk5L
N1dlYkNvcmU3SW50UmVjdGN2NkNHUmVjdEV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShy
ZXZpc2lvbiA4OTI2MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjA5LDcgKzIwOSw3IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gRWxlbWVudDo6
Y2xvbmVFbGVtZW4KICAgICByZXR1cm4gY2xvbmUucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRy
PEVsZW1lbnQ+IEVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRy
ZW4oKSBjb25zdAorUGFzc1JlZlB0cjxFbGVtZW50PiBFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRo
b3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKCkKIHsKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y3Jl
YXRlRWxlbWVudCh0YWdRTmFtZSgpLCBmYWxzZSk7CiB9CkBAIC00NjQsNyArNDY0LDcgQEAgaW50
IEVsZW1lbnQ6OmNsaWVudEhlaWdodCgpCiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBFbGVtZW50
OjpzY3JvbGxMZWZ0KCkgY29uc3QKK2ludCBFbGVtZW50OjpzY3JvbGxMZWZ0KCkKIHsKICAgICBk
b2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICBp
ZiAoUmVuZGVyQm94KiByZW5kID0gcmVuZGVyQm94KCkpCkBAIC00NzIsNyArNDcyLDcgQEAgaW50
IEVsZW1lbnQ6OnNjcm9sbExlZnQoKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCi1pbnQgRWxl
bWVudDo6c2Nyb2xsVG9wKCkgY29uc3QKK2ludCBFbGVtZW50OjpzY3JvbGxUb3AoKQogewogICAg
IGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAg
IGlmIChSZW5kZXJCb3gqIHJlbmQgPSByZW5kZXJCb3goKSkKQEAgLTQ5NCw3ICs0OTQsNyBAQCB2
b2lkIEVsZW1lbnQ6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wKQogICAgICAgICByZW5kLT5zZXRT
Y3JvbGxUb3Aoc3RhdGljX2Nhc3Q8aW50PihuZXdUb3AgKiByZW5kLT5zdHlsZSgpLT5lZmZlY3Rp
dmVab29tKCkpKTsKIH0KIAotaW50IEVsZW1lbnQ6OnNjcm9sbFdpZHRoKCkgY29uc3QKK2ludCBF
bGVtZW50OjpzY3JvbGxXaWR0aCgpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgaWYgKFJlbmRlckJveCogcmVuZCA9IHJlbmRl
ckJveCgpKQpAQCAtNTAyLDcgKzUwMiw3IEBAIGludCBFbGVtZW50OjpzY3JvbGxXaWR0aCgpIGNv
bnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBFbGVtZW50OjpzY3JvbGxIZWlnaHQoKSBjb25z
dAoraW50IEVsZW1lbnQ6OnNjcm9sbEhlaWdodCgpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgaWYgKFJlbmRlckJveCogcmVu
ZCA9IHJlbmRlckJveCgpKQpAQCAtNTEwLDcgKzUxMCw3IEBAIGludCBFbGVtZW50OjpzY3JvbGxI
ZWlnaHQoKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCi1JbnRSZWN0IEVsZW1lbnQ6OmJvdW5k
c0luV2luZG93U3BhY2UoKSBjb25zdAorSW50UmVjdCBFbGVtZW50Ojpib3VuZHNJbldpbmRvd1Nw
YWNlKCkKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKIApAQCAtNTIyLDcgKzUyMiw3IEBAIEludFJlY3QgRWxlbWVudDo6Ym91bmRzSW5X
aW5kb3dTcGFjZSgpIGMKICNpZiBFTkFCTEUoU1ZHKQogICAgIGlmIChpc1NWR0VsZW1lbnQoKSAm
JiByZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIEdldCB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIGZy
b20gdGhlIFNWRyBtb2RlbC4KLSAgICAgICAgY29uc3QgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9
IHN0YXRpY19jYXN0PGNvbnN0IFNWR0VsZW1lbnQqPih0aGlzKTsKKyAgICAgICAgU1ZHRWxlbWVu
dCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPih0aGlzKTsKICAgICAgICAg
RmxvYXRSZWN0IGxvY2FsUmVjdDsKICAgICAgICAgaWYgKHN2Z0VsZW1lbnQtPmJvdW5kaW5nQm94
KGxvY2FsUmVjdCkpCiAgICAgICAgICAgICBxdWFkcy5hcHBlbmQocmVuZGVyZXIoKS0+bG9jYWxU
b0Fic29sdXRlUXVhZChsb2NhbFJlY3QpKTsKQEAgLTU0NSw3ICs1NDUsNyBAQCBJbnRSZWN0IEVs
ZW1lbnQ6OmJvdW5kc0luV2luZG93U3BhY2UoKSBjCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
UGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4gRWxlbWVudDo6Z2V0Q2xpZW50UmVjdHMoKSBjb25z
dAorUGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4gRWxlbWVudDo6Z2V0Q2xpZW50UmVjdHMoKQog
ewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygp
OwogCkBAIC01NzgsNyArNTc4LDcgQEAgUGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4gRWxlbWVu
dDo6Z2V0QwogICAgIHJldHVybiBDbGllbnRSZWN0TGlzdDo6Y3JlYXRlKHF1YWRzKTsKIH0KIAot
UGFzc1JlZlB0cjxDbGllbnRSZWN0PiBFbGVtZW50OjpnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSBj
b25zdAorUGFzc1JlZlB0cjxDbGllbnRSZWN0PiBFbGVtZW50OjpnZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKQogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOwogCkBAIC01ODYsNyArNTg2LDcgQEAgUGFzc1JlZlB0cjxDbGllbnRSZWN0PiBFbGVt
ZW50OjpnZXRCb3VuZAogI2lmIEVOQUJMRShTVkcpCiAgICAgaWYgKGlzU1ZHRWxlbWVudCgpICYm
IHJlbmRlcmVyKCkpIHsKICAgICAgICAgLy8gR2V0IHRoZSBib3VuZGluZyByZWN0YW5nbGUgZnJv
bSB0aGUgU1ZHIG1vZGVsLgotICAgICAgICBjb25zdCBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8Y29uc3QgU1ZHRWxlbWVudCo+KHRoaXMpOworICAgICAgICBTVkdFbGVtZW50
KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHRoaXMpOwogICAgICAgICBG
bG9hdFJlY3QgbG9jYWxSZWN0OwogICAgICAgICBpZiAoc3ZnRWxlbWVudC0+Ym91bmRpbmdCb3go
bG9jYWxSZWN0KSkKICAgICAgICAgICAgIHF1YWRzLmFwcGVuZChyZW5kZXJlcigpLT5sb2NhbFRv
QWJzb2x1dGVRdWFkKGxvY2FsUmVjdCkpOwpAQCAtMTY0Miw3ICsxNjQyLDcgQEAgdm9pZCBFbGVt
ZW50OjpibHVyKCkKICAgICB9CiB9CiAKLVN0cmluZyBFbGVtZW50Ojppbm5lclRleHQoKSBjb25z
dAorU3RyaW5nIEVsZW1lbnQ6OmlubmVyVGV4dCgpCiB7CiAgICAgLy8gV2UgbmVlZCB0byB1cGRh
dGUgbGF5b3V0LCBzaW5jZSBwbGFpblRleHQgdXNlcyBsaW5lIGJveGVzIGluIHRoZSByZW5kZXIg
dHJlZS4KICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHMoKTsKQEAgLTE2NTMsNyArMTY1Myw3IEBAIFN0cmluZyBFbGVtZW50Ojppbm5lclRleHQoKSBj
b25zdAogICAgIHJldHVybiBwbGFpblRleHQocmFuZ2VPZkNvbnRlbnRzKGNvbnN0X2Nhc3Q8RWxl
bWVudCo+KHRoaXMpKS5nZXQoKSk7CiB9CiAKLVN0cmluZyBFbGVtZW50OjpvdXRlclRleHQoKSBj
b25zdAorU3RyaW5nIEVsZW1lbnQ6Om91dGVyVGV4dCgpCiB7CiAgICAgLy8gR2V0dGluZyBvdXRl
clRleHQgaXMgdGhlIHNhbWUgYXMgZ2V0dGluZyBpbm5lclRleHQsIG9ubHkKICAgICAvLyBzZXR0
aW5nIGlzIGRpZmZlcmVudC4gWW91IHdvdWxkIHRoaW5rIHRoaXMgc2hvdWxkIGdldCB0aGUgcGxh
aW4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAkocmV2aXNpb24gODkyNjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsMTcgKzE2MCwxNyBAQCBw
dWJsaWM6CiAgICAgaW50IGNsaWVudFRvcCgpOwogICAgIGludCBjbGllbnRXaWR0aCgpOwogICAg
IGludCBjbGllbnRIZWlnaHQoKTsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxMZWZ0KCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsVG9wKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgc2Ny
b2xsTGVmdCgpOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFRvcCgpOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRTY3JvbGxMZWZ0KGludCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChpbnQp
OwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQg
c2Nyb2xsSGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsV2lkdGgoKTsKKyAg
ICB2aXJ0dWFsIGludCBzY3JvbGxIZWlnaHQoKTsKIAotICAgIEludFJlY3QgYm91bmRzSW5XaW5k
b3dTcGFjZSgpIGNvbnN0OworICAgIEludFJlY3QgYm91bmRzSW5XaW5kb3dTcGFjZSgpOwogCi0g
ICAgUGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4gZ2V0Q2xpZW50UmVjdHMoKSBjb25zdDsKLSAg
ICBQYXNzUmVmUHRyPENsaWVudFJlY3Q+IGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIGNvbnN0Owor
ICAgIFBhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IGdldENsaWVudFJlY3RzKCk7CisgICAgUGFz
c1JlZlB0cjxDbGllbnRSZWN0PiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAKICAgICAv
LyBSZXR1cm5zIHRoZSBhYnNvbHV0ZSBib3VuZGluZyBib3ggdHJhbnNsYXRlZCBpbnRvIHNjcmVl
biBjb29yZGluYXRlczoKICAgICBJbnRSZWN0IHNjcmVlblJlY3QoKSBjb25zdDsKQEAgLTI1Nyw4
ICsyNTcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZvY3VzQXBwZWFyYW5j
ZShib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbik7CiAgICAgdm9pZCBibHVyKCk7CiAKLSAg
ICBTdHJpbmcgaW5uZXJUZXh0KCkgY29uc3Q7Ci0gICAgU3RyaW5nIG91dGVyVGV4dCgpIGNvbnN0
OworICAgIFN0cmluZyBpbm5lclRleHQoKTsKKyAgICBTdHJpbmcgb3V0ZXJUZXh0KCk7CiAgCiAg
ICAgdmlydHVhbCBTdHJpbmcgdGl0bGUoKSBjb25zdDsKIApAQCAtNDE4LDcgKzQxOCw3IEBAIHBy
aXZhdGU6CiAgICAgLy8gY2xvbmVOb2RlIGlzIHByaXZhdGUgc28gdGhhdCBub24tdmlydHVhbCBj
bG9uZUVsZW1lbnRXaXRoQ2hpbGRyZW4gYW5kIGNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbgog
ICAgIC8vIGFyZSB1c2VkIGluc3RlYWQuCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IGNs
b25lTm9kZShib29sIGRlZXApOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxFbGVtZW50PiBjbG9u
ZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKCkgY29uc3Q7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hp
bGRyZW4oKTsKIAogICAgIFF1YWxpZmllZE5hbWUgbV90YWdOYW1lOwogICAgIHZpcnR1YWwgTm9k
ZVJhcmVEYXRhKiBjcmVhdGVSYXJlRGF0YSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNp
b24gODkyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc1Nyw3ICs3NTcsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIE5vZGU6OnZpcnR1YWxOYW1l
c3BhCiAgICAgcmV0dXJuIG51bGxBdG9tOwogfQogCi1ib29sIE5vZGU6OmlzQ29udGVudEVkaXRh
YmxlKCkgY29uc3QKK2Jvb2wgTm9kZTo6aXNDb250ZW50RWRpdGFibGUoKQogewogICAgIGRvY3Vt
ZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIHJldHVy
biByZW5kZXJlcklzRWRpdGFibGUoRWRpdGFibGUpOwpAQCAtNzkwLDcgKzc5MCw3IEBAIGJvb2wg
Tm9kZTo6cmVuZGVyZXJJc0VkaXRhYmxlKEVkaXRhYmxlTGUKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgTm9kZTo6c2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdAorYm9vbCBOb2RlOjpz
aG91bGRVc2VJbnB1dE1ldGhvZCgpCiB7CiAgICAgcmV0dXJuIGlzQ29udGVudEVkaXRhYmxlKCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDg5MjYyKQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDExICszMzYsMTEgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBO
b2RlKiBmb2N1c0RlbGVnYXRlKCk7CiAKLSAgICBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29u
c3Q7CisgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpOwogCiAgICAgYm9vbCByZW5kZXJlcklz
RWRpdGFibGUoKSBjb25zdCB7IHJldHVybiByZW5kZXJlcklzRWRpdGFibGUoRWRpdGFibGUpOyB9
CiAgICAgYm9vbCByZW5kZXJlcklzUmljaGx5RWRpdGFibGUoKSBjb25zdCB7IHJldHVybiByZW5k
ZXJlcklzRWRpdGFibGUoUmljaGx5RWRpdGFibGUpOyB9Ci0gICAgdmlydHVhbCBib29sIHNob3Vs
ZFVzZUlucHV0TWV0aG9kKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUlucHV0
TWV0aG9kKCk7CiAgICAgdmlydHVhbCBJbnRSZWN0IGdldFJlY3QoKSBjb25zdDsKICAgICBJbnRS
ZWN0IHJlbmRlclJlY3QoYm9vbCogaXNSZXBsYWNlZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9PcHRpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL09w
dGlvbkVsZW1lbnQuaAkocmV2aXNpb24gODkyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vT3B0
aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5PcHRpb25FbGVtZW50KCkgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgZGlzYWJs
ZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNlbGVjdGVkKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBzZWxlY3RlZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Vs
ZWN0ZWRTdGF0ZShib29sKSA9IDA7CiAKICAgICB2aXJ0dWFsIFN0cmluZyB0ZXh0KCkgY29uc3Qg
PSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDg5MjYyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2Nyw3ICs0NjcsNyBAQCB2b2lkIEhUTUxBbmNob3JFbGVt
ZW50OjpzZXRTZWFyY2goY29uc3QKICAgICBzZXRIcmVmKHVybC5zdHJpbmcoKSk7CiB9CiAKLVN0
cmluZyBIVE1MQW5jaG9yRWxlbWVudDo6dGV4dCgpIGNvbnN0CitTdHJpbmcgSFRNTEFuY2hvckVs
ZW1lbnQ6OnRleHQoKQogewogICAgIHJldHVybiBpbm5lclRleHQoKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgJKHJldmlzaW9uIDg5MjYyKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Niw3ICs4Niw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBnZXRQYXJhbWV0ZXIoY29uc3QgU3Ry
aW5nJikgY29uc3Q7CiAKLSAgICBTdHJpbmcgdGV4dCgpIGNvbnN0OworICAgIFN0cmluZyB0ZXh0
KCk7CiAKICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDg5MjYyKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
MCw3ICsxNTAsNyBAQCB2b2lkIEhUTUxBcHBsZXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kCiAg
ICAgd2lkZ2V0LT5oYW5kbGVFdmVudChldmVudCk7CiB9CiAKLVJlbmRlcldpZGdldCogSFRNTEFw
cGxldEVsZW1lbnQ6OnJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdAorUmVuZGVyV2lk
Z2V0KiBIVE1MQXBwbGV0RWxlbWVudDo6cmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygpCiB7CiAg
ICAgaWYgKCFjYW5FbWJlZEphdmEoKSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5oCShyZXZpc2lvbiA4OTI2MikKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NyArNDIsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqKTsKIAotICAgIHZpcnR1YWwgUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXRGb3JK
U0JpbmRpbmdzKCkgY29uc3Q7CisgICAgdmlydHVhbCBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdl
dEZvckpTQmluZGluZ3MoKTsKIAogICAgIHZvaWQgc2V0dXBBcHBsZXQoKSBjb25zdDsKICAgICBi
b29sIGNhbkVtYmVkSmF2YSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
QXJlYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFy
ZWFFbGVtZW50LmNwcAkocmV2aXNpb24gODkyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBcmVhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw3ICsxNzksNyBAQCBQYXRo
IEhUTUxBcmVhRWxlbWVudDo6Z2V0UmVnaW9uKGNvbnN0IEluCiAgICAgcmV0dXJuIHBhdGg7CiB9
CiAKLUhUTUxJbWFnZUVsZW1lbnQqIEhUTUxBcmVhRWxlbWVudDo6aW1hZ2VFbGVtZW50KCkgY29u
c3QKK0hUTUxJbWFnZUVsZW1lbnQqIEhUTUxBcmVhRWxlbWVudDo6aW1hZ2VFbGVtZW50KCkKIHsK
ICAgICBOb2RlKiBtYXBFbGVtZW50ID0gcGFyZW50Tm9kZSgpOwogICAgIGlmICghbWFwRWxlbWVu
dCB8fCAhbWFwRWxlbWVudC0+aGFzVGFnTmFtZShtYXBUYWcpKQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxBcmVhRWxlbWVudC5oCShyZXZpc2lvbiA4OTI2MikKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEFyZWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAg
cHVibGljOgogICAgIFBhdGggY29tcHV0ZVBhdGgoUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAKICAg
ICAvLyBUaGUgcGFyZW50IG1hcCdzIGltYWdlLgotICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdl
RWxlbWVudCgpIGNvbnN0OworICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCgpOwog
ICAgIAogcHJpdmF0ZToKICAgICBIVE1MQXJlYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA4OTI2MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAyLDcgKzMwMiw3IEBAIHN0YXRpYyBpbnQgYWRqdXN0
Rm9yWm9vbShpbnQgdmFsdWUsIERvY3UKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih2YWx1
ZSAvIHpvb21GYWN0b3IpOwogfQogCi1pbnQgSFRNTEJvZHlFbGVtZW50OjpzY3JvbGxMZWZ0KCkg
Y29uc3QKK2ludCBIVE1MQm9keUVsZW1lbnQ6OnNjcm9sbExlZnQoKQogewogICAgIC8vIFVwZGF0
ZSB0aGUgZG9jdW1lbnQncyBsYXlvdXQuCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+
ZG9jdW1lbnQoKTsKQEAgLTMyNCw3ICszMjQsNyBAQCB2b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0
U2Nyb2xsTGVmdChpbnQKICAgICB2aWV3LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludChzdGF0
aWNfY2FzdDxpbnQ+KHNjcm9sbExlZnQgKiBmcmFtZS0+cGFnZVpvb21GYWN0b3IoKSAqIGZyYW1l
LT5wYWdlU2NhbGVGYWN0b3IoKSksIHZpZXctPnNjcm9sbFkoKSkpOwogfQogCi1pbnQgSFRNTEJv
ZHlFbGVtZW50OjpzY3JvbGxUb3AoKSBjb25zdAoraW50IEhUTUxCb2R5RWxlbWVudDo6c2Nyb2xs
VG9wKCkKIHsKICAgICAvLyBVcGRhdGUgdGhlIGRvY3VtZW50J3MgbGF5b3V0LgogICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7CkBAIC0zNDYsNyArMzQ2LDcgQEAgdm9p
ZCBIVE1MQm9keUVsZW1lbnQ6OnNldFNjcm9sbFRvcChpbnQgcwogICAgIHZpZXctPnNldFNjcm9s
bFBvc2l0aW9uKEludFBvaW50KHZpZXctPnNjcm9sbFgoKSwgc3RhdGljX2Nhc3Q8aW50PihzY3Jv
bGxUb3AgKiBmcmFtZS0+cGFnZVpvb21GYWN0b3IoKSAqIGZyYW1lLT5wYWdlU2NhbGVGYWN0b3Io
KSkpKTsKIH0KIAotaW50IEhUTUxCb2R5RWxlbWVudDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKK2lu
dCBIVE1MQm9keUVsZW1lbnQ6OnNjcm9sbEhlaWdodCgpCiB7CiAgICAgLy8gVXBkYXRlIHRoZSBk
b2N1bWVudCdzIGxheW91dC4KICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVu
dCgpOwpAQCAtMzU1LDcgKzM1NSw3IEBAIGludCBIVE1MQm9keUVsZW1lbnQ6OnNjcm9sbEhlaWdo
dCgpIGNvbnMKICAgICByZXR1cm4gdmlldyA/IGFkanVzdEZvclpvb20odmlldy0+Y29udGVudHNI
ZWlnaHQoKSwgZG9jdW1lbnQpIDogMDsgICAgCiB9CiAKLWludCBIVE1MQm9keUVsZW1lbnQ6OnNj
cm9sbFdpZHRoKCkgY29uc3QKK2ludCBIVE1MQm9keUVsZW1lbnQ6OnNjcm9sbFdpZHRoKCkKIHsK
ICAgICAvLyBVcGRhdGUgdGhlIGRvY3VtZW50J3MgbGF5b3V0LgogICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxC
b2R5RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlF
bGVtZW50LmgJKHJldmlzaW9uIDg5MjYyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9k
eUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODMsMTQgKzgzLDE0IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdDsKIAotICAgIHZpcnR1
YWwgaW50IHNjcm9sbExlZnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxMZWZ0KCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbExlZnQoaW50IHNjcm9sbExlZnQpOwogICAgIAot
ICAgIHZpcnR1YWwgaW50IHNjcm9sbFRvcCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHNjcm9s
bFRvcCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxUb3AoaW50IHNjcm9sbFRvcCk7CiAg
ICAgCi0gICAgdmlydHVhbCBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBp
bnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxIZWlnaHQoKTsK
KyAgICB2aXJ0dWFsIGludCBzY3JvbGxXaWR0aCgpOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBh
ZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4
OTI2MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgc3RhdGljIGlubGluZSBSZW5kZXJXaWRnZXQqIGZp
bmRXaWRnZXRSZQogICAgIHJldHVybiAwOwogfQogCi1SZW5kZXJXaWRnZXQqIEhUTUxFbWJlZEVs
ZW1lbnQ6OnJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdAorUmVuZGVyV2lkZ2V0KiBI
VE1MRW1iZWRFbGVtZW50OjpyZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkKIHsKICAgICBkb2N1
bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICByZXR1
cm4gZmluZFdpZGdldFJlbmRlcmVyKHRoaXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRW1iZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RW1iZWRFbGVtZW50LmgJKHJldmlzaW9uIDg5MjYyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRW1iZWRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7CiAg
ICAgdmlydHVhbCBjb25zdCBRdWFsaWZpZWROYW1lJiBpbWFnZVNvdXJjZUF0dHJpYnV0ZU5hbWUo
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXRGb3JKU0Jp
bmRpbmdzKCkgY29uc3Q7CisgICAgdmlydHVhbCBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldEZv
ckpTQmluZGluZ3MoKTsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVXaWRnZXQoUGx1Z2luQ3Jl
YXRpb25PcHRpb24pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1l
bnRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVs
ZW1lbnRCYXNlLmNwcAkocmV2aXNpb24gODkyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw3IEBA
IGJvb2wgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmlzVVJMQXR0cmlidXQKICAgICByZXR1cm4gYXR0
ci0+bmFtZSgpID09IHNyY0F0dHI7CiB9CiAKLWludCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6d2lk
dGgoKSBjb25zdAoraW50IEhUTUxGcmFtZUVsZW1lbnRCYXNlOjp3aWR0aCgpCiB7CiAgICAgZG9j
dW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgaWYg
KCFyZW5kZXJCb3goKSkKQEAgLTI0Myw3ICsyNDMsNyBAQCBpbnQgSFRNTEZyYW1lRWxlbWVudEJh
c2U6OndpZHRoKCkgY29uc3QKICAgICByZXR1cm4gcmVuZGVyQm94KCktPndpZHRoKCk7CiB9CiAK
LWludCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6aGVpZ2h0KCkgY29uc3QKK2ludCBIVE1MRnJhbWVF
bGVtZW50QmFzZTo6aGVpZ2h0KCkKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICBpZiAoIXJlbmRlckJveCgpKQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuaAkocmV2aXNpb24gODkyNjIp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDggKzM5LDggQEAgcHVibGljOgogICAgIGludCBtYXJnaW5XaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWFyZ2luV2lkdGg7IH0KICAgICBpbnQgbWFyZ2luSGVpZ2h0KCkgY29u
c3QgeyByZXR1cm4gbV9tYXJnaW5IZWlnaHQ7IH0KIAotICAgIGludCB3aWR0aCgpIGNvbnN0Owot
ICAgIGludCBoZWlnaHQoKSBjb25zdDsKKyAgICBpbnQgd2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0
KCk7CiAKICAgICB2b2lkIHNldFJlbWFpbnNBbGl2ZU9uUmVtb3ZhbEZyb21UcmVlKGJvb2wpOwog
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gODkyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsNyArMjU3LDcgQEAg
dm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoYgogICAgIEhUTUxFbGVtZW50
OjpyZW1vdmVkRnJvbVRyZWUoZGVlcCk7CiB9CiAKLWludCBIVE1MSW1hZ2VFbGVtZW50Ojp3aWR0
aChib29sIGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cykgY29uc3QKK2ludCBIVE1MSW1hZ2VFbGVt
ZW50Ojp3aWR0aChib29sIGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cykKIHsKICAgICBpZiAoIXJl
bmRlcmVyKCkpIHsKICAgICAgICAgLy8gY2hlY2sgdGhlIGF0dHJpYnV0ZSBmaXJzdCBmb3IgYW4g
ZXhwbGljaXQgcGl4ZWwgdmFsdWUKQEAgLTI4MCw3ICsyODAsNyBAQCBpbnQgSFRNTEltYWdlRWxl
bWVudDo6d2lkdGgoYm9vbCBpZ25vcmVQCiAgICAgcmV0dXJuIGJveCA/IGFkanVzdEZvckFic29s
dXRlWm9vbShib3gtPmNvbnRlbnRXaWR0aCgpLCBib3gpIDogMDsKIH0KIAotaW50IEhUTUxJbWFn
ZUVsZW1lbnQ6OmhlaWdodChib29sIGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cykgY29uc3QKK2lu
dCBIVE1MSW1hZ2VFbGVtZW50OjpoZWlnaHQoYm9vbCBpZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMp
CiB7CiAgICAgaWYgKCFyZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIGNoZWNrIHRoZSBhdHRyaWJ1
dGUgZmlyc3QgZm9yIGFuIGV4cGxpY2l0IHBpeGVsIHZhbHVlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gODkyNjIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsOCBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5IVE1MSW1hZ2VFbGVtZW50KCk7CiAKLSAgICBpbnQg
d2lkdGgoYm9vbCBpZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMgPSBmYWxzZSkgY29uc3Q7Ci0gICAg
aW50IGhlaWdodChib29sIGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyA9IGZhbHNlKSBjb25zdDsK
KyAgICBpbnQgd2lkdGgoYm9vbCBpZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMgPSBmYWxzZSk7Cisg
ICAgaW50IGhlaWdodChib29sIGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyA9IGZhbHNlKTsKIAog
ICAgIGludCBuYXR1cmFsV2lkdGgoKSBjb25zdDsKICAgICBpbnQgbmF0dXJhbEhlaWdodCgpIGNv
bnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZp
c2lvbiA4OTI2MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4MSw3ICs0ODEsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OmFib3V0VG9VbmxvYWQoKQogICAgIGZyYW1lLT5lZGl0b3IoKS0+dGV4dEZpZWxkRGlkRW5kRWRp
dGluZyh0aGlzKTsKIH0KIAotYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpzaG91bGRVc2VJbnB1dE1l
dGhvZCgpIGNvbnN0Citib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnNob3VsZFVzZUlucHV0TWV0aG9k
KCkKIHsKICAgICByZXR1cm4gbV9pbnB1dFR5cGUtPnNob3VsZFVzZUlucHV0TWV0aG9kKCk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gODky
NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjU4LDcgKzI1OCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzRW51
bWVyYXRhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZvY3VzQXBwZWFyYW5j
ZShib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIGFib3V0
VG9VbmxvYWQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlSW5wdXRNZXRob2QoKTsKIAogICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbE5hbWUoKSBjb25zdDsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAJKHJldmlzaW9uIDg5MjYy
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDcgKzYyLDcgQEAgcHJvdGVjdGVkOgogICAgIH0KIAogcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8RWxlbWVudD4gY2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0
ZXNBbmRDaGlsZHJlbigpIGNvbnN0CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNs
b25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGNyZWF0ZShkb2N1bWVudCgpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNYXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNYXBFbGVtZW50LmNwcAkocmV2aXNpb24gODkyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNYXBFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBi
b29sIEhUTUxNYXBFbGVtZW50OjptYXBNb3VzZUV2ZW50KGludCB4CiAgICAgcmV0dXJuIGRlZmF1
bHRBcmVhOwogfQogCi1IVE1MSW1hZ2VFbGVtZW50KiBIVE1MTWFwRWxlbWVudDo6aW1hZ2VFbGVt
ZW50KCkgY29uc3QKK0hUTUxJbWFnZUVsZW1lbnQqIEhUTUxNYXBFbGVtZW50OjppbWFnZUVsZW1l
bnQoKQogewogICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY29sbCA9IGRvY3VtZW50KCktPmlt
YWdlcygpOwogICAgIGZvciAoTm9kZSogY3VyciA9IGNvbGwtPmZpcnN0SXRlbSgpOyBjdXJyOyBj
dXJyID0gY29sbC0+bmV4dEl0ZW0oKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWFwRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVs
ZW1lbnQuaAkocmV2aXNpb24gODkyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBtYXBNb3VzZUV2ZW50KGludCB4LCBpbnQgeSwgY29uc3QgSW50U2l6ZSYsIEhpdFRlc3RS
ZXN1bHQmKTsKICAgICAKLSAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQoKSBjb25z
dDsKKyAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQoKTsKICAgICBQYXNzUmVmUHRy
PEhUTUxDb2xsZWN0aW9uPiBhcmVhcygpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDg5MjYyKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0
LDcgKzc0LDcgQEAgUGFzc1JlZlB0cjxIVE1MT2JqZWN0RWxlbWVudD4gSFRNTE9iamVjdAogICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSFRNTE9iamVjdEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQs
IGZvcm0sIGNyZWF0ZWRCeVBhcnNlcikpOwogfQogCi1SZW5kZXJXaWRnZXQqIEhUTUxPYmplY3RF
bGVtZW50OjpyZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29uc3QKK1JlbmRlcldpZGdldCog
SFRNTE9iamVjdEVsZW1lbnQ6OnJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKQogewogICAgIGRv
Y3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIHJl
dHVybiByZW5kZXJQYXJ0KCk7IC8vIFRoaXMgd2lsbCByZXR1cm4gMCBpZiB0aGUgcmVuZGVyZXIg
aXMgbm90IGEgUmVuZGVyUGFydC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVj
dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RF
bGVtZW50LmgJKHJldmlzaW9uIDg5MjYyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2Jq
ZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwogICAgIHZp
cnR1YWwgY29uc3QgUXVhbGlmaWVkTmFtZSYgaW1hZ2VTb3VyY2VBdHRyaWJ1dGVOYW1lKCkgY29u
c3Q7CiAKLSAgICB2aXJ0dWFsIFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5n
cygpIGNvbnN0OworICAgIHZpcnR1YWwgUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXRGb3JKU0Jp
bmRpbmdzKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxz
KExpc3RIYXNoU2V0PEtVUkw+JikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE9wdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE9wdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA4OTI2MikKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYw
LDcgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0VmFsdWUoY29uc3QgUwogICAgIHNldEF0
dHJpYnV0ZSh2YWx1ZUF0dHIsIHZhbHVlKTsKIH0KIAotYm9vbCBIVE1MT3B0aW9uRWxlbWVudDo6
c2VsZWN0ZWQoKSBjb25zdAorYm9vbCBIVE1MT3B0aW9uRWxlbWVudDo6c2VsZWN0ZWQoKQogewog
ICAgIGlmIChIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gb3duZXJTZWxlY3RFbGVtZW50KCkp
CiAgICAgICAgIHNlbGVjdC0+cmVjYWxjTGlzdEl0ZW1zSWZOZWVkZWQoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmgJKHJldmlzaW9uIDg5MjYyKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0Owog
ICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2Vs
ZWN0ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0ZWQoKTsKICAgICB2b2lkIHNl
dFNlbGVjdGVkKGJvb2wpOwogCiAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIG93bmVyU2VsZWN0RWxl
bWVudCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDg5MjYyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0lu
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBIVE1MUGx1
Z0luRWxlbWVudDo6ZGV0YWNoKCkKICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OmRldGFjaCgp
OwogfQogCi1QYXNzU2NyaXB0SW5zdGFuY2UgSFRNTFBsdWdJbkVsZW1lbnQ6OmdldEluc3RhbmNl
KCkgY29uc3QKK1Bhc3NTY3JpcHRJbnN0YW5jZSBIVE1MUGx1Z0luRWxlbWVudDo6Z2V0SW5zdGFu
Y2UoKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgaWYg
KCFmcmFtZSkKQEAgLTk4LDcgKzk4LDcgQEAgUGFzc1NjcmlwdEluc3RhbmNlIEhUTUxQbHVnSW5F
bGVtZW50OjpnZQogICAgIHJldHVybiBtX2luc3RhbmNlOwogfQogCi1XaWRnZXQqIEhUTUxQbHVn
SW5FbGVtZW50OjpwbHVnaW5XaWRnZXQoKSBjb25zdAorV2lkZ2V0KiBIVE1MUGx1Z0luRWxlbWVu
dDo6cGx1Z2luV2lkZ2V0KCkKIHsKICAgICBpZiAobV9pbkJlZm9yZUxvYWRFdmVudEhhbmRsZXIp
IHsKICAgICAgICAgLy8gVGhlIHBsdWctaW4gaGFzbid0IGxvYWRlZCB5ZXQsIGFuZCBpdCBtYWtl
cyBubyBzZW5zZSB0byB0cnkgdG8gbG9hZCBpZiBiZWZvcmVsb2FkIGhhbmRsZXIgaGFwcGVuZWQg
dG8gdG91Y2ggdGhlIHBsdWctaW4gZWxlbWVudC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFBsdWdJbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxQbHVnSW5FbGVtZW50LmgJKHJldmlzaW9uIDg5MjYyKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUGx1Z0luRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCw5IEBAIGNs
YXNzIEhUTUxQbHVnSW5FbGVtZW50IDogcHVibGljIEhUTUxGcmEKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5IVE1MUGx1Z0luRWxlbWVudCgpOwogCi0gICAgUGFzc1NjcmlwdEluc3RhbmNlIGdldElu
c3RhbmNlKCkgY29uc3Q7CisgICAgUGFzc1NjcmlwdEluc3RhbmNlIGdldEluc3RhbmNlKCk7CiAK
LSAgICBXaWRnZXQqIHBsdWdpbldpZGdldCgpIGNvbnN0OworICAgIFdpZGdldCogcGx1Z2luV2lk
Z2V0KCk7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBOUE9iamVjdCog
Z2V0TlBPYmplY3QoKTsKQEAgLTY2LDcgKzY2LDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwogCi0gICAgdmlydHVh
bCBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSA9IDA7
CiAKIHByb3RlY3RlZDoKICAgICBBdG9taWNTdHJpbmcgbV9uYW1lOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAJKHJldmlzaW9uIDg5MjYyKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxMSw3ICsyMTEsNyBAQCB2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpkaXNwYXRjaExvYWRFdmVu
CiAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQs
IGZhbHNlLCBmYWxzZSkpOwogfQogCi1QYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxTY3JpcHRFbGVt
ZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKCkgY29uc3QKK1Bh
c3NSZWZQdHI8RWxlbWVudD4gSFRNTFNjcmlwdEVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRB
dHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFNj
cmlwdEVsZW1lbnQodGFnUU5hbWUoKSwgZG9jdW1lbnQoKSwgZmFsc2UsIGFscmVhZHlTdGFydGVk
KCkpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmgJKHJl
dmlzaW9uIDg5MjYyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hMb2FkRXZlbnQoKTsKIAotICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY2xv
bmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigpIGNvbnN0OworICAgIFBhc3NS
ZWZQdHI8RWxlbWVudD4gY2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigp
OwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEFyZWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4OTI2MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOSw3ICs0Mzks
NyBAQCBib29sIEhUTUxUZXh0QXJlYUVsZW1lbnQ6Omxhc3RDaGFuZ2VXYXNVCiAgICAgcmV0dXJu
IHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgp
OwogfQogCi1ib29sIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNob3VsZFVzZUlucHV0TWV0aG9kKCkg
Y29uc3QKK2Jvb2wgSFRNTFRleHRBcmVhRWxlbWVudDo6c2hvdWxkVXNlSW5wdXRNZXRob2QoKQog
ewogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEFyZWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEFyZWFFbGVtZW50LmgJKHJldmlzaW9uIDg5MjYyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVGV4dEFyZWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCBw
cml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29sIHNlbmRUb0Fu
eUVsZW1lbnQpOwogCi0gICAgdmlydHVhbCBib29sIHNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUlucHV0TWV0aG9kKCk7CiAKICAgICBpbnQg
bV9yb3dzOwogICAgIGludCBtX2NvbHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9TbGlkZXJUaHVtYkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaAkocmV2aXNpb24gODkyNjIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNsaWRlclRodW1iRWxlbWVu
dChEb2N1bWVudCopOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihS
ZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEVsZW1l
bnQ+IGNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8RWxlbWVudD4gY2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0
ZXNBbmRDaGlsZHJlbigpOwogICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWRGb3JtQ29udHJvbCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1JlYWRPbmx5Rm9ybUNvbnRyb2woKSBjb25zdDsK
ICAgICB2aXJ0dWFsIE5vZGUqIGZvY3VzRGVsZWdhdGUoKTsKQEAgLTgyLDcgKzgyLDcgQEAgaW5s
aW5lIFBhc3NSZWZQdHI8U2xpZGVyVGh1bWJFbGVtZW50PiBTbAogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU2xpZGVyVGh1bWJFbGVtZW50KGRvY3VtZW50KSk7CiB9CiAKLWlubGluZSBQYXNzUmVm
UHRyPEVsZW1lbnQ+IFNsaWRlclRodW1iRWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91dEF0dHJp
YnV0ZXNBbmRDaGlsZHJlbigpIGNvbnN0CitpbmxpbmUgUGFzc1JlZlB0cjxFbGVtZW50PiBTbGlk
ZXJUaHVtYkVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4o
KQogewogICAgIHJldHVybiBjcmVhdGUoZG9jdW1lbnQoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3Bw
CShyZXZpc2lvbiA4OTI2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHU2hh
ZG93VHJlZUVsZW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBGbG9h
dFNpemUgU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ6CiAgICAgcmV0dXJuIEZsb2F0U2l6
ZShtX3hPZmZzZXQudmFsdWUodGhpcyksIG1feU9mZnNldC52YWx1ZSh0aGlzKSk7CiB9CiAKLVBh
c3NSZWZQdHI8RWxlbWVudD4gU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ6OmNsb25lRWxl
bWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKSBjb25zdAorUGFzc1JlZlB0cjxFbGVt
ZW50PiBTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91dEF0
dHJpYnV0ZXNBbmRDaGlsZHJlbigpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdTaGFk
b3dUcmVlQ29udGFpbmVyRWxlbWVudChkb2N1bWVudCgpKSk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmgJKHJl
dmlzaW9uIDg5MjYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dU
cmVlRWxlbWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQqKTsKIAogcHJpdmF0
ZToKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RWxlbWVudD4gY2xvbmVFbGVtZW50V2l0aG91dEF0
dHJpYnV0ZXNBbmRDaGlsZHJlbigpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxFbGVt
ZW50PiBjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKCk7CiAgICAgdmly
dHVhbCBib29sIGlzU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAKICAgICBTVkdMZW5ndGggbV94T2Zmc2V0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4OTI2MikKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzky
LDcgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6YWRqdXN0Rm9ySW5oZXJpdAogICAgICAgICBn
ZXRQcm9wZXJ0eVZhbHVlKHN2Z1BhcmVudCwgYXR0cmlidXRlTmFtZSwgdmFsdWUpOwogfQogCi1i
b29sIFNWR0FuaW1hdGVFbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdAorYm9v
bCBTVkdBbmltYXRlRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkKIHsKICAgICBTVkdF
bGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOwogICAgIGlmICgh
dGFyZ2V0RWxlbWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5o
CShyZXZpc2lvbiA4OTI2MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIElu
aGVyaXRWYWx1ZQogICAgIH07CiAgICAgCi0gICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0cmli
dXRlVHlwZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUo
KTsKICAgICBBbmltYXRlZEF0dHJpYnV0ZVR5cGUgZGV0ZXJtaW5lQW5pbWF0ZWRBdHRyaWJ1dGVU
eXBlKFNWR0VsZW1lbnQqKSBjb25zdDsKICAgICBBbmltYXRlZEF0dHJpYnV0ZVR5cGUgbV9hbmlt
YXRlZEF0dHJpYnV0ZVR5cGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRl
TW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gODkyNjIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3
ICs1NCw3IEBAIFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ+IFNWR0EKICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50KSk7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmli
dXRlVHlwZSgpIGNvbnN0Citib29sIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpoYXNWYWxpZEF0
dHJpYnV0ZVR5cGUoKQogewogICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSB0aGlzLT50
YXJnZXRFbGVtZW50KCk7CiAgICAgaWYgKCF0YXJnZXRFbGVtZW50KQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDg5MjYyKQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdBbmltYXRl
TW90aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIHZp
cnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCk7CiAKICAgICBib29sIGlzU3VwcG9ydGVkQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoQXR0cmlidXRlKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDg5MjYyKQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjAsNyArNjAsNyBAQCBQYXNzUmVmUHRyPFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50
PiBTCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1ib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50
OjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdAorYm9vbCBTVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkKIHsKICAgICBTVkdFbGVtZW50KiB0YXJn
ZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOwogICAgIGlmICghdGFyZ2V0RWxlbWVu
dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxl
bWVudC5oCShyZXZpc2lvbiA4OTI2MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRl
VHJhbnNmb3JtRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgCi0gICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0
cmlidXRlVHlwZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5
cGUoKTsKICAgICBBbmltYXRlZEF0dHJpYnV0ZVR5cGUgZGV0ZXJtaW5lQW5pbWF0ZWRBdHRyaWJ1
dGVUeXBlKFNWR0VsZW1lbnQqKSBjb25zdDsKIAogICAgIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Vs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNw
cAkocmV2aXNpb24gODkyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBAQCBTVkdFbGVtZW50KiBTVkdFbGVtZW50
Ojp2aWV3cG9ydEVsZW1lbnQoCiAgICAgcmV0dXJuIDA7CiB9CiAKLVNWR0RvY3VtZW50RXh0ZW5z
aW9ucyogU1ZHRWxlbWVudDo6YWNjZXNzRG9jdW1lbnRTVkdFeHRlbnNpb25zKCkgY29uc3QKK1NW
R0RvY3VtZW50RXh0ZW5zaW9ucyogU1ZHRWxlbWVudDo6YWNjZXNzRG9jdW1lbnRTVkdFeHRlbnNp
b25zKCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGZvciB1c2UgYnkgU1ZH
QW5pbWF0ZWRQcm9wZXJ0eSB0byBhdm9pZAogICAgIC8vIGdsb2JhbCBpbmNsdXNpb24gb2YgRG9j
dW1lbnQuaCBpbiBTVkcgY29kZS4KQEAgLTE4OSwxNCArMTg5LDE0IEBAIGNvbnN0IEhhc2hTZXQ8
U1ZHRWxlbWVudEluc3RhbmNlKj4mIFNWR0UKICAgICByZXR1cm4gcmFyZVNWR0RhdGEoKS0+ZWxl
bWVudEluc3RhbmNlcygpOwogfQogCi1ib29sIFNWR0VsZW1lbnQ6OmJvdW5kaW5nQm94KEZsb2F0
UmVjdCYgcmVjdCwgU1ZHTG9jYXRhYmxlOjpTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRl
U3RyYXRlZ3kpIGNvbnN0Citib29sIFNWR0VsZW1lbnQ6OmJvdW5kaW5nQm94KEZsb2F0UmVjdCYg
cmVjdCwgU1ZHTG9jYXRhYmxlOjpTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRl
Z3kpCiB7CiAgICAgaWYgKGlzU3R5bGVkTG9jYXRhYmxlKCkpIHsKLSAgICAgICAgcmVjdCA9IHN0
YXRpY19jYXN0PGNvbnN0IFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQqPih0aGlzKS0+Z2V0QkJv
eChzdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKKyAgICAgICAgcmVjdCA9IHN0YXRpY19jYXN0PFNWR1N0
eWxlZExvY2F0YWJsZUVsZW1lbnQqPih0aGlzKS0+Z2V0QkJveChzdHlsZVVwZGF0ZVN0cmF0ZWd5
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChoYXNUYWdOYW1lKFNWR05h
bWVzOjp0ZXh0VGFnKSkgewotICAgICAgICByZWN0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHVGV4
dEVsZW1lbnQqPih0aGlzKS0+Z2V0QkJveChzdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKKyAgICAgICAg
cmVjdCA9IHN0YXRpY19jYXN0PFNWR1RleHRFbGVtZW50Kj4odGhpcyktPmdldEJCb3goc3R5bGVV
cGRhdGVTdHJhdGVneSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgJKHJldmlzaW9uIDg5MjYyKQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyAr
NzEsNyBAQCBwdWJsaWM6CiAgICAgU1ZHU1ZHRWxlbWVudCogb3duZXJTVkdFbGVtZW50KCkgY29u
c3Q7CiAgICAgU1ZHRWxlbWVudCogdmlld3BvcnRFbGVtZW50KCkgY29uc3Q7CiAKLSAgICBTVkdE
b2N1bWVudEV4dGVuc2lvbnMqIGFjY2Vzc0RvY3VtZW50U1ZHRXh0ZW5zaW9ucygpIGNvbnN0Owor
ICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogYWNjZXNzRG9jdW1lbnRTVkdFeHRlbnNpb25zKCk7
CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZFRyYW5zZm9ybWFibGUoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQpAQCAtMTAwLDcgKzEwMCw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEhhc2hTZXQ8
U1ZHRWxlbWVudEluc3RhbmNlKj4mIGluc3RhbmNlc0ZvckVsZW1lbnQoKSBjb25zdDsKIAotICAg
IGJvb2wgYm91bmRpbmdCb3goRmxvYXRSZWN0JiwgU1ZHTG9jYXRhYmxlOjpTdHlsZVVwZGF0ZVN0
cmF0ZWd5ID0gU1ZHTG9jYXRhYmxlOjpBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKKyAgICBib29s
IGJvdW5kaW5nQm94KEZsb2F0UmVjdCYsIFNWR0xvY2F0YWJsZTo6U3R5bGVVcGRhdGVTdHJhdGVn
eSA9IFNWR0xvY2F0YWJsZTo6QWxsb3dTdHlsZVVwZGF0ZSk7CiAKICAgICB2b2lkIHNldEN1cnNv
ckVsZW1lbnQoU1ZHQ3Vyc29yRWxlbWVudCopOwogICAgIHZvaWQgY3Vyc29yRWxlbWVudFJlbW92
ZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuY3BwCShyZXZpc2lvbiA4OTI2
MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw3ICs2NCw3IEBAIFNWR0VsZW1lbnQqIFNWR0xvY2F0YWJsZTo6ZmFydGhlc3RWaWV3
cG8KICAgICByZXR1cm4gZmFydGhlc3Q7CiB9CiAKLUZsb2F0UmVjdCBTVkdMb2NhdGFibGU6Omdl
dEJCb3goY29uc3QgU1ZHRWxlbWVudCogZWxlbWVudCwgU3R5bGVVcGRhdGVTdHJhdGVneSBzdHls
ZVVwZGF0ZVN0cmF0ZWd5KQorRmxvYXRSZWN0IFNWR0xvY2F0YWJsZTo6Z2V0QkJveChTVkdFbGVt
ZW50KiBlbGVtZW50LCBTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpCiB7
CiAgICAgQVNTRVJUKGVsZW1lbnQpOwogICAgIGlmIChzdHlsZVVwZGF0ZVN0cmF0ZWd5ID09IEFs
bG93U3R5bGVVcGRhdGUpCkBAIC03Nyw3ICs3Nyw3IEBAIEZsb2F0UmVjdCBTVkdMb2NhdGFibGU6
OmdldEJCb3goY29uc3QgU1YKICAgICByZXR1cm4gZWxlbWVudC0+cmVuZGVyZXIoKS0+b2JqZWN0
Qm91bmRpbmdCb3goKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIFNWR0xvY2F0YWJsZTo6Y29tcHV0
ZUNUTShjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50LCBDVE1TY29wZSBtb2RlLCBTdHlsZVVwZGF0
ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpCitBZmZpbmVUcmFuc2Zvcm0gU1ZHTG9jYXRh
YmxlOjpjb21wdXRlQ1RNKFNWR0VsZW1lbnQqIGVsZW1lbnQsIENUTVNjb3BlIG1vZGUsIFN0eWxl
VXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkKIHsKICAgICBBU1NFUlQoZWxlbWVu
dCk7CiAgICAgaWYgKHN0eWxlVXBkYXRlU3RyYXRlZ3kgPT0gQWxsb3dTdHlsZVVwZGF0ZSkKQEAg
LTEwNCw3ICsxMDQsNyBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHTG9jYXRhYmxlOjpjb21wdXRlQ1RN
CiAgICAgcmV0dXJuIGN0bTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIFNWR0xvY2F0YWJsZTo6Z2V0
VHJhbnNmb3JtVG9FbGVtZW50KFNWR0VsZW1lbnQqIHRhcmdldCwgRXhjZXB0aW9uQ29kZSYgZWMs
IFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkgY29uc3QKK0FmZmluZVRy
YW5zZm9ybSBTVkdMb2NhdGFibGU6OmdldFRyYW5zZm9ybVRvRWxlbWVudChTVkdFbGVtZW50KiB0
YXJnZXQsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRl
U3RyYXRlZ3kpCiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IGdldENUTShzdHlsZVVwZGF0
ZVN0cmF0ZWd5KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xvY2F0YWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuaAkocmV2aXNpb24g
ODkyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDEwICs0MSwxMCBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFN0eWxlVXBkYXRlU3Ry
YXRlZ3kgeyBBbGxvd1N0eWxlVXBkYXRlLCBEaXNhbGxvd1N0eWxlVXBkYXRlIH07CiAgICAgCi0g
ICAgdmlydHVhbCBGbG9hdFJlY3QgZ2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFN0eWxlVXBkYXRlU3RyYXRl
Z3kpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRTY3JlZW5DVE0o
U3R5bGVVcGRhdGVTdHJhdGVneSkgY29uc3QgPSAwOwotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRU
cmFuc2Zvcm1Ub0VsZW1lbnQoU1ZHRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmLCBTdHlsZVVwZGF0
ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFJl
Y3QgZ2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5KSA9IDA7CisgICAgdmlydHVhbCBBZmZpbmVU
cmFuc2Zvcm0gZ2V0Q1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kpID0gMDsKKyAgICB2aXJ0dWFsIEFm
ZmluZVRyYW5zZm9ybSBnZXRTY3JlZW5DVE0oU3R5bGVVcGRhdGVTdHJhdGVneSkgPSAwOworICAg
IEFmZmluZVRyYW5zZm9ybSBnZXRUcmFuc2Zvcm1Ub0VsZW1lbnQoU1ZHRWxlbWVudCosIEV4Y2Vw
dGlvbkNvZGUmLCBTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSk7CiAKICAg
ICBzdGF0aWMgU1ZHRWxlbWVudCogbmVhcmVzdFZpZXdwb3J0RWxlbWVudChjb25zdCBTVkdFbGVt
ZW50Kik7CiAgICAgc3RhdGljIFNWR0VsZW1lbnQqIGZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KGNv
bnN0IFNWR0VsZW1lbnQqKTsKQEAgLTU3LDggKzU3LDggQEAgcHVibGljOgogcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3Jt
KFNWR0xvY2F0YWJsZTo6Q1RNU2NvcGUpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgp
OyB9CiAKLSAgICBzdGF0aWMgRmxvYXRSZWN0IGdldEJCb3goY29uc3QgU1ZHRWxlbWVudCosIFN0
eWxlVXBkYXRlU3RyYXRlZ3kpOwotICAgIHN0YXRpYyBBZmZpbmVUcmFuc2Zvcm0gY29tcHV0ZUNU
TShjb25zdCBTVkdFbGVtZW50KiwgQ1RNU2NvcGUsIFN0eWxlVXBkYXRlU3RyYXRlZ3kpOworICAg
IHN0YXRpYyBGbG9hdFJlY3QgZ2V0QkJveChTVkdFbGVtZW50KiwgU3R5bGVVcGRhdGVTdHJhdGVn
eSk7CisgICAgc3RhdGljIEFmZmluZVRyYW5zZm9ybSBjb21wdXRlQ1RNKFNWR0VsZW1lbnQqLCBD
VE1TY29wZSwgU3R5bGVVcGRhdGVTdHJhdGVneSk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lv
biA4OTI2MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjk0LDcgKzI5NCw3IEBAIHZvaWQgU1ZHU2NyaXB0RWxlbWVudDo6ZGlz
cGF0Y2hMb2FkRXZlbnQKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8RWxlbWVudD4gU1ZHU2NyaXB0
RWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigpIGNvbnN0
CitQYXNzUmVmUHRyPEVsZW1lbnQ+IFNWR1NjcmlwdEVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhv
dXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZH
U2NyaXB0RWxlbWVudCh0YWdRTmFtZSgpLCBkb2N1bWVudCgpLCBmYWxzZSwgYWxyZWFkeVN0YXJ0
ZWQoKSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oCShyZXZp
c2lvbiA4OTI2MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaExvYWRFdmVudCgpOwogCi0gICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjbG9uZUVs
ZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0
cjxFbGVtZW50PiBjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKCk7CiAK
ICAgICAvLyBBbmltYXRlZCBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMKIApJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gODkyNjIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Miw3
ICszNzIsNyBAQCB2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtCiAgICAg
YnVpbGRQZW5kaW5nUmVzb3VyY2VzSWZOZWVkZWQoKTsKIH0KIAotdm9pZCBTVkdTdHlsZWRFbGVt
ZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZXNJZk5lZWRlZCgpIGNvbnN0Cit2b2lkIFNWR1N0eWxl
ZEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlc0lmTmVlZGVkKCkKIHsKICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOwogICAgIGlmICghbmVlZHNQZW5kaW5nUmVz
b3VyY2VIYW5kbGluZygpIHx8ICFkb2N1bWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTdHlsZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0
eWxlZEVsZW1lbnQuaAkocmV2aXNpb24gODkyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
U3R5bGVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Q7CiAKLSAgICB2
b2lkIGJ1aWxkUGVuZGluZ1Jlc291cmNlc0lmTmVlZGVkKCkgY29uc3Q7CisgICAgdm9pZCBidWls
ZFBlbmRpbmdSZXNvdXJjZXNJZk5lZWRlZCgpOwogCiAgICAgSGFzaFNldDxTVkdTdHlsZWRFbGVt
ZW50Kj4gbV9lbGVtZW50c1dpdGhSZWxhdGl2ZUxlbmd0aHM7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDg5
MjYyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNyArNDQsMTcgQEAgU1ZHRWxlbWVudCogU1ZHU3R5bGVk
TG9jYXRhYmxlRWxlbWVudDo6ZgogICAgIHJldHVybiBTVkdMb2NhdGFibGU6OmZhcnRoZXN0Vmll
d3BvcnRFbGVtZW50KHRoaXMpOwogfQogCi1GbG9hdFJlY3QgU1ZHU3R5bGVkTG9jYXRhYmxlRWxl
bWVudDo6Z2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNv
bnN0CitGbG9hdFJlY3QgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0QkJveChTdHlsZVVw
ZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpCiB7CiAgICAgcmV0dXJuIFNWR0xvY2F0
YWJsZTo6Z2V0QkJveCh0aGlzLCBzdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKIH0KIAotQWZmaW5lVHJh
bnNmb3JtIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmdldENUTShTdHlsZVVwZGF0ZVN0cmF0
ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gU1ZHU3R5bGVk
TG9jYXRhYmxlRWxlbWVudDo6Z2V0Q1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVT
dHJhdGVneSkKIHsKICAgICByZXR1cm4gU1ZHTG9jYXRhYmxlOjpjb21wdXRlQ1RNKHRoaXMsIFNW
R0xvY2F0YWJsZTo6TmVhcmVzdFZpZXdwb3J0U2NvcGUsIHN0eWxlVXBkYXRlU3RyYXRlZ3kpOwog
fQogCi1BZmZpbmVUcmFuc2Zvcm0gU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0U2NyZWVu
Q1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkgY29uc3QKK0FmZmlu
ZVRyYW5zZm9ybSBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50OjpnZXRTY3JlZW5DVE0oU3R5bGVV
cGRhdGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KQogewogICAgIHJldHVybiBTVkdMb2Nh
dGFibGU6OmNvbXB1dGVDVE0odGhpcywgU1ZHTG9jYXRhYmxlOjpTY3JlZW5TY29wZSwgc3R5bGVV
cGRhdGVTdHJhdGVneSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkTG9j
YXRhYmxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHls
ZWRMb2NhdGFibGVFbGVtZW50LmgJKHJldmlzaW9uIDg5MjYyKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSAr
MzUsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTVkdFbGVtZW50KiBuZWFyZXN0Vmlld3BvcnRF
bGVtZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBTVkdFbGVtZW50KiBmYXJ0aGVzdFZpZXdwb3J0
RWxlbWVudCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3QgZ2V0QkJveChTdHlsZVVw
ZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBBZmZp
bmVUcmFuc2Zvcm0gZ2V0Q1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRl
KSBjb25zdDsKLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRTY3JlZW5DVE0oU3R5bGVV
cGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OworICAgIHZpcnR1YWwgRmxv
YXRSZWN0IGdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpOwor
ICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0g
QWxsb3dTdHlsZVVwZGF0ZSk7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0U2NyZWVu
Q1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKTsKIAogICAgIHZpcnR1
YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0
YWJsZTo6Q1RNU2NvcGUgbW9kZSkgY29uc3QgeyByZXR1cm4gU1ZHTG9jYXRhYmxlOjpsb2NhbENv
b3JkaW5hdGVTcGFjZVRyYW5zZm9ybShtb2RlKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAJKHJldmlzaW9u
IDg5MjYyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTIgKzQ0LDEyIEBAIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50Ojp+U1ZHU3R5bGUKIHsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpnZXRDVE0oU3R5bGVVcGRhdGVTdHJhdGVneSBzdHls
ZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50OjpnZXRDVE0oU3R5bGVVcGRhdGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0
ZWd5KQogewogICAgIHJldHVybiBTVkdMb2NhdGFibGU6OmNvbXB1dGVDVE0odGhpcywgU1ZHTG9j
YXRhYmxlOjpOZWFyZXN0Vmlld3BvcnRTY29wZSwgc3R5bGVVcGRhdGVTdHJhdGVneSk7CiB9CiAK
LUFmZmluZVRyYW5zZm9ybSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6Z2V0U2NyZWVu
Q1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkgY29uc3QKK0FmZmlu
ZVRyYW5zZm9ybSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKFN0
eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkKIHsKICAgICByZXR1cm4gU1ZH
TG9jYXRhYmxlOjpjb21wdXRlQ1RNKHRoaXMsIFNWR0xvY2F0YWJsZTo6U2NyZWVuU2NvcGUsIHN0
eWxlVXBkYXRlU3RyYXRlZ3kpOwogfQpAQCAtMTUwLDcgKzE1MCw3IEBAIFNWR0VsZW1lbnQqIFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW4KICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6
ZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQodGhpcyk7CiB9CiAKLUZsb2F0UmVjdCBTVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudDo6Z2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBk
YXRlU3RyYXRlZ3kpIGNvbnN0CitGbG9hdFJlY3QgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQ6OmdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KQogewog
ICAgIHJldHVybiBTVkdUcmFuc2Zvcm1hYmxlOjpnZXRCQm94KHRoaXMsIHN0eWxlVXBkYXRlU3Ry
YXRlZ3kpOwogfQpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQ6OmZpbGwKICAgICBhdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcC5zZXQoU1ZHTmFt
ZXM6OnRyYW5zZm9ybUF0dHIsIEFuaW1hdGVkVHJhbnNmb3JtTGlzdCk7CiB9CiAKLXZvaWQgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnRvQ2xpcFBhdGgoUGF0aCYgcGF0aCkgY29uc3QK
K3ZvaWQgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnRvQ2xpcFBhdGgoUGF0aCYgcGF0
aCkKIHsKICAgICB0b1BhdGhEYXRhKHBhdGgpOwogICAgIC8vIEZJWE1FOiBIb3cgZG8gd2Uga25v
dyB0aGUgZWxlbWVudCBoYXMgZG9uZSBhIGxheW91dD8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCShyZXZpc2lvbiA4OTI2
MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4IEBAIGNsYXNzIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50IDogcHUKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudCgpOwogCi0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFN0
eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKLSAgICB2aXJ0dWFs
IEFmZmluZVRyYW5zZm9ybSBnZXRTY3JlZW5DVE0oU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93
U3R5bGVVcGRhdGUpIGNvbnN0OworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENUTShT
dHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSk7CisgICAgdmlydHVhbCBBZmZp
bmVUcmFuc2Zvcm0gZ2V0U2NyZWVuQ1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxl
VXBkYXRlKTsKICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIG5lYXJlc3RWaWV3cG9ydEVsZW1lbnQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIGZhcnRoZXN0Vmlld3BvcnRFbGVtZW50
KCkgY29uc3Q7CiAKQEAgLTQ1LDExICs0NSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBBZmZp
bmVUcmFuc2Zvcm0gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
QWZmaW5lVHJhbnNmb3JtKiBzdXBwbGVtZW50YWxUcmFuc2Zvcm0oKTsKIAotICAgIHZpcnR1YWwg
RmxvYXRSZWN0IGdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUp
IGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IGdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVn
eSA9IEFsbG93U3R5bGVVcGRhdGUpOwogCiAgICAgLy8gImJhc2UgY2xhc3MiIG1ldGhvZHMgZm9y
IGFsbCB0aGUgZWxlbWVudHMgd2hpY2ggcmVuZGVyIGFzIHBhdGhzCiAgICAgdmlydHVhbCB2b2lk
IHRvUGF0aERhdGEoUGF0aCYpIGNvbnN0IHsgfQotICAgIHZpcnR1YWwgdm9pZCB0b0NsaXBQYXRo
KFBhdGgmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdG9DbGlwUGF0aChQYXRoJik7CiAgICAg
dmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVy
U3R5bGUqKTsKIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRD
b250ZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rl
eHRDb250ZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDg5MjYyKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDE5ICs3
MCwxOSBAQCBQYXNzUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBTVkdUZXh0Q29uCiAgICAgcmV0
dXJuIFNWR0FuaW1hdGVkUHJvcGVydHk6Omxvb2t1cE9yQ3JlYXRlV3JhcHBlcjxTVkdBbmltYXRl
ZExlbmd0aCwgU1ZHTGVuZ3RoPih0aGlzLCBTVkdOYW1lczo6dGV4dExlbmd0aEF0dHIsIFNWR05h
bWVzOjp0ZXh0TGVuZ3RoQXR0ci5sb2NhbE5hbWUoKSwgbV90ZXh0TGVuZ3RoLnZhbHVlKTsKIH0K
IAotdW5zaWduZWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXROdW1iZXJPZkNoYXJzKCkgY29u
c3QKK3Vuc2lnbmVkIFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0TnVtYmVyT2ZDaGFycygpCiB7
CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7
CiAgICAgcmV0dXJuIFNWR1RleHRRdWVyeShyZW5kZXJlcigpKS5udW1iZXJPZkNoYXJhY3RlcnMo
KTsKIH0KIAotZmxvYXQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRDb21wdXRlZFRleHRMZW5n
dGgoKSBjb25zdAorZmxvYXQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRDb21wdXRlZFRleHRM
ZW5ndGgoKQogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwogICAgIHJldHVybiBTVkdUZXh0UXVlcnkocmVuZGVyZXIoKSkudGV4dExlbmd0
aCgpOwogfQogCi1mbG9hdCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldFN1YlN0cmluZ0xlbmd0
aCh1bnNpZ25lZCBjaGFybnVtLCB1bnNpZ25lZCBuY2hhcnMsIEV4Y2VwdGlvbkNvZGUmIGVjKSBj
b25zdAorZmxvYXQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRTdWJTdHJpbmdMZW5ndGgodW5z
aWduZWQgY2hhcm51bSwgdW5zaWduZWQgbmNoYXJzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIApA
QCAtOTUsNyArOTUsNyBAQCBmbG9hdCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldFN1YlN0cmlu
CiAgICAgcmV0dXJuIFNWR1RleHRRdWVyeShyZW5kZXJlcigpKS5zdWJTdHJpbmdMZW5ndGgoY2hh
cm51bSwgbmNoYXJzKTsKIH0KIAotRmxvYXRQb2ludCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6Omdl
dFN0YXJ0UG9zaXRpb25PZkNoYXIodW5zaWduZWQgY2hhcm51bSwgRXhjZXB0aW9uQ29kZSYgZWMp
IGNvbnN0CitGbG9hdFBvaW50IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0U3RhcnRQb3NpdGlv
bk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBkb2N1
bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIApAQCAtMTA3
LDcgKzEwNyw3IEBAIEZsb2F0UG9pbnQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRTdGEKICAg
ICByZXR1cm4gU1ZHVGV4dFF1ZXJ5KHJlbmRlcmVyKCkpLnN0YXJ0UG9zaXRpb25PZkNoYXJhY3Rl
cihjaGFybnVtKTsKIH0KIAotRmxvYXRQb2ludCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldEVu
ZFBvc2l0aW9uT2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25z
dAorRmxvYXRQb2ludCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldEVuZFBvc2l0aW9uT2ZDaGFy
KHVuc2lnbmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGRvY3VtZW50KCkt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCkBAIC0xMTksNyArMTE5
LDcgQEAgRmxvYXRQb2ludCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldEVuZAogICAgIHJldHVy
biBTVkdUZXh0UXVlcnkocmVuZGVyZXIoKSkuZW5kUG9zaXRpb25PZkNoYXJhY3RlcihjaGFybnVt
KTsKIH0KIAotRmxvYXRSZWN0IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0RXh0ZW50T2ZDaGFy
KHVuc2lnbmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorRmxvYXRSZWN0IFNW
R1RleHRDb250ZW50RWxlbWVudDo6Z2V0RXh0ZW50T2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwogCkBAIC0xMzEsNyArMTMxLDcgQEAgRmxvYXRSZWN0IFNWR1Rl
eHRDb250ZW50RWxlbWVudDo6Z2V0RXh0ZQogICAgIHJldHVybiBTVkdUZXh0UXVlcnkocmVuZGVy
ZXIoKSkuZXh0ZW50T2ZDaGFyYWN0ZXIoY2hhcm51bSk7CiB9CiAKLWZsb2F0IFNWR1RleHRDb250
ZW50RWxlbWVudDo6Z2V0Um90YXRpb25PZkNoYXIodW5zaWduZWQgY2hhcm51bSwgRXhjZXB0aW9u
Q29kZSYgZWMpIGNvbnN0CitmbG9hdCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldFJvdGF0aW9u
T2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGRvY3Vt
ZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCkBAIC0xNDMs
MTMgKzE0MywxMyBAQCBmbG9hdCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldFJvdGF0aW9uCiAg
ICAgcmV0dXJuIFNWR1RleHRRdWVyeShyZW5kZXJlcigpKS5yb3RhdGlvbk9mQ2hhcmFjdGVyKGNo
YXJudW0pOwogfQogCi1pbnQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRDaGFyTnVtQXRQb3Np
dGlvbihjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK2ludCBTVkdUZXh0Q29udGVudEVs
ZW1lbnQ6OmdldENoYXJOdW1BdFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewog
ICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwog
ICAgIHJldHVybiBTVkdUZXh0UXVlcnkocmVuZGVyZXIoKSkuY2hhcmFjdGVyTnVtYmVyQXRQb3Np
dGlvbihwb2ludCk7CiB9CiAKLXZvaWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzZWxlY3RTdWJT
dHJpbmcodW5zaWduZWQgY2hhcm51bSwgdW5zaWduZWQgbmNoYXJzLCBFeGNlcHRpb25Db2RlJiBl
YykgY29uc3QKK3ZvaWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzZWxlY3RTdWJTdHJpbmcodW5z
aWduZWQgY2hhcm51bSwgdW5zaWduZWQgbmNoYXJzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICB1bnNpZ25lZCBudW1iZXJPZkNoYXJzID0gZ2V0TnVtYmVyT2ZDaGFycygpOwogICAgIGlmIChj
aGFybnVtID49IG51bWJlck9mQ2hhcnMpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdU
ZXh0Q29udGVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VGV4dENvbnRlbnRFbGVtZW50LmgJKHJldmlzaW9uIDg5MjYyKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNSArNDMs
MTUgQEAgcHVibGljOgogICAgICAgICBMRU5HVEhBREpVU1RfU1BBQ0lOR0FOREdMWVBIUyAgID0g
MgogICAgIH07CiAKLSAgICB1bnNpZ25lZCBnZXROdW1iZXJPZkNoYXJzKCkgY29uc3Q7Ci0gICAg
ZmxvYXQgZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCkgY29uc3Q7Ci0gICAgZmxvYXQgZ2V0U3ViU3Ry
aW5nTGVuZ3RoKHVuc2lnbmVkIGNoYXJudW0sIHVuc2lnbmVkIG5jaGFycywgRXhjZXB0aW9uQ29k
ZSYpIGNvbnN0OwotICAgIEZsb2F0UG9pbnQgZ2V0U3RhcnRQb3NpdGlvbk9mQ2hhcih1bnNpZ25l
ZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgRmxvYXRQb2ludCBnZXRFbmRQ
b3NpdGlvbk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0g
ICAgRmxvYXRSZWN0IGdldEV4dGVudE9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25D
b2RlJikgY29uc3Q7Ci0gICAgZmxvYXQgZ2V0Um90YXRpb25PZkNoYXIodW5zaWduZWQgY2hhcm51
bSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgIGludCBnZXRDaGFyTnVtQXRQb3NpdGlvbihj
b25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9pZCBzZWxlY3RTdWJTdHJpbmcodW5zaWdu
ZWQgY2hhcm51bSwgdW5zaWduZWQgbmNoYXJzLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAg
dW5zaWduZWQgZ2V0TnVtYmVyT2ZDaGFycygpOworICAgIGZsb2F0IGdldENvbXB1dGVkVGV4dExl
bmd0aCgpOworICAgIGZsb2F0IGdldFN1YlN0cmluZ0xlbmd0aCh1bnNpZ25lZCBjaGFybnVtLCB1
bnNpZ25lZCBuY2hhcnMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBGbG9hdFBvaW50IGdldFN0YXJ0
UG9zaXRpb25PZkNoYXIodW5zaWduZWQgY2hhcm51bSwgRXhjZXB0aW9uQ29kZSYpOworICAgIEZs
b2F0UG9pbnQgZ2V0RW5kUG9zaXRpb25PZkNoYXIodW5zaWduZWQgY2hhcm51bSwgRXhjZXB0aW9u
Q29kZSYpOworICAgIEZsb2F0UmVjdCBnZXRFeHRlbnRPZkNoYXIodW5zaWduZWQgY2hhcm51bSwg
RXhjZXB0aW9uQ29kZSYpOworICAgIGZsb2F0IGdldFJvdGF0aW9uT2ZDaGFyKHVuc2lnbmVkIGNo
YXJudW0sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBpbnQgZ2V0Q2hhck51bUF0UG9zaXRpb24oY29u
c3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQgc2VsZWN0U3ViU3RyaW5nKHVuc2lnbmVkIGNoYXJu
dW0sIHVuc2lnbmVkIG5jaGFycywgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgc3RhdGljIFNWR1Rl
eHRDb250ZW50RWxlbWVudCogZWxlbWVudEZyb21SZW5kZXJlcihSZW5kZXJPYmplY3QqKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4OTI2MikK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg3LDE3ICs4NywxNyBAQCBTVkdFbGVtZW50KiBTVkdUZXh0RWxlbWVudDo6ZmFydGhlc3RW
aWV3CiAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybWFibGU6OmZhcnRoZXN0Vmlld3BvcnRFbGVtZW50
KHRoaXMpOwogfQogCi1GbG9hdFJlY3QgU1ZHVGV4dEVsZW1lbnQ6OmdldEJCb3goU3R5bGVVcGRh
dGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdAorRmxvYXRSZWN0IFNWR1RleHRF
bGVtZW50OjpnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkK
IHsKICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6Z2V0QkJveCh0aGlzLCBzdHlsZVVwZGF0
ZVN0cmF0ZWd5KTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIFNWR1RleHRFbGVtZW50OjpnZXRDVE0o
U3R5bGVVcGRhdGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdAorQWZmaW5lVHJh
bnNmb3JtIFNWR1RleHRFbGVtZW50OjpnZXRDVE0oU3R5bGVVcGRhdGVTdHJhdGVneSBzdHlsZVVw
ZGF0ZVN0cmF0ZWd5KQogewogICAgIHJldHVybiBTVkdMb2NhdGFibGU6OmNvbXB1dGVDVE0odGhp
cywgU1ZHTG9jYXRhYmxlOjpOZWFyZXN0Vmlld3BvcnRTY29wZSwgc3R5bGVVcGRhdGVTdHJhdGVn
eSk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBTVkdUZXh0RWxlbWVudDo6Z2V0U2NyZWVuQ1RNKFN0
eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkgY29uc3QKK0FmZmluZVRyYW5z
Zm9ybSBTVkdUZXh0RWxlbWVudDo6Z2V0U2NyZWVuQ1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5
bGVVcGRhdGVTdHJhdGVneSkKIHsKICAgICByZXR1cm4gU1ZHTG9jYXRhYmxlOjpjb21wdXRlQ1RN
KHRoaXMsIFNWR0xvY2F0YWJsZTo6U2NyZWVuU2NvcGUsIHN0eWxlVXBkYXRlU3RyYXRlZ3kpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmgJKHJldmlzaW9uIDg5MjYyKQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDkgKzM2LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU1ZHRWxlbWVudCogbmVhcmVzdFZp
ZXdwb3J0RWxlbWVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgU1ZHRWxlbWVudCogZmFydGhlc3RW
aWV3cG9ydEVsZW1lbnQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGdldEJCb3go
U3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OwotICAgIHZpcnR1
YWwgQWZmaW5lVHJhbnNmb3JtIGdldENUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHls
ZVVwZGF0ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0U2NyZWVuQ1RN
KFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEZsb2F0UmVjdCBnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBk
YXRlKTsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oU3R5bGVVcGRhdGVTdHJh
dGVneSA9IEFsbG93U3R5bGVVcGRhdGUpOworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdl
dFNjcmVlbkNUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSk7CiAgICAg
dmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0Owog
CiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkocmV2aXNp
b24gODkyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgUGFzc1JlZlB0cjxTVkdVc2VFbGVtZW50PiBTVkdV
c2VFbGVtZW50OgogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHVXNlRWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCkpOwogfQogCi1TVkdFbGVtZW50SW5zdGFuY2UqIFNWR1VzZUVsZW1lbnQ6Omlu
c3RhbmNlUm9vdCgpIGNvbnN0CitTVkdFbGVtZW50SW5zdGFuY2UqIFNWR1VzZUVsZW1lbnQ6Omlu
c3RhbmNlUm9vdCgpCiB7CiAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZWxlbWVudCBpbnN0YW5jZSB0
cmVlLCBmb3JjZSBpbW1lZGlhdGUgU1ZHRWxlbWVudEluc3RhbmNlIHRyZWUKICAgICAvLyBjcmVh
dGlvbiBieSBhc2tpbmcgdGhlIGRvY3VtZW50IHRvIGludm9rZSBvdXIgcmVjYWxjU3R5bGUgZnVu
Y3Rpb24gLSBhcyB3ZSBjYW4ndApAQCAtNzM3LDcgKzczNyw3IEBAIHZvaWQgU1ZHVXNlRWxlbWVu
dDo6ZGV0YWNoKCkKICAgICBkZXRhY2hJbnN0YW5jZSgpOwogfQogCi1zdGF0aWMgYm9vbCBpc0Rp
cmVjdFJlZmVyZW5jZShOb2RlKiBub2RlKQorc3RhdGljIGJvb2wgaXNEaXJlY3RSZWZlcmVuY2Uo
Y29uc3QgTm9kZSogbm9kZSkKIHsKICAgICByZXR1cm4gbm9kZS0+aGFzVGFnTmFtZShTVkdOYW1l
czo6cGF0aFRhZykKICAgICAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6cmVj
dFRhZykKQEAgLTc0OCw3ICs3NDgsNyBAQCBzdGF0aWMgYm9vbCBpc0RpcmVjdFJlZmVyZW5jZShO
b2RlKiBub2RlCiAgICAgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnRleHRU
YWcpOwogfQogCi12b2lkIFNWR1VzZUVsZW1lbnQ6OnRvQ2xpcFBhdGgoUGF0aCYgcGF0aCkgY29u
c3QKK3ZvaWQgU1ZHVXNlRWxlbWVudDo6dG9DbGlwUGF0aChQYXRoJiBwYXRoKQogewogICAgIEFT
U0VSVChwYXRoLmlzRW1wdHkoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQu
aAkocmV2aXNpb24gODkyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIFNWR1VzZUVsZW1lbnQgOiBw
dWJsaWMgU1ZHU3R5bGVkVHIKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdVc2VF
bGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLSAgICBT
VkdFbGVtZW50SW5zdGFuY2UqIGluc3RhbmNlUm9vdCgpIGNvbnN0OworICAgIFNWR0VsZW1lbnRJ
bnN0YW5jZSogaW5zdGFuY2VSb290KCk7CiAgICAgU1ZHRWxlbWVudEluc3RhbmNlKiBhbmltYXRl
ZEluc3RhbmNlUm9vdCgpIGNvbnN0OwogICAgIFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2VG
b3JTaGFkb3dUcmVlRWxlbWVudChOb2RlKikgY29uc3Q7CiAgICAgdm9pZCBpbnZhbGlkYXRlU2hh
ZG93VHJlZSgpOwpAQCAtNzIsNyArNzIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBh
dHRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
dG9DbGlwUGF0aChQYXRoJikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHRvQ2xpcFBhdGgoUGF0
aCYpOwogCiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlRGlzYWxsb3dlZEVsZW1lbnRzRnJvbVN1YnRy
ZWUoTm9kZSogZWxlbWVudCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24v
U1ZHU01JTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmlt
YXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4OTI2MikKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MTksNyArNDE5LDcgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdAog
ICAgIH0KIH0KIAotaW5saW5lIEVsZW1lbnQqIFNWR1NNSUxFbGVtZW50OjpldmVudEJhc2VGb3Io
Y29uc3QgQ29uZGl0aW9uJiBjb25kaXRpb24pIGNvbnN0CitpbmxpbmUgRWxlbWVudCogU1ZHU01J
TEVsZW1lbnQ6OmV2ZW50QmFzZUZvcihjb25zdCBDb25kaXRpb24mIGNvbmRpdGlvbikKIHsKICAg
ICByZXR1cm4gY29uZGl0aW9uLm1fYmFzZUlELmlzRW1wdHkoKSA/IHRhcmdldEVsZW1lbnQoKSA6
IHRyZWVTY29wZSgpLT5nZXRFbGVtZW50QnlJZChjb25kaXRpb24ubV9iYXNlSUQpOwogfQpAQCAt
NDg5LDcgKzQ4OSw3IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnJlc2NoZWR1bGUoKQogICAgICAg
ICBtX3RpbWVDb250YWluZXItPnNjaGVkdWxlKHRoaXMpOwogfQogCi1TVkdFbGVtZW50KiBTVkdT
TUlMRWxlbWVudDo6dGFyZ2V0RWxlbWVudCgpIGNvbnN0CitTVkdFbGVtZW50KiBTVkdTTUlMRWxl
bWVudDo6dGFyZ2V0RWxlbWVudCgpCiB7CiAgICAgaWYgKG1fdGFyZ2V0RWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIG1fdGFyZ2V0RWxlbWVudDsKQEAgLTUwMCw3ICs1MDAsNyBAQCBTVkdFbGVtZW50
KiBTVkdTTUlMRWxlbWVudDo6dGFyZ2V0RWxlbWVuCiAgICAgICAgIHJldHVybiAwOwogICAgIAog
ICAgIG1fdGFyZ2V0RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPih0YXJnZXQpOwot
ICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+YWRkQW5pbWF0aW9uRWxlbWVu
dFRvVGFyZ2V0KGNvbnN0X2Nhc3Q8U1ZHU01JTEVsZW1lbnQqPih0aGlzKSwgbV90YXJnZXRFbGVt
ZW50KTsKKyAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPmFkZEFuaW1hdGlv
bkVsZW1lbnRUb1RhcmdldCh0aGlzLCBtX3RhcmdldEVsZW1lbnQpOwogICAgIHJldHVybiBtX3Rh
cmdldEVsZW1lbnQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZH
U01JTEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NWR1NNSUxFbGVtZW50LmgJKHJldmlzaW9uIDg5MjYyKQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMSArNDks
MTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwog
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgCi0gICAgdmlydHVh
bCBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgPSAwOwogCiAgICAgU01JTFRpbWVDb250YWluZXIq
IHRpbWVDb250YWluZXIoKSBjb25zdCB7IHJldHVybiBtX3RpbWVDb250YWluZXIuZ2V0KCk7IH0K
IAotICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQoKSBjb25zdDsKKyAgICBTVkdFbGVtZW50
KiB0YXJnZXRFbGVtZW50KCk7CiAgICAgdm9pZCByZXNldFRhcmdldEVsZW1lbnQoKSB7IG1fdGFy
Z2V0RWxlbWVudCA9IDA7IH0KICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVOYW1lOyB9CiAKQEAgLTE1NCw3ICsxNTQsNyBA
QCBwcml2YXRlOgogICAgIH07CiAgICAgYm9vbCBwYXJzZUNvbmRpdGlvbihjb25zdCBTdHJpbmcm
LCBCZWdpbk9yRW5kIGJlZ2luT3JFbmQpOwogICAgIHZvaWQgcGFyc2VCZWdpbk9yRW5kKGNvbnN0
IFN0cmluZyYsIEJlZ2luT3JFbmQgYmVnaW5PckVuZCk7Ci0gICAgRWxlbWVudCogZXZlbnRCYXNl
Rm9yKGNvbnN0IENvbmRpdGlvbiYpIGNvbnN0OworICAgIEVsZW1lbnQqIGV2ZW50QmFzZUZvcihj
b25zdCBDb25kaXRpb24mKTsKIAogICAgIHZvaWQgY29ubmVjdENvbmRpdGlvbnMoKTsKICAgICB2
b2lkIGRpc2Nvbm5lY3RDb25kaXRpb25zKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwkocmV2aXNpb24gODkyNjIpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDExLTA2LTIwICBQZXRlciBLYXN0aW5n
ICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZW1vdmUgImNvbnN0IiBmcm9tIG9i
dmlvdXNseS1ub24tY29uc3QgYWNjZXNzb3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MjMwMgorCisgICAgICAgICogcHVibGljL1dlYkVsZW1lbnQu
aDoKKyAgICAgICAgKiBzcmMvV2ViRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkVs
ZW1lbnQ6OmlubmVyVGV4dCk6IE5vdCBjb25zdCBkdWUgdG8gY2FsbCB0byBuZXdseS1ub24tY29u
c3QgRWxlbWVudDo6aW5uZXJUZXh0KCkuCisgICAgICAgICogc3JjL1dlYlNlYXJjaGFibGVGb3Jt
RGF0YS5jcHA6IFVzZSBub24tY29uc3QgTm9kZSpzIGZvciBjb2RlIHRoYXQgY2FsbHMgbmV3bHkg
bm9uLWNvbnN0IGFjY2Vzc29ycy4KKyAgICAgICAgKEhUTUxOYW1lczo6SXNTZWxlY3RJbkRlZmF1
bHRTdGF0ZSk6CisgICAgICAgIChIVE1MTmFtZXM6OklzSW5EZWZhdWx0U3RhdGUpOgorICAgICAg
ICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6IFVzZSBub24tY29uc3QgTm9kZSpzIGZvciBjb2RlIHRo
YXQgY2FsbHMgbmV3bHkgbm9uLWNvbnN0IGFjY2Vzc29ycy4KKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OmNvbmZpcm1Db21wb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp0ZXh0
SW5wdXRUeXBlKToKKwogMjAxMS0wNi0yMCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJFbGVtZW50LmgJKHJldmlzaW9uIDg5MjYyKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Nyw3ICs1Nyw3IEBAIGNsYXNzIFdlYk5hbWVkTm9kZU1hcDsKICAgICAgICAgV0VCS0lU
X0FQSSBXZWJTdHJpbmcgZ2V0QXR0cmlidXRlKGNvbnN0IFdlYlN0cmluZyYpIGNvbnN0OwogICAg
ICAgICBXRUJLSVRfQVBJIGJvb2wgc2V0QXR0cmlidXRlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwg
Y29uc3QgV2ViU3RyaW5nJiB2YWx1ZSk7CiAgICAgICAgIFdFQktJVF9BUEkgV2ViTmFtZWROb2Rl
TWFwIGF0dHJpYnV0ZXMoKSBjb25zdDsKLSAgICAgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgaW5u
ZXJUZXh0KCkgY29uc3Q7CisgICAgICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGlubmVyVGV4dCgp
OwogCiAgICAgICAgIFdFQktJVF9BUEkgV2ViTm9kZSBzaGFkb3dSb290KCk7CiAgICAgICAgIFdF
QktJVF9BUEkgV2ViTm9kZSBlbnN1cmVTaGFkb3dSb290KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJFbGVtZW50LmNwcAkocmV2aXNpb24gODkyNjIpCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYs
OSArODYsOSBAQCBXZWJOYW1lZE5vZGVNYXAgV2ViRWxlbWVudDo6YXR0cmlidXRlcygpCiAgICAg
cmV0dXJuIFdlYk5hbWVkTm9kZU1hcChtX3ByaXZhdGUtPmF0dHJpYnV0ZXMoKSk7CiB9CiAKLVdl
YlN0cmluZyBXZWJFbGVtZW50Ojppbm5lclRleHQoKSBjb25zdAorV2ViU3RyaW5nIFdlYkVsZW1l
bnQ6OmlubmVyVGV4dCgpCiB7Ci0gICAgcmV0dXJuIGNvbnN0VW53cmFwPEVsZW1lbnQ+KCktPmlu
bmVyVGV4dCgpOworICAgIHJldHVybiB1bndyYXA8RWxlbWVudD4oKS0+aW5uZXJUZXh0KCk7CiB9
CiAKIFdlYk5vZGUgV2ViRWxlbWVudDo6c2hhZG93Um9vdCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAJKHJldmlz
aW9uIDg5MjYyKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZv
cm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTQgKzk3LDE0IEBAIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIEdldEJ1dHRvblRvQWN0aXYKIAogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBz
ZWxlY3RlZCBzdGF0ZSBvZiBhbGwgdGhlIG9wdGlvbnMgbWF0Y2hlcyB0aGUgZGVmYXVsdAogLy8g
c2VsZWN0ZWQgc3RhdGUuCi1ib29sIElzU2VsZWN0SW5EZWZhdWx0U3RhdGUoY29uc3QgSFRNTFNl
bGVjdEVsZW1lbnQqIHNlbGVjdCkKK2Jvb2wgSXNTZWxlY3RJbkRlZmF1bHRTdGF0ZShIVE1MU2Vs
ZWN0RWxlbWVudCogc2VsZWN0KQogewogICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGxpc3RJ
dGVtcyA9IHNlbGVjdC0+bGlzdEl0ZW1zKCk7CiAgICAgaWYgKHNlbGVjdC0+bXVsdGlwbGUoKSB8
fCBzZWxlY3QtPnNpemUoKSA+IDEpIHsKICAgICAgICAgZm9yIChWZWN0b3I8RWxlbWVudCo+Ojpj
b25zdF9pdGVyYXRvciBpKGxpc3RJdGVtcy5iZWdpbigpKTsgaSAhPSBsaXN0SXRlbXMuZW5kKCk7
ICsraSkgewogICAgICAgICAgICAgaWYgKCEoKmkpLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpv
cHRpb25UYWcpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY29uc3Qg
SFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1M
T3B0aW9uRWxlbWVudCo+KCppKTsKKyAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRp
b25FbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPigqaSk7CiAgICAgICAg
ICAgICBpZiAob3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKSAhPSBvcHRpb25FbGVtZW50LT5kZWZh
dWx0U2VsZWN0ZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
QEAgLTExMywxMSArMTEzLDExIEBAIGJvb2wgSXNTZWxlY3RJbkRlZmF1bHRTdGF0ZShjb25zdCBI
VE1MU2UKIAogICAgIC8vIFRoZSBzZWxlY3QgaXMgcmVuZGVyZWQgYXMgYSBjb21ib2JveCAoY2Fs
bGVkIG1lbnVsaXN0IGluIFdlYktpdCkuIEF0CiAgICAgLy8gbGVhc3Qgb25lIGl0ZW0gaXMgc2Vs
ZWN0ZWQsIGRldGVybWluZSB3aGljaCBvbmUuCi0gICAgY29uc3QgSFRNTE9wdGlvbkVsZW1lbnQq
IGluaXRpYWxTZWxlY3RlZCA9IDA7CisgICAgSFRNTE9wdGlvbkVsZW1lbnQqIGluaXRpYWxTZWxl
Y3RlZCA9IDA7CiAgICAgZm9yIChWZWN0b3I8RWxlbWVudCo+Ojpjb25zdF9pdGVyYXRvciBpKGxp
c3RJdGVtcy5iZWdpbigpKTsgaSAhPSBsaXN0SXRlbXMuZW5kKCk7ICsraSkgewogICAgICAgICBp
ZiAoISgqaSktPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvblRhZykpCiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MT3B0aW9uRWxlbWVudCo+KCppKTsKKyAgICAgICAg
SFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9u
RWxlbWVudCo+KCppKTsKICAgICAgICAgaWYgKG9wdGlvbkVsZW1lbnQtPmRlZmF1bHRTZWxlY3Rl
ZCgpKSB7CiAgICAgICAgICAgICAvLyBUaGUgcGFnZSBzcGVjaWZpZWQgdGhlIG9wdGlvbiB0byBz
ZWxlY3QuCiAgICAgICAgICAgICBpbml0aWFsU2VsZWN0ZWQgPSBvcHRpb25FbGVtZW50OwpAQCAt
MTI2LDIxICsxMjYsMjEgQEAgYm9vbCBJc1NlbGVjdEluRGVmYXVsdFN0YXRlKGNvbnN0IEhUTUxT
ZQogICAgICAgICBpZiAoIWluaXRpYWxTZWxlY3RlZCkKICAgICAgICAgICAgIGluaXRpYWxTZWxl
Y3RlZCA9IG9wdGlvbkVsZW1lbnQ7CiAgICAgfQotICAgIHJldHVybiBpbml0aWFsU2VsZWN0ZWQg
PyBpbml0aWFsU2VsZWN0ZWQtPnNlbGVjdGVkKCkgOiB0cnVlOworICAgIHJldHVybiAhaW5pdGlh
bFNlbGVjdGVkIHx8IGluaXRpYWxTZWxlY3RlZC0+c2VsZWN0ZWQoKTsKIH0KIAogLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBmb3JtIGVsZW1lbnQgaXMgaW4gaXRzIGRlZmF1bHQgc3RhdGUsIGZhbHNl
IG90aGVyd2lzZS4KIC8vIFRoZSBkZWZhdWx0IHN0YXRlIGlzIHRoZSBzdGF0ZSBvZiB0aGUgZm9y
bSBlbGVtZW50IG9uIGluaXRpYWwgbG9hZCBvZiB0aGUKIC8vIHBhZ2UsIGFuZCB2YXJpZXMgZGVw
ZW5kaW5nIHVwb24gdGhlIGZvcm0gZWxlbWVudC4gRm9yIGV4YW1wbGUsIGEgY2hlY2tib3ggaXMK
IC8vIGluIGl0cyBkZWZhdWx0IHN0YXRlIGlmIHRoZSBjaGVja2VkIHN0YXRlIG1hdGNoZXMgdGhl
IHN0YXRlIG9mIHRoZSBjaGVja2VkIGF0dHJpYnV0ZS4KLWJvb2wgSXNJbkRlZmF1bHRTdGF0ZShj
b25zdCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmb3JtRWxlbWVudCkKK2Jvb2wgSXNJbkRlZmF1
bHRTdGF0ZShIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmb3JtRWxlbWVudCkKIHsKICAgICBpZiAo
Zm9ybUVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpIHsKLSAgICAgICAg
Y29uc3QgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
SFRNTElucHV0RWxlbWVudCo+KGZvcm1FbGVtZW50KTsKKyAgICAgICAgY29uc3QgSFRNTElucHV0
RWxlbWVudCogaW5wdXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGZv
cm1FbGVtZW50KTsKICAgICAgICAgaWYgKGlucHV0RWxlbWVudC0+aXNDaGVja2JveCgpIHx8IGlu
cHV0RWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKQogICAgICAgICAgICAgcmV0dXJuIGlucHV0RWxl
bWVudC0+Y2hlY2tlZCgpID09IGlucHV0RWxlbWVudC0+aGFzQXR0cmlidXRlKGNoZWNrZWRBdHRy
KTsKICAgICB9IGVsc2UgaWYgKGZvcm1FbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2Vs
ZWN0VGFnKSkKLSAgICAgICAgcmV0dXJuIElzU2VsZWN0SW5EZWZhdWx0U3RhdGUoc3RhdGljX2Nh
c3Q8Y29uc3QgSFRNTFNlbGVjdEVsZW1lbnQqPihmb3JtRWxlbWVudCkpOworICAgICAgICByZXR1
cm4gSXNTZWxlY3RJbkRlZmF1bHRTdGF0ZShzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+
KGZvcm1FbGVtZW50KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDg5MjYyKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzU1LDcgKzEzNTUsNyBAQCBib29sIFdlYlZpZXdJbXBsOjpzZXRDb21wb3NpdGlvbigKICAg
ICAvLyBub2RlLCB3aGljaCBkb2Vzbid0IGV4aXN0IGFueSBsb25nZXIuCiAgICAgUGFzc1JlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBlZGl0b3ItPmNvbXBvc2l0aW9uUmFuZ2UoKTsKICAgICBpZiAocmFu
Z2UpIHsKLSAgICAgICAgY29uc3QgTm9kZSogbm9kZSA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigp
OworICAgICAgICBOb2RlKiBub2RlID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7CiAgICAgICAg
IGlmICghbm9kZSB8fCAhbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CkBAIC0xNDA0LDcgKzE0MDQsNyBAQCBib29sIFdlYlZpZXdJbXBs
Ojpjb25maXJtQ29tcG9zaXRpb24oY29uCiAgICAgLy8gbm9kZSwgd2hpY2ggZG9lc24ndCBleGlz
dCBhbnkgbG9uZ2VyLgogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZWRpdG9yLT5jb21w
b3NpdGlvblJhbmdlKCk7CiAgICAgaWYgKHJhbmdlKSB7Ci0gICAgICAgIGNvbnN0IE5vZGUqIG5v
ZGUgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IHJhbmdl
LT5zdGFydENvbnRhaW5lcigpOwogICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzQ29udGVu
dEVkaXRhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTQ1Myw3
ICsxNDUzLDcgQEAgV2ViVGV4dElucHV0VHlwZSBXZWJWaWV3SW1wbDo6dGV4dElucHV0VAogICAg
IGlmICghc2VsZWN0aW9uKQogICAgICAgICByZXR1cm4gdHlwZTsKIAotICAgIGNvbnN0IE5vZGUq
IG5vZGUgPSBzZWxlY3Rpb24tPnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBOb2RlKiBu
b2RlID0gc2VsZWN0aW9uLT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2Rl
KQogICAgICAgICByZXR1cm4gdHlwZTsKIAo=
</data>
<flag name="review"
          id="91894"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="91895"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101501</attachid>
            <date>2011-07-20 13:20:28 -0700</date>
            <delta_ts>2011-07-20 14:12:45 -0700</delta_ts>
            <desc>First patch v3</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>78652</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxMzkyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQ5IEBACisyMDExLTA3LTIwICBQZXRlciBL
YXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZW1vdmUgImNvbnN0IiBm
cm9tIG9idmlvdXNseS1ub24tY29uc3QgYWNjZXNzb3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjMwMgorCisgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgorCisgICAgICAgIE5vIGZ1bmN0aW9uYWwgY2hhbmdlLCBzbyBubyBuZXcgdGVz
dHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjogQWRqdXN0IGZ1bmN0aW9uIG5hbWVzIHRv
IHJlZmxlY3Qgbm9uLWNvbnN0bmVzcy4KKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENo
aWxkcmVuKTogTm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OmNy
ZWF0ZUVsZW1lbnQoKS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNjcm9sbExlZnQpOiBO
b3QgY29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpz
Y3JvbGxUb3ApOiBOb3QgY29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpzY3JvbGxXaWR0aCk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0
aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNjcm9sbEhlaWdodCk6IE5vdCBjb25zdCwgY2FsbHMg
bm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5
bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmJvdW5kc0luV2luZG93U3Bh
Y2UpOiBOb3QgY29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjpnZXRDbGllbnRSZWN0cyk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9u
IERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldEJvdW5kaW5nQ2xpZW50UmVjdCk6IE5vdCBjb25zdCwg
Y2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmlubmVyVGV4dCk6
IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
Om91dGVyVGV4dCk6IE5vdCBjb25zdCwgY2FsbHMgbmV3bHkgbm9uLWNvbnN0IGZ1bmN0aW9uIEVs
ZW1lbnQ6OmlubmVyVGV4dCgpLgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICog
ZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNDb250ZW50RWRpdGFibGUp
OiBOb3QgY29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpz
aG91bGRVc2VJbnB1dE1ldGhvZCk6IE5vdCBjb25zdCwgY2FsbHMgbmV3bHkgbm9uLWNvbnN0IGZ1
bmN0aW9uIE5vZGU6OmlzQ29udGVudEVkaXRhYmxlKCkuCisgICAgICAgICogZG9tL05vZGUuaDoK
KyAgICAgICAgKiBkb20vT3B0aW9uRWxlbWVudC5oOiBWaXJ0dWFsIGZ1bmN0aW9uIE9wdGlvbkVs
ZW1lbnQ6OnNlbGVjdGVkKCkgbm90IGNvbnN0IGJlY2F1c2UgSFRNTE9wdGlvbkVsZW1lbnQgaW1w
bGVtZW50YXRpb24gaXMgbm9uLWNvbnN0LgorICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnRleHQpOiBOb3Qg
Y29uc3QsIGNhbGxzIG5ld2x5IG5vbi1jb25zdCBmdW5jdGlvbiBFbGVtZW50Ojppbm5lclRleHQo
KS4KKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9I
VE1MQXBwbGV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVu
dDo6cmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncyk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0
IGZ1bmN0aW9uIFJlbmRlckFwcGxldDo6Y3JlYXRlV2lkZ2V0SWZOZWNlc3NhcnkoKS4KKyAgICAg
ICAgKiBodG1sL0hUTUxBcHBsZXRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MQXJlYUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50OjppbWFnZUVsZW1l
bnQpOiBOb3QgY29uc3QsIGNhbGxzIG5ld2x5IG5vbi1jb25zdCBmdW5jdGlvbiBIVE1MTWFwRWxl
bWVudDo6aW1hZ2VFbGVtZW50KCkuCisgICAgICAgICogaHRtbC9IVE1MQXJlYUVsZW1lbnQuaDoK
KyAgICAgICAgKiBodG1sL0hUTUxCb2R5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQm9keUVsZW1lbnQ6OnNjcm9sbExlZnQpOiBOb3QgY29uc3QsIGNhbGxzIG5vbi1jb25zdCBm
dW5jdGlvbiBEb2N1bWVudDo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCku
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQ6OnNjcm9sbFRvcCk6IE5vdCBjb25z
dCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6
c2Nyb2xsSGVpZ2h0KTogTm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1l
bnQ6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEJvZHlFbGVtZW50OjpzY3JvbGxXaWR0aCk6IE5vdCBjb25zdCwgY2FsbHMgbm9u
LWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKS4KKyAgICAgICAgKiBodG1sL0hUTUxCb2R5RWxlbWVudC5oOgorICAgICAgICAqIGh0
bWwvSFRNTEVtYmVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRW1iZWRFbGVt
ZW50OjpyZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKTogTm90IGNvbnN0LCBjYWxscyBub24tY29u
c3QgZnVuY3Rpb24gRG9jdW1lbnQ6OmNyZWF0ZUVsZW1lbnQoKS4KKyAgICAgICAgKiBodG1sL0hU
TUxFbWJlZEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjp3aWR0aCk6IE5vdCBj
b25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1l
bnRCYXNlOjpoZWlnaHQpOiBOb3QgY29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1
bWVudDo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAgICog
aHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oOgorICAgICAgICAqIGh0bWwvSFRNTEltYWdlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Ojp3aWR0aCk6IE5v
dCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVs
ZW1lbnQ6OmhlaWdodCk6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3Vt
ZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAgICAgKiBo
dG1sL0hUTUxJbWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2hvdWxkVXNlSW5wdXRN
ZXRob2QpOiBWaXJ0dWFsIGZ1bmN0aW9uIG5vdCBjb25zdCBiZWNhdXNlIE5vZGUgaW1wbGVtZW50
YXRpb24gaXMgbm9uLWNvbnN0LgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5oOgor
ICAgICAgICAqIGh0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
S2V5Z2VuU2VsZWN0RWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGls
ZHJlbik6IFZpcnR1YWwgZnVuY3Rpb24gbm90IGNvbnN0IGJlY2F1c2UgRWxlbWVudCBpbXBsZW1l
bnRhdGlvbiBpcyBub24tY29uc3QuCisgICAgICAgICogaHRtbC9IVE1MTWFwRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFwRWxlbWVudDo6aW1hZ2VFbGVtZW50KTogTm90IGNv
bnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OmltYWdlcygpLgorICAgICAg
ICAqIGh0bWwvSFRNTE1hcEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpyZW5kZXJXaWRn
ZXRGb3JKU0JpbmRpbmdzKTogTm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9j
dW1lbnQ6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpLgorICAgICAgICAq
IGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpzZWxlY3RlZCk6
IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIEhUTUxTZWxlY3RFbGVtZW50Ojpy
ZWNhbGNMaXN0SXRlbXNJZk5lZWRlZCgpLgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1l
bnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcDogVmlydHVhbCBmdW5j
dGlvbiBIVE1MUGx1Z0luRWxlbWVudDo6cmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygpIG5vdCBj
b25zdCBiZWNhdXNlIHZhcmlvdXMgc3ViY2xhc3MgaW1wbGVtZW50YXRpb25zIGFyZSBub24tY29u
c3QuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudDo6Z2V0SW5zdGFuY2UpOiBO
b3QgY29uc3QsIGNhbGxzIG5ld2x5IG5vbi1jb25zdCBmdW5jdGlvbiBIVE1MUGx1Z0luRWxlbWVu
dDo6cGx1Z2luV2lkZ2V0KCkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudDo6
cGx1Z2luV2lkZ2V0KTogTm90IGNvbnN0LCBjYWxscyBuZXdseSBub24tY29uc3QgZnVuY3Rpb24g
SFRNTFBsdWdJbkVsZW1lbnQ6OnJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKS4KKyAgICAgICAg
KiBodG1sL0hUTUxQbHVnSW5FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6Y2xvbmVFbGVt
ZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbik6IFZpcnR1YWwgZnVuY3Rpb24gbm90IGNv
bnN0IGJlY2F1c2UgRWxlbWVudCBpbXBsZW1lbnRhdGlvbiBpcyBub24tY29uc3QuCisgICAgICAg
ICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVh
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpzaG91
bGRVc2VJbnB1dE1ldGhvZCk6IFZpcnR1YWwgZnVuY3Rpb24gbm90IGNvbnN0IGJlY2F1c2UgTm9k
ZSBpbXBsZW1lbnRhdGlvbiBpcyBub24tY29uc3QuCisgICAgICAgICogaHRtbC9IVE1MVGV4dEFy
ZWFFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJUaHVtYkVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhv
dXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4pOiBWaXJ0dWFsIGZ1bmN0aW9uIG5vdCBjb25zdCBiZWNh
dXNlIEVsZW1lbnQgaW1wbGVtZW50YXRpb24gaXMgbm9uLWNvbnN0LgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRl
c0FuZENoaWxkcmVuKTogVmlydHVhbCBmdW5jdGlvbiBub3QgY29uc3QgYmVjYXVzZSBFbGVtZW50
IGltcGxlbWVudGF0aW9uIGlzIG5vbi1jb25zdC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NW
R1NoYWRvd1RyZWVFbGVtZW50cy5oOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1
dGVUeXBlKTogTm90IGNvbnN0LCBjYWxscyBuZXdseSBub24tY29uc3QgZnVuY3Rpb24gU1ZHU01J
TEVsZW1lbnQ6OnRhcmdldEVsZW1lbnQoKS4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlw
ZSk6IE5vdCBjb25zdCwgY2FsbHMgbmV3bHkgbm9uLWNvbnN0IGZ1bmN0aW9uIFNWR1NNSUxFbGVt
ZW50Ojp0YXJnZXRFbGVtZW50KCkuCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpoYXNWYWxpZEF0dHJp
YnV0ZVR5cGUpOiBOb3QgY29uc3QsIGNhbGxzIG5ld2x5IG5vbi1jb25zdCBmdW5jdGlvbiBTVkdT
TUlMRWxlbWVudDo6dGFyZ2V0RWxlbWVudCgpLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmN1cnJlbnRWYWx1ZXNGb3JW
YWx1ZXNBbmltYXRpb24pOiBOb3QgY29uc3QsIGNhbGxzIG5ld2x5IG5vbi1jb25zdCBmdW5jdGlv
biBTVkdTTUlMRWxlbWVudDo6dGFyZ2V0RWxlbWVudCgpLgorICAgICAgICAqIHN2Zy9TVkdBbmlt
YXRpb25FbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRWxlbWVudDo6YWNjZXNzRG9jdW1lbnRTVkdFeHRlbnNpb25zKTogTm90IGNv
bnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmJvdW5kaW5nQm94KTogTm90IGNv
bnN0LCBjYWxscyBuZXdseSBub24tY29uc3QgZnVuY3Rpb24gU1ZHU3R5bGVkTG9jYXRhYmxlRWxl
bWVudDo6Z2V0QkJveCgpLgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50Lmg6CisgICAgICAgICog
c3ZnL1NWR0xvY2F0YWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMb2NhdGFibGU6Omdl
dEJCb3gpOiBBcmd1bWVudCBub3QgY29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1
bWVudDo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkgb24gYXJndW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdMb2NhdGFibGU6OmNvbXB1dGVDVE0pOiBBcmd1bWVudCBu
b3QgY29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkgb24gYXJndW1lbnQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdMb2NhdGFibGU6OmdldFRyYW5zZm9ybVRvRWxlbWVudCk6IE5vdCBjb25zdCwgY2FsbHMg
bmV3bHkgbm9uLWNvbnN0IGZ1bmN0aW9uIFNWR0xvY2F0YWJsZTo6Z2V0Q1RNKCkuCisgICAgICAg
ICogc3ZnL1NWR0xvY2F0YWJsZS5oOiBWaXJ0dWFsIGZ1bmN0aW9ucyBTVkdMb2NhdGFibGU6Omdl
dEJCb3goKSwgU1ZHTG9jYXRhYmxlOjpnZXRDVE0oKSwgYW5kIFNWR0xvY2F0YWJsZTo6Z2V0U2Ny
ZWVuQ1RNKCkgbm90IGNvbnN0IGJlY2F1c2UgdmFyaW91cyBzdWJjbGFzcyBpbXBsZW1lbnRhdGlv
bnMgYXJlIG5vbi1jb25zdC4KKyAgICAgICAgKiBzdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdTY3JpcHRFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0
cmlidXRlc0FuZENoaWxkcmVuKTogVmlydHVhbCBmdW5jdGlvbiBub3QgY29uc3QgYmVjYXVzZSBF
bGVtZW50IGltcGxlbWVudGF0aW9uIGlzIG5vbi1jb25zdC4KKyAgICAgICAgKiBzdmcvU1ZHU2Ny
aXB0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1N0eWxlZEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlc0lmTmVl
ZGVkKTogTm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OmFjY2Vz
c1NWR0V4dGVuc2lvbnMoKS4KKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5oOgorICAg
ICAgICAqIHN2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmdldEJCb3gpOiBOb3QgY29uc3QsIGNhbGxz
IG5ld2x5IG5vbi1jb25zdCBzdGF0aWMgZnVuY3Rpb24gU1ZHTG9jYXRhYmxlOjpnZXRCQm94KCku
CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50OjpnZXRDVE0pOiBO
b3QgY29uc3QsIGNhbGxzIG5ld2x5IG5vbi1jb25zdCBzdGF0aWMgZnVuY3Rpb24gU1ZHTG9jYXRh
YmxlOjpjb21wdXRlQ1RNKCkuCisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRMb2NhdGFibGVF
bGVtZW50OjpnZXRTY3JlZW5DVE0pOiBOb3QgY29uc3QsIGNhbGxzIG5ld2x5IG5vbi1jb25zdCBz
dGF0aWMgZnVuY3Rpb24gU1ZHTG9jYXRhYmxlOjpjb21wdXRlQ1RNKCkuCisgICAgICAgICogc3Zn
L1NWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQ6OmdldENUTSk6IE5vdCBjb25zdCwgY2FsbHMgbmV3bHkgbm9uLWNvbnN0
IHN0YXRpYyBmdW5jdGlvbiBTVkdMb2NhdGFibGU6OmNvbXB1dGVDVE0oKS4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpnZXRTY3JlZW5DVE0pOiBOb3Qg
Y29uc3QsIGNhbGxzIG5ld2x5IG5vbi1jb25zdCBzdGF0aWMgZnVuY3Rpb24gU1ZHTG9jYXRhYmxl
Ojpjb21wdXRlQ1RNKCkuCisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudDo6Z2V0QkJveCk6IE5vdCBjb25zdCwgY2FsbHMgbmV3bHkgbm9uLWNvbnN0IHN0YXRp
YyBmdW5jdGlvbiBTVkdMb2NhdGFibGU6OmdldEJCb3goKS4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ojp0b0NsaXBQYXRoKTogVmlydHVhbCBmdW5jdGlv
biBub3QgY29uc3QgYmVjYXVzZSBTVkdVc2VFbGVtZW50IGltcGxlbWVudGF0aW9uIGlzIG5vbi1j
b25zdC4KKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0TnVtYmVyT2ZDaGFycyk6IE5vdCBjb25zdCwgY2Fs
bHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5n
U3R5bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50RWxlbWVudDo6
Z2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKTogTm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rp
b24gRG9jdW1lbnQ6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpLgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRTdWJTdHJpbmdMZW5ndGgp
OiBOb3QgY29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0
Q29udGVudEVsZW1lbnQ6OmdldFN0YXJ0UG9zaXRpb25PZkNoYXIpOiBOb3QgY29uc3QsIGNhbGxz
IG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q29udGVudEVsZW1lbnQ6Omdl
dEVuZFBvc2l0aW9uT2ZDaGFyKTogTm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24g
RG9jdW1lbnQ6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRFeHRlbnRPZkNoYXIpOiBOb3Qg
Y29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q29udGVu
dEVsZW1lbnQ6OmdldFJvdGF0aW9uT2ZDaGFyKTogTm90IGNvbnN0LCBjYWxscyBub24tY29uc3Qg
ZnVuY3Rpb24gRG9jdW1lbnQ6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygp
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRDaGFyTnVtQXRQ
b3NpdGlvbik6IE5vdCBjb25zdCwgY2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50Ojp1
cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKS4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR1RleHRDb250ZW50RWxlbWVudDo6c2VsZWN0U3ViU3RyaW5nKTogTm90IGNvbnN0LCBjYWxs
cyBuZXdseSBub24tY29uc3Qgc3RhdGljIGZ1bmN0aW9uIFNWR1RleHRDb250ZW50RWxlbWVudDo6
Z2V0TnVtYmVyT2ZDaGFycygpLgorICAgICAgICAqIHN2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHVGV4dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVGV4dEVsZW1lbnQ6OmdldEJCb3gpOiBOb3QgY29uc3QsIGNhbGxzIG5ld2x5IG5vbi1jb25z
dCBzdGF0aWMgZnVuY3Rpb24gU1ZHTG9jYXRhYmxlOjpnZXRCQm94KCkuCisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0RWxlbWVudDo6Z2V0Q1RNKTogTm90IGNvbnN0LCBjYWxscyBuZXdseSBub24t
Y29uc3Qgc3RhdGljIGZ1bmN0aW9uIFNWR0xvY2F0YWJsZTo6Y29tcHV0ZUNUTSgpLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6OmdldFNjcmVlbkNUTSk6IE5vdCBjb25zdCwgY2Fs
bHMgbmV3bHkgbm9uLWNvbnN0IHN0YXRpYyBmdW5jdGlvbiBTVkdMb2NhdGFibGU6OmNvbXB1dGVD
VE0oKS4KKyAgICAgICAgKiBzdmcvU1ZHVGV4dEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZH
VXNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50OjppbnN0YW5j
ZVJvb3QpOiBOb3QgY29uc3QsIGNhbGxzIG5vbi1jb25zdCBmdW5jdGlvbiBEb2N1bWVudDo6dXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCkuCisgICAgICAgIChXZWJDb3JlOjpp
c0RpcmVjdFJlZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50Ojp0b0Ns
aXBQYXRoKTogTm90IGNvbnN0LCBjYWxscyBub24tY29uc3QgZnVuY3Rpb24gRG9jdW1lbnQ6OmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS4KKyAgICAgICAgKiBzdmcvU1ZHVXNlRWxlbWVudC5oOgorICAg
ICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU01JTEVsZW1lbnQ6OmV2ZW50QmFzZUZvcik6IE5vdCBjb25zdCwgY2FsbHMgbmV3bHkg
bm9uLWNvbnN0IGZ1bmN0aW9uIFNWR1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVtZW50KCkuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6dGFyZ2V0RWxlbWVudCk6IE5vdCBjb25zdCwg
Y2FsbHMgbm9uLWNvbnN0IGZ1bmN0aW9uIERvY3VtZW50OjphY2Nlc3NTVkdFeHRlbnNpb25zKCku
CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oOiBWaXJ0dWFsIGZ1bmN0
aW9uIFNWR1NNSUxFbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBub3QgY29uc3QgYmVj
YXVzZSB2YXJpb3VzIHN1YmNsYXNzIGltcGxlbWVudGF0aW9ucyBhcmUgbm9uLWNvbnN0LgorCiAy
MDExLTA3LTIwICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgYWRk
IG5ldyBmbGV4Ym94IGRhdGEgdG8gU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YQpJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDkxMzkyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTgyMCw4ICs4MjAsMTAgQEAgX19aTjdXZWJDb3Jl
NldpZGdldEQyRXYKIF9fWk43V2ViQ29yZTZ0b05vZGVFTjNKU0M3SlNWYWx1ZUUKIF9fWk43V2Vi
Q29yZTdDb25zb2xlMjFzaG91bGRQcmludEV4Y2VwdGlvbnNFdgogX19aTjdXZWJDb3JlN0NvbnNv
bGUyNHNldFNob3VsZFByaW50RXhjZXB0aW9uc0ViCitfX1pON1dlYkNvcmU3RWxlbWVudDE5Ym91
bmRzSW5XaW5kb3dTcGFjZUV2CiBfX1pON1dlYkNvcmU3RWxlbWVudDE2ZW5zdXJlU2hhZG93Um9v
dEV2CiBfX1pON1dlYkNvcmU3RWxlbWVudDE2cmVtb3ZlU2hhZG93Um9vdEV2CitfX1pON1dlYkNv
cmU3RWxlbWVudDlpbm5lclRleHRFdgogX19aTjdXZWJDb3JlN0ludFJlY3Q1c2NhbGVFZgogX19a
TjdXZWJDb3JlN0ludFJlY3Q1dW5pdGVFUktTMF8KIF9fWk43V2ViQ29yZTdJbnRSZWN0OWludGVy
c2VjdEVSS1MwXwpAQCAtMTI4NCw4ICsxMjg2LDYgQEAgX19aTks3V2ViQ29yZTZXaWRnZXQ5ZnJh
bWVSZWN0RXYKIF9fWk5LN1dlYkNvcmU3RWxlbWVudDEwc2NyZWVuUmVjdEV2CiBfX1pOSzdXZWJD
b3JlN0VsZW1lbnQxMHNoYWRvd1Jvb3RFdgogX19aTks3V2ViQ29yZTdFbGVtZW50MTJnZXRBdHRy
aWJ1dGVFUktOU18xM1F1YWxpZmllZE5hbWVFCi1fX1pOSzdXZWJDb3JlN0VsZW1lbnQxOWJvdW5k
c0luV2luZG93U3BhY2VFdgotX19aTks3V2ViQ29yZTdFbGVtZW50OWlubmVyVGV4dEV2CiBfX1pO
SzdXZWJDb3JlN0ludFJlY3QxMGludGVyc2VjdHNFUktTMF8KIF9fWk5LN1dlYkNvcmU3SW50UmVj
dDhjb250YWluc0VSS1MwXwogX19aTks3V2ViQ29yZTdJbnRSZWN0Y3Y2Q0dSZWN0RXYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDkxMzkyKQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDcgQEAgUGFzc1Jl
ZlB0cjxFbGVtZW50PiBFbGVtZW50OjpjbG9uZUVsZW1lbgogICAgIHJldHVybiBjbG9uZS5yZWxl
YXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8RWxlbWVudD4gRWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0
aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigpIGNvbnN0CitQYXNzUmVmUHRyPEVsZW1lbnQ+IEVs
ZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKQogewogICAg
IHJldHVybiBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHRhZ1FOYW1lKCksIGZhbHNlKTsKIH0K
QEAgLTQ2NSw3ICs0NjUsNyBAQCBpbnQgRWxlbWVudDo6Y2xpZW50SGVpZ2h0KCkKICAgICByZXR1
cm4gMDsKIH0KIAotaW50IEVsZW1lbnQ6OnNjcm9sbExlZnQoKSBjb25zdAoraW50IEVsZW1lbnQ6
OnNjcm9sbExlZnQoKQogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpOwogICAgIGlmIChSZW5kZXJCb3gqIHJlbmQgPSByZW5kZXJCb3goKSkK
QEAgLTQ3Myw3ICs0NzMsNyBAQCBpbnQgRWxlbWVudDo6c2Nyb2xsTGVmdCgpIGNvbnN0CiAgICAg
cmV0dXJuIDA7CiB9CiAKLWludCBFbGVtZW50OjpzY3JvbGxUb3AoKSBjb25zdAoraW50IEVsZW1l
bnQ6OnNjcm9sbFRvcCgpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgaWYgKFJlbmRlckJveCogcmVuZCA9IHJlbmRlckJveCgp
KQpAQCAtNDk1LDcgKzQ5NSw3IEBAIHZvaWQgRWxlbWVudDo6c2V0U2Nyb2xsVG9wKGludCBuZXdU
b3ApCiAgICAgICAgIHJlbmQtPnNldFNjcm9sbFRvcChzdGF0aWNfY2FzdDxpbnQ+KG5ld1RvcCAq
IHJlbmQtPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOwogfQogCi1pbnQgRWxlbWVudDo6c2Ny
b2xsV2lkdGgoKSBjb25zdAoraW50IEVsZW1lbnQ6OnNjcm9sbFdpZHRoKCkKIHsKICAgICBkb2N1
bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICBpZiAo
UmVuZGVyQm94KiByZW5kID0gcmVuZGVyQm94KCkpCkBAIC01MDMsNyArNTAzLDcgQEAgaW50IEVs
ZW1lbnQ6OnNjcm9sbFdpZHRoKCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotaW50IEVsZW1l
bnQ6OnNjcm9sbEhlaWdodCgpIGNvbnN0CitpbnQgRWxlbWVudDo6c2Nyb2xsSGVpZ2h0KCkKIHsK
ICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
ICAgICBpZiAoUmVuZGVyQm94KiByZW5kID0gcmVuZGVyQm94KCkpCkBAIC01MTEsNyArNTExLDcg
QEAgaW50IEVsZW1lbnQ6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAK
LUludFJlY3QgRWxlbWVudDo6Ym91bmRzSW5XaW5kb3dTcGFjZSgpIGNvbnN0CitJbnRSZWN0IEVs
ZW1lbnQ6OmJvdW5kc0luV2luZG93U3BhY2UoKQogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCkBAIC01MjMsNyArNTIzLDcgQEAgSW50
UmVjdCBFbGVtZW50Ojpib3VuZHNJbldpbmRvd1NwYWNlKCkgYwogI2lmIEVOQUJMRShTVkcpCiAg
ICAgaWYgKGlzU1ZHRWxlbWVudCgpICYmIHJlbmRlcmVyKCkpIHsKICAgICAgICAgLy8gR2V0IHRo
ZSBib3VuZGluZyByZWN0YW5nbGUgZnJvbSB0aGUgU1ZHIG1vZGVsLgotICAgICAgICBjb25zdCBT
VkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHRWxlbWVudCo+KHRo
aXMpOworICAgICAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxl
bWVudCo+KHRoaXMpOwogICAgICAgICBGbG9hdFJlY3QgbG9jYWxSZWN0OwogICAgICAgICBpZiAo
c3ZnRWxlbWVudC0+Ym91bmRpbmdCb3gobG9jYWxSZWN0KSkKICAgICAgICAgICAgIHF1YWRzLmFw
cGVuZChyZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVjdCkpOwpAQCAtNTQ2
LDcgKzU0Niw3IEBAIEludFJlY3QgRWxlbWVudDo6Ym91bmRzSW5XaW5kb3dTcGFjZSgpIGMKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1QYXNzUmVmUHRyPENsaWVudFJlY3RMaXN0PiBFbGVtZW50
OjpnZXRDbGllbnRSZWN0cygpIGNvbnN0CitQYXNzUmVmUHRyPENsaWVudFJlY3RMaXN0PiBFbGVt
ZW50OjpnZXRDbGllbnRSZWN0cygpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKQEAgLTU3OSw3ICs1NzksNyBAQCBQYXNzUmVmUHRy
PENsaWVudFJlY3RMaXN0PiBFbGVtZW50OjpnZXRDCiAgICAgcmV0dXJuIENsaWVudFJlY3RMaXN0
OjpjcmVhdGUocXVhZHMpOwogfQogCi1QYXNzUmVmUHRyPENsaWVudFJlY3Q+IEVsZW1lbnQ6Omdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpIGNvbnN0CitQYXNzUmVmUHRyPENsaWVudFJlY3Q+IEVsZW1l
bnQ6OmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKQEAgLTU4Nyw3ICs1ODcsNyBAQCBQYXNz
UmVmUHRyPENsaWVudFJlY3Q+IEVsZW1lbnQ6OmdldEJvdW5kCiAjaWYgRU5BQkxFKFNWRykKICAg
ICBpZiAoaXNTVkdFbGVtZW50KCkgJiYgcmVuZGVyZXIoKSkgewogICAgICAgICAvLyBHZXQgdGhl
IGJvdW5kaW5nIHJlY3RhbmdsZSBmcm9tIHRoZSBTVkcgbW9kZWwuCi0gICAgICAgIGNvbnN0IFNW
R0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdFbGVtZW50Kj4odGhp
cyk7CisgICAgICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVt
ZW50Kj4odGhpcyk7CiAgICAgICAgIEZsb2F0UmVjdCBsb2NhbFJlY3Q7CiAgICAgICAgIGlmIChz
dmdFbGVtZW50LT5ib3VuZGluZ0JveChsb2NhbFJlY3QpKQogICAgICAgICAgICAgcXVhZHMuYXBw
ZW5kKHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQobG9jYWxSZWN0KSk7CkBAIC0xNjk2
LDcgKzE2OTYsNyBAQCB2b2lkIEVsZW1lbnQ6OmJsdXIoKQogICAgIH0KIH0KIAotU3RyaW5nIEVs
ZW1lbnQ6OmlubmVyVGV4dCgpIGNvbnN0CitTdHJpbmcgRWxlbWVudDo6aW5uZXJUZXh0KCkKIHsK
ICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSBsYXlvdXQsIHNpbmNlIHBsYWluVGV4dCB1c2VzIGxp
bmUgYm94ZXMgaW4gdGhlIHJlbmRlciB0cmVlLgogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwpAQCAtMTcwNyw3ICsxNzA3LDcgQEAgU3RyaW5n
IEVsZW1lbnQ6OmlubmVyVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIHBsYWluVGV4dChyYW5nZU9m
Q29udGVudHMoY29uc3RfY2FzdDxFbGVtZW50Kj4odGhpcykpLmdldCgpKTsKIH0KIAotU3RyaW5n
IEVsZW1lbnQ6Om91dGVyVGV4dCgpIGNvbnN0CitTdHJpbmcgRWxlbWVudDo6b3V0ZXJUZXh0KCkK
IHsKICAgICAvLyBHZXR0aW5nIG91dGVyVGV4dCBpcyB0aGUgc2FtZSBhcyBnZXR0aW5nIGlubmVy
VGV4dCwgb25seQogICAgIC8vIHNldHRpbmcgaXMgZGlmZmVyZW50LiBZb3Ugd291bGQgdGhpbmsg
dGhpcyBzaG91bGQgZ2V0IHRoZSBwbGFpbgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lv
biA5MTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2MCwxNyArMTYwLDE3IEBAIHB1YmxpYzoKICAgICBpbnQgY2xpZW50VG9wKCk7CiAgICAg
aW50IGNsaWVudFdpZHRoKCk7CiAgICAgaW50IGNsaWVudEhlaWdodCgpOwotICAgIHZpcnR1YWwg
aW50IHNjcm9sbExlZnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxUb3AoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxMZWZ0KCk7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xs
VG9wKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbExlZnQoaW50KTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0U2Nyb2xsVG9wKGludCk7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsV2lkdGgoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGludCBzY3JvbGxXaWR0aCgpOworICAgIHZpcnR1YWwgaW50IHNjcm9sbEhlaWdodCgpOwogCi0g
ICAgSW50UmVjdCBib3VuZHNJbldpbmRvd1NwYWNlKCkgY29uc3Q7CisgICAgSW50UmVjdCBib3Vu
ZHNJbldpbmRvd1NwYWNlKCk7CiAKLSAgICBQYXNzUmVmUHRyPENsaWVudFJlY3RMaXN0PiBnZXRD
bGllbnRSZWN0cygpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8Q2xpZW50UmVjdD4gZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4gZ2V0
Q2xpZW50UmVjdHMoKTsKKyAgICBQYXNzUmVmUHRyPENsaWVudFJlY3Q+IGdldEJvdW5kaW5nQ2xp
ZW50UmVjdCgpOwogICAgIAogICAgIC8vIFJldHVybnMgdGhlIGFic29sdXRlIGJvdW5kaW5nIGJv
eCB0cmFuc2xhdGVkIGludG8gc2NyZWVuIGNvb3JkaW5hdGVzOgogICAgIEludFJlY3Qgc2NyZWVu
UmVjdCgpIGNvbnN0OwpAQCAtMjYyLDggKzI2Miw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlRm9jdXNBcHBlYXJhbmNlKGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKTsK
ICAgICB2b2lkIGJsdXIoKTsKIAotICAgIFN0cmluZyBpbm5lclRleHQoKSBjb25zdDsKLSAgICBT
dHJpbmcgb3V0ZXJUZXh0KCkgY29uc3Q7CisgICAgU3RyaW5nIGlubmVyVGV4dCgpOworICAgIFN0
cmluZyBvdXRlclRleHQoKTsKICAKICAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0Owog
CkBAIC00MjMsNyArNDIzLDcgQEAgcHJpdmF0ZToKICAgICAvLyBjbG9uZU5vZGUgaXMgcHJpdmF0
ZSBzbyB0aGF0IG5vbi12aXJ0dWFsIGNsb25lRWxlbWVudFdpdGhDaGlsZHJlbiBhbmQgY2xvbmVF
bGVtZW50V2l0aG91dENoaWxkcmVuCiAgICAgLy8gYXJlIHVzZWQgaW5zdGVhZC4KICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Tm9kZT4gY2xvbmVOb2RlKGJvb2wgZGVlcCk7Ci0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEVsZW1lbnQ+IGNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRy
ZW4oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RWxlbWVudD4gY2xvbmVFbGVtZW50
V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigpOwogCiAgICAgUXVhbGlmaWVkTmFtZSBtX3Rh
Z05hbWU7CiAgICAgdmlydHVhbCBOb2RlUmFyZURhdGEqIGNyZWF0ZVJhcmVEYXRhKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiA5MTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYyLDcgKzc2Miw3IEBAIGNvbnN0IEF0b21pY1N0
cmluZyYgTm9kZTo6dmlydHVhbE5hbWVzcGEKICAgICByZXR1cm4gbnVsbEF0b207CiB9CiAKLWJv
b2wgTm9kZTo6aXNDb250ZW50RWRpdGFibGUoKSBjb25zdAorYm9vbCBOb2RlOjppc0NvbnRlbnRF
ZGl0YWJsZSgpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7CiAgICAgcmV0dXJuIHJlbmRlcmVySXNFZGl0YWJsZShFZGl0YWJsZSk7CkBA
IC03OTUsNyArNzk1LDcgQEAgYm9vbCBOb2RlOjpyZW5kZXJlcklzRWRpdGFibGUoRWRpdGFibGVM
ZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBOb2RlOjpzaG91bGRVc2VJbnB1dE1ldGhv
ZCgpIGNvbnN0Citib29sIE5vZGU6OnNob3VsZFVzZUlucHV0TWV0aG9kKCkKIHsKICAgICByZXR1
cm4gaXNDb250ZW50RWRpdGFibGUoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gOTEz
OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcs
MTEgKzMzNywxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUo
KSBjb25zdDsKICAgICB2aXJ0dWFsIE5vZGUqIGZvY3VzRGVsZWdhdGUoKTsKIAotICAgIGJvb2wg
aXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsKKyAgICBib29sIGlzQ29udGVudEVkaXRhYmxlKCk7
CiAKICAgICBib29sIHJlbmRlcmVySXNFZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVy
SXNFZGl0YWJsZShFZGl0YWJsZSk7IH0KICAgICBib29sIHJlbmRlcmVySXNSaWNobHlFZGl0YWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVySXNFZGl0YWJsZShSaWNobHlFZGl0YWJsZSk7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkVXNlSW5wdXRNZXRob2QoKTsKICAgICB2aXJ0dWFsIEludFJlY3QgZ2V0
UmVjdCgpIGNvbnN0OwogICAgIEludFJlY3QgcmVuZGVyUmVjdChib29sKiBpc1JlcGxhY2VkKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL09wdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vT3B0aW9uRWxlbWVudC5oCShyZXZpc2lvbiA5MTM5MikKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9PcHRpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfk9wdGlvbkVsZW1lbnQoKSB7IH0KIAog
ICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
c2VsZWN0ZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIHNlbGVjdGVkKCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3RlZFN0YXRlKGJvb2wpID0gMDsKIAogICAgIHZpcnR1
YWwgU3RyaW5nIHRleHQoKSBjb25zdCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBbmNob3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBbmNob3JFbGVtZW50LmNwcAkocmV2aXNpb24gOTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY3LDcgKzQ2Nyw3
IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnNldFNlYXJjaChjb25zdAogICAgIHNldEhyZWYo
dXJsLnN0cmluZygpKTsKIH0KIAotU3RyaW5nIEhUTUxBbmNob3JFbGVtZW50Ojp0ZXh0KCkgY29u
c3QKK1N0cmluZyBIVE1MQW5jaG9yRWxlbWVudDo6dGV4dCgpCiB7CiAgICAgcmV0dXJuIGlubmVy
VGV4dCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuaAko
cmV2aXNpb24gOTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5n
IGdldFBhcmFtZXRlcihjb25zdCBTdHJpbmcmKSBjb25zdDsKIAotICAgIFN0cmluZyB0ZXh0KCkg
Y29uc3Q7CisgICAgU3RyaW5nIHRleHQoKTsKIAogICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAkocmV2
aXNpb24gOTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgSFRNTEFwcGxldEVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmQKICAgICB3aWRnZXQtPmhhbmRsZUV2ZW50KGV2ZW50KTsKIH0K
IAotUmVuZGVyV2lkZ2V0KiBIVE1MQXBwbGV0RWxlbWVudDo6cmVuZGVyV2lkZ2V0Rm9ySlNCaW5k
aW5ncygpIGNvbnN0CitSZW5kZXJXaWRnZXQqIEhUTUxBcHBsZXRFbGVtZW50OjpyZW5kZXJXaWRn
ZXRGb3JKU0JpbmRpbmdzKCkKIHsKICAgICBpZiAoIWNhbkVtYmVkSmF2YSgpKQogICAgICAgICBy
ZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmgJKHJl
dmlzaW9uIDkxMzkyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFs
IHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwogCi0gICAgdmlydHVhbCBSZW5kZXJX
aWRnZXQqIHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFJl
bmRlcldpZGdldCogcmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygpOwogCiAgICAgdm9pZCBzZXR1
cEFwcGxldCgpIGNvbnN0OwogICAgIGJvb2wgY2FuRW1iZWRKYXZhKCkgY29uc3Q7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTM5MikKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTc5LDcgKzE3OSw3IEBAIFBhdGggSFRNTEFyZWFFbGVtZW50OjpnZXRSZWdpb24oY29uc3Qg
SW4KICAgICByZXR1cm4gcGF0aDsKIH0KIAotSFRNTEltYWdlRWxlbWVudCogSFRNTEFyZWFFbGVt
ZW50OjppbWFnZUVsZW1lbnQoKSBjb25zdAorSFRNTEltYWdlRWxlbWVudCogSFRNTEFyZWFFbGVt
ZW50OjppbWFnZUVsZW1lbnQoKQogewogICAgIE5vZGUqIG1hcEVsZW1lbnQgPSBwYXJlbnROb2Rl
KCk7CiAgICAgaWYgKCFtYXBFbGVtZW50IHx8ICFtYXBFbGVtZW50LT5oYXNUYWdOYW1lKG1hcFRh
ZykpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmgJKHJldmlzaW9uIDkx
MzkyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgUGF0aCBjb21wdXRlUGF0aChSZW5k
ZXJPYmplY3QqKSBjb25zdDsKIAogICAgIC8vIFRoZSBwYXJlbnQgbWFwJ3MgaW1hZ2UuCi0gICAg
SFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50KCkgY29uc3Q7CisgICAgSFRNTEltYWdlRWxl
bWVudCogaW1hZ2VFbGVtZW50KCk7CiAgICAgCiBwcml2YXRlOgogICAgIEhUTUxBcmVhRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEJvZHlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxCb2R5RWxlbWVudC5jcHAJKHJldmlzaW9uIDkxMzkyKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIsNyArMzAy
LDcgQEAgc3RhdGljIGludCBhZGp1c3RGb3Jab29tKGludCB2YWx1ZSwgRG9jdQogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlIC8gem9vbUZhY3Rvcik7CiB9CiAKLWludCBIVE1MQm9k
eUVsZW1lbnQ6OnNjcm9sbExlZnQoKSBjb25zdAoraW50IEhUTUxCb2R5RWxlbWVudDo6c2Nyb2xs
TGVmdCgpCiB7CiAgICAgLy8gVXBkYXRlIHRoZSBkb2N1bWVudCdzIGxheW91dC4KICAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOwpAQCAtMzI0LDcgKzMyNCw3IEBAIHZv
aWQgSFRNTEJvZHlFbGVtZW50OjpzZXRTY3JvbGxMZWZ0KGludAogICAgIHZpZXctPnNldFNjcm9s
bFBvc2l0aW9uKEludFBvaW50KHN0YXRpY19jYXN0PGludD4oc2Nyb2xsTGVmdCAqIGZyYW1lLT5w
YWdlWm9vbUZhY3RvcigpICogZnJhbWUtPnBhZ2VTY2FsZUZhY3RvcigpKSwgdmlldy0+c2Nyb2xs
WSgpKSk7CiB9CiAKLWludCBIVE1MQm9keUVsZW1lbnQ6OnNjcm9sbFRvcCgpIGNvbnN0CitpbnQg
SFRNTEJvZHlFbGVtZW50OjpzY3JvbGxUb3AoKQogewogICAgIC8vIFVwZGF0ZSB0aGUgZG9jdW1l
bnQncyBsYXlvdXQuCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKTsK
QEAgLTM0Niw3ICszNDYsNyBAQCB2b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0U2Nyb2xsVG9wKGlu
dCBzCiAgICAgdmlldy0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQodmlldy0+c2Nyb2xsWCgp
LCBzdGF0aWNfY2FzdDxpbnQ+KHNjcm9sbFRvcCAqIGZyYW1lLT5wYWdlWm9vbUZhY3RvcigpICog
ZnJhbWUtPnBhZ2VTY2FsZUZhY3RvcigpKSkpOwogfQogCi1pbnQgSFRNTEJvZHlFbGVtZW50Ojpz
Y3JvbGxIZWlnaHQoKSBjb25zdAoraW50IEhUTUxCb2R5RWxlbWVudDo6c2Nyb2xsSGVpZ2h0KCkK
IHsKICAgICAvLyBVcGRhdGUgdGhlIGRvY3VtZW50J3MgbGF5b3V0LgogICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7CkBAIC0zNTUsNyArMzU1LDcgQEAgaW50IEhUTUxC
b2R5RWxlbWVudDo6c2Nyb2xsSGVpZ2h0KCkgY29ucwogICAgIHJldHVybiB2aWV3ID8gYWRqdXN0
Rm9yWm9vbSh2aWV3LT5jb250ZW50c0hlaWdodCgpLCBkb2N1bWVudCkgOiAwOyAgICAKIH0KIAot
aW50IEhUTUxCb2R5RWxlbWVudDo6c2Nyb2xsV2lkdGgoKSBjb25zdAoraW50IEhUTUxCb2R5RWxl
bWVudDo6c2Nyb2xsV2lkdGgoKQogewogICAgIC8vIFVwZGF0ZSB0aGUgZG9jdW1lbnQncyBsYXlv
dXQuCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuaAkocmV2aXNpb24gOTEzOTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Mywx
NCArODMsMTQgQEAgcHJpdmF0ZToKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1
cygpIGNvbnN0OwogCi0gICAgdmlydHVhbCBpbnQgc2Nyb2xsTGVmdCgpIGNvbnN0OworICAgIHZp
cnR1YWwgaW50IHNjcm9sbExlZnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsTGVmdChp
bnQgc2Nyb2xsTGVmdCk7CiAgICAgCi0gICAgdmlydHVhbCBpbnQgc2Nyb2xsVG9wKCkgY29uc3Q7
CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsVG9wKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9s
bFRvcChpbnQgc2Nyb2xsVG9wKTsKICAgICAKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxIZWlnaHQo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1
YWwgaW50IHNjcm9sbEhlaWdodCgpOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFdpZHRoKCk7CiAg
ICAgCiAgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFz
aFNldDxLVVJMPiYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJl
ZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVk
RWxlbWVudC5jcHAJKHJldmlzaW9uIDkxMzkyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RW1iZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMg
aW5saW5lIFJlbmRlcldpZGdldCogZmluZFdpZGdldFJlCiAgICAgcmV0dXJuIDA7CiB9CiAKLVJl
bmRlcldpZGdldCogSFRNTEVtYmVkRWxlbWVudDo6cmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygp
IGNvbnN0CitSZW5kZXJXaWRnZXQqIEhUTUxFbWJlZEVsZW1lbnQ6OnJlbmRlcldpZGdldEZvckpT
QmluZGluZ3MoKQogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cygpOwogICAgIHJldHVybiBmaW5kV2lkZ2V0UmVuZGVyZXIodGhpcyk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaAkocmV2aXNpb24gOTEzOTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDUsNyArNDUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0
ZShBdHRyaWJ1dGUqKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGlt
YWdlU291cmNlQXR0cmlidXRlTmFtZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBSZW5kZXJXaWRn
ZXQqIHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFJlbmRl
cldpZGdldCogcmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygpOwogCiAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVdpZGdldChQbHVnaW5DcmVhdGlvbk9wdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCShyZXZpc2lvbiA5MTM5MikKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzUsNyArMjM1LDcgQEAgYm9vbCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6aXNVUkxB
dHRyaWJ1dAogICAgIHJldHVybiBhdHRyLT5uYW1lKCkgPT0gc3JjQXR0cjsKIH0KIAotaW50IEhU
TUxGcmFtZUVsZW1lbnRCYXNlOjp3aWR0aCgpIGNvbnN0CitpbnQgSFRNTEZyYW1lRWxlbWVudEJh
c2U6OndpZHRoKCkKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5n
U3R5bGVzaGVldHMoKTsKICAgICBpZiAoIXJlbmRlckJveCgpKQpAQCAtMjQzLDcgKzI0Myw3IEBA
IGludCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6d2lkdGgoKSBjb25zdAogICAgIHJldHVybiByZW5k
ZXJCb3goKS0+d2lkdGgoKTsKIH0KIAotaW50IEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpoZWlnaHQo
KSBjb25zdAoraW50IEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpoZWlnaHQoKQogewogICAgIGRvY3Vt
ZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIGlmICgh
cmVuZGVyQm94KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRC
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50
QmFzZS5oCShyZXZpc2lvbiA5MTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1l
RWxlbWVudEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOCBAQCBwdWJsaWM6CiAg
ICAgaW50IG1hcmdpbldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW5XaWR0aDsgfQogICAg
IGludCBtYXJnaW5IZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX21hcmdpbkhlaWdodDsgfQogCi0g
ICAgaW50IHdpZHRoKCkgY29uc3Q7Ci0gICAgaW50IGhlaWdodCgpIGNvbnN0OworICAgIGludCB3
aWR0aCgpOworICAgIGludCBoZWlnaHQoKTsKIAogICAgIHZvaWQgc2V0UmVtYWluc0FsaXZlT25S
ZW1vdmFsRnJvbVRyZWUoYm9vbCk7CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTM5MikK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1Nyw3ICsyNTcsNyBAQCB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnJlbW92ZWRGcm9t
VHJlZShiCiAgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZShkZWVwKTsKIH0KIAotaW50
IEhUTUxJbWFnZUVsZW1lbnQ6OndpZHRoKGJvb2wgaWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKSBj
b25zdAoraW50IEhUTUxJbWFnZUVsZW1lbnQ6OndpZHRoKGJvb2wgaWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKQogewogICAgIGlmICghcmVuZGVyZXIoKSkgewogICAgICAgICAvLyBjaGVjayB0aGUg
YXR0cmlidXRlIGZpcnN0IGZvciBhbiBleHBsaWNpdCBwaXhlbCB2YWx1ZQpAQCAtMjgwLDcgKzI4
MCw3IEBAIGludCBIVE1MSW1hZ2VFbGVtZW50Ojp3aWR0aChib29sIGlnbm9yZVAKICAgICByZXR1
cm4gYm94ID8gYWRqdXN0Rm9yQWJzb2x1dGVab29tKGJveC0+Y29udGVudFdpZHRoKCksIGJveCkg
OiAwOwogfQogCi1pbnQgSFRNTEltYWdlRWxlbWVudDo6aGVpZ2h0KGJvb2wgaWdub3JlUGVuZGlu
Z1N0eWxlc2hlZXRzKSBjb25zdAoraW50IEhUTUxJbWFnZUVsZW1lbnQ6OmhlaWdodChib29sIGln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cykKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkpIHsKICAgICAg
ICAgLy8gY2hlY2sgdGhlIGF0dHJpYnV0ZSBmaXJzdCBmb3IgYW4gZXhwbGljaXQgcGl4ZWwgdmFs
dWUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCShyZXZpc2lvbiA5
MTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw4ICs0MSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkhUTUxJbWFn
ZUVsZW1lbnQoKTsKIAotICAgIGludCB3aWR0aChib29sIGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cyA9IGZhbHNlKSBjb25zdDsKLSAgICBpbnQgaGVpZ2h0KGJvb2wgaWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzID0gZmFsc2UpIGNvbnN0OworICAgIGludCB3aWR0aChib29sIGlnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cyA9IGZhbHNlKTsKKyAgICBpbnQgaGVpZ2h0KGJvb2wgaWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzID0gZmFsc2UpOwogCiAgICAgaW50IG5hdHVyYWxXaWR0aCgpIGNvbnN0OwogICAg
IGludCBuYXR1cmFsSGVpZ2h0KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDkxMzkyKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDcgKzQ5NSw3IEBA
IHZvaWQgSFRNTElucHV0RWxlbWVudDo6YWJvdXRUb1VubG9hZCgpCiAgICAgZnJhbWUtPmVkaXRv
cigpLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nKHRoaXMpOwogfQogCi1ib29sIEhUTUxJbnB1dEVs
ZW1lbnQ6OnNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3QKK2Jvb2wgSFRNTElucHV0RWxlbWVu
dDo6c2hvdWxkVXNlSW5wdXRNZXRob2QoKQogewogICAgIHJldHVybiBtX2lucHV0VHlwZS0+c2hv
dWxkVXNlSW5wdXRNZXRob2QoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElu
cHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5oCShyZXZpc2lvbiA5MTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElu
cHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNyArMjQ5LDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIGJvb2wgaXNFbnVtZXJhdGFibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlRm9jdXNBcHBlYXJhbmNlKGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKTsK
ICAgICB2aXJ0dWFsIHZvaWQgYWJvdXRUb1VubG9hZCgpOwotICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VJbnB1
dE1ldGhvZCgpOwogCiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9s
TmFtZSgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxLZXlnZW5FbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxLZXlnZW5FbGVt
ZW50LmNwcAkocmV2aXNpb24gOTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxLZXln
ZW5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxFbGVtZW50PiBjbG9u
ZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKCkgY29uc3QKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8RWxlbWVudD4gY2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGls
ZHJlbigpCiAgICAgewogICAgICAgICByZXR1cm4gY3JlYXRlKGRvY3VtZW50KCkpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTM5
MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MCw3ICs4MCw3IEBAIGJvb2wgSFRNTE1hcEVsZW1lbnQ6Om1hcE1vdXNlRXZlbnQo
aW50IHgKICAgICByZXR1cm4gZGVmYXVsdEFyZWE7CiB9CiAKLUhUTUxJbWFnZUVsZW1lbnQqIEhU
TUxNYXBFbGVtZW50OjppbWFnZUVsZW1lbnQoKSBjb25zdAorSFRNTEltYWdlRWxlbWVudCogSFRN
TE1hcEVsZW1lbnQ6OmltYWdlRWxlbWVudCgpCiB7CiAgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiBjb2xsID0gZG9jdW1lbnQoKS0+aW1hZ2VzKCk7CiAgICAgZm9yIChOb2RlKiBjdXJyID0gY29s
bC0+Zmlyc3RJdGVtKCk7IGN1cnI7IGN1cnIgPSBjb2xsLT5uZXh0SXRlbSgpKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5oCShyZXZpc2lvbiA5MTM5MikKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyAr
NDEsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIG1hcE1vdXNlRXZlbnQoaW50IHgsIGludCB5LCBj
b25zdCBJbnRTaXplJiwgSGl0VGVzdFJlc3VsdCYpOwogICAgIAotICAgIEhUTUxJbWFnZUVsZW1l
bnQqIGltYWdlRWxlbWVudCgpIGNvbnN0OworICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxl
bWVudCgpOwogICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGFyZWFzKCk7CiAKIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAkocmV2
aXNpb24gOTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBQYXNzUmVmUHRyPEhUTUxPYmplY3RF
bGVtZW50PiBIVE1MT2JqZWN0CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MT2JqZWN0RWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCwgZm9ybSwgY3JlYXRlZEJ5UGFyc2VyKSk7CiB9CiAKLVJl
bmRlcldpZGdldCogSFRNTE9iamVjdEVsZW1lbnQ6OnJlbmRlcldpZGdldEZvckpTQmluZGluZ3Mo
KSBjb25zdAorUmVuZGVyV2lkZ2V0KiBIVE1MT2JqZWN0RWxlbWVudDo6cmVuZGVyV2lkZ2V0Rm9y
SlNCaW5kaW5ncygpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGlu
Z1N0eWxlc2hlZXRzKCk7CiAgICAgcmV0dXJuIHJlbmRlclBhcnQoKTsgLy8gVGhpcyB3aWxsIHJl
dHVybiAwIGlmIHRoZSByZW5kZXJlciBpcyBub3QgYSBSZW5kZXJQYXJ0LgpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuaAkocmV2aXNpb24gOTEzOTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTgy
LDcgKzgyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0
cmlidXRlKikgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBRdWFsaWZpZWROYW1lJiBpbWFnZVNv
dXJjZUF0dHJpYnV0ZU5hbWUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgUmVuZGVyV2lkZ2V0KiBy
ZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29uc3Q7CisgICAgdmlydHVhbCBSZW5kZXJXaWRn
ZXQqIHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRT
dWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDkx
MzkyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXRW
YWx1ZShjb25zdCBTCiAgICAgc2V0QXR0cmlidXRlKHZhbHVlQXR0ciwgdmFsdWUpOwogfQogCi1i
b29sIEhUTUxPcHRpb25FbGVtZW50OjpzZWxlY3RlZCgpIGNvbnN0Citib29sIEhUTUxPcHRpb25F
bGVtZW50OjpzZWxlY3RlZCgpCiB7CiAgICAgaWYgKEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3Qg
PSBvd25lclNlbGVjdEVsZW1lbnQoKSkKICAgICAgICAgc2VsZWN0LT5yZWNhbGNMaXN0SXRlbXNJ
Zk5lZWRlZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAko
cmV2aXNpb24gOTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
U3RyaW5nIHZhbHVlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmKTsK
IAotICAgIHZpcnR1YWwgYm9vbCBzZWxlY3RlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBz
ZWxlY3RlZCgpOwogICAgIHZvaWQgc2V0U2VsZWN0ZWQoYm9vbCk7CiAKICAgICBIVE1MU2VsZWN0
RWxlbWVudCogb3duZXJTZWxlY3RFbGVtZW50KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAkocmV2aXNpb24gOTEzOTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEs
NyArODEsNyBAQCB2b2lkIEhUTUxQbHVnSW5FbGVtZW50OjpkZXRhY2goKQogICAgIEhUTUxGcmFt
ZU93bmVyRWxlbWVudDo6ZGV0YWNoKCk7CiB9CiAKLVBhc3NTY3JpcHRJbnN0YW5jZSBIVE1MUGx1
Z0luRWxlbWVudDo6Z2V0SW5zdGFuY2UoKSBjb25zdAorUGFzc1NjcmlwdEluc3RhbmNlIEhUTUxQ
bHVnSW5FbGVtZW50OjpnZXRJbnN0YW5jZSgpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtOTgsNyArOTgsNyBAQCBQYXNzU2Ny
aXB0SW5zdGFuY2UgSFRNTFBsdWdJbkVsZW1lbnQ6OmdlCiAgICAgcmV0dXJuIG1faW5zdGFuY2U7
CiB9CiAKLVdpZGdldCogSFRNTFBsdWdJbkVsZW1lbnQ6OnBsdWdpbldpZGdldCgpIGNvbnN0CitX
aWRnZXQqIEhUTUxQbHVnSW5FbGVtZW50OjpwbHVnaW5XaWRnZXQoKQogewogICAgIGlmIChtX2lu
QmVmb3JlTG9hZEV2ZW50SGFuZGxlcikgewogICAgICAgICAvLyBUaGUgcGx1Zy1pbiBoYXNuJ3Qg
bG9hZGVkIHlldCwgYW5kIGl0IG1ha2VzIG5vIHNlbnNlIHRvIHRyeSB0byBsb2FkIGlmIGJlZm9y
ZWxvYWQgaGFuZGxlciBoYXBwZW5lZCB0byB0b3VjaCB0aGUgcGx1Zy1pbiBlbGVtZW50LgpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaAkocmV2aXNpb24gOTEzOTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDkgKzQwLDkgQEAgY2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQgOiBwdWJsaWMgSFRN
TEZyYQogcHVibGljOgogICAgIHZpcnR1YWwgfkhUTUxQbHVnSW5FbGVtZW50KCk7CiAKLSAgICBQ
YXNzU2NyaXB0SW5zdGFuY2UgZ2V0SW5zdGFuY2UoKSBjb25zdDsKKyAgICBQYXNzU2NyaXB0SW5z
dGFuY2UgZ2V0SW5zdGFuY2UoKTsKIAotICAgIFdpZGdldCogcGx1Z2luV2lkZ2V0KCkgY29uc3Q7
CisgICAgV2lkZ2V0KiBwbHVnaW5XaWRnZXQoKTsKIAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQogICAgIE5QT2JqZWN0KiBnZXROUE9iamVjdCgpOwpAQCAtNjYsNyArNjYsNyBAQCBw
cm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVy
KEV2ZW50Kik7CiAKLSAgICB2aXJ0dWFsIFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0Rm9ySlNC
aW5kaW5ncygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlbmRlcldpZGdldCogcmVuZGVyV2lk
Z2V0Rm9ySlNCaW5kaW5ncygpID0gMDsKIAogcHJvdGVjdGVkOgogICAgIEF0b21pY1N0cmluZyBt
X25hbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAko
cmV2aXNpb24gOTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgSFRNTFNjcmlwdEVs
ZW1lbnQ6OmRpc3BhdGNoTG9hZEV2ZW4KICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiB9CiAKLVBhc3NSZWZQdHI8
RWxlbWVudD4gSFRNTFNjcmlwdEVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVz
QW5kQ2hpbGRyZW4oKSBjb25zdAorUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MU2NyaXB0RWxlbWVu
dDo6Y2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigpCiB7CiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBIVE1MU2NyaXB0RWxlbWVudCh0YWdRTmFtZSgpLCBkb2N1bWVudCgp
LCBmYWxzZSwgYWxyZWFkeVN0YXJ0ZWQoKSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU2NyaXB0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFNjcmlwdEVsZW1lbnQuaAkocmV2aXNpb24gOTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTY3JpcHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAg
cHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaExvYWRFdmVudCgpOwogCi0gICAg
UGFzc1JlZlB0cjxFbGVtZW50PiBjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxk
cmVuKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNsb25lRWxlbWVu
dFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKTsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkocmV2aXNp
b24gOTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NTIsNyArNDUyLDcgQEAgYm9vbCBIVE1MVGV4dEFyZWFFbGVt
ZW50OjpsYXN0Q2hhbmdlV2FzVQogICAgIHJldHVybiB0b1JlbmRlclRleHRDb250cm9sKHJlbmRl
cmVyKCkpLT5sYXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsKIH0KIAotYm9vbCBIVE1MVGV4dEFyZWFF
bGVtZW50OjpzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0Citib29sIEhUTUxUZXh0QXJlYUVs
ZW1lbnQ6OnNob3VsZFVzZUlucHV0TWV0aG9kKCkKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCShyZXZpc2lvbiA5
MTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9p
ZCBhY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50KTsKIAotICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRVc2VJbnB1dE1ldGhvZCgpOwogCiAgICAgaW50IG1fcm93czsKICAgICBpbnQgbV9jb2xzOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50
LmgJKHJldmlzaW9uIDkxMzkyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVy
VGh1bWJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBTbGlkZXJUaHVtYkVsZW1lbnQoRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFs
IFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSop
OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxFbGVtZW50PiBjbG9uZUVsZW1lbnRXaXRob3V0QXR0
cmlidXRlc0FuZENoaWxkcmVuKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEVsZW1l
bnQ+IGNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKTsKICAgICB2aXJ0
dWFsIGJvb2wgaXNFbmFibGVkRm9ybUNvbnRyb2woKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
aXNSZWFkT25seUZvcm1Db250cm9sKCkgY29uc3Q7CiAgICAgdmlydHVhbCBOb2RlKiBmb2N1c0Rl
bGVnYXRlKCk7CkBAIC04Miw3ICs4Miw3IEBAIGlubGluZSBQYXNzUmVmUHRyPFNsaWRlclRodW1i
RWxlbWVudD4gU2wKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNsaWRlclRodW1iRWxlbWVudChk
b2N1bWVudCkpOwogfQogCi1pbmxpbmUgUGFzc1JlZlB0cjxFbGVtZW50PiBTbGlkZXJUaHVtYkVs
ZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKSBjb25zdAor
aW5saW5lIFBhc3NSZWZQdHI8RWxlbWVudD4gU2xpZGVyVGh1bWJFbGVtZW50OjpjbG9uZUVsZW1l
bnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKCkKIHsKICAgICByZXR1cm4gY3JlYXRlKGRv
Y3VtZW50KCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFk
b3dUcmVlRWxlbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcAkocmV2aXNpb24gOTEzOTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgRmxvYXRTaXplIFNWR1NoYWRvd1RyZWVDb250YWlu
ZXJFbGVtZW50OgogICAgIHJldHVybiBGbG9hdFNpemUobV94T2Zmc2V0LnZhbHVlKHRoaXMpLCBt
X3lPZmZzZXQudmFsdWUodGhpcykpOwogfQogCi1QYXNzUmVmUHRyPEVsZW1lbnQ+IFNWR1NoYWRv
d1RyZWVDb250YWluZXJFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENo
aWxkcmVuKCkgY29uc3QKK1Bhc3NSZWZQdHI8RWxlbWVudD4gU1ZHU2hhZG93VHJlZUNvbnRhaW5l
ckVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKQogewog
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQoZG9j
dW1lbnQoKSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFk
b3dUcmVlRWxlbWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5oCShyZXZpc2lvbiA5MTM5MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHJvdGVjdGVkOgogICAgIFNWR1NoYWRvd1RyZWVDb250YWlu
ZXJFbGVtZW50KERvY3VtZW50Kik7CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PEVsZW1lbnQ+IGNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RWxlbWVudD4gY2xvbmVFbGVtZW50V2l0aG91dEF0
dHJpYnV0ZXNBbmRDaGlsZHJlbigpOwogICAgIHZpcnR1YWwgYm9vbCBpc1NoYWRvd1RyZWVDb250
YWluZXJFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgU1ZHTGVuZ3RoIG1f
eE9mZnNldDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAko
cmV2aXNpb24gOTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBTVkdBbmltYXRlRWxl
bWVudDo6YWRqdXN0Rm9ySW5oZXJpdAogICAgICAgICBnZXRQcm9wZXJ0eVZhbHVlKHN2Z1BhcmVu
dCwgYXR0cmlidXRlTmFtZSwgdmFsdWUpOwogfQogCi1ib29sIFNWR0FuaW1hdGVFbGVtZW50Ojpo
YXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdAorYm9vbCBTVkdBbmltYXRlRWxlbWVudDo6aGFz
VmFsaWRBdHRyaWJ1dGVUeXBlKCkKIHsKICAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0g
dGhpcy0+dGFyZ2V0RWxlbWVudCgpOwogICAgIGlmICghdGFyZ2V0RWxlbWVudCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5oCShyZXZpc2lvbiA5MTM5MikKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
OCw3ICs2OCw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgU1ZHQW5pbWF0ZWRUeXBlQW5p
bWF0b3IqIGVuc3VyZUFuaW1hdG9yKCk7CiAgICAgCi0gICAgdmlydHVhbCBib29sIGhhc1ZhbGlk
QXR0cmlidXRlVHlwZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0
ZVR5cGUoKTsKICAgICBBbmltYXRlZFByb3BlcnR5VHlwZSBtX2FuaW1hdGVkUHJvcGVydHlUeXBl
OwogCiAgICAgQW5pbWF0ZWRQcm9wZXJ0eVZhbHVlVHlwZSBtX2Zyb21Qcm9wZXJ0eVZhbHVlVHlw
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50
LmNwcAkocmV2aXNpb24gOTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIFBhc3NSZWZQ
dHI8U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ+IFNWR0EKICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wg
U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0Citi
b29sIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKQogewog
ICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSB0aGlzLT50YXJnZXRFbGVtZW50KCk7CiAg
ICAgaWYgKCF0YXJnZXRFbGVtZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVNb3Rpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDkxMzkyKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdBbmltYXRlTW90aW9uRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxp
ZEF0dHJpYnV0ZVR5cGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1
dGVUeXBlKCk7CiAKICAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRl
Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudC5jcHAJKHJldmlzaW9uIDkxMzkyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBA
QCBQYXNzUmVmUHRyPFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50PiBTCiAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkp
OwogfQogCi1ib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0
ZVR5cGUoKSBjb25zdAorYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6aGFzVmFsaWRB
dHRyaWJ1dGVUeXBlKCkKIHsKICAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+
dGFyZ2V0RWxlbWVudCgpOwogICAgIGlmICghdGFyZ2V0RWxlbWVudCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCShyZXZpc2lvbiA5
MTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CiAgICAgCi0gICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKTsKICAgICBBbmltYXRl
ZFByb3BlcnR5VHlwZSBkZXRlcm1pbmVBbmltYXRlZFByb3BlcnR5VHlwZShTVkdFbGVtZW50Kikg
Y29uc3Q7CiAKICAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDkxMzkyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzAsNyArNDcwLDcgQEAgdm9pZCBTVkdBbmltYXRp
b25FbGVtZW50OjpjdXJyZW50VmFsdWVzRgogICAgIHRvID0gbV92YWx1ZXNbaW5kZXggKyAxXTsK
IH0KICAgICAKLXZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y3VycmVudFZhbHVlc0ZvclZhbHVl
c0FuaW1hdGlvbihmbG9hdCBwZXJjZW50LCBmbG9hdCYgZWZmZWN0aXZlUGVyY2VudCwgU3RyaW5n
JiBmcm9tLCBTdHJpbmcmIHRvKSBjb25zdAordm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpjdXJy
ZW50VmFsdWVzRm9yVmFsdWVzQW5pbWF0aW9uKGZsb2F0IHBlcmNlbnQsIGZsb2F0JiBlZmZlY3Rp
dmVQZXJjZW50LCBTdHJpbmcmIGZyb20sIFN0cmluZyYgdG8pCiB7CiAgICAgdW5zaWduZWQgdmFs
dWVzQ291bnQgPSBtX3ZhbHVlcy5zaXplKCk7CiAgICAgQVNTRVJUKG1fYW5pbWF0aW9uVmFsaWQp
OwpAQCAtNDg1LDcgKzQ4NSw3IEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y3VycmVudFZh
bHVlc0YKIAogICAgIENhbGNNb2RlIGNhbGNNb2RlID0gdGhpcy0+Y2FsY01vZGUoKTsKICAgICBp
ZiAoaGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0ZVRhZykgfHwgaGFzVGFnTmFtZShTVkdOYW1l
czo6YW5pbWF0ZUNvbG9yVGFnKSkgewotICAgICAgICBjb25zdCBTVkdBbmltYXRlRWxlbWVudCog
YW5pbWF0ZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdBbmltYXRlRWxlbWVudCo+KHRo
aXMpOworICAgICAgICBTVkdBbmltYXRlRWxlbWVudCogYW5pbWF0ZUVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTVkdBbmltYXRlRWxlbWVudCo+KHRoaXMpOwogICAgICAgICBBbmltYXRlZFByb3BlcnR5
VHlwZSBhdHRyaWJ1dGVUeXBlID0gYW5pbWF0ZUVsZW1lbnQtPmRldGVybWluZUFuaW1hdGVkUHJv
cGVydHlUeXBlKHRhcmdldEVsZW1lbnQoKSk7CiAgICAgICAgIC8vIEZhbGwgYmFjayB0byBkaXNj
cmV0ZSBhbmltYXRpb25zIGZvciBTdHJpbmdzLgogICAgICAgICBpZiAoYXR0cmlidXRlVHlwZSA9
PSBBbmltYXRlZEJvb2xlYW4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25F
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVs
ZW1lbnQuaAkocmV2aXNpb24gOTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIGZsb2F0IGNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0cmluZyYgLypmcm9t
U3RyaW5nKi8sIGNvbnN0IFN0cmluZyYgLyp0b1N0cmluZyovKSB7IHJldHVybiAtMS5mOyB9CiAg
ICAgdmlydHVhbCBQYXRoIGFuaW1hdGlvblBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRoKCk7IH0K
IAotICAgIHZvaWQgY3VycmVudFZhbHVlc0ZvclZhbHVlc0FuaW1hdGlvbihmbG9hdCBwZXJjZW50
LCBmbG9hdCYgZWZmZWN0aXZlUGVyY2VudCwgU3RyaW5nJiBmcm9tLCBTdHJpbmcmIHRvKSBjb25z
dDsKKyAgICB2b2lkIGN1cnJlbnRWYWx1ZXNGb3JWYWx1ZXNBbmltYXRpb24oZmxvYXQgcGVyY2Vu
dCwgZmxvYXQmIGVmZmVjdGl2ZVBlcmNlbnQsIFN0cmluZyYgZnJvbSwgU3RyaW5nJiB0byk7CiAg
ICAgdm9pZCBjYWxjdWxhdGVLZXlUaW1lc0ZvckNhbGNNb2RlUGFjZWQoKTsKICAgICBmbG9hdCBj
YWxjdWxhdGVQZXJjZW50RnJvbUtleVBvaW50cyhmbG9hdCBwZXJjZW50KSBjb25zdDsKICAgICB2
b2lkIGN1cnJlbnRWYWx1ZXNGcm9tS2V5UG9pbnRzKGZsb2F0IHBlcmNlbnQsIGZsb2F0JiBlZmZl
Y3RpdmVQZXJjZW50LCBTdHJpbmcmIGZyb20sIFN0cmluZyYgdG8pIGNvbnN0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNpb24gOTEzOTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNyBAQCBT
VkdFbGVtZW50KiBTVkdFbGVtZW50Ojp2aWV3cG9ydEVsZW1lbnQoCiAgICAgcmV0dXJuIDA7CiB9
CiAKLVNWR0RvY3VtZW50RXh0ZW5zaW9ucyogU1ZHRWxlbWVudDo6YWNjZXNzRG9jdW1lbnRTVkdF
eHRlbnNpb25zKCkgY29uc3QKK1NWR0RvY3VtZW50RXh0ZW5zaW9ucyogU1ZHRWxlbWVudDo6YWNj
ZXNzRG9jdW1lbnRTVkdFeHRlbnNpb25zKCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHBy
b3ZpZGVkIGZvciB1c2UgYnkgU1ZHQW5pbWF0ZWRQcm9wZXJ0eSB0byBhdm9pZAogICAgIC8vIGds
b2JhbCBpbmNsdXNpb24gb2YgRG9jdW1lbnQuaCBpbiBTVkcgY29kZS4KQEAgLTIxMSwxNCArMjEx
LDE0IEBAIGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4mIFNWR0UKICAgICByZXR1
cm4gcmFyZVNWR0RhdGEoKS0+ZWxlbWVudEluc3RhbmNlcygpOwogfQogCi1ib29sIFNWR0VsZW1l
bnQ6OmJvdW5kaW5nQm94KEZsb2F0UmVjdCYgcmVjdCwgU1ZHTG9jYXRhYmxlOjpTdHlsZVVwZGF0
ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0Citib29sIFNWR0VsZW1lbnQ6OmJv
dW5kaW5nQm94KEZsb2F0UmVjdCYgcmVjdCwgU1ZHTG9jYXRhYmxlOjpTdHlsZVVwZGF0ZVN0cmF0
ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpCiB7CiAgICAgaWYgKGlzU3R5bGVkTG9jYXRhYmxlKCkp
IHsKLSAgICAgICAgcmVjdCA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR1N0eWxlZExvY2F0YWJsZUVs
ZW1lbnQqPih0aGlzKS0+Z2V0QkJveChzdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKKyAgICAgICAgcmVj
dCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQqPih0aGlzKS0+Z2V0QkJv
eChzdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IGlmIChoYXNUYWdOYW1lKFNWR05hbWVzOjp0ZXh0VGFnKSkgewotICAgICAgICByZWN0ID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgU1ZHVGV4dEVsZW1lbnQqPih0aGlzKS0+Z2V0QkJveChzdHlsZVVwZGF0
ZVN0cmF0ZWd5KTsKKyAgICAgICAgcmVjdCA9IHN0YXRpY19jYXN0PFNWR1RleHRFbGVtZW50Kj4o
dGhpcyktPmdldEJCb3goc3R5bGVVcGRhdGVTdHJhdGVneSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgJ
KHJldmlzaW9uIDkxMzkyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgU1ZHU1ZHRWxlbWVudCog
b3duZXJTVkdFbGVtZW50KCkgY29uc3Q7CiAgICAgU1ZHRWxlbWVudCogdmlld3BvcnRFbGVtZW50
KCkgY29uc3Q7CiAKLSAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIGFjY2Vzc0RvY3VtZW50U1ZH
RXh0ZW5zaW9ucygpIGNvbnN0OworICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogYWNjZXNzRG9j
dW1lbnRTVkdFeHRlbnNpb25zKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZWQoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZFRyYW5zZm9ybWFi
bGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAK
ICAgICBjb25zdCBIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+JiBpbnN0YW5jZXNGb3JFbGVt
ZW50KCkgY29uc3Q7CiAKLSAgICBib29sIGJvdW5kaW5nQm94KEZsb2F0UmVjdCYsIFNWR0xvY2F0
YWJsZTo6U3R5bGVVcGRhdGVTdHJhdGVneSA9IFNWR0xvY2F0YWJsZTo6QWxsb3dTdHlsZVVwZGF0
ZSkgY29uc3Q7CisgICAgYm9vbCBib3VuZGluZ0JveChGbG9hdFJlY3QmLCBTVkdMb2NhdGFibGU6
OlN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBTVkdMb2NhdGFibGU6OkFsbG93U3R5bGVVcGRhdGUpOwog
CiAgICAgdm9pZCBzZXRDdXJzb3JFbGVtZW50KFNWR0N1cnNvckVsZW1lbnQqKTsKICAgICB2b2lk
IGN1cnNvckVsZW1lbnRSZW1vdmVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTG9j
YXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxl
LmNwcAkocmV2aXNpb24gOTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBTVkdFbGVtZW50KiBTVkdMb2Nh
dGFibGU6OmZhcnRoZXN0Vmlld3BvCiAgICAgcmV0dXJuIGZhcnRoZXN0OwogfQogCi1GbG9hdFJl
Y3QgU1ZHTG9jYXRhYmxlOjpnZXRCQm94KGNvbnN0IFNWR0VsZW1lbnQqIGVsZW1lbnQsIFN0eWxl
VXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkKK0Zsb2F0UmVjdCBTVkdMb2NhdGFi
bGU6OmdldEJCb3goU1ZHRWxlbWVudCogZWxlbWVudCwgU3R5bGVVcGRhdGVTdHJhdGVneSBzdHls
ZVVwZGF0ZVN0cmF0ZWd5KQogewogICAgIEFTU0VSVChlbGVtZW50KTsKICAgICBpZiAoc3R5bGVV
cGRhdGVTdHJhdGVneSA9PSBBbGxvd1N0eWxlVXBkYXRlKQpAQCAtNzcsNyArNzcsNyBAQCBGbG9h
dFJlY3QgU1ZHTG9jYXRhYmxlOjpnZXRCQm94KGNvbnN0IFNWCiAgICAgcmV0dXJuIGVsZW1lbnQt
PnJlbmRlcmVyKCktPm9iamVjdEJvdW5kaW5nQm94KCk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBT
VkdMb2NhdGFibGU6OmNvbXB1dGVDVE0oY29uc3QgU1ZHRWxlbWVudCogZWxlbWVudCwgQ1RNU2Nv
cGUgbW9kZSwgU3R5bGVVcGRhdGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KQorQWZmaW5l
VHJhbnNmb3JtIFNWR0xvY2F0YWJsZTo6Y29tcHV0ZUNUTShTVkdFbGVtZW50KiBlbGVtZW50LCBD
VE1TY29wZSBtb2RlLCBTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpCiB7
CiAgICAgQVNTRVJUKGVsZW1lbnQpOwogICAgIGlmIChzdHlsZVVwZGF0ZVN0cmF0ZWd5ID09IEFs
bG93U3R5bGVVcGRhdGUpCkBAIC0xMDQsNyArMTA0LDcgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR0xv
Y2F0YWJsZTo6Y29tcHV0ZUNUTQogICAgIHJldHVybiBjdG07CiB9CiAKLUFmZmluZVRyYW5zZm9y
bSBTVkdMb2NhdGFibGU6OmdldFRyYW5zZm9ybVRvRWxlbWVudChTVkdFbGVtZW50KiB0YXJnZXQs
IEV4Y2VwdGlvbkNvZGUmIGVjLCBTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRl
Z3kpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gU1ZHTG9jYXRhYmxlOjpnZXRUcmFuc2Zvcm1Ub0Vs
ZW1lbnQoU1ZHRWxlbWVudCogdGFyZ2V0LCBFeGNlcHRpb25Db2RlJiBlYywgU3R5bGVVcGRhdGVT
dHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KQogewogICAgIEFmZmluZVRyYW5zZm9ybSBjdG0g
PSBnZXRDVE0oc3R5bGVVcGRhdGVTdHJhdGVneSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdMb2NhdGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTG9j
YXRhYmxlLmgJKHJldmlzaW9uIDkxMzkyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xvY2F0
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMCArNDEsMTAgQEAgcHVibGljOgogCiAgICAg
ZW51bSBTdHlsZVVwZGF0ZVN0cmF0ZWd5IHsgQWxsb3dTdHlsZVVwZGF0ZSwgRGlzYWxsb3dTdHls
ZVVwZGF0ZSB9OwogICAgIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGdldEJCb3goU3R5bGVVcGRh
dGVTdHJhdGVneSkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENU
TShTdHlsZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFu
c2Zvcm0gZ2V0U2NyZWVuQ1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0ID0gMDsKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gZ2V0VHJhbnNmb3JtVG9FbGVtZW50KFNWR0VsZW1lbnQqLCBFeGNlcHRp
b25Db2RlJiwgU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0Owor
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IGdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSkgPSAwOwor
ICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5KSA9
IDA7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0U2NyZWVuQ1RNKFN0eWxlVXBkYXRl
U3RyYXRlZ3kpID0gMDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0VHJhbnNmb3JtVG9FbGVtZW50
KFNWR0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJiwgU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93
U3R5bGVVcGRhdGUpOwogCiAgICAgc3RhdGljIFNWR0VsZW1lbnQqIG5lYXJlc3RWaWV3cG9ydEVs
ZW1lbnQoY29uc3QgU1ZHRWxlbWVudCopOwogICAgIHN0YXRpYyBTVkdFbGVtZW50KiBmYXJ0aGVz
dFZpZXdwb3J0RWxlbWVudChjb25zdCBTVkdFbGVtZW50Kik7CkBAIC01Nyw4ICs1Nyw4IEBAIHB1
YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbENvb3Jk
aW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNjb3BlKSBjb25zdCB7IHJldHVy
biBBZmZpbmVUcmFuc2Zvcm0oKTsgfQogCi0gICAgc3RhdGljIEZsb2F0UmVjdCBnZXRCQm94KGNv
bnN0IFNWR0VsZW1lbnQqLCBTdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKLSAgICBzdGF0aWMgQWZmaW5l
VHJhbnNmb3JtIGNvbXB1dGVDVE0oY29uc3QgU1ZHRWxlbWVudCosIENUTVNjb3BlLCBTdHlsZVVw
ZGF0ZVN0cmF0ZWd5KTsKKyAgICBzdGF0aWMgRmxvYXRSZWN0IGdldEJCb3goU1ZHRWxlbWVudCos
IFN0eWxlVXBkYXRlU3RyYXRlZ3kpOworICAgIHN0YXRpYyBBZmZpbmVUcmFuc2Zvcm0gY29tcHV0
ZUNUTShTVkdFbGVtZW50KiwgQ1RNU2NvcGUsIFN0eWxlVXBkYXRlU3RyYXRlZ3kpOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Njcmlw
dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRF
bGVtZW50LmNwcAkocmV2aXNpb24gOTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2Ny
aXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Myw3ICsyNjMsNyBAQCB2b2lkIFNW
R1NjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoTG9hZEV2ZW50CiAgICAgfQogfQogCi1QYXNzUmVmUHRy
PEVsZW1lbnQ+IFNWR1NjcmlwdEVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVz
QW5kQ2hpbGRyZW4oKSBjb25zdAorUGFzc1JlZlB0cjxFbGVtZW50PiBTVkdTY3JpcHRFbGVtZW50
OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKCkKIHsKICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNWR1NjcmlwdEVsZW1lbnQodGFnUU5hbWUoKSwgZG9jdW1lbnQoKSwg
ZmFsc2UsIGFscmVhZHlTdGFydGVkKCkpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Nj
cmlwdEVsZW1lbnQuaAkocmV2aXNpb24gOTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
U2NyaXB0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHByaXZhdGU6
CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hMb2FkRXZlbnQoKTsKIAotICAgIFBhc3NSZWZQ
dHI8RWxlbWVudD4gY2xvbmVFbGVtZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigpIGNv
bnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxFbGVtZW50PiBjbG9uZUVsZW1lbnRXaXRob3V0
QXR0cmlidXRlc0FuZENoaWxkcmVuKCk7CiAKICAgICBCRUdJTl9ERUNMQVJFX0FOSU1BVEVEX1BS
T1BFUlRJRVMoU1ZHU2NyaXB0RWxlbWVudCkKICAgICAgICAgREVDTEFSRV9BTklNQVRFRF9TVFJJ
TkcoSHJlZiwgaHJlZikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5j
cHAJKHJldmlzaW9uIDkxMzkyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzEsNyArMzcxLDcgQEAgdm9pZCBTVkdTdHlsZWRF
bGVtZW50OjppbnNlcnRlZEludG9Eb2N1bQogICAgIGJ1aWxkUGVuZGluZ1Jlc291cmNlc0lmTmVl
ZGVkKCk7CiB9CiAKLXZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2Vz
SWZOZWVkZWQoKSBjb25zdAordm9pZCBTVkdTdHlsZWRFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNv
dXJjZXNJZk5lZWRlZCgpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1l
bnQoKTsKICAgICBpZiAoIW5lZWRzUGVuZGluZ1Jlc291cmNlSGFuZGxpbmcoKSB8fCAhZG9jdW1l
bnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmgJKHJldmlzaW9uIDkx
MzkyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0tleWJv
YXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNN
b3VzZUZvY3VzYWJsZSgpIGNvbnN0OwogCi0gICAgdm9pZCBidWlsZFBlbmRpbmdSZXNvdXJjZXNJ
Zk5lZWRlZCgpIGNvbnN0OworICAgIHZvaWQgYnVpbGRQZW5kaW5nUmVzb3VyY2VzSWZOZWVkZWQo
KTsKIAogICAgIEhhc2hTZXQ8U1ZHU3R5bGVkRWxlbWVudCo+IG1fZWxlbWVudHNXaXRoUmVsYXRp
dmVMZW5ndGhzOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkTG9jYXRhYmxl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZExv
Y2F0YWJsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTcg
KzQ0LDE3IEBAIFNWR0VsZW1lbnQqIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmYKICAgICBy
ZXR1cm4gU1ZHTG9jYXRhYmxlOjpmYXJ0aGVzdFZpZXdwb3J0RWxlbWVudCh0aGlzKTsKIH0KIAot
RmxvYXRSZWN0IFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmdldEJCb3goU3R5bGVVcGRhdGVT
dHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdAorRmxvYXRSZWN0IFNWR1N0eWxlZExv
Y2F0YWJsZUVsZW1lbnQ6OmdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0
cmF0ZWd5KQogewogICAgIHJldHVybiBTVkdMb2NhdGFibGU6OmdldEJCb3godGhpcywgc3R5bGVV
cGRhdGVTdHJhdGVneSk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBTVkdTdHlsZWRMb2NhdGFibGVF
bGVtZW50OjpnZXRDVE0oU3R5bGVVcGRhdGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KSBj
b25zdAorQWZmaW5lVHJhbnNmb3JtIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmdldENUTShT
dHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpCiB7CiAgICAgcmV0dXJuIFNW
R0xvY2F0YWJsZTo6Y29tcHV0ZUNUTSh0aGlzLCBTVkdMb2NhdGFibGU6Ok5lYXJlc3RWaWV3cG9y
dFNjb3BlLCBzdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIFNWR1N0
eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmdldFNjcmVlbkNUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0
eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gU1ZHU3R5bGVkTG9jYXRh
YmxlRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVT
dHJhdGVneSkKIHsKICAgICByZXR1cm4gU1ZHTG9jYXRhYmxlOjpjb21wdXRlQ1RNKHRoaXMsIFNW
R0xvY2F0YWJsZTo6U2NyZWVuU2NvcGUsIHN0eWxlVXBkYXRlU3RyYXRlZ3kpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5oCShyZXZp
c2lvbiA5MTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDkgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgU1ZHRWxlbWVudCogbmVhcmVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgU1ZHRWxlbWVudCogZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdDsKIAotICAgIHZp
cnR1YWwgRmxvYXRSZWN0IGdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVV
cGRhdGUpIGNvbnN0OwotICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENUTShTdHlsZVVw
ZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBBZmZp
bmVUcmFuc2Zvcm0gZ2V0U2NyZWVuQ1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxl
VXBkYXRlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBnZXRCQm94KFN0eWxlVXBkYXRl
U3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKTsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9y
bSBnZXRDVE0oU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpOworICAgIHZp
cnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldFNjcmVlbkNUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0g
QWxsb3dTdHlsZVVwZGF0ZSk7CiAKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbENv
b3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNjb3BlIG1vZGUpIGNvbnN0
IHsgcmV0dXJuIFNWR0xvY2F0YWJsZTo6bG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0obW9k
ZSk7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTM5MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDEyICs1MCwxMiBAQCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6flNWR1N0eWxl
CiB7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6
Z2V0Q1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkgY29uc3QKK0Fm
ZmluZVRyYW5zZm9ybSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6Z2V0Q1RNKFN0eWxl
VXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkKIHsKICAgICByZXR1cm4gU1ZHTG9j
YXRhYmxlOjpjb21wdXRlQ1RNKHRoaXMsIFNWR0xvY2F0YWJsZTo6TmVhcmVzdFZpZXdwb3J0U2Nv
cGUsIHN0eWxlVXBkYXRlU3RyYXRlZ3kpOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmdldFNjcmVlbkNUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0
eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQ6OmdldFNjcmVlbkNUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBk
YXRlU3RyYXRlZ3kpCiB7CiAgICAgcmV0dXJuIFNWR0xvY2F0YWJsZTo6Y29tcHV0ZUNUTSh0aGlz
LCBTVkdMb2NhdGFibGU6OlNjcmVlblNjb3BlLCBzdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKIH0KQEAg
LTEzNSw3ICsxMzUsNyBAQCBTVkdFbGVtZW50KiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
CiAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybWFibGU6OmZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KHRo
aXMpOwogfQogCi1GbG9hdFJlY3QgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmdldEJC
b3goU3R5bGVVcGRhdGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdAorRmxvYXRS
ZWN0IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpnZXRCQm94KFN0eWxlVXBkYXRlU3Ry
YXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkKIHsKICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtYWJs
ZTo6Z2V0QkJveCh0aGlzLCBzdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKIH0KQEAgLTE0Niw3ICsxNDYs
NyBAQCBSZW5kZXJPYmplY3QqIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtCiAgICAgcmV0dXJu
IG5ldyAoYXJlbmEpIFJlbmRlclNWR1BhdGgodGhpcyk7CiB9CiAKLXZvaWQgU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQ6OnRvQ2xpcFBhdGgoUGF0aCYgcGF0aCkgY29uc3QKK3ZvaWQgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnRvQ2xpcFBhdGgoUGF0aCYgcGF0aCkKIHsKICAg
ICB0b1BhdGhEYXRhKHBhdGgpOwogICAgIC8vIEZJWE1FOiBIb3cgZG8gd2Uga25vdyB0aGUgZWxl
bWVudCBoYXMgZG9uZSBhIGxheW91dD8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCShyZXZpc2lvbiA5MTM5MikKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw4ICszNiw4IEBAIGNsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50IDogcHUKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudCgpOwogCi0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFN0eWxlVXBkYXRl
U3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKLSAgICB2aXJ0dWFsIEFmZmluZVRy
YW5zZm9ybSBnZXRTY3JlZW5DVE0oU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRh
dGUpIGNvbnN0OworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENUTShTdHlsZVVwZGF0
ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSk7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zv
cm0gZ2V0U2NyZWVuQ1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKTsK
ICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIG5lYXJlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIGZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3Q7
CiAKQEAgLTQ1LDExICs0NSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zv
cm0gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0OwogICAgIHZpcnR1YWwgQWZmaW5lVHJh
bnNmb3JtKiBzdXBwbGVtZW50YWxUcmFuc2Zvcm0oKTsKIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0
IGdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0Owor
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IGdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93
U3R5bGVVcGRhdGUpOwogCiAgICAgLy8gImJhc2UgY2xhc3MiIG1ldGhvZHMgZm9yIGFsbCB0aGUg
ZWxlbWVudHMgd2hpY2ggcmVuZGVyIGFzIHBhdGhzCiAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERh
dGEoUGF0aCYpIGNvbnN0IHsgfQotICAgIHZpcnR1YWwgdm9pZCB0b0NsaXBQYXRoKFBhdGgmKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdG9DbGlwUGF0aChQYXRoJik7CiAgICAgdmlydHVhbCBS
ZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsK
IAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50
RWxlbWVudC5jcHAJKHJldmlzaW9uIDkxMzkyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rl
eHRDb250ZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxOSArMTA1LDE5IEBA
IFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IFNWR1RleHRDb24KIAogfQogCi11bnNpZ25l
ZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldE51bWJlck9mQ2hhcnMoKSBjb25zdAordW5zaWdu
ZWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXROdW1iZXJPZkNoYXJzKCkKIHsKICAgICBkb2N1
bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICByZXR1
cm4gU1ZHVGV4dFF1ZXJ5KHJlbmRlcmVyKCkpLm51bWJlck9mQ2hhcmFjdGVycygpOwogfQogCi1m
bG9hdCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldENvbXB1dGVkVGV4dExlbmd0aCgpIGNvbnN0
CitmbG9hdCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldENvbXB1dGVkVGV4dExlbmd0aCgpCiB7
CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7
CiAgICAgcmV0dXJuIFNWR1RleHRRdWVyeShyZW5kZXJlcigpKS50ZXh0TGVuZ3RoKCk7CiB9CiAK
LWZsb2F0IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0U3ViU3RyaW5nTGVuZ3RoKHVuc2lnbmVk
IGNoYXJudW0sIHVuc2lnbmVkIG5jaGFycywgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitmbG9h
dCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldFN1YlN0cmluZ0xlbmd0aCh1bnNpZ25lZCBjaGFy
bnVtLCB1bnNpZ25lZCBuY2hhcnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGRvY3VtZW50
KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCkBAIC0xMzAsNyAr
MTMwLDcgQEAgZmxvYXQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRTdWJTdHJpbgogICAgIHJl
dHVybiBTVkdUZXh0UXVlcnkocmVuZGVyZXIoKSkuc3ViU3RyaW5nTGVuZ3RoKGNoYXJudW0sIG5j
aGFycyk7CiB9CiAKLUZsb2F0UG9pbnQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRTdGFydFBv
c2l0aW9uT2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAor
RmxvYXRQb2ludCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldFN0YXJ0UG9zaXRpb25PZkNoYXIo
dW5zaWduZWQgY2hhcm51bSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZG9jdW1lbnQoKS0+
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKQEAgLTE0Miw3ICsxNDIs
NyBAQCBGbG9hdFBvaW50IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0U3RhCiAgICAgcmV0dXJu
IFNWR1RleHRRdWVyeShyZW5kZXJlcigpKS5zdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXIoY2hhcm51
bSk7CiB9CiAKLUZsb2F0UG9pbnQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRFbmRQb3NpdGlv
bk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK0Zsb2F0
UG9pbnQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRFbmRQb3NpdGlvbk9mQ2hhcih1bnNpZ25l
ZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVM
YXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIApAQCAtMTU0LDcgKzE1NCw3IEBAIEZs
b2F0UG9pbnQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRFbmQKICAgICByZXR1cm4gU1ZHVGV4
dFF1ZXJ5KHJlbmRlcmVyKCkpLmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXIoY2hhcm51bSk7CiB9CiAK
LUZsb2F0UmVjdCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldEV4dGVudE9mQ2hhcih1bnNpZ25l
ZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK0Zsb2F0UmVjdCBTVkdUZXh0Q29u
dGVudEVsZW1lbnQ6OmdldEV4dGVudE9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5
bGVzaGVldHMoKTsKIApAQCAtMTY2LDcgKzE2Niw3IEBAIEZsb2F0UmVjdCBTVkdUZXh0Q29udGVu
dEVsZW1lbnQ6OmdldEV4dGUKICAgICByZXR1cm4gU1ZHVGV4dFF1ZXJ5KHJlbmRlcmVyKCkpLmV4
dGVudE9mQ2hhcmFjdGVyKGNoYXJudW0pOwogfQogCi1mbG9hdCBTVkdUZXh0Q29udGVudEVsZW1l
bnQ6OmdldFJvdGF0aW9uT2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmIGVj
KSBjb25zdAorZmxvYXQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRSb3RhdGlvbk9mQ2hhcih1
bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBkb2N1bWVudCgpLT51
cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIApAQCAtMTc4LDEzICsxNzgs
MTMgQEAgZmxvYXQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRSb3RhdGlvbgogICAgIHJldHVy
biBTVkdUZXh0UXVlcnkocmVuZGVyZXIoKSkucm90YXRpb25PZkNoYXJhY3RlcihjaGFybnVtKTsK
IH0KIAotaW50IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0Q2hhck51bUF0UG9zaXRpb24oY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CitpbnQgU1ZHVGV4dENvbnRlbnRFbGVtZW50Ojpn
ZXRDaGFyTnVtQXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKICAgICBkb2N1
bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICByZXR1
cm4gU1ZHVGV4dFF1ZXJ5KHJlbmRlcmVyKCkpLmNoYXJhY3Rlck51bWJlckF0UG9zaXRpb24ocG9p
bnQpOwogfQogCi12b2lkIFNWR1RleHRDb250ZW50RWxlbWVudDo6c2VsZWN0U3ViU3RyaW5nKHVu
c2lnbmVkIGNoYXJudW0sIHVuc2lnbmVkIG5jaGFycywgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0
Cit2b2lkIFNWR1RleHRDb250ZW50RWxlbWVudDo6c2VsZWN0U3ViU3RyaW5nKHVuc2lnbmVkIGNo
YXJudW0sIHVuc2lnbmVkIG5jaGFycywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZDaGFycyA9IGdldE51bWJlck9mQ2hhcnMoKTsKICAgICBpZiAoY2hhcm51bSA+
PSBudW1iZXJPZkNoYXJzKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRl
bnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250
ZW50RWxlbWVudC5oCShyZXZpc2lvbiA5MTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdU
ZXh0Q29udGVudEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzksMTUgKzc5LDE1IEBAIHB1
YmxpYzoKICAgICAgICAgTEVOR1RIQURKVVNUX1NQQUNJTkdBTkRHTFlQSFMgPSBTVkdMZW5ndGhB
ZGp1c3RTcGFjaW5nQW5kR2x5cGhzCiAgICAgfTsKIAotICAgIHVuc2lnbmVkIGdldE51bWJlck9m
Q2hhcnMoKSBjb25zdDsKLSAgICBmbG9hdCBnZXRDb21wdXRlZFRleHRMZW5ndGgoKSBjb25zdDsK
LSAgICBmbG9hdCBnZXRTdWJTdHJpbmdMZW5ndGgodW5zaWduZWQgY2hhcm51bSwgdW5zaWduZWQg
bmNoYXJzLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgRmxvYXRQb2ludCBnZXRTdGFydFBv
c2l0aW9uT2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAg
ICBGbG9hdFBvaW50IGdldEVuZFBvc2l0aW9uT2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4Y2Vw
dGlvbkNvZGUmKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgZ2V0RXh0ZW50T2ZDaGFyKHVuc2lnbmVk
IGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICBmbG9hdCBnZXRSb3RhdGlvbk9m
Q2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgaW50IGdl
dENoYXJOdW1BdFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIHNl
bGVjdFN1YlN0cmluZyh1bnNpZ25lZCBjaGFybnVtLCB1bnNpZ25lZCBuY2hhcnMsIEV4Y2VwdGlv
bkNvZGUmKSBjb25zdDsKKyAgICB1bnNpZ25lZCBnZXROdW1iZXJPZkNoYXJzKCk7CisgICAgZmxv
YXQgZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk7CisgICAgZmxvYXQgZ2V0U3ViU3RyaW5nTGVuZ3Ro
KHVuc2lnbmVkIGNoYXJudW0sIHVuc2lnbmVkIG5jaGFycywgRXhjZXB0aW9uQ29kZSYpOworICAg
IEZsb2F0UG9pbnQgZ2V0U3RhcnRQb3NpdGlvbk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNl
cHRpb25Db2RlJik7CisgICAgRmxvYXRQb2ludCBnZXRFbmRQb3NpdGlvbk9mQ2hhcih1bnNpZ25l
ZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJik7CisgICAgRmxvYXRSZWN0IGdldEV4dGVudE9mQ2hh
cih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJik7CisgICAgZmxvYXQgZ2V0Um90YXRp
b25PZkNoYXIodW5zaWduZWQgY2hhcm51bSwgRXhjZXB0aW9uQ29kZSYpOworICAgIGludCBnZXRD
aGFyTnVtQXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdm9pZCBzZWxlY3RTdWJT
dHJpbmcodW5zaWduZWQgY2hhcm51bSwgdW5zaWduZWQgbmNoYXJzLCBFeGNlcHRpb25Db2RlJik7
CiAKICAgICBzdGF0aWMgU1ZHVGV4dENvbnRlbnRFbGVtZW50KiBlbGVtZW50RnJvbVJlbmRlcmVy
KFJlbmRlck9iamVjdCopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5j
cHAJKHJldmlzaW9uIDkxMzkyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTcgKzkzLDE3IEBAIFNWR0VsZW1lbnQqIFNWR1Rl
eHRFbGVtZW50OjpmYXJ0aGVzdFZpZXcKICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6ZmFy
dGhlc3RWaWV3cG9ydEVsZW1lbnQodGhpcyk7CiB9CiAKLUZsb2F0UmVjdCBTVkdUZXh0RWxlbWVu
dDo6Z2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0
CitGbG9hdFJlY3QgU1ZHVGV4dEVsZW1lbnQ6OmdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSBz
dHlsZVVwZGF0ZVN0cmF0ZWd5KQogewogICAgIHJldHVybiBTVkdUcmFuc2Zvcm1hYmxlOjpnZXRC
Qm94KHRoaXMsIHN0eWxlVXBkYXRlU3RyYXRlZ3kpOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gU1ZH
VGV4dEVsZW1lbnQ6OmdldENUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRl
Z3kpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gU1ZHVGV4dEVsZW1lbnQ6OmdldENUTShTdHlsZVVw
ZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpCiB7CiAgICAgcmV0dXJuIFNWR0xvY2F0
YWJsZTo6Y29tcHV0ZUNUTSh0aGlzLCBTVkdMb2NhdGFibGU6Ok5lYXJlc3RWaWV3cG9ydFNjb3Bl
LCBzdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIFNWR1RleHRFbGVt
ZW50OjpnZXRTY3JlZW5DVE0oU3R5bGVVcGRhdGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5
KSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFNWR1RleHRFbGVtZW50OjpnZXRTY3JlZW5DVE0oU3R5
bGVVcGRhdGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KQogewogICAgIHJldHVybiBTVkdM
b2NhdGFibGU6OmNvbXB1dGVDVE0odGhpcywgU1ZHTG9jYXRhYmxlOjpTY3JlZW5TY29wZSwgc3R5
bGVVcGRhdGVTdHJhdGVneSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQu
aAkocmV2aXNpb24gOTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzYsOSArMzYsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBT
VkdFbGVtZW50KiBuZWFyZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBT
VkdFbGVtZW50KiBmYXJ0aGVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0OwogCi0gICAgdmlydHVh
bCBGbG9hdFJlY3QgZ2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0
ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFN0eWxlVXBkYXRl
U3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKLSAgICB2aXJ0dWFsIEFmZmluZVRy
YW5zZm9ybSBnZXRTY3JlZW5DVE0oU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRh
dGUpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IGdldEJCb3goU3R5bGVVcGRhdGVTdHJh
dGVneSA9IEFsbG93U3R5bGVVcGRhdGUpOworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdl
dENUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSk7CisgICAgdmlydHVh
bCBBZmZpbmVUcmFuc2Zvcm0gZ2V0U2NyZWVuQ1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxv
d1N0eWxlVXBkYXRlKTsKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBhbmltYXRlZExvY2Fs
VHJhbnNmb3JtKCkgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Vz
ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdV
c2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCBQYXNzUmVmUHRy
PFNWR1VzZUVsZW1lbnQ+IFNWR1VzZUVsZW1lbnQ6CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
VkdVc2VFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLVNWR0VsZW1lbnRJbnN0YW5j
ZSogU1ZHVXNlRWxlbWVudDo6aW5zdGFuY2VSb290KCkgY29uc3QKK1NWR0VsZW1lbnRJbnN0YW5j
ZSogU1ZHVXNlRWxlbWVudDo6aW5zdGFuY2VSb290KCkKIHsKICAgICAvLyBJZiB0aGVyZSBpcyBu
byBlbGVtZW50IGluc3RhbmNlIHRyZWUsIGZvcmNlIGltbWVkaWF0ZSBTVkdFbGVtZW50SW5zdGFu
Y2UgdHJlZQogICAgIC8vIGNyZWF0aW9uIGJ5IGFza2luZyB0aGUgZG9jdW1lbnQgdG8gaW52b2tl
IG91ciByZWNhbGNTdHlsZSBmdW5jdGlvbiAtIGFzIHdlIGNhbid0CkBAIC02NzUsNyArNjc1LDcg
QEAgdm9pZCBTVkdVc2VFbGVtZW50OjpkZXRhY2goKQogICAgIGRldGFjaEluc3RhbmNlKCk7CiB9
CiAKLXN0YXRpYyBib29sIGlzRGlyZWN0UmVmZXJlbmNlKE5vZGUqIG5vZGUpCitzdGF0aWMgYm9v
bCBpc0RpcmVjdFJlZmVyZW5jZShjb25zdCBOb2RlKiBub2RlKQogewogICAgIHJldHVybiBub2Rl
LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpwYXRoVGFnKQogICAgICAgICAgICB8fCBub2RlLT5oYXNU
YWdOYW1lKFNWR05hbWVzOjpyZWN0VGFnKQpAQCAtNjg2LDcgKzY4Niw3IEBAIHN0YXRpYyBib29s
IGlzRGlyZWN0UmVmZXJlbmNlKE5vZGUqIG5vZGUKICAgICAgICAgICAgfHwgbm9kZS0+aGFzVGFn
TmFtZShTVkdOYW1lczo6dGV4dFRhZyk7CiB9CiAKLXZvaWQgU1ZHVXNlRWxlbWVudDo6dG9DbGlw
UGF0aChQYXRoJiBwYXRoKSBjb25zdAordm9pZCBTVkdVc2VFbGVtZW50Ojp0b0NsaXBQYXRoKFBh
dGgmIHBhdGgpCiB7CiAgICAgQVNTRVJUKHBhdGguaXNFbXB0eSgpKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVXNlRWxlbWVudC5oCShyZXZpc2lvbiA5MTM5MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdVc2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgY2xh
c3MgU1ZHVXNlRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRUcgogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNWR1VzZUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqKTsKIAotICAgIFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2VSb290KCkgY29u
c3Q7CisgICAgU1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0YW5jZVJvb3QoKTsKICAgICBTVkdFbGVt
ZW50SW5zdGFuY2UqIGFuaW1hdGVkSW5zdGFuY2VSb290KCkgY29uc3Q7CiAgICAgU1ZHRWxlbWVu
dEluc3RhbmNlKiBpbnN0YW5jZUZvclNoYWRvd1RyZWVFbGVtZW50KE5vZGUqKSBjb25zdDsKICAg
ICB2b2lkIGludmFsaWRhdGVTaGFkb3dUcmVlKCk7CkBAIC02OSw3ICs2OSw3IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsK
IAotICAgIHZpcnR1YWwgdm9pZCB0b0NsaXBQYXRoKFBhdGgmKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgdG9DbGlwUGF0aChQYXRoJik7CiAKICAgICBzdGF0aWMgdm9pZCByZW1vdmVEaXNhbGxv
d2VkRWxlbWVudHNGcm9tU3VidHJlZShOb2RlKiBlbGVtZW50KTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHJldmlzaW9uIDkx
MzkyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxOSw3ICs0MTksNyBAQCB2b2lkIFNWR1NNSUxFbGVtZW50Ojph
dHRyaWJ1dGVDaGFuZ2VkKEF0CiAgICAgfQogfQogCi1pbmxpbmUgRWxlbWVudCogU1ZHU01JTEVs
ZW1lbnQ6OmV2ZW50QmFzZUZvcihjb25zdCBDb25kaXRpb24mIGNvbmRpdGlvbikgY29uc3QKK2lu
bGluZSBFbGVtZW50KiBTVkdTTUlMRWxlbWVudDo6ZXZlbnRCYXNlRm9yKGNvbnN0IENvbmRpdGlv
biYgY29uZGl0aW9uKQogewogICAgIHJldHVybiBjb25kaXRpb24ubV9iYXNlSUQuaXNFbXB0eSgp
ID8gdGFyZ2V0RWxlbWVudCgpIDogdHJlZVNjb3BlKCktPmdldEVsZW1lbnRCeUlkKGNvbmRpdGlv
bi5tX2Jhc2VJRCk7CiB9CkBAIC00ODksNyArNDg5LDcgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6
cmVzY2hlZHVsZSgpCiAgICAgICAgIG1fdGltZUNvbnRhaW5lci0+c2NoZWR1bGUodGhpcyk7CiB9
CiAKLVNWR0VsZW1lbnQqIFNWR1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVtZW50KCkgY29uc3QKK1NW
R0VsZW1lbnQqIFNWR1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVtZW50KCkKIHsKICAgICBpZiAobV90
YXJnZXRFbGVtZW50KQogICAgICAgICByZXR1cm4gbV90YXJnZXRFbGVtZW50OwpAQCAtNTAwLDcg
KzUwMCw3IEBAIFNWR0VsZW1lbnQqIFNWR1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVtZW4KICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgCiAgICAgbV90YXJnZXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
RWxlbWVudCo+KHRhcmdldCk7Ci0gICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygp
LT5hZGRBbmltYXRpb25FbGVtZW50VG9UYXJnZXQoY29uc3RfY2FzdDxTVkdTTUlMRWxlbWVudCo+
KHRoaXMpLCBtX3RhcmdldEVsZW1lbnQpOworICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVu
c2lvbnMoKS0+YWRkQW5pbWF0aW9uRWxlbWVudFRvVGFyZ2V0KHRoaXMsIG1fdGFyZ2V0RWxlbWVu
dCk7CiAgICAgcmV0dXJuIG1fdGFyZ2V0RWxlbWVudDsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAkocmV2aXNpb24gOTEzOTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDExICs0OSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGluc2Vy
dGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQo
KTsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSA9IDA7CiAKICAg
ICBTTUlMVGltZUNvbnRhaW5lciogdGltZUNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fdGlt
ZUNvbnRhaW5lci5nZXQoKTsgfQogCi0gICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCgpIGNv
bnN0OworICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQoKTsKICAgICB2b2lkIHJlc2V0VGFy
Z2V0RWxlbWVudCgpIHsgbV90YXJnZXRFbGVtZW50ID0gMDsgfQogICAgIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJpYnV0ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZU5hbWU7IH0K
IApAQCAtMTU0LDcgKzE1NCw3IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBib29sIHBhcnNlQ29u
ZGl0aW9uKGNvbnN0IFN0cmluZyYsIEJlZ2luT3JFbmQgYmVnaW5PckVuZCk7CiAgICAgdm9pZCBw
YXJzZUJlZ2luT3JFbmQoY29uc3QgU3RyaW5nJiwgQmVnaW5PckVuZCBiZWdpbk9yRW5kKTsKLSAg
ICBFbGVtZW50KiBldmVudEJhc2VGb3IoY29uc3QgQ29uZGl0aW9uJikgY29uc3Q7CisgICAgRWxl
bWVudCogZXZlbnRCYXNlRm9yKGNvbnN0IENvbmRpdGlvbiYpOwogCiAgICAgdm9pZCBjb25uZWN0
Q29uZGl0aW9ucygpOwogICAgIHZvaWQgZGlzY29ubmVjdENvbmRpdGlvbnMoKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA5MTM5MikKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEt
MDctMjAgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJl
bW92ZSAiY29uc3QiIGZyb20gb2J2aW91c2x5LW5vbi1jb25zdCBhY2Nlc3NvcnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyMzAyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViRWxlbWVudC5o
OgorICAgICAgICAqIHNyYy9XZWJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRWxl
bWVudDo6aW5uZXJUZXh0KTogTm90IGNvbnN0IGR1ZSB0byBjYWxsIHRvIG5ld2x5LW5vbi1jb25z
dCBFbGVtZW50Ojppbm5lclRleHQoKS4KKyAgICAgICAgKiBzcmMvV2ViU2VhcmNoYWJsZUZvcm1E
YXRhLmNwcDogVXNlIG5vbi1jb25zdCBOb2RlKnMgZm9yIGNvZGUgdGhhdCBjYWxscyBuZXdseSBu
b24tY29uc3QgYWNjZXNzb3JzLgorICAgICAgICAoSFRNTE5hbWVzOjpJc1NlbGVjdEluRGVmYXVs
dFN0YXRlKToKKyAgICAgICAgKEhUTUxOYW1lczo6SXNJbkRlZmF1bHRTdGF0ZSk6CisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmNwcDogVXNlIG5vbi1jb25zdCBOb2RlKnMgZm9yIGNvZGUgdGhh
dCBjYWxscyBuZXdseSBub24tY29uc3QgYWNjZXNzb3JzLgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
Y29uZmlybUNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnRleHRJ
bnB1dFR5cGUpOgorCiAyMDExLTA3LTIwICBJbHlhIFNoZXJtYW4gIDxpc2hlcm1hbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIFRPRE8gaW4gV2ViTm9kZS5oIGZyb20gYSB0d28tc2lk
ZWQgcGF0Y2ggdGhhdCBoYXMgbm93IGxhbmRlZApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkVsZW1lbnQuaAkocmV2aXNpb24gOTEzOTIpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3
LDcgQEAgY2xhc3MgV2ViTmFtZWROb2RlTWFwOwogICAgICAgICBXRUJLSVRfQVBJIFdlYlN0cmlu
ZyBnZXRBdHRyaWJ1dGUoY29uc3QgV2ViU3RyaW5nJikgY29uc3Q7CiAgICAgICAgIFdFQktJVF9B
UEkgYm9vbCBzZXRBdHRyaWJ1dGUoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJp
bmcmIHZhbHVlKTsKICAgICAgICAgV0VCS0lUX0FQSSBXZWJOYW1lZE5vZGVNYXAgYXR0cmlidXRl
cygpIGNvbnN0OwotICAgICAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBpbm5lclRleHQoKSBjb25z
dDsKKyAgICAgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgaW5uZXJUZXh0KCk7CiAKICAgICAgICAg
Ly8gUmV0dXJucyB0aGUgbGFuZ3VhZ2UgY29kZSBzcGVjaWZpZWQgZm9yIHRoaXMgZWxlbWVudC4g
IFRoaXMgYXR0cmlidXRlCiAgICAgICAgIC8vIGlzIGluaGVyaXRlZCwgc28gdGhlIHJldHVybmVk
IHZhbHVlIGlzIGRyYXduIGZyb20gdGhlIGNsb3Nlc3QgcGFyZW50CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJFbGVtZW50LmNwcAkocmV2aXNpb24gOTEzOTIpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODUsOSArODUsOSBAQCBXZWJOYW1lZE5vZGVNYXAgV2ViRWxlbWVudDo6YXR0cmlidXRlcygpCiAg
ICAgcmV0dXJuIFdlYk5hbWVkTm9kZU1hcChtX3ByaXZhdGUtPmF0dHJpYnV0ZXMoKSk7CiB9CiAK
LVdlYlN0cmluZyBXZWJFbGVtZW50Ojppbm5lclRleHQoKSBjb25zdAorV2ViU3RyaW5nIFdlYkVs
ZW1lbnQ6OmlubmVyVGV4dCgpCiB7Ci0gICAgcmV0dXJuIGNvbnN0VW53cmFwPEVsZW1lbnQ+KCkt
PmlubmVyVGV4dCgpOworICAgIHJldHVybiB1bndyYXA8RWxlbWVudD4oKS0+aW5uZXJUZXh0KCk7
CiB9CiAKIFdlYlN0cmluZyBXZWJFbGVtZW50Ojpjb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UoKSBj
b25zdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1E
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFy
Y2hhYmxlRm9ybURhdGEuY3BwCShyZXZpc2lvbiA5MTM5MikKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3
LDE0ICs5NywxNCBAQCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBHZXRCdXR0b25Ub0FjdGl2CiAK
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VsZWN0ZWQgc3RhdGUgb2YgYWxsIHRoZSBvcHRpb25z
IG1hdGNoZXMgdGhlIGRlZmF1bHQKIC8vIHNlbGVjdGVkIHN0YXRlLgotYm9vbCBJc1NlbGVjdElu
RGVmYXVsdFN0YXRlKGNvbnN0IEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QpCitib29sIElzU2Vs
ZWN0SW5EZWZhdWx0U3RhdGUoSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCkKIHsKICAgICBjb25z
dCBWZWN0b3I8RWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3QtPmxpc3RJdGVtcygpOwogICAg
IGlmIChzZWxlY3QtPm11bHRpcGxlKCkgfHwgc2VsZWN0LT5zaXplKCkgPiAxKSB7CiAgICAgICAg
IGZvciAoVmVjdG9yPEVsZW1lbnQqPjo6Y29uc3RfaXRlcmF0b3IgaShsaXN0SXRlbXMuYmVnaW4o
KSk7IGkgIT0gbGlzdEl0ZW1zLmVuZCgpOyArK2kpIHsKICAgICAgICAgICAgIGlmICghKCppKS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uVGFnKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGNvbnN0IEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTE9wdGlvbkVsZW1lbnQqPigqaSk7CisgICAgICAgICAg
ICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxPcHRp
b25FbGVtZW50Kj4oKmkpOwogICAgICAgICAgICAgaWYgKG9wdGlvbkVsZW1lbnQtPnNlbGVjdGVk
KCkgIT0gb3B0aW9uRWxlbWVudC0+ZGVmYXVsdFNlbGVjdGVkKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xMTMsMTEgKzExMywxMSBAQCBib29sIElzU2Vs
ZWN0SW5EZWZhdWx0U3RhdGUoY29uc3QgSFRNTFNlCiAKICAgICAvLyBUaGUgc2VsZWN0IGlzIHJl
bmRlcmVkIGFzIGEgY29tYm9ib3ggKGNhbGxlZCBtZW51bGlzdCBpbiBXZWJLaXQpLiBBdAogICAg
IC8vIGxlYXN0IG9uZSBpdGVtIGlzIHNlbGVjdGVkLCBkZXRlcm1pbmUgd2hpY2ggb25lLgotICAg
IGNvbnN0IEhUTUxPcHRpb25FbGVtZW50KiBpbml0aWFsU2VsZWN0ZWQgPSAwOworICAgIEhUTUxP
cHRpb25FbGVtZW50KiBpbml0aWFsU2VsZWN0ZWQgPSAwOwogICAgIGZvciAoVmVjdG9yPEVsZW1l
bnQqPjo6Y29uc3RfaXRlcmF0b3IgaShsaXN0SXRlbXMuYmVnaW4oKSk7IGkgIT0gbGlzdEl0ZW1z
LmVuZCgpOyArK2kpIHsKICAgICAgICAgaWYgKCEoKmkpLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpvcHRpb25UYWcpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNvbnN0IEhUTUxP
cHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTE9wdGlv
bkVsZW1lbnQqPigqaSk7CisgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50
ID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPigqaSk7CiAgICAgICAgIGlmIChvcHRp
b25FbGVtZW50LT5kZWZhdWx0U2VsZWN0ZWQoKSkgewogICAgICAgICAgICAgLy8gVGhlIHBhZ2Ug
c3BlY2lmaWVkIHRoZSBvcHRpb24gdG8gc2VsZWN0LgogICAgICAgICAgICAgaW5pdGlhbFNlbGVj
dGVkID0gb3B0aW9uRWxlbWVudDsKQEAgLTEyNiwyMSArMTI2LDIxIEBAIGJvb2wgSXNTZWxlY3RJ
bkRlZmF1bHRTdGF0ZShjb25zdCBIVE1MU2UKICAgICAgICAgaWYgKCFpbml0aWFsU2VsZWN0ZWQp
CiAgICAgICAgICAgICBpbml0aWFsU2VsZWN0ZWQgPSBvcHRpb25FbGVtZW50OwogICAgIH0KLSAg
ICByZXR1cm4gaW5pdGlhbFNlbGVjdGVkID8gaW5pdGlhbFNlbGVjdGVkLT5zZWxlY3RlZCgpIDog
dHJ1ZTsKKyAgICByZXR1cm4gIWluaXRpYWxTZWxlY3RlZCB8fCBpbml0aWFsU2VsZWN0ZWQtPnNl
bGVjdGVkKCk7CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZm9ybSBlbGVtZW50IGlzIGlu
IGl0cyBkZWZhdWx0IHN0YXRlLCBmYWxzZSBvdGhlcndpc2UuCiAvLyBUaGUgZGVmYXVsdCBzdGF0
ZSBpcyB0aGUgc3RhdGUgb2YgdGhlIGZvcm0gZWxlbWVudCBvbiBpbml0aWFsIGxvYWQgb2YgdGhl
CiAvLyBwYWdlLCBhbmQgdmFyaWVzIGRlcGVuZGluZyB1cG9uIHRoZSBmb3JtIGVsZW1lbnQuIEZv
ciBleGFtcGxlLCBhIGNoZWNrYm94IGlzCiAvLyBpbiBpdHMgZGVmYXVsdCBzdGF0ZSBpZiB0aGUg
Y2hlY2tlZCBzdGF0ZSBtYXRjaGVzIHRoZSBzdGF0ZSBvZiB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUu
Ci1ib29sIElzSW5EZWZhdWx0U3RhdGUoY29uc3QgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZm9y
bUVsZW1lbnQpCitib29sIElzSW5EZWZhdWx0U3RhdGUoSFRNTEZvcm1Db250cm9sRWxlbWVudCog
Zm9ybUVsZW1lbnQpCiB7CiAgICAgaWYgKGZvcm1FbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aW5wdXRUYWcpKSB7Ci0gICAgICAgIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqPihmb3JtRWxlbWVudCk7
CisgICAgICAgIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxJbnB1dEVsZW1lbnQqPihmb3JtRWxlbWVudCk7CiAgICAgICAgIGlmIChpbnB1dEVs
ZW1lbnQtPmlzQ2hlY2tib3goKSB8fCBpbnB1dEVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSkKICAg
ICAgICAgICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmNoZWNrZWQoKSA9PSBpbnB1dEVsZW1lbnQt
Pmhhc0F0dHJpYnV0ZShjaGVja2VkQXR0cik7CiAgICAgfSBlbHNlIGlmIChmb3JtRWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdFRhZykpCi0gICAgICAgIHJldHVybiBJc1NlbGVj
dEluRGVmYXVsdFN0YXRlKHN0YXRpY19jYXN0PGNvbnN0IEhUTUxTZWxlY3RFbGVtZW50Kj4oZm9y
bUVsZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIElzU2VsZWN0SW5EZWZhdWx0U3RhdGUoc3RhdGlj
X2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihmb3JtRWxlbWVudCkpOwogICAgIHJldHVybiB0cnVl
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3Bw
CShyZXZpc2lvbiA5MTM5MikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4NSw3ICsxMzg1LDcgQEAgYm9vbCBXZWJWaWV3
SW1wbDo6c2V0Q29tcG9zaXRpb24oCiAgICAgLy8gbm9kZSwgd2hpY2ggZG9lc24ndCBleGlzdCBh
bnkgbG9uZ2VyLgogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZWRpdG9yLT5jb21wb3Np
dGlvblJhbmdlKCk7CiAgICAgaWYgKHJhbmdlKSB7Ci0gICAgICAgIGNvbnN0IE5vZGUqIG5vZGUg
PSByYW5nZS0+c3RhcnRDb250YWluZXIoKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IHJhbmdlLT5z
dGFydENvbnRhaW5lcigpOwogICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzQ29udGVudEVk
aXRhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTQzNCw3ICsx
NDM0LDcgQEAgYm9vbCBXZWJWaWV3SW1wbDo6Y29uZmlybUNvbXBvc2l0aW9uKGNvbgogICAgIC8v
IG5vZGUsIHdoaWNoIGRvZXNuJ3QgZXhpc3QgYW55IGxvbmdlci4KICAgICBQYXNzUmVmUHRyPFJh
bmdlPiByYW5nZSA9IGVkaXRvci0+Y29tcG9zaXRpb25SYW5nZSgpOwogICAgIGlmIChyYW5nZSkg
ewotICAgICAgICBjb25zdCBOb2RlKiBub2RlID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7Cisg
ICAgICAgIE5vZGUqIG5vZGUgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKTsKICAgICAgICAgaWYg
KCFub2RlIHx8ICFub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KQEAgLTE0ODMsNyArMTQ4Myw3IEBAIFdlYlRleHRJbnB1dFR5cGUgV2Vi
Vmlld0ltcGw6OnRleHRJbnB1dFQKICAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgICAgcmV0dXJu
IHR5cGU7CiAKLSAgICBjb25zdCBOb2RlKiBub2RlID0gc2VsZWN0aW9uLT5zdGFydCgpLmNvbnRh
aW5lck5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gc2VsZWN0aW9uLT5zdGFydCgpLmNvbnRhaW5l
ck5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiB0eXBlOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>