About
This assignment is an extra credit opportunity worth 10 points. The goal is to demonstrate your understanding of the topic in the different areas of problem statement through a flowchart diagram propely marked, the analytics through a clear representation of the mathematical equations, the coding through the clear and properly commented execution steps, and finally results evaluation through the assessment of quality and integrity.
The topic of interest is the pricing of an Asian option. Asian options are a form of exotic options unlike the more vanilla European options. The case considered here is a special type of Asian options where the payoff is given by the average price of the underline asset over some predetermined period until expiration time. Other variations of Asian options (outside our scope) are possible and left for the reader’s investigation. The case in point is described on p.169 . Note that Asian options are characterized as path dependent options. By this we mean that the payoff of the option is dependent on the intermediate values of the underline asset along the path. In contrast a European option is path independent because the payoff depends only on the final value of the underline asset, and not on the intermediate or historical values. The case of American options is slightly tricky. Because of the early exercise opportunity one may be inclined to view American options as path dependendent. However at any exercise point the payoff is only dependent on the current asset price and not historical. As such it is not really path dependent.
Setup
Remember to always set your working directory to the source file location. Go to ‘Session’, scroll down to ‘Set Working Directory’, and click ‘To Source File Location’. Read carefully the below and follow the instructions to complete the tasks and answer any questions. Submit your work to RPubs as detailed in previous notes.
Note
Always read carefully the instructions on Sakai. For clarity, tasks/questions to be completed/answered are highlighted in red color (visible in preview) and numbered according to their particular placement in the task section. Quite often you will need to add your own code chunk.
Execute all code chunks, preview, publish, and submit link on Sakai follwoing the naming convention. Make sure to add comments to your code where appropriate. Use own language!
Any sign of plagiarism, will result in dissmissal of work!
#Install package quantmod
if(!require("quantmod",quietly = TRUE))
install.packages("quantmod",dependencies = TRUE, repos = "https://cloud.r-project.org")
Question 1 : Flowchart Diagram (2pts)
Inspired by the flowchart diagram of the MC simulation for European option, create an equivalent flowchart diagram for the considered case of Asian option. Describe the variables, label clearly, and write the discrete mathematical representation to be coded later. You can create the flowchart using a separate tool and include an image capture here. A hand drawn image is acceptable only if well executed.
Question 2: MC Simulation (2pts)
Implement the R-code for the MC simulation to price an Asian Call option with input characteristics similar to the European Call option considered in Lab 6, task 2B.
MCAsian=function(Type,S0,K,T,r,sigma,n,m,dt=T/n){
sum=0
for (i in 1:m) { # number of simulation
S=S0
asum=0
for (j in 1:n) { # length of path
E=rnorm(1,0,1)
path=(r-(1/2*(sigma^2)))*dt+(sigma*sqrt(dt)*E)
S=S*exp(path)
asum=asum+S}
if(Type=="c"){payoff=max((1/n)*asum-K,0)}
else if(Type=="p"){payoff=max(K-((1/n)*asum),0)}
else{payoff=max((1/n)*asum-K,0)}# default
sum=sum+payoff}
optionprice=(sum*exp(-r*T))/m
return(optionprice)}
Use MC simulation to price a European Call option on a stock with initial price of $155, strike price $140, a time to expiration equal to six months, a risk-free interest rate of 2.5% and a volatility of 23%. Consider a number of periods n=100 and a number of simulations m=1000.
MCAsian("c",155,140,1/12,0.025,0.23,100,1000)
[1] 15.02622
Question 3: Function Calculation (2pts)
For this question the below package is needed. Follow the example at bottom of p.171 to price the same Asian Call option using instead the approximate function referenced in the example. Compare to the MC simulation.
#Install required package
if(!require("fExoticOptions",quietly = TRUE))
install.packages("fExoticOptions",dependencies = TRUE, repos = "https://cloud.r-project.org")
TW<-TurnbullWakemanAsianApproxOption(TypeFlag = "c",S=155,SA=100,X=140,Time = 1/12,time = 1/12,tau = 0,r=0.1,b=0.1,sigma = 0.4)
print(TW)
Title:
Turnbull Wakeman Asian Approximated Option
Call:
TurnbullWakemanAsianApproxOption(TypeFlag = "c", S = 155, SA = 100,
X = 140, Time = 1/12, time = 1/12, tau = 0, r = 0.1, b = 0.1,
sigma = 0.4)
Parameters:
Value:
TypeFlag c
S 155
SA 100
X 140
Time 0.0833333333333333
time 0.0833333333333333
tau 0
r 0.1
b 0.1
sigma 0.4
Option Price:
15.75207
Description:
Sat Feb 2 19:45:36 2019
MCAsian("c",155,140,1/12,0.1,0.4,100,1000)
[1] 15.25276
The result of Turnbull and Wakeman Approximation asian ption price is certain, but the result of MC simulations asian option price is uncertain. it doesn’t mean Turnbull and Wakeman Approximation method is right. In MC simulations option price, the paths are independent. but paths are dependent in Turnbull and Wakeman Approximation method based on Black-Scholes models.
Question 4: Greeks Calculation (2pts)
Calculating the Greeks for the Asian Option is not as straightforward using the approximate function. Instead we can approximate using numerical differentiation. Describe how would you implement a numerical differentiation to calculate the Delta. Show the code execution and the intermediate values to calculate the Delta and the Theta for the considered Asian Call option.
Because Delat\(\Delta\) is to calculate first order derivative of option price formula, we can make current stock price add 1 and calculate its new option price, in the meanwhile, we make current stock price minus 1 and calculate another option price. Finally, the difference between two new option price divides 2, and result is Delta \(\Delta\).
TW<-TurnbullWakemanAsianApproxOption(TypeFlag = "c",S=155,SA=100,X=140,Time = 1/12,time = 1/12,tau = 0,r=0.1,b=0.1,sigma = 0.4)
# option price when current stock price goes up to 156
TW_up<-TurnbullWakemanAsianApproxOption(TypeFlag = "c",S=156,SA=100,X=140,Time = 1/12,time = 1/12,tau = 0,r=0.1,b=0.1,sigma = 0.4)
# option price when current stock price goes down to 154
TW_down<-TurnbullWakemanAsianApproxOption(TypeFlag = "c",S=154,SA=100,X=140,Time = 1/12,time = 1/12,tau = 0,r=0.1,b=0.1,sigma = 0.4)
# use numeric difference to calculate delta
delta_a<-(16.70042 -14.81406 )/2
delta_a
[1] 0.94318
# option price when expiration time adds 0.01
TW_long<-TurnbullWakemanAsianApproxOption(TypeFlag = "c",S=155,SA=100,X=140,Time = 1/12+0.01,time = 1/12,tau = 0,r=0.1,b=0.1,sigma = 0.4)
# option price when expiration time decreases 0.01
TW_short<-TurnbullWakemanAsianApproxOption(TypeFlag = "c",S=155,SA=100,X=140,Time = 1/12-0.01,time = 1/12,tau = 0,r=0.1,b=0.1,sigma = 0.4)
theta_a<-(10.23639 -15.75181 )/0.02
theta_a
[1] -275.771
Question 5: Evaluation of Results (2pts)
Explain how the price of the Asian Call option compares to the equivalent European Call option. Is it an expected behavior? What about the Delta comparison? Poorly stated insights will receive poor grade!
#Install package fOptions for pricing and evaluating basic options
if(!require("fOptions",quietly = TRUE))
install.packages("fOptions",dependencies = TRUE, repos = "https://cloud.r-project.org")
Frist of all, both of European option and Asian option are not an expected behavior because both their equation of option value include variable E where \(E~\epsilon(0,\sigma)\). This uncertain white noisy leads both European option and Asian option are unpredictable. In addition, both equations assume that risk-free rate is constant, but risk-free rate factually changes.
delta_european<-GBSGreeks(Selection = "delta",TypeFlag="c",S=155,X=140,Time=1/12,r=0.1,b=0.1,sigma=0.4)
delta_asian<-(16.70042 -14.81406 )/2
delta_european
[1] 0.8440798
delta_asian
[1] 0.94318
For deltas of European option and Asian option above,based on same variables, the result shows that delta of European option is smaller than delta of Asian option. it means that stock price change influences asian option price more than european option price. Every 1 unit stock price change associates with 0.94 unit of asian option price, but every 1 unit stock price change associates with 0.844 unit of european option price.
*http://computationalfinance.lsi.upc.edu
LS0tCnRpdGxlOiAiRklOQzYyMSBXaW50ZXIgMjAxOC0xOSBFeHRyYSBDcmVkaXQgKDEwcHRzKSIKYXV0aG9yOiAiWXUgSmlhIgpkYXRlOiAiMjAxOS0wMS0yMyIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBodG1sX2RvY3VtZW50OiBkZWZhdWx0CnN1YnRpdGxlOiBBc2lhbiBPcHRpb24gUHJpY2luZyAmIE1DIFNpbXVsYXRpb24KLS0tCgojIyMgQWJvdXQKClRoaXMgYXNzaWdubWVudCBpcyBhbiBleHRyYSBjcmVkaXQgb3Bwb3J0dW5pdHkgd29ydGggMTAgcG9pbnRzLiAgVGhlIGdvYWwgaXMgdG8gZGVtb25zdHJhdGUgeW91ciB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0b3BpYyBpbiB0aGUgZGlmZmVyZW50IGFyZWFzIG9mIHByb2JsZW0gc3RhdGVtZW50IHRocm91Z2ggYSBmbG93Y2hhcnQgZGlhZ3JhbSBwcm9wZWx5IG1hcmtlZCwgdGhlIGFuYWx5dGljcyB0aHJvdWdoIGEgY2xlYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdGhlbWF0aWNhbCBlcXVhdGlvbnMsIHRoZSBjb2RpbmcgdGhyb3VnaCB0aGUgY2xlYXIgYW5kIHByb3Blcmx5IGNvbW1lbnRlZCBleGVjdXRpb24gc3RlcHMsIGFuZCBmaW5hbGx5IHJlc3VsdHMgZXZhbHVhdGlvbiB0aHJvdWdoIHRoZSBhc3Nlc3NtZW50IG9mIHF1YWxpdHkgYW5kIGludGVncml0eS4gCgpUaGUgdG9waWMgb2YgaW50ZXJlc3QgaXMgdGhlIHByaWNpbmcgb2YgYW4gQXNpYW4gb3B0aW9uLiBBc2lhbiBvcHRpb25zIGFyZSBhIGZvcm0gb2YgZXhvdGljIG9wdGlvbnMgdW5saWtlIHRoZSBtb3JlIHZhbmlsbGEgRXVyb3BlYW4gb3B0aW9ucy4gIFRoZSBjYXNlIGNvbnNpZGVyZWQgaGVyZSBpcyBhIHNwZWNpYWwgdHlwZSBvZiBBc2lhbiBvcHRpb25zIHdoZXJlIHRoZSBwYXlvZmYgaXMgZ2l2ZW4gYnkgdGhlIGF2ZXJhZ2UgcHJpY2Ugb2YgdGhlIHVuZGVybGluZSBhc3NldCBvdmVyIHNvbWUgcHJlZGV0ZXJtaW5lZCBwZXJpb2QgdW50aWwgZXhwaXJhdGlvbiB0aW1lLiBPdGhlciB2YXJpYXRpb25zIG9mIEFzaWFuIG9wdGlvbnMgKG91dHNpZGUgb3VyIHNjb3BlKSBhcmUgcG9zc2libGUgYW5kIGxlZnQgZm9yIHRoZSByZWFkZXIncyBpbnZlc3RpZ2F0aW9uLiBUaGUgY2FzZSBpbiBwb2ludCBpcyBkZXNjcmliZWQgb24gcC4xNjkgLiAgTm90ZSB0aGF0IEFzaWFuIG9wdGlvbnMgYXJlIGNoYXJhY3Rlcml6ZWQgYXMgcGF0aCBkZXBlbmRlbnQgb3B0aW9ucy4gIEJ5IHRoaXMgd2UgbWVhbiB0aGF0IHRoZSBwYXlvZmYgb2YgdGhlIG9wdGlvbiBpcyBkZXBlbmRlbnQgb24gdGhlIGludGVybWVkaWF0ZSB2YWx1ZXMgb2YgdGhlIHVuZGVybGluZSBhc3NldCBhbG9uZyB0aGUgcGF0aC4gIEluIGNvbnRyYXN0IGEgRXVyb3BlYW4gb3B0aW9uIGlzIHBhdGggaW5kZXBlbmRlbnQgYmVjYXVzZSB0aGUgcGF5b2ZmIGRlcGVuZHMgb25seSBvbiB0aGUgZmluYWwgdmFsdWUgb2YgdGhlIHVuZGVybGluZSBhc3NldCwgYW5kIG5vdCBvbiB0aGUgaW50ZXJtZWRpYXRlIG9yIGhpc3RvcmljYWwgdmFsdWVzLiBUaGUgY2FzZSBvZiBBbWVyaWNhbiBvcHRpb25zIGlzIHNsaWdodGx5IHRyaWNreS4gQmVjYXVzZSBvZiB0aGUgZWFybHkgZXhlcmNpc2Ugb3Bwb3J0dW5pdHkgb25lIG1heSBiZSBpbmNsaW5lZCB0byB2aWV3IEFtZXJpY2FuIG9wdGlvbnMgYXMgcGF0aCBkZXBlbmRlbmRlbnQuIEhvd2V2ZXIgYXQgYW55IGV4ZXJjaXNlIHBvaW50IHRoZSBwYXlvZmYgaXMgb25seSBkZXBlbmRlbnQgb24gdGhlIGN1cnJlbnQgYXNzZXQgcHJpY2UgYW5kIG5vdCBoaXN0b3JpY2FsLiAgQXMgc3VjaCBpdCBpcyBub3QgcmVhbGx5IHBhdGggZGVwZW5kZW50LgoKIyMjIFNldHVwCgpSZW1lbWJlciB0byBhbHdheXMgc2V0IHlvdXIgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIHNvdXJjZSBmaWxlIGxvY2F0aW9uLiBHbyB0byAnU2Vzc2lvbicsIHNjcm9sbCBkb3duIHRvICdTZXQgV29ya2luZyBEaXJlY3RvcnknLCBhbmQgY2xpY2sgJ1RvIFNvdXJjZSBGaWxlIExvY2F0aW9uJy4gUmVhZCBjYXJlZnVsbHkgdGhlIGJlbG93IGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyB0byBjb21wbGV0ZSB0aGUgdGFza3MgYW5kIGFuc3dlciBhbnkgcXVlc3Rpb25zLiAgU3VibWl0IHlvdXIgd29yayB0byBSUHVicyBhcyBkZXRhaWxlZCBpbiBwcmV2aW91cyBub3Rlcy4gCgojIyMgTm90ZQoKQWx3YXlzIHJlYWQgY2FyZWZ1bGx5IHRoZSBpbnN0cnVjdGlvbnMgb24gU2FrYWkuICBGb3IgY2xhcml0eSwgdGFza3MvcXVlc3Rpb25zIHRvIGJlIGNvbXBsZXRlZC9hbnN3ZXJlZCBhcmUgaGlnaGxpZ2h0ZWQgaW4gcmVkIGNvbG9yICh2aXNpYmxlIGluIHByZXZpZXcpIGFuZCBudW1iZXJlZCBhY2NvcmRpbmcgdG8gdGhlaXIgcGFydGljdWxhciBwbGFjZW1lbnQgaW4gdGhlIHRhc2sgc2VjdGlvbi4gIFF1aXRlIG9mdGVuIHlvdSB3aWxsIG5lZWQgdG8gYWRkIHlvdXIgb3duIGNvZGUgY2h1bmsuCgpFeGVjdXRlIGFsbCBjb2RlIGNodW5rcywgcHJldmlldywgcHVibGlzaCwgYW5kIHN1Ym1pdCBsaW5rIG9uIFNha2FpIGZvbGx3b2luZyB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIE1ha2Ugc3VyZSB0byBhZGQgY29tbWVudHMgdG8geW91ciBjb2RlIHdoZXJlIGFwcHJvcHJpYXRlLiBVc2Ugb3duIGxhbmd1YWdlIQoKKipBbnkgc2lnbiBvZiBwbGFnaWFyaXNtLCB3aWxsIHJlc3VsdCBpbiBkaXNzbWlzc2FsIG9mIHdvcmshKioKCi0tLS0tLS0tLS0tLS0tCmBgYHtyfQojSW5zdGFsbCBwYWNrYWdlIHF1YW50bW9kIAppZighcmVxdWlyZSgicXVhbnRtb2QiLHF1aWV0bHkgPSBUUlVFKSkKICBpbnN0YWxsLnBhY2thZ2VzKCJxdWFudG1vZCIsZGVwZW5kZW5jaWVzID0gVFJVRSwgcmVwb3MgPSAiaHR0cHM6Ly9jbG91ZC5yLXByb2plY3Qub3JnIikKYGBgCgojIyMgUXVlc3Rpb24gMSA6IEZsb3djaGFydCBEaWFncmFtICgycHRzKQoKSW5zcGlyZWQgYnkgdGhlIGZsb3djaGFydCBkaWFncmFtIG9mIHRoZSBNQyBzaW11bGF0aW9uIGZvciBFdXJvcGVhbiBvcHRpb24sIGNyZWF0ZSBhbiBlcXVpdmFsZW50IGZsb3djaGFydCBkaWFncmFtIGZvciB0aGUgY29uc2lkZXJlZCBjYXNlIG9mIEFzaWFuIG9wdGlvbi4gRGVzY3JpYmUgdGhlIHZhcmlhYmxlcywgbGFiZWwgY2xlYXJseSwgIGFuZCB3cml0ZSB0aGUgZGlzY3JldGUgbWF0aGVtYXRpY2FsIHJlcHJlc2VudGF0aW9uIHRvIGJlIGNvZGVkIGxhdGVyLiBZb3UgY2FuIGNyZWF0ZSB0aGUgZmxvd2NoYXJ0IHVzaW5nIGEgc2VwYXJhdGUgdG9vbCBhbmQgaW5jbHVkZSBhbiBpbWFnZSBjYXB0dXJlIGhlcmUuICBBIGhhbmQgZHJhd24gaW1hZ2UgaXMgYWNjZXB0YWJsZSBvbmx5IGlmIHdlbGwgZXhlY3V0ZWQuCgohW1NvbHV0aW9uXShXZWNoYXRJTUcxMjkuanBlZykKCiMjIyBRdWVzdGlvbiAyOiBNQyBTaW11bGF0aW9uICgycHRzKQoKSW1wbGVtZW50IHRoZSBSLWNvZGUgZm9yIHRoZSBNQyBzaW11bGF0aW9uIHRvIHByaWNlIGFuIEFzaWFuIENhbGwgb3B0aW9uIHdpdGggaW5wdXQgY2hhcmFjdGVyaXN0aWNzIHNpbWlsYXIgdG8gdGhlIEV1cm9wZWFuIENhbGwgb3B0aW9uIGNvbnNpZGVyZWQgaW4gTGFiIDYsIHRhc2sgMkIuCgpgYGB7cn0KCk1DQXNpYW49ZnVuY3Rpb24oVHlwZSxTMCxLLFQscixzaWdtYSxuLG0sZHQ9VC9uKXsKICBzdW09MAogIGZvciAoaSBpbiAxOm0pIHsgIyBudW1iZXIgb2Ygc2ltdWxhdGlvbgogICAgUz1TMAogICAgYXN1bT0wCiAgICBmb3IgKGogaW4gMTpuKSB7ICMgbGVuZ3RoIG9mIHBhdGgKICAgICAKICAgICAgRT1ybm9ybSgxLDAsMSkgCiAgICAgIHBhdGg9KHItKDEvMiooc2lnbWFeMikpKSpkdCsoc2lnbWEqc3FydChkdCkqRSkKICAgICAgUz1TKmV4cChwYXRoKQogICAgICBhc3VtPWFzdW0rU30KICAgIGlmKFR5cGU9PSJjIil7cGF5b2ZmPW1heCgoMS9uKSphc3VtLUssMCl9CiAgICBlbHNlIGlmKFR5cGU9PSJwIil7cGF5b2ZmPW1heChLLSgoMS9uKSphc3VtKSwwKX0KICAgIGVsc2V7cGF5b2ZmPW1heCgoMS9uKSphc3VtLUssMCl9IyBkZWZhdWx0CiAgICBzdW09c3VtK3BheW9mZn0KICBvcHRpb25wcmljZT0oc3VtKmV4cCgtcipUKSkvbQpyZXR1cm4ob3B0aW9ucHJpY2UpfQoKYGBgClVzZSBNQyBzaW11bGF0aW9uIHRvIHByaWNlIGEgRXVyb3BlYW4gQ2FsbCBvcHRpb24gb24gYSBzdG9jayB3aXRoIGluaXRpYWwgcHJpY2Ugb2YgJDE1NSwgc3RyaWtlIHByaWNlICQxNDAsIGEgdGltZSB0byBleHBpcmF0aW9uIGVxdWFsIHRvIHNpeCBtb250aHMsIGEgcmlzay1mcmVlIGludGVyZXN0IHJhdGUgb2YgMi41JSBhbmQgYSB2b2xhdGlsaXR5IG9mIDIzJS4gQ29uc2lkZXIgYSBudW1iZXIgb2YgcGVyaW9kcyBuPTEwMCBhbmQgYSBudW1iZXIgb2Ygc2ltdWxhdGlvbnMgbT0xMDAwLgoKYGBge3J9CgpNQ0FzaWFuKCJjIiwxNTUsMTQwLDEvMTIsMC4wMjUsMC4yMywxMDAsMTAwMCkKCmBgYAoKCiMjIyBRdWVzdGlvbiAzOiAgRnVuY3Rpb24gQ2FsY3VsYXRpb24gKDJwdHMpCgpGb3IgdGhpcyBxdWVzdGlvbiB0aGUgYmVsb3cgcGFja2FnZSBpcyBuZWVkZWQuIEZvbGxvdyB0aGUgZXhhbXBsZSBhdCBib3R0b20gb2YgcC4xNzEgdG8gcHJpY2UgdGhlIHNhbWUgQXNpYW4gQ2FsbCBvcHRpb24gdXNpbmcgaW5zdGVhZCB0aGUgYXBwcm94aW1hdGUgZnVuY3Rpb24gcmVmZXJlbmNlZCBpbiB0aGUgZXhhbXBsZS4gQ29tcGFyZSB0byB0aGUgTUMgc2ltdWxhdGlvbi4KCmBgYHtyfQojSW5zdGFsbCByZXF1aXJlZCBwYWNrYWdlICAKaWYoIXJlcXVpcmUoImZFeG90aWNPcHRpb25zIixxdWlldGx5ID0gVFJVRSkpCiAgaW5zdGFsbC5wYWNrYWdlcygiZkV4b3RpY09wdGlvbnMiLGRlcGVuZGVuY2llcyA9IFRSVUUsIHJlcG9zID0gImh0dHBzOi8vY2xvdWQuci1wcm9qZWN0Lm9yZyIpCmBgYAoKCmBgYHtyfQpUVzwtVHVybmJ1bGxXYWtlbWFuQXNpYW5BcHByb3hPcHRpb24oVHlwZUZsYWcgPSAiYyIsUz0xNTUsU0E9MTAwLFg9MTQwLFRpbWUgPSAxLzEyLHRpbWUgPSAxLzEyLHRhdSA9IDAscj0wLjEsYj0wLjEsc2lnbWEgPSAwLjQpCnByaW50KFRXKQpNQ0FzaWFuKCJjIiwxNTUsMTQwLDEvMTIsMC4xLDAuNCwxMDAsMTAwMCkKYGBgCgpUaGUgcmVzdWx0IG9mIFR1cm5idWxsIGFuZCBXYWtlbWFuIEFwcHJveGltYXRpb24gYXNpYW4gcHRpb24gcHJpY2UgaXMgY2VydGFpbiwgYnV0IHRoZSByZXN1bHQgb2YgTUMgc2ltdWxhdGlvbnMgYXNpYW4gb3B0aW9uIHByaWNlIGlzIHVuY2VydGFpbi4gaXQgZG9lc24ndCBtZWFuIFR1cm5idWxsIGFuZCBXYWtlbWFuIEFwcHJveGltYXRpb24gbWV0aG9kIGlzIHJpZ2h0LiBJbiBNQyBzaW11bGF0aW9ucyBvcHRpb24gcHJpY2UsIHRoZSBwYXRocyBhcmUgaW5kZXBlbmRlbnQuIGJ1dCBwYXRocyBhcmUgZGVwZW5kZW50IGluIFR1cm5idWxsIGFuZCBXYWtlbWFuIEFwcHJveGltYXRpb24gbWV0aG9kIGJhc2VkIG9uIEJsYWNrLVNjaG9sZXMgbW9kZWxzLgoKIyMjIFF1ZXN0aW9uIDQ6IEdyZWVrcyBDYWxjdWxhdGlvbiAoMnB0cykKCkNhbGN1bGF0aW5nIHRoZSBHcmVla3MgZm9yIHRoZSBBc2lhbiBPcHRpb24gaXMgbm90IGFzIHN0cmFpZ2h0Zm9yd2FyZCB1c2luZyB0aGUgYXBwcm94aW1hdGUgZnVuY3Rpb24uICBJbnN0ZWFkIHdlIGNhbiBhcHByb3hpbWF0ZSB1c2luZyBudW1lcmljYWwgZGlmZmVyZW50aWF0aW9uLiAgRGVzY3JpYmUgaG93IHdvdWxkIHlvdSBpbXBsZW1lbnQgYSBudW1lcmljYWwgZGlmZmVyZW50aWF0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgRGVsdGEuICBTaG93IHRoZSBjb2RlIGV4ZWN1dGlvbiBhbmQgdGhlIGludGVybWVkaWF0ZSB2YWx1ZXMgdG8gY2FsY3VsYXRlIHRoZSBEZWx0YSBhbmQgdGhlIFRoZXRhIGZvciB0aGUgY29uc2lkZXJlZCBBc2lhbiBDYWxsIG9wdGlvbi4KCkJlY2F1c2UgRGVsYXQkXERlbHRhJCBpcyB0byBjYWxjdWxhdGUgZmlyc3Qgb3JkZXIgZGVyaXZhdGl2ZSBvZiBvcHRpb24gcHJpY2UgZm9ybXVsYSwgd2UgY2FuIG1ha2UgY3VycmVudCBzdG9jayBwcmljZSBhZGQgMSBhbmQgY2FsY3VsYXRlIGl0cyBuZXcgb3B0aW9uIHByaWNlLCBpbiB0aGUgbWVhbndoaWxlLCB3ZSBtYWtlIGN1cnJlbnQgc3RvY2sgcHJpY2UgbWludXMgMSBhbmQgY2FsY3VsYXRlIGFub3RoZXIgb3B0aW9uIHByaWNlLiBGaW5hbGx5LCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBuZXcgb3B0aW9uIHByaWNlIGRpdmlkZXMgMiwgYW5kIHJlc3VsdCBpcyBEZWx0YSAkXERlbHRhJC4KCmBgYHtyfQpUVzwtVHVybmJ1bGxXYWtlbWFuQXNpYW5BcHByb3hPcHRpb24oVHlwZUZsYWcgPSAiYyIsUz0xNTUsU0E9MTAwLFg9MTQwLFRpbWUgPSAxLzEyLHRpbWUgPSAxLzEyLHRhdSA9IDAscj0wLjEsYj0wLjEsc2lnbWEgPSAwLjQpCiMgb3B0aW9uIHByaWNlIHdoZW4gY3VycmVudCBzdG9jayBwcmljZSBnb2VzIHVwIHRvIDE1NgpUV191cDwtVHVybmJ1bGxXYWtlbWFuQXNpYW5BcHByb3hPcHRpb24oVHlwZUZsYWcgPSAiYyIsUz0xNTYsU0E9MTAwLFg9MTQwLFRpbWUgPSAxLzEyLHRpbWUgPSAxLzEyLHRhdSA9IDAscj0wLjEsYj0wLjEsc2lnbWEgPSAwLjQpCiMgb3B0aW9uIHByaWNlIHdoZW4gY3VycmVudCBzdG9jayBwcmljZSBnb2VzIGRvd24gdG8gMTU0ClRXX2Rvd248LVR1cm5idWxsV2FrZW1hbkFzaWFuQXBwcm94T3B0aW9uKFR5cGVGbGFnID0gImMiLFM9MTU0LFNBPTEwMCxYPTE0MCxUaW1lID0gMS8xMix0aW1lID0gMS8xMix0YXUgPSAwLHI9MC4xLGI9MC4xLHNpZ21hID0gMC40KQojIHVzZSBudW1lcmljIGRpZmZlcmVuY2UgdG8gY2FsY3VsYXRlIGRlbHRhCmRlbHRhX2E8LSgxNi43MDA0MiAtMTQuODE0MDYgKS8yCmRlbHRhX2EKYGBgCgpgYGB7cn0KIyBvcHRpb24gcHJpY2Ugd2hlbiBleHBpcmF0aW9uIHRpbWUgYWRkcyAwLjAxClRXX2xvbmc8LVR1cm5idWxsV2FrZW1hbkFzaWFuQXBwcm94T3B0aW9uKFR5cGVGbGFnID0gImMiLFM9MTU1LFNBPTEwMCxYPTE0MCxUaW1lID0gMS8xMiswLjAxLHRpbWUgPSAxLzEyLHRhdSA9IDAscj0wLjEsYj0wLjEsc2lnbWEgPSAwLjQpCiMgb3B0aW9uIHByaWNlIHdoZW4gZXhwaXJhdGlvbiB0aW1lIGRlY3JlYXNlcyAwLjAxClRXX3Nob3J0PC1UdXJuYnVsbFdha2VtYW5Bc2lhbkFwcHJveE9wdGlvbihUeXBlRmxhZyA9ICJjIixTPTE1NSxTQT0xMDAsWD0xNDAsVGltZSA9IDEvMTItMC4wMSx0aW1lID0gMS8xMix0YXUgPSAwLHI9MC4xLGI9MC4xLHNpZ21hID0gMC40KQp0aGV0YV9hPC0oMTAuMjM2MzkgLTE1Ljc1MTgxICkvMC4wMgp0aGV0YV9hCmBgYAoKIyMjIFF1ZXN0aW9uIDU6IEV2YWx1YXRpb24gb2YgUmVzdWx0cyAoMnB0cykKCkV4cGxhaW4gaG93IHRoZSBwcmljZSBvZiB0aGUgQXNpYW4gQ2FsbCBvcHRpb24gY29tcGFyZXMgdG8gdGhlIGVxdWl2YWxlbnQgRXVyb3BlYW4gQ2FsbCBvcHRpb24uICBJcyBpdCBhbiBleHBlY3RlZCBiZWhhdmlvcj8gV2hhdCBhYm91dCB0aGUgRGVsdGEgY29tcGFyaXNvbj8gIFBvb3JseSBzdGF0ZWQgaW5zaWdodHMgd2lsbCByZWNlaXZlIHBvb3IgZ3JhZGUhCmBgYHtyfQojSW5zdGFsbCBwYWNrYWdlIGZPcHRpb25zIGZvciBwcmljaW5nIGFuZCBldmFsdWF0aW5nIGJhc2ljIG9wdGlvbnMKaWYoIXJlcXVpcmUoImZPcHRpb25zIixxdWlldGx5ID0gVFJVRSkpCiAgaW5zdGFsbC5wYWNrYWdlcygiZk9wdGlvbnMiLGRlcGVuZGVuY2llcyA9IFRSVUUsIHJlcG9zID0gImh0dHBzOi8vY2xvdWQuci1wcm9qZWN0Lm9yZyIpCmBgYAoKRnJpc3Qgb2YgYWxsLCBib3RoIG9mIEV1cm9wZWFuIG9wdGlvbiBhbmQgQXNpYW4gb3B0aW9uIGFyZSBub3QgYW4gZXhwZWN0ZWQgYmVoYXZpb3IgYmVjYXVzZSBib3RoIHRoZWlyIGVxdWF0aW9uIG9mIG9wdGlvbiB2YWx1ZSBpbmNsdWRlIHZhcmlhYmxlIEUgd2hlcmUgJEV+XGVwc2lsb24oMCxcc2lnbWEpJC4gVGhpcyB1bmNlcnRhaW4gd2hpdGUgbm9pc3kgbGVhZHMgYm90aCBFdXJvcGVhbiBvcHRpb24gYW5kIEFzaWFuIG9wdGlvbiBhcmUgdW5wcmVkaWN0YWJsZS4gSW4gYWRkaXRpb24sIGJvdGggZXF1YXRpb25zIGFzc3VtZSB0aGF0IHJpc2stZnJlZSByYXRlIGlzIGNvbnN0YW50LCBidXQgcmlzay1mcmVlIHJhdGUgZmFjdHVhbGx5IGNoYW5nZXMuCgpgYGB7cn0KZGVsdGFfZXVyb3BlYW48LUdCU0dyZWVrcyhTZWxlY3Rpb24gPSAiZGVsdGEiLFR5cGVGbGFnPSJjIixTPTE1NSxYPTE0MCxUaW1lPTEvMTIscj0wLjEsYj0wLjEsc2lnbWE9MC40KQpkZWx0YV9hc2lhbjwtKDE2LjcwMDQyIC0xNC44MTQwNiApLzIKZGVsdGFfZXVyb3BlYW4KZGVsdGFfYXNpYW4KYGBgCkZvciBkZWx0YXMgb2YgRXVyb3BlYW4gb3B0aW9uIGFuZCBBc2lhbiBvcHRpb24gYWJvdmUsYmFzZWQgb24gc2FtZSB2YXJpYWJsZXMsIHRoZSByZXN1bHQgc2hvd3MgdGhhdCBkZWx0YSBvZiBFdXJvcGVhbiBvcHRpb24gaXMgc21hbGxlciB0aGFuIGRlbHRhIG9mIEFzaWFuIG9wdGlvbi4gaXQgbWVhbnMgdGhhdCBzdG9jayBwcmljZSBjaGFuZ2UgaW5mbHVlbmNlcyBhc2lhbiBvcHRpb24gcHJpY2UgbW9yZSB0aGFuIGV1cm9wZWFuIG9wdGlvbiBwcmljZS4gRXZlcnkgMSB1bml0IHN0b2NrIHByaWNlIGNoYW5nZSBhc3NvY2lhdGVzIHdpdGggMC45NCB1bml0IG9mIGFzaWFuIG9wdGlvbiBwcmljZSwgYnV0IGV2ZXJ5IDEgdW5pdCBzdG9jayBwcmljZSBjaGFuZ2UgYXNzb2NpYXRlcyB3aXRoIDAuODQ0IHVuaXQgb2YgZXVyb3BlYW4gb3B0aW9uIHByaWNlLiAKCgoqW2h0dHA6Ly9jb21wdXRhdGlvbmFsZmluYW5jZS5sc2kudXBjLmVkdSBdKGh0dHA6Ly9jb21wdXRhdGlvbmFsZmluYW5jZS5sc2kudXBjLmVkdSkK