L7
Comparing yields among securities.
L7.1
We will download yield data using quantmod.
library(quantmod) # High quality corporate bonds are AAA rated, which
we will download from FRED, and then get the yield rate for the end of
the school term. # We will use the average yield rate for the month of
September 2024
EoT_AAA_Rate <- AAA["2024-09-1"]
print(EoT_AAA_Rate)
For September 2024, the high-quality corporate yield was 4.68%
We will now find the yield on treasury bonds. We will use the data
for a 10-year treasury yield bond.
getSymbols("DGS10", src = "FRED")
EoT_10year_Rate <- DGS10["2024-09-30"]
print(EoT_10year_Rate)
The yield on 10-year treasury bonds at the end of the school term is
3.81%
The difference in yield between corporate high quality bond and
treasury bonds is that the yield on corporate bonds is higher.
This difference is known as the credit spread. The credit spread
exists because corporate bonds are more likely to default, where
treasury bonds are fully supported by the government and are virtually
risk free. So, the credit spread provides higher yields in order to
attract investors.
There is also an associated liquidity risk. Treasury bonds are
traded constantly and are highly liquid, allowing them to be easily
traded. Where corporate bonds are more limited in their liquidity,
meaning they can be more difficult to trade. This also drives up the
yield.
L7.2
From the previous task the yield on 10-year treasury bonds at the
end of the term is 3.81%.
We will now find the yield on long-term municipal bonds for the same
date.
Unfortunately, we were unable to access municipal yield data from
FRED, so we will analyse what generally creates differences in these
yield rates.
The difference between the yield on long-term treasury bonds and
long-term municipal bonds is due credit risk and tax advantages.
Municipal bonds are generally safe, but they still have higher risk than
treasury bonds, causing the yield to be higher to compensate for the
credit risk.
Municipal bonds have tax advantages over treasury bonds, as treasury
bonds are taxed at a federal level through capital gains tax, where
municipal bonds are not. This means investors are willing to accept a
lower yield compared to treasury bonds.
The difference between the yield rates on these types of bonds will
ultimately depend on the specific credit and liquidity risk of the
municipal bonds, and the investors tax situation.
Assessing the forecasting ability of the yield curve.
L7.3
We will download the yields for the 13-week and 26-week T-bills at
the beginning of the school term.
getSymbols("DTB3", src = "FRED")
BoT_13week_Rate <- DTB3["2024-05-1"]
print(BoT_13week_Rate)
The 13-week T-bill yield at the beginning of the term is 5.26%
getSymbols("DTB6", src = "FRED")
BoT_26week_Rate <- DTB6["2024-05-1"]
print(BoT_26week_Rate)
The 26-week T-bill yield at the beginning of the term is 5.17%
At the beginning of the school term the 26-week T-bill yield rate
was 0.09 percentage points lower than the 13-week T-bill.
L7.4
The shorter-term T-bill having a higher yield rate indicates that
the yield curve is downwards sloping at the beginning of the school
term.
L7.5
Attributing the downward slope of the curve to expectations theory,
this difference indicates that the market expected lower future interest
rates.
This could be due to slowing economic growth, and the federal
reserve planning to lower interest rates to boost economic
activity.
L7.6
We will download the federal funds rate to look at interest
rates.
getSymbols("FEDFUNDS", src = "FRED")
BoT_Interest_Rate <- FEDFUNDS["2024-05-1"]
print(BoT_Interest_Rate)
At the beginning of the term for the month of May the effective
interest rate was 5.33%.
EoT_Interest_Rate <- FEDFUNDS["2024-09-1"]
print(EoT_Interest_Rate)
At the end of the term for the month of September the effective
interest rate was 5.13%.
Over the school term, interest rates did move in that direction and
experienced a decrease in interest rates. This is in line with what the
market expected.
#Explaining shifts in the yield curve over time.
L7.7
We know at the beginning of the school term the 13-week T-bill rate
was 5.26%.
We will now find the yield on a 10-year long term treasury bond at
the same period.
getSymbols("DGS10", src = "FRED")
BoT_10year_Rate <- DGS10["2024-05-1"]
print(BoT_10year_Rate)
We see at the beginning of the school term the long-term treasury
bond is 4.63%.
At the beginning of the school term the 13-week T-bill yield was
0.63 percentage points higher than the long-term treasury bond.
L7.8
We know that at the end of the term the 10-year long term treasury
bond yield was 3.81%.
We will now find the 13-week T-bill yield at the end of the school
term.
getSymbols("DTB3", src = "FRED")
EoT_13week_Rate <- DTB3["2024-09-30"]
print(EoT_13week_Rate)
We see that at the end of the school term the 13-week T-bill yield
was 4.52%.
At the end of the school term the 13-week T-bill yield was 0.71
percentage points higher than the long-term treasury bond yield.
L7.9
Based on the previous two questions, we see that over the school
term the 13-week T-bill yield dropped from 5.26% to 4.52%, and the
long-term treasury bond yield dropped from 4.63% to 3.81%.
Since the yields in both securities fell over the school term, we
observe a downward shift in the yield curve. The long-term treasury
bonds yield dropped by 0.82 percentage points and the short term 13-week
T-bill yields dropped by 0.74 percentage points.
The long term treasury bond yields dropped by a greater amount than
the 13-week T-bill yields. This indicates that the yield curve became
more flat.
The yield curve flattening implies that investors expect lower
future economic growth and inflation, meaning investors anticipate lower
future interest rates.
The Fed’s influence on interest rates.
#L7.10 # We will download the federal fund rates at the beginning and
end of the school term.
getSymbols("FEDFUNDS", src = "FRED")
BoT_Interest_Rate <- FEDFUNDS["2024-05-1"]
print(BoT_Interest_Rate)
At the beginning of the term for the month of May the federal fund
rate was 5.33%.
EoT_Interest_Rate <- FEDFUNDS["2024-09-1"]
print(EoT_Interest_Rate)
At the end of the term for the month of September the federal fund
rate was 5.13%.
We can see that over the school term the federal funds rate did
change from 5.33% to 5.13% for a 0.20 percentage point decrease.
L7.11
Movements in interest rates over the school term would have been
caused by the Fed’s monetary policy.
Over the school term the Fed shifted towards monetary easing by
decreasing the interest rate. This likely would’ve been in response to
softening inflation and weaker economic activity.
Monetary easing would’ve helped improve economic momentum and trying
to accelerate market activity.
Measuring and explaining premiums on money market securities.
L7.12
We will now find the data for the yields on 90-day commercial paper
at the end of the school term.
We are unable to download the 90-day commercial paper data from
FRED, so we will use 3-Month AA Financial Commercial Paper Rate as a
proxy.
getSymbols("DCPF3M", src = "FRED")
EoT_90day_Rate <- DCPF3M["2024-09-1/2024-09-30"]
print(EoT_90day_Rate)
We can see the rate for the date closest to the end of the term is
4.64% on 2024-09-20.
We will now find the 13-week T-bill yield for the same date for a
fair comparison.
getSymbols("DTB3", src = "FRED")
print(DTB3["2024-09-20"])
We see here that the 13-week T-bill yield on 2024-09-20 was
4.56%.
The 90-day commercial paper yield is higher than the 13-week T-bill
yield, indicating a premium on the 90-day commercial paper yield.
The main reason for a premium on commercial paper yields is that
T-bills are issued by the government and are effectively risk free.
Commercial paper is issued by corporations and have a greater credit
risk since repayment depends on the financial health of the issuer.
Another reason for the premium can be credited to lower liquidity of
commercial papers, as they are traded less than the widely traded
T-bills.
L7.13
The premium on 90-day commercial papers over 13-week T-bill yields
at the end of the school term on 2024-09-20 was a 0.08% premium.
We will now find the premium that existed at the beginning of the
school term, using the same proxy for 90-day commercial paper we used
previously.
getSymbols("DCPF3M", src = "FRED")
print(DCPF3M["2024-05-1/2024-05-30"])
We see the yield closest to the beginning of the school term was
5.37% on 2024-05-02.
We will now find the 13-week T-bill yield for the same date.
getSymbols("DTB3", src = "FRED")
print(DTB3["2024-05-2"])
On 2024-05-02 the 13-week T-bill yield was 5.25%.
The commercial paper premium on this date was a 0.12% premium.
This data shows that the premium at the beginning of the school term
was greater than at the end of the school term.
The narrowing spread over the school term indicates improving
corporate credit conditions, as there is a smaller premium required to
attract investors, meaning investors had an increased confidence in
lower corporate credit risk.
Explaining bond premiums and price movements.
L7.14
We are going to download the yields for high-quality corporate bonds
at the beginning and end of the school term.
BoT_AAA_Rate <- AAA["2024-05-1"]
print(BoT_AAA_Rate)
We see at the beginning of the school term high-quality corporate
bonds yield was 5.25%.
For the end of the school term we will use the average for September
2024.
EoT_AAA_Rate <- AAA["2024-09-1"]
print(EoT_AAA_Rate)
We see at the end of the school term high-quality corporate bonds
yield was 4.68%.
Over the school term high-quality corporate bond yield dropped 0.57%
from 5.25% to 4.68%.
L7.15
We are now going to compare long-term treasury bond yields at the
beginning and end of the school term, using 10-year treasury bonds.
From L7.7 and L7.8 we know that the 10-year long-term treasury bond
yield was 4.63% at the beginning of the school term and 3.81% at the end
of the school term.
Over the school term long-term treasury bond yield dropped. This
means that the price of long-term treasury bonds has risen over the
school term, due to the inverse relationship between bond yields and
price.
L7.16
Unfortunately we are unable to access yield data on municipal bonds,
but we can assume they moved in close relation to treasury bonds, as
municipal bonds are also issued by the government and considered to be
generally risk free.
Using answers to the previous questions, we observe that over the
school term treasury bond and corporate bond yields moved in the same
direction and decreased over the school term.
The bond yields also decreased by a similar amount, around
0.50%-0.75%.
Different types of bonds have their yields generally move together
for a few reasons.
Firstly, bond yields are heavily influenced by federal reserve
interest rates. When the fed changes interest rates, it affects the cost
of borrowing for all entities, causing bond yields to change
accordingly.
Secondly, expectations on inflation. Where inflation affects the
real returns on bonds, so changes in inflation expectation will change
the yields on bonds. In this case expectations of lower inflation
reduced the yield on bonds.
Generally, yields on different types of bonds often change in line
with each other as they all respond to the same macroeconomic
factors.
L7.17
We are going to compare the yield premiums on high-quality corporate
bonds to treasury bonds at the beginning and end of the school
term.
We know from previous questions that the yields on high-quality
corporate bonds at the beginning and end of the school term were 5.25%
and 4.68% respectively.
Again from previous questions, we know the yields on long term
treasury bonds at the beginning and end of the school term was 4.63% and
3.81% respectively.
This allows us to find the premiums on the high-quality corporate
bonds at the beginning and end of the school term to be 0.62% and 0.87%
respectively.
This shows us that over the school term the premium on high-quality
corporate bonds has increased.
This increase will be due to investors expectations of economic
conditions. During economic uncertainty or expected economic
deceleration, investors have a higher perceived credit risk on corporate
bonds, meaning that corporate bonds need to have higher yields to
attract investors.
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyBMNwoKIyBDb21wYXJpbmcgeWllbGRzIGFtb25nIHNlY3VyaXRpZXMuCgojIEw3LjEgCiMgV2Ugd2lsbCBkb3dubG9hZCB5aWVsZCBkYXRhIHVzaW5nIHF1YW50bW9kLgpsaWJyYXJ5KHF1YW50bW9kKQojIEhpZ2ggcXVhbGl0eSBjb3Jwb3JhdGUgYm9uZHMgYXJlIEFBQSByYXRlZCwgd2hpY2ggd2Ugd2lsbCBkb3dubG9hZCBmcm9tIEZSRUQsIGFuZCB0aGVuIGdldCB0aGUgeWllbGQgcmF0ZSBmb3IgdGhlIGVuZCBvZiB0aGUgc2Nob29sIHRlcm0uCiMgV2Ugd2lsbCB1c2UgdGhlIGF2ZXJhZ2UgeWllbGQgcmF0ZSBmb3IgdGhlIG1vbnRoIG9mIFNlcHRlbWJlciAyMDI0CmBgYHtyfQpFb1RfQUFBX1JhdGUgPC0gQUFBWyIyMDI0LTA5LTEiXQpwcmludChFb1RfQUFBX1JhdGUpCmBgYAojIEZvciBTZXB0ZW1iZXIgMjAyNCwgdGhlIGhpZ2gtcXVhbGl0eSBjb3Jwb3JhdGUgeWllbGQgd2FzIDQuNjglCiMgV2Ugd2lsbCBub3cgZmluZCB0aGUgeWllbGQgb24gdHJlYXN1cnkgYm9uZHMuIFdlIHdpbGwgdXNlIHRoZSBkYXRhIGZvciBhIDEwLXllYXIgdHJlYXN1cnkgeWllbGQgYm9uZC4KYGBge3J9CmdldFN5bWJvbHMoIkRHUzEwIiwgc3JjID0gIkZSRUQiKQpFb1RfMTB5ZWFyX1JhdGUgPC0gREdTMTBbIjIwMjQtMDktMzAiXQpwcmludChFb1RfMTB5ZWFyX1JhdGUpCmBgYAojIFRoZSB5aWVsZCBvbiAxMC15ZWFyIHRyZWFzdXJ5IGJvbmRzIGF0IHRoZSBlbmQgb2YgdGhlIHNjaG9vbCB0ZXJtIGlzIDMuODElCiMgVGhlIGRpZmZlcmVuY2UgaW4geWllbGQgYmV0d2VlbiBjb3Jwb3JhdGUgaGlnaCBxdWFsaXR5IGJvbmQgYW5kIHRyZWFzdXJ5IGJvbmRzIGlzIHRoYXQgdGhlIHlpZWxkIG9uIGNvcnBvcmF0ZSBib25kcyBpcyBoaWdoZXIuCiMgVGhpcyBkaWZmZXJlbmNlIGlzIGtub3duIGFzIHRoZSBjcmVkaXQgc3ByZWFkLiBUaGUgY3JlZGl0IHNwcmVhZCBleGlzdHMgYmVjYXVzZSBjb3Jwb3JhdGUgYm9uZHMgYXJlIG1vcmUgbGlrZWx5IHRvIGRlZmF1bHQsIHdoZXJlIHRyZWFzdXJ5IGJvbmRzIGFyZSBmdWxseSBzdXBwb3J0ZWQgYnkgdGhlIGdvdmVybm1lbnQgYW5kIGFyZSB2aXJ0dWFsbHkgcmlzayBmcmVlLiBTbywgdGhlIGNyZWRpdCBzcHJlYWQgcHJvdmlkZXMgaGlnaGVyIHlpZWxkcyBpbiBvcmRlciB0byBhdHRyYWN0IGludmVzdG9ycy4KIyBUaGVyZSBpcyBhbHNvIGFuIGFzc29jaWF0ZWQgbGlxdWlkaXR5IHJpc2suIFRyZWFzdXJ5IGJvbmRzIGFyZSB0cmFkZWQgY29uc3RhbnRseSBhbmQgYXJlIGhpZ2hseSBsaXF1aWQsIGFsbG93aW5nIHRoZW0gdG8gYmUgZWFzaWx5IHRyYWRlZC4gV2hlcmUgY29ycG9yYXRlIGJvbmRzIGFyZSBtb3JlIGxpbWl0ZWQgaW4gdGhlaXIgbGlxdWlkaXR5LCBtZWFuaW5nIHRoZXkgY2FuIGJlIG1vcmUgZGlmZmljdWx0IHRvIHRyYWRlLiBUaGlzIGFsc28gZHJpdmVzIHVwIHRoZSB5aWVsZC4KCgojIEw3LjIgCiMgRnJvbSB0aGUgcHJldmlvdXMgdGFzayB0aGUgeWllbGQgb24gMTAteWVhciB0cmVhc3VyeSBib25kcyBhdCB0aGUgZW5kIG9mIHRoZSB0ZXJtIGlzIDMuODElLgojIFdlIHdpbGwgbm93IGZpbmQgdGhlIHlpZWxkIG9uIGxvbmctdGVybSBtdW5pY2lwYWwgYm9uZHMgZm9yIHRoZSBzYW1lIGRhdGUuIAojIFVuZm9ydHVuYXRlbHksIHdlIHdlcmUgdW5hYmxlIHRvIGFjY2VzcyBtdW5pY2lwYWwgeWllbGQgZGF0YSBmcm9tIEZSRUQsIHNvIHdlIHdpbGwgYW5hbHlzZSB3aGF0IGdlbmVyYWxseSBjcmVhdGVzIGRpZmZlcmVuY2VzIGluIHRoZXNlIHlpZWxkIHJhdGVzLgojIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHlpZWxkIG9uIGxvbmctdGVybSB0cmVhc3VyeSBib25kcyBhbmQgbG9uZy10ZXJtIG11bmljaXBhbCBib25kcyBpcyBkdWUgY3JlZGl0IHJpc2sgYW5kIHRheCBhZHZhbnRhZ2VzLiBNdW5pY2lwYWwgYm9uZHMgYXJlIGdlbmVyYWxseSBzYWZlLCBidXQgdGhleSBzdGlsbCBoYXZlIGhpZ2hlciByaXNrIHRoYW4gdHJlYXN1cnkgYm9uZHMsIGNhdXNpbmcgdGhlIHlpZWxkIHRvIGJlIGhpZ2hlciB0byBjb21wZW5zYXRlIGZvciB0aGUgY3JlZGl0IHJpc2suCiMgTXVuaWNpcGFsIGJvbmRzIGhhdmUgdGF4IGFkdmFudGFnZXMgb3ZlciB0cmVhc3VyeSBib25kcywgYXMgdHJlYXN1cnkgYm9uZHMgYXJlIHRheGVkIGF0IGEgZmVkZXJhbCBsZXZlbCB0aHJvdWdoIGNhcGl0YWwgZ2FpbnMgdGF4LCB3aGVyZSBtdW5pY2lwYWwgYm9uZHMgYXJlIG5vdC4gVGhpcyBtZWFucyBpbnZlc3RvcnMgYXJlIHdpbGxpbmcgdG8gYWNjZXB0IGEgbG93ZXIgeWllbGQgY29tcGFyZWQgdG8gdHJlYXN1cnkgYm9uZHMuIAoKIyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB5aWVsZCByYXRlcyBvbiB0aGVzZSB0eXBlcyBvZiBib25kcyB3aWxsIHVsdGltYXRlbHkgZGVwZW5kIG9uIHRoZSBzcGVjaWZpYyBjcmVkaXQgYW5kIGxpcXVpZGl0eSByaXNrIG9mIHRoZSBtdW5pY2lwYWwgYm9uZHMsIGFuZCB0aGUgaW52ZXN0b3JzIHRheCBzaXR1YXRpb24uIAoKCiMgQXNzZXNzaW5nIHRoZSBmb3JlY2FzdGluZyBhYmlsaXR5IG9mIHRoZSB5aWVsZCBjdXJ2ZS4KCiMgTDcuMwojIFdlIHdpbGwgZG93bmxvYWQgdGhlIHlpZWxkcyBmb3IgdGhlIDEzLXdlZWsgYW5kIDI2LXdlZWsgVC1iaWxscyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzY2hvb2wgdGVybS4KYGBge3J9CmdldFN5bWJvbHMoIkRUQjMiLCBzcmMgPSAiRlJFRCIpCkJvVF8xM3dlZWtfUmF0ZSA8LSBEVEIzWyIyMDI0LTA1LTEiXQpwcmludChCb1RfMTN3ZWVrX1JhdGUpCmBgYAojIFRoZSAxMy13ZWVrIFQtYmlsbCB5aWVsZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXJtIGlzIDUuMjYlCmBgYHtyfQpnZXRTeW1ib2xzKCJEVEI2Iiwgc3JjID0gIkZSRUQiKQpCb1RfMjZ3ZWVrX1JhdGUgPC0gRFRCNlsiMjAyNC0wNS0xIl0KcHJpbnQoQm9UXzI2d2Vla19SYXRlKQpgYGAKIyBUaGUgMjYtd2VlayBULWJpbGwgeWllbGQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGVybSBpcyA1LjE3JQojIEF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNjaG9vbCB0ZXJtIHRoZSAyNi13ZWVrIFQtYmlsbCB5aWVsZCByYXRlIHdhcyAwLjA5IHBlcmNlbnRhZ2UgcG9pbnRzIGxvd2VyIHRoYW4gdGhlIDEzLXdlZWsgVC1iaWxsLgoKCiMgTDcuNAojIFRoZSBzaG9ydGVyLXRlcm0gVC1iaWxsIGhhdmluZyBhIGhpZ2hlciB5aWVsZCByYXRlIGluZGljYXRlcyB0aGF0IHRoZSB5aWVsZCBjdXJ2ZSBpcyBkb3dud2FyZHMgc2xvcGluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzY2hvb2wgdGVybS4gCgoKIyBMNy41CiMgQXR0cmlidXRpbmcgdGhlIGRvd253YXJkIHNsb3BlIG9mIHRoZSBjdXJ2ZSB0byBleHBlY3RhdGlvbnMgdGhlb3J5LCB0aGlzIGRpZmZlcmVuY2UgaW5kaWNhdGVzIHRoYXQgdGhlIG1hcmtldCBleHBlY3RlZCBsb3dlciBmdXR1cmUgaW50ZXJlc3QgcmF0ZXMuIAojIFRoaXMgY291bGQgYmUgZHVlIHRvIHNsb3dpbmcgZWNvbm9taWMgZ3Jvd3RoLCBhbmQgdGhlIGZlZGVyYWwgcmVzZXJ2ZSBwbGFubmluZyB0byBsb3dlciBpbnRlcmVzdCByYXRlcyB0byBib29zdCBlY29ub21pYyBhY3Rpdml0eS4KCgojIEw3LjYgCiMgV2Ugd2lsbCBkb3dubG9hZCB0aGUgZmVkZXJhbCBmdW5kcyByYXRlIHRvIGxvb2sgYXQgaW50ZXJlc3QgcmF0ZXMuCmBgYHtyfQpnZXRTeW1ib2xzKCJGRURGVU5EUyIsIHNyYyA9ICJGUkVEIikKQm9UX0ludGVyZXN0X1JhdGUgPC0gRkVERlVORFNbIjIwMjQtMDUtMSJdCnByaW50KEJvVF9JbnRlcmVzdF9SYXRlKQpgYGAKIyBBdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXJtIGZvciB0aGUgbW9udGggb2YgTWF5IHRoZSBlZmZlY3RpdmUgaW50ZXJlc3QgcmF0ZSB3YXMgNS4zMyUuCmBgYHtyfQpFb1RfSW50ZXJlc3RfUmF0ZSA8LSBGRURGVU5EU1siMjAyNC0wOS0xIl0KcHJpbnQoRW9UX0ludGVyZXN0X1JhdGUpCmBgYAojIEF0IHRoZSBlbmQgb2YgdGhlIHRlcm0gZm9yIHRoZSBtb250aCBvZiBTZXB0ZW1iZXIgdGhlIGVmZmVjdGl2ZSBpbnRlcmVzdCByYXRlIHdhcyA1LjEzJS4KIyBPdmVyIHRoZSBzY2hvb2wgdGVybSwgaW50ZXJlc3QgcmF0ZXMgZGlkIG1vdmUgaW4gdGhhdCBkaXJlY3Rpb24gYW5kIGV4cGVyaWVuY2VkIGEgZGVjcmVhc2UgaW4gaW50ZXJlc3QgcmF0ZXMuIFRoaXMgaXMgaW4gbGluZSB3aXRoIHdoYXQgdGhlIG1hcmtldCBleHBlY3RlZC4gCgojRXhwbGFpbmluZyBzaGlmdHMgaW4gdGhlIHlpZWxkIGN1cnZlIG92ZXIgdGltZS4KCiMgTDcuNyAKIyBXZSBrbm93IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNjaG9vbCB0ZXJtIHRoZSAxMy13ZWVrIFQtYmlsbCByYXRlIHdhcyA1LjI2JS4KIyBXZSB3aWxsIG5vdyBmaW5kIHRoZSB5aWVsZCBvbiBhIDEwLXllYXIgbG9uZyB0ZXJtIHRyZWFzdXJ5IGJvbmQgYXQgdGhlIHNhbWUgcGVyaW9kLiAKYGBge3J9CmdldFN5bWJvbHMoIkRHUzEwIiwgc3JjID0gIkZSRUQiKQpCb1RfMTB5ZWFyX1JhdGUgPC0gREdTMTBbIjIwMjQtMDUtMSJdCnByaW50KEJvVF8xMHllYXJfUmF0ZSkKYGBgCiMgV2Ugc2VlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNjaG9vbCB0ZXJtIHRoZSBsb25nLXRlcm0gdHJlYXN1cnkgYm9uZCBpcyA0LjYzJS4KIyBBdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzY2hvb2wgdGVybSB0aGUgMTMtd2VlayBULWJpbGwgeWllbGQgd2FzIDAuNjMgcGVyY2VudGFnZSBwb2ludHMgaGlnaGVyIHRoYW4gdGhlIGxvbmctdGVybSB0cmVhc3VyeSBib25kLgoKCiMgTDcuOCAKIyBXZSBrbm93IHRoYXQgYXQgdGhlIGVuZCBvZiB0aGUgdGVybSB0aGUgMTAteWVhciBsb25nIHRlcm0gdHJlYXN1cnkgYm9uZCB5aWVsZCB3YXMgMy44MSUuCiMgV2Ugd2lsbCBub3cgZmluZCB0aGUgMTMtd2VlayBULWJpbGwgeWllbGQgYXQgdGhlIGVuZCBvZiB0aGUgc2Nob29sIHRlcm0uCmBgYHtyfQpnZXRTeW1ib2xzKCJEVEIzIiwgc3JjID0gIkZSRUQiKQpFb1RfMTN3ZWVrX1JhdGUgPC0gRFRCM1siMjAyNC0wOS0zMCJdCnByaW50KEVvVF8xM3dlZWtfUmF0ZSkKYGBgCiMgV2Ugc2VlIHRoYXQgYXQgdGhlIGVuZCBvZiB0aGUgc2Nob29sIHRlcm0gdGhlIDEzLXdlZWsgVC1iaWxsIHlpZWxkIHdhcyA0LjUyJS4KIyBBdCB0aGUgZW5kIG9mIHRoZSBzY2hvb2wgdGVybSB0aGUgMTMtd2VlayBULWJpbGwgeWllbGQgd2FzIDAuNzEgcGVyY2VudGFnZSBwb2ludHMgaGlnaGVyIHRoYW4gdGhlIGxvbmctdGVybSB0cmVhc3VyeSBib25kIHlpZWxkLgoKCiMgTDcuOQojIEJhc2VkIG9uIHRoZSBwcmV2aW91cyB0d28gcXVlc3Rpb25zLCB3ZSBzZWUgdGhhdCBvdmVyIHRoZSBzY2hvb2wgdGVybSB0aGUgMTMtd2VlayBULWJpbGwgeWllbGQgZHJvcHBlZCBmcm9tIDUuMjYlIHRvIDQuNTIlLCBhbmQgdGhlIGxvbmctdGVybSB0cmVhc3VyeSBib25kIHlpZWxkIGRyb3BwZWQgZnJvbSA0LjYzJSB0byAzLjgxJS4KIyBTaW5jZSB0aGUgeWllbGRzIGluIGJvdGggc2VjdXJpdGllcyBmZWxsIG92ZXIgdGhlIHNjaG9vbCB0ZXJtLCB3ZSBvYnNlcnZlIGEgZG93bndhcmQgc2hpZnQgaW4gdGhlIHlpZWxkIGN1cnZlLiBUaGUgbG9uZy10ZXJtIHRyZWFzdXJ5IGJvbmRzIHlpZWxkIGRyb3BwZWQgYnkgMC44MiBwZXJjZW50YWdlIHBvaW50cyBhbmQgdGhlIHNob3J0IHRlcm0gMTMtd2VlayBULWJpbGwgeWllbGRzIGRyb3BwZWQgYnkgMC43NCBwZXJjZW50YWdlIHBvaW50cy4KIyBUaGUgbG9uZyB0ZXJtIHRyZWFzdXJ5IGJvbmQgeWllbGRzIGRyb3BwZWQgYnkgYSBncmVhdGVyIGFtb3VudCB0aGFuIHRoZSAxMy13ZWVrIFQtYmlsbCB5aWVsZHMuIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIHlpZWxkIGN1cnZlIGJlY2FtZSBtb3JlIGZsYXQuCiMgVGhlIHlpZWxkIGN1cnZlIGZsYXR0ZW5pbmcgaW1wbGllcyB0aGF0IGludmVzdG9ycyBleHBlY3QgbG93ZXIgZnV0dXJlIGVjb25vbWljIGdyb3d0aCBhbmQgaW5mbGF0aW9uLCBtZWFuaW5nIGludmVzdG9ycyBhbnRpY2lwYXRlIGxvd2VyIGZ1dHVyZSBpbnRlcmVzdCByYXRlcy4gCgojIFRoZSBGZWQncyBpbmZsdWVuY2Ugb24gaW50ZXJlc3QgcmF0ZXMuCgojTDcuMTAKIyBXZSB3aWxsIGRvd25sb2FkIHRoZSBmZWRlcmFsIGZ1bmQgcmF0ZXMgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBzY2hvb2wgdGVybS4KYGBge3J9CmdldFN5bWJvbHMoIkZFREZVTkRTIiwgc3JjID0gIkZSRUQiKQpCb1RfSW50ZXJlc3RfUmF0ZSA8LSBGRURGVU5EU1siMjAyNC0wNS0xIl0KcHJpbnQoQm9UX0ludGVyZXN0X1JhdGUpCmBgYAojIEF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRlcm0gZm9yIHRoZSBtb250aCBvZiBNYXkgdGhlIGZlZGVyYWwgZnVuZCByYXRlIHdhcyA1LjMzJS4KYGBge3J9CkVvVF9JbnRlcmVzdF9SYXRlIDwtIEZFREZVTkRTWyIyMDI0LTA5LTEiXQpwcmludChFb1RfSW50ZXJlc3RfUmF0ZSkKYGBgCiMgQXQgdGhlIGVuZCBvZiB0aGUgdGVybSBmb3IgdGhlIG1vbnRoIG9mIFNlcHRlbWJlciB0aGUgZmVkZXJhbCBmdW5kIHJhdGUgd2FzIDUuMTMlLgojIFdlIGNhbiBzZWUgdGhhdCBvdmVyIHRoZSBzY2hvb2wgdGVybSB0aGUgZmVkZXJhbCBmdW5kcyByYXRlIGRpZCBjaGFuZ2UgZnJvbSA1LjMzJSB0byA1LjEzJSBmb3IgYSAwLjIwIHBlcmNlbnRhZ2UgcG9pbnQgZGVjcmVhc2UuIAoKCiMgTDcuMTEKIyBNb3ZlbWVudHMgaW4gaW50ZXJlc3QgcmF0ZXMgb3ZlciB0aGUgc2Nob29sIHRlcm0gd291bGQgaGF2ZSBiZWVuIGNhdXNlZCBieSB0aGUgRmVkJ3MgbW9uZXRhcnkgcG9saWN5LgojIE92ZXIgdGhlIHNjaG9vbCB0ZXJtIHRoZSBGZWQgc2hpZnRlZCB0b3dhcmRzIG1vbmV0YXJ5IGVhc2luZyBieSBkZWNyZWFzaW5nIHRoZSBpbnRlcmVzdCByYXRlLiBUaGlzIGxpa2VseSB3b3VsZCd2ZSBiZWVuIGluIHJlc3BvbnNlIHRvIHNvZnRlbmluZyBpbmZsYXRpb24gYW5kIHdlYWtlciBlY29ub21pYyBhY3Rpdml0eS4KIyBNb25ldGFyeSBlYXNpbmcgd291bGQndmUgaGVscGVkIGltcHJvdmUgZWNvbm9taWMgbW9tZW50dW0gYW5kIHRyeWluZyB0byBhY2NlbGVyYXRlIG1hcmtldCBhY3Rpdml0eS4gCgojIE1lYXN1cmluZyBhbmQgZXhwbGFpbmluZyBwcmVtaXVtcyBvbiBtb25leSBtYXJrZXQgc2VjdXJpdGllcy4KCiMgTDcuMTIKIyBXZSB3aWxsIG5vdyBmaW5kIHRoZSBkYXRhIGZvciB0aGUgeWllbGRzIG9uIDkwLWRheSBjb21tZXJjaWFsIHBhcGVyIGF0IHRoZSBlbmQgb2YgdGhlIHNjaG9vbCB0ZXJtLgojIFdlIGFyZSB1bmFibGUgdG8gZG93bmxvYWQgdGhlIDkwLWRheSBjb21tZXJjaWFsIHBhcGVyIGRhdGEgZnJvbSBGUkVELCBzbyB3ZSB3aWxsIHVzZSAzLU1vbnRoIEFBIEZpbmFuY2lhbCBDb21tZXJjaWFsIFBhcGVyIFJhdGUgYXMgYSBwcm94eS4KYGBge3J9CmdldFN5bWJvbHMoIkRDUEYzTSIsIHNyYyA9ICJGUkVEIikKRW9UXzkwZGF5X1JhdGUgPC0gRENQRjNNWyIyMDI0LTA5LTEvMjAyNC0wOS0zMCJdCnByaW50KEVvVF85MGRheV9SYXRlKQpgYGAKIyBXZSBjYW4gc2VlIHRoZSByYXRlIGZvciB0aGUgZGF0ZSBjbG9zZXN0IHRvIHRoZSBlbmQgb2YgdGhlIHRlcm0gaXMgNC42NCUgb24gMjAyNC0wOS0yMC4KIyBXZSB3aWxsIG5vdyBmaW5kIHRoZSAxMy13ZWVrIFQtYmlsbCB5aWVsZCBmb3IgdGhlIHNhbWUgZGF0ZSBmb3IgYSBmYWlyIGNvbXBhcmlzb24uCmBgYHtyfQpnZXRTeW1ib2xzKCJEVEIzIiwgc3JjID0gIkZSRUQiKQpwcmludChEVEIzWyIyMDI0LTA5LTIwIl0pCmBgYAojIFdlIHNlZSBoZXJlIHRoYXQgdGhlIDEzLXdlZWsgVC1iaWxsIHlpZWxkIG9uIDIwMjQtMDktMjAgd2FzIDQuNTYlLgojIFRoZSA5MC1kYXkgY29tbWVyY2lhbCBwYXBlciB5aWVsZCBpcyBoaWdoZXIgdGhhbiB0aGUgMTMtd2VlayBULWJpbGwgeWllbGQsIGluZGljYXRpbmcgYSBwcmVtaXVtIG9uIHRoZSA5MC1kYXkgY29tbWVyY2lhbCBwYXBlciB5aWVsZC4KIyBUaGUgbWFpbiByZWFzb24gZm9yIGEgcHJlbWl1bSAgb24gY29tbWVyY2lhbCBwYXBlciB5aWVsZHMgaXMgdGhhdCBULWJpbGxzIGFyZSBpc3N1ZWQgYnkgdGhlIGdvdmVybm1lbnQgYW5kIGFyZSBlZmZlY3RpdmVseSByaXNrIGZyZWUuIENvbW1lcmNpYWwgcGFwZXIgaXMgaXNzdWVkIGJ5IGNvcnBvcmF0aW9ucyBhbmQgaGF2ZSBhIGdyZWF0ZXIgY3JlZGl0IHJpc2sgc2luY2UgcmVwYXltZW50IGRlcGVuZHMgb24gdGhlIGZpbmFuY2lhbCBoZWFsdGggb2YgdGhlIGlzc3Vlci4KIyBBbm90aGVyIHJlYXNvbiBmb3IgdGhlIHByZW1pdW0gY2FuIGJlIGNyZWRpdGVkIHRvIGxvd2VyIGxpcXVpZGl0eSBvZiBjb21tZXJjaWFsIHBhcGVycywgYXMgdGhleSBhcmUgdHJhZGVkIGxlc3MgdGhhbiB0aGUgd2lkZWx5IHRyYWRlZCBULWJpbGxzLgoKCiMgTDcuMTMKIyBUaGUgcHJlbWl1bSBvbiA5MC1kYXkgY29tbWVyY2lhbCBwYXBlcnMgb3ZlciAxMy13ZWVrIFQtYmlsbCB5aWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc2Nob29sIHRlcm0gb24gMjAyNC0wOS0yMCB3YXMgYSAwLjA4JSBwcmVtaXVtLiAKIyBXZSB3aWxsIG5vdyBmaW5kIHRoZSBwcmVtaXVtIHRoYXQgZXhpc3RlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzY2hvb2wgdGVybSwgdXNpbmcgdGhlIHNhbWUgcHJveHkgZm9yIDkwLWRheSBjb21tZXJjaWFsIHBhcGVyIHdlIHVzZWQgcHJldmlvdXNseS4KYGBge3J9CmdldFN5bWJvbHMoIkRDUEYzTSIsIHNyYyA9ICJGUkVEIikKcHJpbnQoRENQRjNNWyIyMDI0LTA1LTEvMjAyNC0wNS0zMCJdKQpgYGAKIyBXZSBzZWUgdGhlIHlpZWxkIGNsb3Nlc3QgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2Nob29sIHRlcm0gd2FzIDUuMzclIG9uIDIwMjQtMDUtMDIuCiMgV2Ugd2lsbCBub3cgZmluZCB0aGUgMTMtd2VlayBULWJpbGwgeWllbGQgZm9yIHRoZSBzYW1lIGRhdGUuCmBgYHtyfQpnZXRTeW1ib2xzKCJEVEIzIiwgc3JjID0gIkZSRUQiKQpwcmludChEVEIzWyIyMDI0LTA1LTIiXSkKYGBgCiMgT24gMjAyNC0wNS0wMiB0aGUgMTMtd2VlayBULWJpbGwgeWllbGQgd2FzIDUuMjUlLgojIFRoZSBjb21tZXJjaWFsIHBhcGVyIHByZW1pdW0gb24gdGhpcyBkYXRlIHdhcyBhIDAuMTIlIHByZW1pdW0uCiMgVGhpcyBkYXRhIHNob3dzIHRoYXQgdGhlIHByZW1pdW0gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2Nob29sIHRlcm0gd2FzIGdyZWF0ZXIgdGhhbiBhdCB0aGUgZW5kIG9mIHRoZSBzY2hvb2wgdGVybS4KIyBUaGUgbmFycm93aW5nIHNwcmVhZCBvdmVyIHRoZSBzY2hvb2wgdGVybSBpbmRpY2F0ZXMgaW1wcm92aW5nIGNvcnBvcmF0ZSBjcmVkaXQgY29uZGl0aW9ucywgYXMgdGhlcmUgaXMgYSBzbWFsbGVyIHByZW1pdW0gcmVxdWlyZWQgdG8gYXR0cmFjdCBpbnZlc3RvcnMsIG1lYW5pbmcgaW52ZXN0b3JzIGhhZCBhbiBpbmNyZWFzZWQgY29uZmlkZW5jZSBpbiBsb3dlciBjb3Jwb3JhdGUgY3JlZGl0IHJpc2suCgojIEV4cGxhaW5pbmcgYm9uZCBwcmVtaXVtcyBhbmQgcHJpY2UgbW92ZW1lbnRzLgoKIyBMNy4xNAojIFdlIGFyZSBnb2luZyB0byBkb3dubG9hZCB0aGUgeWllbGRzIGZvciBoaWdoLXF1YWxpdHkgY29ycG9yYXRlIGJvbmRzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgc2Nob29sIHRlcm0uCmBgYHtyfQpCb1RfQUFBX1JhdGUgPC0gQUFBWyIyMDI0LTA1LTEiXQpwcmludChCb1RfQUFBX1JhdGUpCmBgYAojIFdlIHNlZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzY2hvb2wgdGVybSBoaWdoLXF1YWxpdHkgY29ycG9yYXRlIGJvbmRzIHlpZWxkIHdhcyA1LjI1JS4gCiMgRm9yIHRoZSBlbmQgb2YgdGhlIHNjaG9vbCB0ZXJtIHdlIHdpbGwgdXNlIHRoZSBhdmVyYWdlIGZvciBTZXB0ZW1iZXIgMjAyNC4KYGBge3J9CkVvVF9BQUFfUmF0ZSA8LSBBQUFbIjIwMjQtMDktMSJdCnByaW50KEVvVF9BQUFfUmF0ZSkKYGBgCiMgV2Ugc2VlIGF0IHRoZSBlbmQgb2YgdGhlIHNjaG9vbCB0ZXJtIGhpZ2gtcXVhbGl0eSBjb3Jwb3JhdGUgYm9uZHMgeWllbGQgd2FzIDQuNjglLgojIE92ZXIgdGhlIHNjaG9vbCB0ZXJtIGhpZ2gtcXVhbGl0eSBjb3Jwb3JhdGUgYm9uZCB5aWVsZCBkcm9wcGVkIDAuNTclIGZyb20gNS4yNSUgdG8gNC42OCUuCgoKIyBMNy4xNQojIFdlIGFyZSBub3cgZ29pbmcgdG8gY29tcGFyZSBsb25nLXRlcm0gdHJlYXN1cnkgYm9uZCB5aWVsZHMgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBzY2hvb2wgdGVybSwgdXNpbmcgMTAteWVhciB0cmVhc3VyeSBib25kcy4KIyBGcm9tIEw3LjcgYW5kIEw3Ljggd2Uga25vdyB0aGF0IHRoZSAxMC15ZWFyIGxvbmctdGVybSB0cmVhc3VyeSBib25kIHlpZWxkIHdhcyA0LjYzJSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzY2hvb2wgdGVybSBhbmQgMy44MSUgYXQgdGhlIGVuZCBvZiB0aGUgc2Nob29sIHRlcm0uCiMgT3ZlciB0aGUgc2Nob29sIHRlcm0gbG9uZy10ZXJtIHRyZWFzdXJ5IGJvbmQgeWllbGQgZHJvcHBlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBwcmljZSBvZiBsb25nLXRlcm0gdHJlYXN1cnkgYm9uZHMgaGFzIHJpc2VuIG92ZXIgdGhlIHNjaG9vbCB0ZXJtLCBkdWUgdG8gdGhlIGludmVyc2UgcmVsYXRpb25zaGlwIGJldHdlZW4gYm9uZCB5aWVsZHMgYW5kIHByaWNlLgoKCiMgTDcuMTYKIyBVbmZvcnR1bmF0ZWx5IHdlIGFyZSB1bmFibGUgdG8gYWNjZXNzIHlpZWxkIGRhdGEgb24gbXVuaWNpcGFsIGJvbmRzLCBidXQgd2UgY2FuIGFzc3VtZSB0aGV5IG1vdmVkIGluIGNsb3NlIHJlbGF0aW9uIHRvIHRyZWFzdXJ5IGJvbmRzLCBhcyBtdW5pY2lwYWwgYm9uZHMgYXJlIGFsc28gaXNzdWVkIGJ5IHRoZSBnb3Zlcm5tZW50IGFuZCBjb25zaWRlcmVkIHRvIGJlIGdlbmVyYWxseSByaXNrIGZyZWUuCiMgVXNpbmcgYW5zd2VycyB0byB0aGUgcHJldmlvdXMgcXVlc3Rpb25zLCB3ZSBvYnNlcnZlIHRoYXQgb3ZlciB0aGUgc2Nob29sIHRlcm0gdHJlYXN1cnkgYm9uZCBhbmQgY29ycG9yYXRlIGJvbmQgeWllbGRzIG1vdmVkIGluIHRoZSBzYW1lIGRpcmVjdGlvbiBhbmQgZGVjcmVhc2VkIG92ZXIgdGhlIHNjaG9vbCB0ZXJtLgojIFRoZSBib25kIHlpZWxkcyBhbHNvIGRlY3JlYXNlZCBieSBhIHNpbWlsYXIgYW1vdW50LCBhcm91bmQgMC41MCUtMC43NSUuCiMgRGlmZmVyZW50IHR5cGVzIG9mIGJvbmRzIGhhdmUgdGhlaXIgeWllbGRzIGdlbmVyYWxseSBtb3ZlIHRvZ2V0aGVyIGZvciBhIGZldyByZWFzb25zLgojIEZpcnN0bHksIGJvbmQgeWllbGRzIGFyZSBoZWF2aWx5IGluZmx1ZW5jZWQgYnkgZmVkZXJhbCByZXNlcnZlIGludGVyZXN0IHJhdGVzLiBXaGVuIHRoZSBmZWQgY2hhbmdlcyBpbnRlcmVzdCByYXRlcywgaXQgYWZmZWN0cyB0aGUgY29zdCBvZiBib3Jyb3dpbmcgZm9yIGFsbCBlbnRpdGllcywgY2F1c2luZyBib25kIHlpZWxkcyB0byBjaGFuZ2UgYWNjb3JkaW5nbHkuCiMgU2Vjb25kbHksIGV4cGVjdGF0aW9ucyBvbiBpbmZsYXRpb24uIFdoZXJlIGluZmxhdGlvbiBhZmZlY3RzIHRoZSByZWFsIHJldHVybnMgb24gYm9uZHMsIHNvIGNoYW5nZXMgaW4gaW5mbGF0aW9uIGV4cGVjdGF0aW9uIHdpbGwgY2hhbmdlIHRoZSB5aWVsZHMgb24gYm9uZHMuIEluIHRoaXMgY2FzZSBleHBlY3RhdGlvbnMgb2YgbG93ZXIgaW5mbGF0aW9uIHJlZHVjZWQgdGhlIHlpZWxkIG9uIGJvbmRzLgojIEdlbmVyYWxseSwgeWllbGRzIG9uIGRpZmZlcmVudCB0eXBlcyBvZiBib25kcyBvZnRlbiBjaGFuZ2UgaW4gbGluZSB3aXRoIGVhY2ggb3RoZXIgYXMgdGhleSBhbGwgcmVzcG9uZCB0byB0aGUgc2FtZSBtYWNyb2Vjb25vbWljIGZhY3RvcnMuIAoKCiMgTDcuMTcKIyBXZSBhcmUgZ29pbmcgdG8gY29tcGFyZSB0aGUgeWllbGQgcHJlbWl1bXMgb24gaGlnaC1xdWFsaXR5IGNvcnBvcmF0ZSBib25kcyB0byB0cmVhc3VyeSBib25kcyBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIHNjaG9vbCB0ZXJtLgojIFdlIGtub3cgZnJvbSBwcmV2aW91cyBxdWVzdGlvbnMgdGhhdCB0aGUgeWllbGRzIG9uIGhpZ2gtcXVhbGl0eSBjb3Jwb3JhdGUgYm9uZHMgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBzY2hvb2wgdGVybSB3ZXJlIDUuMjUlIGFuZCA0LjY4JSByZXNwZWN0aXZlbHkuCiMgQWdhaW4gZnJvbSBwcmV2aW91cyBxdWVzdGlvbnMsIHdlIGtub3cgdGhlIHlpZWxkcyBvbiBsb25nIHRlcm0gdHJlYXN1cnkgYm9uZHMgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBzY2hvb2wgdGVybSB3YXMgNC42MyUgYW5kIDMuODElIHJlc3BlY3RpdmVseS4KIyBUaGlzIGFsbG93cyB1cyB0byBmaW5kIHRoZSBwcmVtaXVtcyBvbiB0aGUgaGlnaC1xdWFsaXR5IGNvcnBvcmF0ZSBib25kcyBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIHNjaG9vbCB0ZXJtIHRvIGJlIDAuNjIlIGFuZCAwLjg3JSByZXNwZWN0aXZlbHkuIAojIFRoaXMgc2hvd3MgdXMgdGhhdCBvdmVyIHRoZSBzY2hvb2wgdGVybSB0aGUgcHJlbWl1bSBvbiBoaWdoLXF1YWxpdHkgY29ycG9yYXRlIGJvbmRzIGhhcyBpbmNyZWFzZWQuIAojIFRoaXMgaW5jcmVhc2Ugd2lsbCBiZSBkdWUgdG8gaW52ZXN0b3JzIGV4cGVjdGF0aW9ucyBvZiBlY29ub21pYyBjb25kaXRpb25zLiBEdXJpbmcgZWNvbm9taWMgdW5jZXJ0YWludHkgb3IgZXhwZWN0ZWQgZWNvbm9taWMgZGVjZWxlcmF0aW9uLCBpbnZlc3RvcnMgaGF2ZSBhIGhpZ2hlciBwZXJjZWl2ZWQgY3JlZGl0IHJpc2sgb24gY29ycG9yYXRlIGJvbmRzLCBtZWFuaW5nIHRoYXQgY29ycG9yYXRlIGJvbmRzIG5lZWQgdG8gaGF2ZSBoaWdoZXIgeWllbGRzIHRvIGF0dHJhY3QgaW52ZXN0b3JzLg==