Types of Resampling:

Monte Carlo Simulation:

Permutation Test:

Bootstrapping:

Jackknife :

Permutation Test:

Permutation: given a set of objects, how many different combinations of those objects can you create?

Test a Null Hypothesis:

Permutation;

  • permutation test is a simple way to compute the sampling distribution for any test-statisti under the strong null hypothesis that a set of variants has ABSOLUTELY NO EFFECT on the outcome

  • Permutation is only valid when the null hypothesis has NO ASSOCIATION

  • if the null is true, changing the exposure would have no effect on the outcome

  • the shuffeled data sets should look like real data, otherwise they should look different from the real data

  • Permutation tests are viable when we assume there is no difference between the treated and the untreated. In other words, the null = 0 in a permutation test because the mean should not be statistically significant from zero if the treatment has no effect

  • Permutations are just simulated data, and since we assume that the treatment has no effect, it doesn’t matter if we assign different results to different people

  • the ranking of the real test statistic among the shuffeled test statistics gives a p-value

Procedures for Permutation Tests:

  1. Analyze the Problem :
    • What is the hypothesis and the alternative?
    • What distribution is the data drawn from?
    • What losses are associated with bad decisions?
  2. Choose a Test Statistic: one that will distinguish the hypothesis from the alternative

  3. Rearrange the Observations (i.e. Permutations):

    • Compute the test staistic for all possible permutations of the data of the observations and generte a distribution of observed values of the statistic of interest under the null hypothesis of no difference between the two populations
  4. Make a Decision:

    • compare observed statistc to this empirical sampling distribution to see how unlikely our observed statistic is if the two distributions are the same(t-test)

    • If the value’s of the test statistic for the original data is an extreme value in the permutation distribution of the statsitic

    -if NOT an extreme value, fail to reject the null and rejectthe alternative

Permutation:

  1. collect data fram control and treatment

  2. merge samples to form a psuedo permutation

  3. sample w/o replacement from psuedo population to simluate control and treatment groups

  4. compute target statistic for each resample

  • where s is the standard deviation
  • n is the degrees of freedom used

\[T =\frac{\bar{X} - \bar{Y}}{s /\sqrt{n}} \] When using a two sample t test: where S^2 is the variance

\[T =\frac{\bar{X} - \bar{Y}}{\sqrt{\frac{(n_x - 1)S^2_x + (n_y - 1)S^2_y}{(n_x - 1) + (n_y - 1)}}}\]

t.test(permutations$treatment_mean, permutations$control_mean, var.equal = T, paired = F)

    Two Sample t-test

data:  permutations$treatment_mean and permutations$control_mean
t = 1.0824, df = 38, p-value = 0.2859
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -6.208601 20.475267
sample estimates:
mean of x mean of y 
 77.55000  70.41667 

Computing Sample Size:

\[n = (\frac{Z_\sigma}{E})^2\]

Symbol Definition Example
Z the value from te standard normal distribution reflectiing the confiedence interval that will be used Z = 1.96 for 95% (get value from Z table)
sigma standard deviation of the outcome variable example
E desired margin of error example
LS0tCnRpdGxlOiAiUmVzYW1wbGluZyBNZXRob2RzIGFuZCBQZXJtdXRhdGlvbiIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCi0gUmVzYW1wbGluZyBpcyBhIHZhcmlldHkgb2YgbWV0aG9kcyBmb3I6CgogICAgMSkgRXN0aW1hdGluZyB0aGUgcHJlY2lzaW9uIG9mIGEgc2FtcGxlIHN0YXRpc3RpYyBieSB1c2luZyBhIHN1YnNldChzKSBvZiBhdmFpbGFibGUgZGF0YSBvciBkcmF3aW5nIHJhbmRvbWx5IHdpdGggcmVwbGFjZW1lbnQgZnJvbSBhIHNldCBvZiBkYXRhIHBvaW50cyAoYm9vdHN0cmFwcGluZykKICAKICAgIDIpIEV4Y2hhbmdpbmcgbGFiZWxzIG9uIGRhdGEgcG9pbnRzIHdoZW4gcGVyZm9ybWluZyBzaWduaWZpY2FuY2UgdGVzdHMKICAKICAgIDMpIHZhbGlkYXRpbmcgbW9kZWxzIGJ5IHVzaW5nIHJhbmRvbSBzdWJzZXRzIChib290c3RyYXBwaW5nLCBjcm9zcyB2YWxpZGF0aW5nKQoKLSAqKlJlc2FtcGxpbmcqKiA6IGRyYXdpbmcgcmVwZWF0ZWQgc2FtcGxlcyBmcm9tIHRoZSBvcmlnaW5hbCBkYXRhIHNhbXBsZXMsIHVzaW5nIHRoZSBvYnNlcnZlci9nZW5lcmF0ZWQgZGF0YSB0byBwcm9kdWNlIG5ldyBoeXBvdGhldGljYWwgc2l0dWF0aW9ucy9zYW1wbGVzIHRoYXQgbWltaWMgdGhlIHVuZGVybHlpbmcgcG9wdWxhdGlvbiwgd2hpY2ggY2FuIHRoZW4gYmUgYW5hbHl6ZWQuCgotIFdlIHJlc2FtcGxlIGJlY2F1c2UgY29sbGVjdGluZyBkYXRhIGlzIGV4cGVuc2l2ZSwgYmVjYXVzZSB0aGVyZSBpcyBub3QgZW5vdWdoIGRhdGEgYXZhaWxhYmxlLCBvciB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRpc3RyaWJ1dGlvbiAoaS5lLiB0aGUgZGlzdHJpYnV0aW9uIGlzIHVua25vd24sIHVuY29tZm9ydGFibGUgbWFraW5nIGFzc3VtcHRpb24gYWJvdXQgdGhlIGRpc3RyaWJ1dGlvbiwgZGlzdHJpYnV0aW9uIG9mIHRoZSB0ZXN0IHN0YXRpc3RpY3MgaXMgbm90IGVhc2lseSBjb21wdXRlZCkKCgotIHJlc2FtcGxpbmcgd29ya3MgZm9yIGFueSB0ZXN0IHN0YXRpc3RpYyAtIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgdGhlIGRpc3RyaWJ1dGlvbiBpcyBrbm93bgoKLSBXaGVuIGFzc3VtcHRpb25zIGFyZSBtZXQgZm9yIHN0YW5kYXJkIG1ldGhvZHMsIHRoZXJlIGlzIGhpZ2ggc3RhdGlzdGljYWwgcG93ZXIgYnV0IGZsZXhhYmlsaXR5IGlzIHJlbGF0aXZlbHkgbG93CgotIFJlc2FtcGxpbmcgaGVscCBhbmFseXppbmcgcXVhbnRpZmlhYmxlIGRhdGEgdGhhdCBkbyBub3Qgc2F0aXNmeSBzdGF0aXN0aWNhbCBhc3N1bXB0aW9ucyBpbiB0cmFkaXRpb25hbCBwYXJhbWV0cmljIHRlc3RzIChlLmcuIHQtdGVzdHMsIEFOT1ZBLCB0d28gc2FtcGxlIG1lYW4gdGVzdCwgRi1UZXN0KQoKIyMgVHlwZXMgb2YgUmVzYW1wbGluZzoKCioqTW9udGUgQ2FybG8gU2ltdWxhdGlvbioqOiAKICAgCiAgLSBkZXJpdmVzIGRhdGEgZnJvbSBhIG1lY2hhbmlzbSAoc3VjaCBhcyBhIHBvcnBvcnRpb24pIHRoYXQgbW9kZWxzIHRoZSBwcm9jZXNzIHlvdSB3aXNoIHRvIHVuZGVyc3RhbmQgKHRoZSBwb3B1bGF0aW9uKQoKKipQZXJtdXRhdGlvbiBUZXN0Kio6CgogLSB0eXBlIG9mIHN0YXRpc3RpY2FsIHNpZ25pZmljYW5jZSB0ZXN0CiAtIGEgcmVmZXJlbmNlIGRpc3RyaXRidWl0b24gaXMgb2J0YWluZWQgYnkgY2FsY3VsYXRpbmcgYWxsIHBvc3NpYmxlIHZhbHVlcyBvZiBhIHRlc3Qgc3RhdGlzdGljIHVuZGVyIHJlYXJyYW5nZW1lbnRzIG9mIHRoZSBsYWJlbHMgb24gdGhlIG9ic2VydmVkIGRhdGEgcG9pbnRzLiAKIC0gc3VpdGFibGUgd2hlbmV2ZXIgdGhlIG51bGwgaHlwb3RoZXNpcyBtYWtlcyBhbGwgcGVybXV0YXRpb25zIG9mIHRoZSBvYnNlcnZlZCBkYXRhIGVxdWFsbHkgbGlrZWx5LgogLSBtZXRob2Qgc2hvdWxkIGJlIGVtcGxveWVkIHdoZW4geW91IGFyZSBkZWFsaW5nIHdpdGggYW4gdW5rbm93biBkaXN0cmlidXRpb24KIAogCioqQm9vdHN0cmFwcGluZyoqOgoKICAtIGVzdGltYXRlcyB0aGUgc2FtcGxpbmcgZGlzdHJpYnV0aW9uIG9mIGFuIGVzdGltYXRvciBieSBzYW1wbGluZyB3aXRoIHJlcGxhY2VtZW50IGZyb20gdGhlIG9yaWdpbmFsIGVzdGltYXRlCiAgLSBtb3N0IG9mIHdpdGggdGhlIHB1cnBvc2Ugb2YgZGVyaXZpbmcgcm9idXN0IGVzdGltYXRlcyBvZiBzdGFuZGFyZCBlcnJvcnMgYW5kIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIG9mIGEgcG9wdWxhdGlvbiBwYXJhbWV0ZXIKICAKKipKYWNra25pZmUqKiA6CgogIC0gdXNlZCBpbiBzdGF0aXN0aWNhbCBpbmZlcmVjZSB0byBlc3RpbWF0ZSB0aGUgYmlhcyBhbmQgc3RhbmRhcmQgZXJyb3IgaW4gYSBzdGF0aXN0aWMKICAtIHByb3ZpZGVzIGEgc3lzdGVtYXRpYyBtZXRob2Qgb2YgcmVzYW1wbGluZyB3aXRoIGEgbWlsZCBhbW91bnQgb2YgY2FsY3VsYXRpb25zCiAgLSBPZmZlcnMgaW1wcm92ZWQgZXN0aW1hdGUgb2YgdGhlIHNhbXBsZSBwYXJhbWV0ZXIgdG8gY3JlYXRlIGxlc3Mgc2FtcGxpbmcgYmlhcwogIAogIAojIyBQZXJtdXRhdGlvbiBUZXN0OgoKKipQZXJtdXRhdGlvbioqOiBnaXZlbiBhIHNldCBvZiBvYmplY3RzLCBob3cgbWFueSBkaWZmZXJlbnQgY29tYmluYXRpb25zIG9mIHRob3NlIG9iamVjdHMgY2FuIHlvdSBjcmVhdGU/CgotIFBlcm11dGF0aW9uIGlzIGVzc2VuaXRhbGx5IGFuIG5DayBwcm9ibGVtcyB3aGVyZSAkJFxiaW5vbXtufXtrfSA9IFxmcmFje24hfXtrIShuLWspIX0kJAoKLSBuIGlzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMvb2JqZWN0cyB0byBjaG9vc2UgZnJvbSBhbmQgayBpcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzL29iamVjdHMgY2hvc2VuLiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgNiBvYmplY3RzLCBhbmQgY2FuIG9ubHkgdGFrZSB0aHJlZSBhdCBhIHRpbWUsIGhvdyBtYW55IHVuaXF1ZSBjb21iaW5hdGlvbnMgb2YgdGhvc2UgNiBvYmplY3RzIHdpbGwgeW91IGdldD8KJCRcYmlub217bn17a30gPSBcZnJhY3tuIX17ayEobi1rKSF9ID1cYmlub217Nn17M30gPSBcZnJhY3shNn17MyEoNi0zKSF9JCQKCiMjIFRlc3QgYSBOdWxsIEh5cG90aGVzaXM6CgogLSBFc3RhYmxpc2ggdGVzdCBzdGF0aXN0aWMgKGUuZy4gcmlzayBvZiBkaWFiZXRlcykKIC0gY29tcHV0ZSB0aGUgc2FtcGxpbmcgZGlzdHJpYnV0aW9uIG9mIHRoZSB0ZXN0IHN0YXRpc3RpYyB3aGVuIHRoZSBudWxsIGh5cG90aGVzaXMgaXMgdHJ1ZQogLSBUaGUgcC12YWx1ZSBpcyB0aGUgcHJvYmFibGl0eSB0aGF0IHRoZSB0ZXN0IHN0YWlzdGljIHdvdWxkIGJlIGF0IGxlYXN0IGFzIGV4dHJlbWUgYXMgd2Ugb2JzZXJ2ZWQgaWYgdGhlIG51bGwgaHlwb3RoZXNpcyB3ZXJlIHRydWUKIC0gdG8gZXN0aW1hdGUgdGhlIHNhbXBsaW5nIGRpc3RyaWJ1dGlvbiBvZiB0aGUgdGVzdCBzdGF0aXN0aWMsIHdlIG5lZWQgbWFueSBzYW1wbGVzIGdlbmVyYXRlZCB1bmRlciB0aGUgc3Ryb25nIG51bGwKIAojIyMgUGVybXV0YXRpb247CgogIC0gcGVybXV0YXRpb24gdGVzdCBpcyBhIHNpbXBsZSB3YXkgdG8gY29tcHV0ZSB0aGUgc2FtcGxpbmcgZGlzdHJpYnV0aW9uIGZvciBhbnkgdGVzdC1zdGF0aXN0aSB1bmRlciB0aGUgc3Ryb25nIG51bGwgaHlwb3RoZXNpcyB0aGF0IGEgc2V0IG9mIHZhcmlhbnRzIGhhcyAqKkFCU09MVVRFTFkgTk8gRUZGRUNUKiogb24gdGhlIG91dGNvbWUKICAKICAtIFBlcm11dGF0aW9uIGlzIG9ubHkgdmFsaWQgd2hlbiB0aGUgbnVsbCBoeXBvdGhlc2lzIGhhcyAqKk5PIEFTU09DSUFUSU9OKioKICAKICAtIGlmIHRoZSBudWxsIGlzIHRydWUsIGNoYW5naW5nIHRoZSBleHBvc3VyZSB3b3VsZCBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgb3V0Y29tZQogIAogIC0gdGhlIHNodWZmZWxlZCBkYXRhIHNldHMgc2hvdWxkIGxvb2sgbGlrZSByZWFsIGRhdGEsIG90aGVyd2lzZSB0aGV5IHNob3VsZCBsb29rIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIGRhdGEKCiAgLSAqUGVybXV0YXRpb24gdGVzdHMgYXJlIHZpYWJsZSB3aGVuIHdlIGFzc3VtZSB0aGVyZSBpcyBubyBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHRyZWF0ZWQgYW5kIHRoZSB1bnRyZWF0ZWQuIEluIG90aGVyIHdvcmRzLCB0aGUgbnVsbCA9IDAgaW4gYSBwZXJtdXRhdGlvbiB0ZXN0IGJlY2F1c2UgdGhlIG1lYW4gc2hvdWxkIG5vdCBiZSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGZyb20gemVybyBpZiB0aGUgdHJlYXRtZW50IGhhcyBubyBlZmZlY3QqCiAgCiAgLSBQZXJtdXRhdGlvbnMgYXJlIGp1c3Qgc2ltdWxhdGVkIGRhdGEsIGFuZCBzaW5jZSB3ZSBhc3N1bWUgdGhhdCB0aGUgdHJlYXRtZW50IGhhcyBubyBlZmZlY3QsIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHdlIGFzc2lnbiBkaWZmZXJlbnQgcmVzdWx0cyB0byBkaWZmZXJlbnQgcGVvcGxlCiAgCiAgLSB0aGUgcmFua2luZyBvZiB0aGUgcmVhbCB0ZXN0IHN0YXRpc3RpYyBhbW9uZyB0aGUgc2h1ZmZlbGVkIHRlc3Qgc3RhdGlzdGljcyBnaXZlcyBhIHAtdmFsdWUKICAKIyMgUHJvY2VkdXJlcyBmb3IgUGVybXV0YXRpb24gVGVzdHM6CgoxKSAqKkFuYWx5emUgdGhlIFByb2JsZW0qKiA6CiAgICAtIFdoYXQgaXMgdGhlIGh5cG90aGVzaXMgYW5kIHRoZSBhbHRlcm5hdGl2ZT8KICAgIC0gV2hhdCBkaXN0cmlidXRpb24gaXMgdGhlIGRhdGEgZHJhd24gZnJvbT8KICAgIC0gV2hhdCBsb3NzZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCBiYWQgZGVjaXNpb25zPwogICAgCjIpICoqQ2hvb3NlIGEgVGVzdCBTdGF0aXN0aWMqKjogKm9uZSB0aGF0IHdpbGwgZGlzdGluZ3Vpc2ggdGhlIGh5cG90aGVzaXMgZnJvbSB0aGUgYWx0ZXJuYXRpdmUqCgozKSAqKlJlYXJyYW5nZSB0aGUgT2JzZXJ2YXRpb25zIChpLmUuIFBlcm11dGF0aW9ucykqKjogCgogICAgLSBDb21wdXRlIHRoZSB0ZXN0IHN0YWlzdGljIGZvciAqKmFsbCBwb3NzaWJsZSBwZXJtdXRhdGlvbnMqKiBvZiB0aGUgZGF0YSBvZiB0aGUgb2JzZXJ2YXRpb25zIGFuZCBnZW5lcnRlIGEgZGlzdHJpYnV0aW9uIG9mIG9ic2VydmVkIHZhbHVlcyBvZiB0aGUgc3RhdGlzdGljIG9mIGludGVyZXN0IHVuZGVyIHRoZSBudWxsIGh5cG90aGVzaXMgb2Ygbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gcG9wdWxhdGlvbnMKCjQpICoqTWFrZSBhIERlY2lzaW9uKio6CgogICAgLSBjb21wYXJlIG9ic2VydmVkIHN0YXRpc3RjIHRvIHRoaXMgZW1waXJpY2FsIHNhbXBsaW5nIGRpc3RyaWJ1dGlvbiB0byBzZWUgaG93IHVubGlrZWx5IG91ciBvYnNlcnZlZCBzdGF0aXN0aWMgaXMgaWYgdGhlIHR3byBkaXN0cmlidXRpb25zIGFyZSB0aGUgc2FtZSh0LXRlc3QpCgogICAgLSBJZiB0aGUgdmFsdWUncyBvZiB0aGUgdGVzdCBzdGF0aXN0aWMgZm9yIHRoZSBvcmlnaW5hbCBkYXRhIGlzIGFuICoqZXh0cmVtZSoqIHZhbHVlIGluIHRoZSBwZXJtdXRhdGlvbiBkaXN0cmlidXRpb24gb2YgdGhlIHN0YXRzaXRpYwogICAgCiAgICAtaWYgTk9UIGFuIGV4dHJlbWUgdmFsdWUsICpmYWlsIHRvIHJlamVjdCB0aGUgbnVsbCogYW5kIHJlamVjdHRoZSBhbHRlcm5hdGl2ZQoKIyMjIFBlcm11dGF0aW9uOgoKICAxKSBjb2xsZWN0IGRhdGEgZnJhbSBjb250cm9sIGFuZCB0cmVhdG1lbnQKICAKICAyKSBtZXJnZSBzYW1wbGVzIHRvIGZvcm0gYSBwc3VlZG8gcGVybXV0YXRpb24KICAKICAzKSBzYW1wbGUgdy9vIHJlcGxhY2VtZW50IGZyb20gcHN1ZWRvIHBvcHVsYXRpb24gdG8gc2ltbHVhdGUgY29udHJvbCBhbmQgdHJlYXRtZW50IGdyb3VwcwogIAogIDQpIGNvbXB1dGUgdGFyZ2V0IHN0YXRpc3RpYyBmb3IgZWFjaCByZXNhbXBsZSAKICAKICAtIHdoZXJlIHMgaXMgdGhlIHN0YW5kYXJkIGRldmlhdGlvbgogIC0gbiBpcyB0aGUgZGVncmVlcyBvZiBmcmVlZG9tIHVzZWQKICAKICAkJFQgPVxmcmFje1xiYXJ7WH0gLSBcYmFye1l9fXtzIC9cc3FydHtufX0gJCQKICBXaGVuIHVzaW5nIGEgdHdvIHNhbXBsZSB0IHRlc3Q6CiAgICB3aGVyZSBTXjIgaXMgdGhlIHZhcmlhbmNlCiAgCiAgCiAgJCRUID1cZnJhY3tcYmFye1h9IC0gXGJhcntZfX17XHNxcnR7XGZyYWN7KG5feCAtIDEpU14yX3ggKyAobl95IC0gMSlTXjJfeX17KG5feCAtIDEpICsgKG5feSAtIDEpfX19JCQKICAKICAKICAKICAKICAKICAKICAKICAKICAKYGBge3J9CgpsaWJyYXJ5KHRpZHl2ZXJzZSkKCiMxKSBjb2xsZWN0IGRhdGEgZnJvbSBjb250cm9sIGFuZCB0cmVhdG1lbnQ6CgoKCnRyZWF0bWVudCA8LSBjKDEyMSwgMTE4LCAzNCkKCmNvbnRyb2wgPC0gYygxMTAsIDEyLCAyMikKCnNhbXBsZXMgPC0gYyh0cmVhdG1lbnQsIGNvbnRyb2wpCgpwZXJtdXRhdGlvbnMgPC0gZGF0YS5mcmFtZSgKICBwZXJtdXRhdGlvbiA9IDE6MjAsCiAgdHJlYXRtZW50X21lYW4gPSBtZWFuKHRyZWF0bWVudCksCiAgY29udHJvbF9tZWFuID0gbWVhbihjb250cm9sKQopCgpmb3IoIGkgaW4gMjoyMCl7CiAgCiAgCiAgcGVybXV0YXRpb25zJHRyZWF0bWVudF9tZWFuW2ldID0gbWVhbihzYW1wbGUoc2FtcGxlcywgMywgcmVwbGFjZSA9IEYpKQogIHBlcm11dGF0aW9ucyRjb250cm9sX21lYW5baV0gPSBtZWFuKHNhbXBsZShzYW1wbGVzLCAzLCByZXBsYWNlID0gRikpCn0KCnBlcm11dGF0aW9ucyA9IG11dGF0ZShwZXJtdXRhdGlvbnMsIG51bWVyYXRvciA9IHRyZWF0bWVudF9tZWFuIC0gY29udHJvbF9tZWFuKQoKCiN0IHRlc3Q6Cgp0cmVhdGVkX3Blcm1fbWVhbiA8LSBtZWFuKHBlcm11dGF0aW9ucyR0cmVhdG1lbnRfbWVhbikKCmNvbnRyb2xfcGVybV9tZWFuIDwtIG1lYW4ocGVybXV0YXRpb25zJGNvbnRyb2xfbWVhbikKCnRyZWF0ZWRfcGVybV92YXJpYW5jZSA8LSB2YXIocGVybXV0YXRpb25zJHRyZWF0bWVudF9tZWFuKQoKY29udHJvbF9wZXJtX3ZhcmlhbmNlIDwtIHZhcihwZXJtdXRhdGlvbnMkY29udHJvbF9tZWFuKQoKbWVhbl9udW1lcmF0b3I8LW1lYW4ocGVybXV0YXRpb25zJG51bWVyYXRvcikKCmRlbm9tIDwtIHNxcnQoKDIqdHJlYXRlZF9wZXJtX3ZhcmlhbmNlKSsoMip0cmVhdGVkX3Blcm1fdmFyaWFuY2UpKQoKVCA9IG1lYW5fbnVtZXJhdG9yIC8gZGVub20KCiN0LnRlc3QgZnVuY3Rpb24gZm9yIHR3byBzYW1wbGUgdCB0ZXN0CnQudGVzdChwZXJtdXRhdGlvbnMkdHJlYXRtZW50X21lYW4sIHBlcm11dGF0aW9ucyRjb250cm9sX21lYW4sIHZhci5lcXVhbCA9IFQsIHBhaXJlZCA9IEYpCgpgYGAKCmBgYHtyfQoKYGBgCgojIyMgQ29tcHV0aW5nIFNhbXBsZSBTaXplOgoKJCRuID0gKFxmcmFje1pfXHNpZ21hfXtFfSleMiQkCgpTeW1ib2wgfCBEZWZpbml0aW9uIHwgRXhhbXBsZQotLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0tLS0tLS0tClogfCB0aGUgdmFsdWUgZnJvbSB0ZSBzdGFuZGFyZCBub3JtYWwgZGlzdHJpYnV0aW9uIHJlZmxlY3RpaW5nIHRoZSBjb25maWVkZW5jZSBpbnRlcnZhbCB0aGF0IHdpbGwgYmUgdXNlZCB8IFogPSAxLjk2IGZvciA5NSUgKGdldCB2YWx1ZSBmcm9tIFogdGFibGUpCnNpZ21hIHwgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBvdXRjb21lIHZhcmlhYmxlfGV4YW1wbGUKRSB8IGRlc2lyZWQgbWFyZ2luIG9mIGVycm9yfCBleGFtcGxlCgoKIyMjIFtFeGFtcGxlXShodHRwOi8vc3Bod2ViLmJ1bWMuYnUuZWR1L290bHQvbXBoLW1vZHVsZXMvYnMvYnM3MDRfcG93ZXIvQlM3MDRfUG93ZXJfcHJpbnQuaHRtbCkKCgojIyMgW1Bvd2VyIFRlc3RdKGh0dHBzOi8vd3d3LnN0YXRtZXRob2RzLm5ldC9zdGF0cy9wb3dlci5odG1sKQoK