Last Updated: 05/27/2025
Course Title
PSY:5330 – Principles of Psychological Assessment (Spring 2026)
Course Meeting Time and
Place
Tuesday & Thursday 9:30 a.m.–10:45 a.m., 109 Stuit Hall (STH)
Course Home
The University of Iowa
The College of Liberal Arts and Sciences
Department of Psychological and Brain Sciences
The College of Liberal Arts and Sciences (CLAS) is the home of this
course, and CLAS governs the policies and procedures for its courses.
Graduate students, however, must adhere to the academic deadlines set
by the Graduate College.
Departmental
Resources
Department of Psychological and Brain Sciences: https://psychology.uiowa.edu
Department of Psychological and Brain Sciences Main Office: G60
Psychological and Brain Sciences Building (335-2406)
Director of Graduate Studies: Ryan LaLumiere (ryan-lalumiere@uiowa.edu;
335-3681)
Departmental Executive Officer (DEO)/Department Chair: Professor
Blumberg (mark-blumberg@uiowa.edu;
335-2424)
Prerequisites
To succeed in the class, it is helpful to have foundational
understanding of correlation and multiple regression.
Description of
Course
Much of the current discussion in psychology surrounding the
replication crisis deals with questionable research practices. However,
the field has paid insufficient attention to how lousy/noisy measures
might contribute to the replication crisis (Loken & Gelman, 2017).
In this class, we cover content that is relevant to all of Psychology
and science more broadly, including how to develop, administer, score,
integrate, and interpret measures. Topics will include, for example,
psychometrics (reliability and validity), prediction, structural equation modeling, factor analysis, signal
detection theory, item response theory, adaptive testing, longitudinal/repeated measurement, and issues in
cognitive, social/behavioral, and psychophysiological assessment.
In this course, we examine basic psychometrics and the background,
development, evaluation, administration, scoring, integration, and
interpretation of selected techniques in psychological assessment. The
course applies a scientific perspective to psychological assessment.
You are urged to reconsider your decision to take this class if you
are reluctant to examine these topics in a scientific manner.
Learning Outcomes
The focus of this class is NOT on application (e.g., how to assess
each psychological disorder, how to use particular measures, etc). This
course is focused on important principles of psychological
assessment. The goal of the class is to give you lots of “thinking
tools” relevant to psychological assessment—i.e., “how to think” about
and critically evaluate assessments in psychology—to help you advance
your research program. Learning the important principles will put you in
a better position to learn any assessment, and to develop better
ones.
Supplemental
Resources
Even though the course is focused on principles of psychological
assessment and not on application, I want you to be able to apply the
principles we discuss. So, I provide lots of additional readings and
resources on the assessment of particular disorders, using particular
measures, etc. These supplemental resources are in the “For More Info”
folder in ICON. The folder also
includes an EndNote file with the course readings. In addition, I
provide a companion book (see below).
Companion Book
I want those who are interested to be in the best position to apply
the principles we discuss. Thus, I created a companion book for the
course that includes practical data and analysis examples to help you
better understand the principles and how to apply them in your own
research. The companion book includes exercises to help you test your
comprehension. The companion book is NOT intended to replace the
importance of reading the required primary source
articles (which are covered on the exams). You are NOT
required or expected to read the companion book for this class. The
companion book is merely meant to be a helpful supplementary resource
for those who are interested. You can access the companion book here: https://isaactpetersen.github.io/Principles-Psychological-Assessment
Academic Honesty and
Misconduct
All students in CLAS courses are expected to abide by the college’s
standards of academic honesty. Academic misconduct must be reported
to the Graduate College according to Section F of the Graduate
College Manual. Please note that collaboration with other classmates
during exams is not permitted. However, I do encourage you to
collaborate with classmates on readings and to prepare for
exams (e.g., informal study groups). In addition, you are expected to
follow the course’s policy on the use of artificial intelligence (AI),
which is outlined below.
Artificial
Intelligence (AI) Policy
Because writing, analytical, and critical thinking skills are part of
the learning outcomes of this course, all work submitted by students
should be prepared by the student. You are training these cognitive
muscles; if you go to the gym, you would not have AI lift the weights
for you. For these reasons, AI-generated submissions are not permitted
and will be treated as plagiarism. Learning these core foundational
skills will make you a better user of AI in the future, because you will
be better-positioned in the future to critically evaluate AI responses
and to identify when (and the ways in which) its responses are
inaccurate. Moreover, in many industries, use of AI is not permitted
because you cannot share the company’s proprietary information. Thus,
developing strong competencies in these domains (without the use of AI)
will prepare you for a competitive workplace.
Course Requirements
and Policies
Lecture
The course is primarily lecture. We will meet twice weekly for
lectures, at the time and location described above. There is considerable material to cover,
and we will move quickly. You should feel free to ask questions during
lecture, although some questions may need to be deferred given the need
to complete coverage of specific material. Questions and further
discussion of class material are always welcome during office hours
and via e-mail. Please bear in mind that extensive or complex questions
may not be addressable over e-mail.
Lecture
Recordings
My intention is to record lectures so the lectures are available to
you virtually and in person so you have the choice of viewing them how
you see fit and so you may review them. Recorded lectures will be posted
on the “UICapture” tab in ICON.
Unfortunately, the recordings do not capture when I draw on the
classroom whiteboard. Recordings will be available up to 48 hours after
class (for Thursday lectures) or until the Thursday class period (for
Tuesday lectures). However, please do not count on recordings being
available, in case I accidentally forget to initiate the recording
or there is a technical malfunction. The availability of lecture
recordings will not be extended beyond 48 hours after lecture—the
recordings are meant to help people keep up with lectures and for
students to retrieve the relevant content if they missed anything during
the live lecture or if they miss the lecture; they are not meant to be a
study method that allows people to fall behind in class from week to
week. If you miss something and are unable to watch the lecture
recording, you can get/review notes with a peer, and then come to office
hours if you have specific questions.
Attendance and
Participation
Attendance and participation are strongly encouraged to maximize your
and others’ learning.
Readings
We have lots of content to cover, and the lectures will move quickly.
Thus, doing the relevant readings before each class will help
you best come prepared to learn the material presented in class.
Readings and other materials will be posted on ICON. The articles to read are
specified in the Articles section of the
syllabus.
Examinations
There will be 2 exams. Exam 1 will be administered during class time.
The date, time, and location of the final exam will be announced by the
5th week of class by the College of Liberal Arts and Sciences; the
duration of the final exam will be 120 minutes. The exams will be short
answer/essay questions. The final exam is non-cumulative; each exam will
emphasize information presented for the half of the class that precedes
it. However, some integration of information will be required for
questions on the second exam. Exam questions can come from lectures or
required readings.
Missing Exams
University
regulations require that students be allowed to make up examinations
that have been missed due to illness, religious holy days, military
service obligations (including service-related medical appointments), or
other unavoidable circumstances or University-sponsored activities.
Note: the format of the make-up exam may differ from the original exam.
If you know that you must be away at the time of an exam for one of
these reasons, please contact me in advance whenever possible to
schedule a make-up exam.
Paper
You will write a final/term paper on a topic pertaining to
assessment. The paper can be a literature review pertaining to
assessment (with recommendations), or it can be a paper on the
development of an assessment technique. The goal is for the paper to be
as relevant to your research interests as possible, so it directly
advances your research program. Please do not stress about the paper.
Your paper should be less than 20 pages (excluding references). It is
okay (and encouraged!) for you to use, as your paper, something that you
are already working on or to write a paper that you are submitting for
another assignment—consider writing a paper that could be a publication.
I want to keep the topic requirements of the paper flexible and
open-ended so the paper can be as relevant for your research program as
possible—the only requirement is that the paper topic is relevant to
assessment, and that your paper incorporates ideas we discuss in
class.
Your final paper is due before the last class (Deadline:
9:30 am on Thursday, May 2). Please submit your paper via
ICON.
Articles
The section covered for each class is described in the Course Outline. The articles to read for each
section are specified below. Articles are posted in the “Files” tab on
ICON.
*Designates a paper that you should read, get the basic idea, and
remember where to find it if you need further information. These are
typically historical papers, illustrations of specific techniques, or
useful references.
References highlighted in yellow are the readings that you should pay
closest attention to. Blue highlights provide additional useful
information.
Psychometrics,
Prediction, and General Issues
Science and the
Replication Crisis
Section 1
Loken, E., & Gelman, A. (2017). Measurement error and the
replication crisis. Science, 355(6325), 584–585. https://doi.org/10.1126/science.aal3618
McFall, R. M. (1991). Manifesto for a science of clinical
psychology. The Clinical Psychologist, 44(6), 75–91.
McFall, R. M. (2000). Elaborate reflections on a simple
manifesto. Applied & Preventive Psychology, 9(1), 5–21. https://doi.org/10.1016/s0962-1849(05)80035-6
Reliability
Section 2
McNeish, D. (2018). Thanks coefficient alpha, we’ll take it
from here. Psychological Methods, 23(3), 412–433. https://doi.org/10.1037/met0000144
*Galton, F. (1948). Classification of men according to their natural
gifts, 1869. In W. Dennis (Ed.), Readings in the history of
psychology (pp. 231–247). Appleton-Century-Crofts. https://psycnet.apa.org/record/2006-10213-000
*Garland, L. H. (1960). The problem of observer error. Bulletin
of the New York Academy of Medicine, 36(9), 570–584.
Section 3
Schmidt, F. L., & Hunter, J. E. (1996). Measurement error
in psychological research: Lessons from 26 research scenarios.
Psychological Methods, 1(2), 199–223. https://doi.org/10.1037/1082-989X.1.2.199
Wiggins, J. S. (1973). Observational techniques: I. Generalizability
and facets of observation. In J. S. Wiggins (Ed.), Personality and
prediction: Principles of personality assessment (pp. 277–295).
Addison-Wesley.
Validity
Section 4
Campbell, D. T., & Fiske, D. W. (1959). Convergent and
discriminant validation by the multitrait-multimethod matrix.
Psychological Bulletin, 56(2), 81–105. https://doi.org/10.1037/h0046016
Hayes, S. C., Nelson, R. O., & Jarrett, R. B. (1987). The
treatment utility of assessment: A functional approach to evaluating
assessment quality. American Psychologist, 42, 963–974. https://doi.org/10.1037/0003-066X.42.11.963
Meehl, P. E. (1973). Chapter 1. Psychodiagnosis: Selected
papers. University of Minnesota Press.
[This is Cronbach, L. J.,
& Meehl, P. E. (1955). Construct validity in psychological tests.
Psychological Bulletin, 52(4), 281–302. https://doi.org/10.1037/h0040957]
Section 5
Sechrest, L. (1963). Incremental validity: A recommendation.
Educational and Psychological Measurement, 23, 153–158. https://doi.org/10.1177/001316446302300113
Shavelson, R. J., Webb, N. M., & Rawley, R. L. (1989).
Generalizability theory. American Psychologist, 44, 922–932. https://doi.org/10.1037/0003-066X.44.6.922
Bornstein, R. F. (2011). Toward a process-focused model of test score
validity: Improving psychological assessment in science and practice.
Psychological Assessment, 23(2), 532–544. https://doi.org/10.1037/a0022402
*American Educational Research Association, American Psychological
Association, & National Council on Measurement in Education. (2014).
Standards for educational and psychological testing. American
Educational Research Association.
[This is available in the
clinic library. You don’t need to read this for our class, but you
should know it exists as a reference, because it sets the standard for
APA journals, licensure exams, and beyond.]
Emerging
Perspectives in Measurement
Structural
Equation Modeling (SEM)
Section 6
Bollen, K. A., & Lennox, R. D. (1991). Conventional wisdom
on measurement: A structural equation perspective. Psychological
Bulletin, 110(2), 305–314. https://doi.org/10.1037/0033-2909.110.2.305
Podsakoff, P. M., MacKenzie, S. B., & Podsakoff, N. P.
(2012). Sources of method bias in social science research and
recommendations on how to control it. Annual Review of Psychology,
63(1), 539–569. https://doi.org/10.1146/annurev-psych-120710-100452
Edwards, J. R., & Bagozzi, R. P. (2000). On the nature and
direction of relationships between constructs and measures.
Psychological Methods, 5(2), 155–174. https://doi.org/10.1037/1082-989X.5.2.155
[read pp. 155–162 carefully,
but don’t worry about the complex path models that follow unless they
are relevant to your own research.]
Item Response
Theory (IRT)
Section 7
Embretson, S. E. (1996). The new rules of measurement.
Psychological Assessment, 8, 341–349. https://doi.org/10.1037/1040-3590.8.4.341
Krueger, R. F., Nichol, P. E., Hicks, B. M., Markon, K. E.,
Patrick, C. J., lacono, W. G., & McGue, M. (2004). Using latent
trait modeling to conceptualize an alcohol problems continuum.
Psychological Assessment, 16(2), 107–119. https://doi.org/10.1037/1040-3590.16.2.107
Cooper, L. D., & Balsis, S. (2009). When less is more: How fewer
diagnostic criteria can indicate greater severity. Psychological
Assessment, 21(3), 285–293. https://doi.org/10.1037/a0016698
Reise, S. P., & Waller, N. G. (2009). Item response theory and
clinical measurement. Annual Review of Clinical Psychology,
5(1), 27–48. https://doi.org/10.1146/annurev.clinpsy.032408.153553
Prediction
Basics
Section 8
Meehl, P. E. (1973). Chapter 2. Psychodiagnosis: Selected
papers. University of Minnesota Press.
[This is Meehl, P. E., &
Rosen, A. (1955). Antecedent probability and the efficiency of
psychometric signs, patterns, or cutting scores. Psychological
Bulletin, 52(3), 194–216. https://doi.org/10.1037/h0048070]
Signal Detection
Theory
Section 9
Treat, T. A., & Viken, R. J. (2023). Measuring test
performance with signal detection theory techniques. In H. Cooper, M. N.
Coutanche, L. M. McMullen, A. T. Panter, D. Rindskopf, & K. J. Sher
(Eds.), APA handbook of research methods in psychology: Foundations,
planning, measures, and psychometrics (2nd ed., Vol. 1,
pp. 837–858). American Psychological Association. https://doi.org/10.1037/0000318-038
Swets, J. A., Dawes, R. M., & Monahan, J. (2000). Psychological
science can improve diagnostic decisions. Psychological Science in
the Public Interest, 1(1), 1–26. https://doi.org/10.1111/1529-1006.001
Lindhiem, O., Petersen, I. T., Mentch, L. K., & Youngstrom, E. A.
(2020). The importance of calibration in clinical psychology.
Assessment, 27(4), 840–854. https://doi.org/10.1177/1073191117752055
Clinical Judgment
vs. Algorithmic Prediction
Section 10
Garb, H. N. (2005). Clinical judgment and decision making. Annual
Review of Clinical Psychology, 1, 67–89. https://doi.org/10.1146/annurev.clinpsy.1.102803.143810
Dawes, R. M., Faust, D., & Meehl, P. E. (1989). Clinical
versus actuarial judgment. Science, 243(4899), 1668–1674. https://doi.org/10.1126/science.2648573
Dawes, R. M. (1986). Representative thinking in clinical
judgment. Clinical Psychology Review, 6, 425–441. https://doi.org/10.1016/0272-7358(86)90030-9
Youngstrom, E. A., Halverson, T. F., Youngstrom, J. K., Lindhiem, O.,
& Findling, R. L. (2018). Evidence-based assessment from simple
clinical judgments to statistical learning: Evaluating a range of
options using pediatric bipolar disorder as a diagnostic challenge.
Clinical Psychological Science, 6(2), 243–265. https://doi.org/10.1177/2167702617741845
General Issues in
Clinical Assessment
Section 11
*Benjamin, L. T. (2005). A history of clinical psychology as a
profession in America (and a glimpse of its future). Annual Review
of Clinical Psychology, 1, 1–30. https://doi.org/10.1146/annurev.clinpsy.1.102803.143758
Kazdin, A. E. (1995). Preparing and evaluating research
reports. Psychological Assessment, 7(3), 228–237. https://doi.org/10.1037/1040-3590.7.3.228
Sechrest, L., Stickle, T. R., & Stewart, M. (1998). The role of
assessment in clinical psychology. In A. Bellack, M. Hersen, & C. R.
Reynolds (Eds.), Comprehensive clinical psychology (Vol. 4:
Assessment). Pergamon.
Evidence-Based
Assessment
Section 12
Hunsley, J., & Mash, E. J. (2007). Evidence-based
assessment. Annual Review of Clinical Psychology, 3, 29–51. https://doi.org/10.1146/annurev.clinpsy.3.022806.091419
Antony, M. M., & Rowa, K. (2005). Evidence-based assessment of
anxiety disorders in adults. Psychological Assessment, 17(3),
256–266. https://doi.org/10.1037/1040-3590.17.3.256
[This is a case study in
evidence-based assessment—it’s the general approach that matters, not
what is specific about anxiety.]
Youngstrom, E. A., & Van Meter, A. (2016). Empirically supported
assessment of children and adolescents. Clinical Psychology: Science
and Practice, 23(4), 327–347. https://doi.org/10.1111/cpsp.12172
Youngstrom, E. A., Van Meter, A., Frazier, T. W., Hunsley, J.,
Prinstein, M. J., Ong, M.-L., & Youngstrom, J. K. (2017).
Evidence-based assessment as an integrative model for applying
psychological science to guide the voyage of treatment. Clinical
Psychology: Science and Practice, 24(4), 331–363. https://doi.org/10.1111/cpsp.12207
Ethical Issues in
Assessment
Section 13
American Psychological Association. (2017). Ethical principles
of psychologists and code of conduct. https://www.apa.org/ethics/code
(Sections 1, 2, 9).
Nagy, T. F. (2011). Ethics in psychological assessment. In T. F. Nagy
(Ed.), Essential ethics for psychologists: a primer for
understanding and mastering core issues (pp. 171–183). American
Psychological Association. https://doi.org/10.1037/12345-009
Campbell, L., Vasquez, M., Behnke, S., & Kinscherff, R. (2010).
Assessment. In L. Campbell, M. Vasquez, S. Behnke, & R. Kinscherff
(Eds.), APA Ethics Code commentary and case illustrations.
American Psychological Association.
Bersoff, D. N., DeMatteo, D., & Foster, E. E. (2012).
Assessment and testing. In S. J. Knapp (Ed.), APA handbook of ethics
in psychology (Vol. 2: Practice, Teaching, and Research,
pp. 45–74). American Psychological Association.
*Tackett, J. L., Brandes, C. M., & Reardon, K. W. (2019).
Leveraging the Open Science Framework in clinical psychological
assessment research. Psychological Assessment, 31(12),
1386–1394. https://doi.org/10.1037/pas0000583
Intellectual
Assessment
Section 15
Ackerman, P. L. (2013). Assessment of intellectual functioning
in adults. In K. F. Geisinger, J. F. Carlson, J.-I. C. Hansen, N. R.
Kuncel, S. P. Reise, & M. C. Rodriguez (Eds.), APA handbook of
testing and assessment in psychology (Vol. 2: Testing and
Assessment in Clinical and Counseling Psychology, pp. 119–132). American
Psychological Association. https://doi.org/10.1037/14048-008
*Binet, A., & Simon, T. (1948). Upon the necessity of
establishing a scientific diagnosis of inferior states of intelligence.
In W. Dennis (Ed.), Readings in the history of psychology
(pp. 407–411). Appleton-Century-Crofts.
*Binet, A., & Simon, T. (1948). The development of the
Binet-Simon Scale, 1905–1908. In W. Dennis (Ed.), Readings in the
history of psychology (pp. 412–424). Appleton-Century-Crofts.
*Cattell, J. M. (1948). Mental tests and measurements, 1890. In W.
Dennis (Ed.), Readings in the history of psychology
(pp. 347–354). Appleton-Century-Crofts.
Section 16
McClelland, D. C. (1973). Testing for competence rather than
for “intelligence.”. American Psychologist, 28, 1–14. https://doi.org/10.1037/h0034092
[See also paper by Barrett and
Depinet (1991), A reconsideration of Testing for Competence rather than
for intelligence, American Psychologist, 46, 1012–1024; and
McClelland and various others in reply (1994), American
Psychologist, 49, 64–71.]
Bias
Section 18
Sackett, P. R., Schmitt, N., Ellingson, J. E., & Kabin, M.
B. (2001). High-stakes testing in employment, credentialing, and higher
education. American Psychologist, 56, 301–318. https://doi.org/10.1037/0003-066X.56.4.302
Sackett, P. R., Borneman, M. J., & Connelly, B. S. (2008).
High stakes testing in higher education and employment: Appraising the
evidence for validity and fairness. American Psychologist, 63,
215–227. https://doi.org/10.1037/0003-066X.63.4.215
The Interview and
the DSM
Section 19
Faraone, S. V., & Tsuang, M. T. (1994). Measuring
diagnostic accuracy in the absence of a “gold standard”. American
Journal of Psychiatry, 151, 650–657. https://doi.org/10.1176/ajp.151.5.650
*Sullivan, H. S. (1970). The psychiatric interview. Norton.
Chapters 1–4, 7 [This is
available in the UI library. You don’t need to read it for this class.
But you should read it at some point, as an example of a master
clinician assessing patients by way of interview.]
Summerfeldt, L. J., Kloosterman, P. H., & Antony, M. M. (2010).
Structured and semistructured diagnostic interviews. In M. M. Antony
& D. H. Barlow (Eds.), Handbook of assessment and treatment
planning for psychological disorders (2nd ed., pp. 95–137).
Guilford Press.
Mullins-Sweatt, S. N., & Widiger, T. A. (2009). Clinical utility
and DSM-V. Psychological Assessment, 21(3), 302–312. https://doi.org/10.1037/a0016607
Sharp, K. L., Williams, A. J., Rhyner, K. T., & Ilardi, S.
S. (2013). The clinical interview. In K. F. Geisinger, J. F. Carlson,
J.-I. C. Hansen, N. R. Kuncel, S. P. Reise, & M. C. Rodriguez
(Eds.), APA handbook of testing and assessment in psychology
(Vol. 2: Testing and assessment in clinical and counseling psychology,
pp. 103–117). American Psychological Association. https://doi.org/10.1037/14048-007
Assessment of
personality and other symptomatology
Objective
tests
Section 20
Burisch, M. (1984). Approaches to personality inventory
construction: A comparison of merits. American Psychologist,
39, 214–227. https://doi.org/10.1037/0003-066X.39.3.214
Clark, L. A., & Watson, D. (2019). Constructing validity: New
developments in creating objective measuring instruments.
Psychological Assessment, 31(12), 1412–1427. https://doi.org/10.1037/pas0000626
Floyd, F. J., & Widaman, K. F. (1995). Factor analysis in
the development and refinement of clinical assessment instruments.
Psychological Assessment, 7, 286–299. https://doi.org/10.1037/1040-3590.7.3.286
Section 21
*Graham, J. R. (2022). MMPI instruments: Assessing personality
and psychopathology (6th ed.). Oxford University Press. (Chapters
1–5, 13). [This is available
in the clinic library. Get a feel for this measure and the way it was
developed; you don’t need to remember details about the
scales.]
Sellbom, M. (2019). The MMPI-2-Restructured Form (MMPI-2-RF):
Assessment of personality and psychopathology in the twenty-first
century. Annual Review of Clinical Psychology, 15(1), 149–177.
https://doi.org/10.1146/annurev-clinpsy-050718-095701
Wiggins, J. S. (1973). Structured techniques. In J. S. Wiggins
(Ed.), Personality and prediction: Principles of personality
assessment (pp. 380–440). Addison-Wesley.
Section 22
Dunning, D., Heath, C., & Suls, J. M. (2004). Flawed
self-assessment: Implications for health, education, and the workplace.
Psychological Science in the Public Interest, 5, 69–106. https://doi.org/10.1111/j.1529-1006.2004.00018.x
Krosnick, J. A. (1999). Survey research. Annual Review of
Psychology, 50, 537–567. https://doi.org/10.1146/annurev.psych.50.1.537
Projective
tests
Section 23
*Frank, L. K. (1939). Projective methods for the study of
personality. Journal of Psychology, 8, 389–413. https://doi.org/10.1080/00223980.1939.9917671
*Lindzey, G. (1952). Thematic Apperception Test: Interpretive
assumptions and related empirical evidence. Psychological Bulletin,
49, 1–25. https://doi.org/10.1037/h0062363
Lilienfeld, S. O., Wood, J. M., & Garb, H. N. (2000). The
scientific status of projective techniques. Psychological Science in
the Public Interest, 1, 27–66. https://doi.org/10.1111/1529-1006.002
*Wood, J. M., Nezworski, M. T., & Stejskal, W. J. (1996). The
comprehensive system for the Rorschach: A critical examination.
Psychological Science, 7(1), 3–10. https://doi.org/10.1111/j.1467-9280.1996.tb00658.x.
[See also the response from
Exner and reply by Wood et al. on pp. 11–17.]
Psychophysiological Measures and RDoC
Section 24
Dubois, J., & Adolphs, R. (2016). Building a science of
individual differences from fMRI. Trends in Cognitive Sciences,
20(6), 425–443. https://doi.org/10.1016/j.tics.2016.03.014
[Students not working in
imaging can skip over most of the technical details in this article.
Read it as a model for taking measurement seriously in an emerging area
of clinical research.]
Haynes, S. N., & Yoshioka, D. T. (2007). Clinical
assessment applications of ambulatory biosensors. Psychological
Assessment, 19(1), 44–57. https://doi.org/10.1037/1040-3590.19.1.44
Kozak, M. J., & Cuthbert, B. N. (2016). The NIMH research
domain criteria initiative: Background, issues, and pragmatics.
Psychophysiology, 53(3), 286–297. https://doi.org/10.1111/psyp.12518
[Students already familiar
with RDoC can skim this introduction. Our interest is in examining RDoC
from a measurement perspective.]
MacNamara, A., & Phan, K. L. (2016). Psychobiological
operationalization of RDoC constructs: Methodological and conceptual
opportunities and challenges. Psychophysiology, 53(3), 406–409.
https://doi.org/10.1111/psyp.12587
Miller, G. A., Rockstroh, B. S., Hamilton, H. K., & Yee, C. M.
(2016). Psychophysiology as a core strategy in RDoC.
Psychophysiology, 53(3), 410–414. https://doi.org/10.1111/psyp.12581
Miller, G. A., Elbert, T., Sutton, B. P., & Heller, W.
(2007). Innovative clinical assessment technologies: Challenges and
opportunities in neuroimaging. Psychological Assessment, 19(1),
58–73. https://doi.org/10.1037/1040-3590.19.1.58
*Stone, A. A., Schneider, S., & Smyth, J. M. (2023). Evaluation
of pressing issues in ecological momentary assessment. Annual Review
of Clinical Psychology, 19(1), 107–131. https://doi.org/10.1146/annurev-clinpsy-080921-083128
Computers and
Adaptive Testing
Section 25
Buchanan, T. (2002). Online assessment: Desirable or dangerous?
Professional Psychology: Research and Practice, 33(2), 148–154.
https://doi.org/10.1037/0735-7028.33.2.148
*Galatzer-Levy, I. R., & Onnela, J.-P. (2023). Machine learning
and the digital measurement of psychological health. Annual Review
of Clinical Psychology, 19, 133–154. https://doi.org/10.1146/annurev-clinpsy-080921-073212
Garb, H. N. (2007). Computer-administered interviews and rating
scales. Psychological Assessment, 19(1), 4–13. https://doi.org/10.1037/1040-3590.19.1.4
Ruiz, M. A., Drake, E. B., Glass, A., Marcotte, D., & van Gorp,
W. G. (2002). Trying to beat the system: Misuse of the internet to
assist in avoiding the detection of psychological symptom dissimulation.
Professional Psychology: Research and Practice, 33(3), 294–299.
https://doi.org/10.1037/0735-7028.33.3.294
Forbey, J. D., & Ben-Porath, Y. S. (2007). Computerized adaptive
personality testing: A review and illustration with the MMPI-2
computerized adaptive version. Psychological Assessment, 19(1),
14–24. https://doi.org/10.1037/1040-3590.19.1.14
Gibbons, R. D., Weiss, D. J., Frank, E., & Kupfer, D.
(2016). Computerized adaptive diagnosis and testing of mental health
disorders. Annual Review of Clinical Psychology, 12(1), 83–104.
https://doi.org/10.1146/annurev-clinpsy-021815-093634
Behavioral
Assessment
Section 26
Girard, J. M., & Cohn, J. F. (2016). A primer on
observational measurement. Assessment, 23(4), 404–413. https://doi.org/10.1177/1073191116635807
Haynes, S. N. (2001). Clinical applications of analogue
behavioral observation: Dimensions of psychometric evaluation.
Psychological Assessment, 13(1), 73–85. https://doi.org/10.1037/1040-3590.13.1.73
Korotitsch, W. J., & Nelson-Gray, R. O. (1999). An overview of
self-monitoring research in assessment and treatment. Psychological
Assessment, 11(4), 415–425. https://doi.org/10.1037/1040-3590.11.4.415
Piasecki, T. M., Hufford, M. R., Solhan, M., & Trull, T. J.
(2007). Assessing clients in their natural environments with electronic
diaries: Rationale, benefits, limitations, and barriers.
Psychological Assessment, 19(1), 25–43. https://doi.org/10.1037/1040-3590.19.1.25
Repeated
Assessments across Time
Section 27
Sobell, L. C., & Sobell, M. B. (2008). Timeline followback
(TLFB). In A. J. Rush Jr., M. B. First, & D. Blacker (Eds.),
Handbook of psychiatric measures (2nd ed., pp. 466–468).
American Psychiatric Publishing.
Carpenter, R. W., Wycoff, A. M., & Trull, T. J. (2016).
Ambulatory assessment: New adventures in characterizing dynamic
processes. Assessment, 23(4), 414–424. https://doi.org/10.1177/1073191116632341
Matthews, M., Abdullah, S., Murnane, E., Voida, S., Choudhury,
T., Gay, G., & Frank, E. (2016). Development and evaluation of a
smartphone-based measure of social rhythms for bipolar disorder.
Assessment, 23(4), 472–483. https://doi.org/10.1177/1073191116656794
[a case study in self-report
across time. Specifics of their study are less important.]
Section 28
Hertzog, C., & Nesselroade, J. R. (2003). Assessing
psychological change in adulthood: An overview of methodological issues.
Psychology and Aging, 18(4), 639–657. https://doi.org/10.1037/0882-7974.18.4.639
Petersen, I. T., Choe, D. E., & LeBeau, B. (2020). Studying a
moving target in development: The challenge and opportunity of
heterotypic continuity. Developmental Review, 58, 100935. https://doi.org/10.1016/j.dr.2020.100935
Beltz, A. M., Wright, A. G. C., Sprague, B. N., & Molenaar, P. C.
M. (2016). Bridging the nomothetic and idiographic approaches to the
analysis of clinical data. Assessment, 23(4), 447–458. https://doi.org/10.1177/1073191116648209
[focus on the general issues
of combining idiographic and nomothetic data. You don’t need to know the
technical details of their GIMME model.]
Assessment of
Cognition
Section 29
*Busemeyer, J. R., & Stout, J. C. (2002). A contribution of
cognitive decision models to clinical assessment: Decomposing
performance on the Bechara gambling task. Psychological Assessment,
14(3), 253–262. https://doi.org/10.1037/1040-3590.14.3.253
Dunkley, D. M., Segal, Z. V., & Blankstein, K. R. (2019).
Cognitive assessment: Issues and methods. In K. S. Dobson & D. J. A.
Dozois (Eds.), Handbook of cognitive-behavioral therapies (4th
ed., pp. 85–119). Guilford Press.
Davison, G. C., Vogel, R. S., & Coffman, S. G. (1997).
Think-aloud approaches to cognitive assessment and the articulated
thoughts in simulated situations paradigm. Journal of Consulting and
Clinical Psychology, 65(6), 950–958. https://doi.org/10.1037/0022-006X.65.6.950
Hurlburt, R. T. (1997). Randomly sampling thinking in the natural
environment. Journal of Consulting and Clinical Psychology,
65(6), 941–949. https://doi.org/10.1037/0022-006X.65.6.941
Rodebaugh, T. L., Scullin, R. B., Langer, J. K., Dixon, D. J.,
Huppert, J. D., Bernstein, A., Zvielli, A., & Lenze, E. J. (2016).
Unreliability as a threat to understanding psychopathology: The
cautionary tale of attentional bias. Journal of Abnormal Psychology,
125(6), 840–851. https://doi.org/10.1037/abn0000184
Treat, T. A., McFall, R. M., Viken, R. J., Kruschke, J. K., Nosofsky,
R. M., & Wang, S. S. (2007). Clinical cognitive science: Applying
quantitative models of cognitive processing to examine cognitive aspects
of psychopathology. In R. W. J. Neufeld (Ed.), Advances in clinical
cognitive science: Formal modeling of processes and symptoms
(pp. 179–205). American Psychological Association. https://doi.org/10.1037/11556-006
Cultural and
Individual Diversity
Section 30
It may be helpful to review
the three Sackett papers and the Cole paper from the Intellectual
Assessment section. Also review relevant sections of the APA Standards
for Educational and Psychological Testing from the Validity
section.
Byrd, D. A., Rivera Mindt, M. M., Clark, U. S., Clarke, Y., Thames,
A. D., Gammada, E. Z., & Manly, J. J. (2021). Creating an antiracist
psychology by addressing professional complicity in psychological
assessment. Psychological Assessment, 33(3), 279-285. https://doi.org/10.1037/pas0000993
Okazaki, S., & Sue, S. (1995). Methodological issues in
assessment research with ethnic minorities. Psychological
Assessment, 7(3), 367–375. https://doi.org/10.1037/1040-3590.7.3.367
Garb, H. N. (1997). Race bias, social class bias, and gender bias in
clinical judgment. Clinical Psychology: Science and Practice,
4(2), 99–120. https://doi.org/10.1111/j.1468-2850.1997.tb00104.x
Leong, F. T. L., & Kalibatseva, Z. (2016). Threats to cultural
validity in clinical diagnosis and assessment: Illustrated with the case
of Asian Americans. In N. Zane, G. Bernal, & F. T. L. Leong (Eds.),
Evidence-based psychological practice with ethnic minorities:
Culturally informed research and clinical strategies (pp. 57–74).
American Psychological Association.
Suzuki, L. A., Onoue, M. A., & Hill, J. S. (2013). Clinical
assessment: A multicultural perspective. In K. F. Geisinger, J. F.
Carlson, J.-I. C. Hansen, N. R. Kuncel, S. P. Reise, & M. C.
Rodriguez (Eds.), APA handbook of testing and assessment in
psychology (Vol. 2: Testing and assessment in clinical and
counseling psychology, pp. 193–212). American Psychological Association.
https://doi.org/10.1037/14048-012
Grading System and the
Use of +/-
Final grades will be assigned at the end of the semester on the basis
of your total percentage of points earned on examinations and your final
paper. Grades will be assigned on an absolute scale
(criterion-referenced grading; see below); course grades will not be
curved. No extra-credit opportunities are available for this course.
Please note: As a matter of fairness to all students, I assign grades
based on performance and do not negotiate grades. Additionally, a
penalty of 20% per day will be applied to all assignments turned in
late. Final grades will be assigned based on the following ranges:
A+ |
97–100% |
A |
93–96 |
A− |
90–92 |
B+ |
87–89 |
B |
83–86 |
B− |
80–82 |
C+ |
77–79 |
C |
73–76 |
C− |
70–72 |
D+ |
67–69 |
D |
63–66 |
D− |
60–62 |
F |
0–59 |
Course Grades
Final course grades will be assessed based on your performance in the
activities below. The relative contribution of each component to your
final grade is as follows:
- 30% Exam 1 (Mid-Term)
- 40% Exam 2 (Final)
- 30% Final Paper
Tentative Course
Outline (exam dates fixed)
This is a tentative course outline. Changes will be
discussed in class. There are 15 weeks in the semester, and class meets
twice per week (30 sections). We will have one exam during the semester
and one final exam during finals week.
1 |
T |
01/16 |
Overview of Class; Clinical Science and the Replication
Crisis |
2 |
Th |
01/18 |
Reliability |
3 |
T |
01/23 |
Reliability |
4 |
Th |
01/25 |
Validity |
5 |
T |
01/30 |
Validity |
6 |
Th |
02/01 |
Structural Equation Modeling (SEM) |
7 |
T |
02/06 |
Item Response Theory (IRT) |
8 |
Th |
02/08 |
Prediction Basics |
9 |
T |
02/13 |
Signal Detection Theory |
10 |
Th |
02/15 |
Clinical Judgment vs. Algorithmic Prediction |
11 |
T |
02/20 |
General Issues in Clinical Assessment |
12 |
Th |
02/22 |
Evidence-Based Assessment |
13 |
T |
02/27 |
Ethical Issues in Assessment |
14 |
Th |
02/29 |
Midterm Exam |
15 |
T |
03/05 |
Intellectual Assessment |
16 |
Th |
03/07 |
Intellectual Assessment |
|
T |
03/12 |
Spring Break! |
|
Th |
03/14 |
Spring Break! |
17 |
T |
03/19 |
Bias |
18 |
Th |
03/21 |
Bias |
19 |
T |
03/26 |
The Interview and the DSM |
20 |
Th |
03/28 |
Objective Personality Testing |
21 |
T |
04/02 |
Objective Personality Testing |
22 |
Th |
04/04 |
Objective Personality Testing |
23 |
T |
04/09 |
Projective Personality Testing |
24 |
Th |
04/11 |
Psychophysiological Measures and RDoC |
25 |
T |
04/16 |
Computers and Adaptive Testing |
26 |
Th |
04/18 |
Behavioral Assessment |
27 |
T |
04/23 |
Repeated Assessments across Time |
28 |
Th |
04/25 |
Repeated Assessments across Time |
29 |
T |
04/30 |
Assessment of Cognition |
30 |
Th |
05/02 |
Cultural and Individual Diversity; Final paper
due! |
Finals Week |
|
TBD (week of 5/6) |
Final Exam |
Date and Time of the
Final Exam
The final
examination date and time will be announced by the Registrar
generally by the fifth week of classes, and it will be announced on the
course ICON site once it is known. Do not plan your end of the
semester travel plans until the final exam schedule is made public. It
is your responsibility to know the date, time, and place of the final
exam. According to the Registrar’s final exam policy, students
have a maximum of two weeks after the announced final exam
schedule to request a change if an exam conflict exists or if a
student has more than two exams scheduled for the same day (see the policy
here).
Course Resources
There are many course resources available to help you succeed in the
class, including:
How to Study for this
Class
To study for this class, my suggestions are:
- Read the assigned readings before
each class. We have lots of content to cover, and the lectures will move
quickly. Thus, doing the relevant readings before each class
will help you best come prepared to learn the material presented in
class.
- Take good notes while doing the assigned
readings. After reading each article, leave a few bullet points at
the top of the article regarding the key points and take-away messages
from the article. That way, when you go back and review it, the key
ideas will refresh your memory and will help you make the relevant
connections to the rest of your notes on the article and to the points
discussed in lecture.
- After doing the assigned readings and before
class period, review your notes and try to determine what are the key
messages intended to conveyed by the collection of readings. The will
set you up to be in the best position to acquire the material covered in
lecture.
- Take good notes in class.
- If something is unclear about the reading or about a point discussed
in lecture, feel free to consult the companion
book, to review the lecture recording, or
to ask questions during or after class, or in office hours. Don’t
struggle in silence!
- As you prepare for the exam, review the material covered by each
article and lecture. If there is an exam review or example study
questions, make sure to review those closely. The exam review presents
some of the key take-away messages from each lecture and thus represents
prime material for exam questions. The example study questions are NOT
comprehensive and are NOT necessarily the same questions that will be
asked on the exam, but they should give you a sense of the style in
which questions may be asked. If there is a question you do not know the
full answer to, that is a clue that you need to study that topic more
closely.
- I strongly encourage you to study with your peers. Studying with
your peers helps give you a sense about the topics where you feel
stronger and the topics where you feel weaker (and need to study more).
It helps both peers in the exchange when one peer explains a topic to
another. In addition to helping the listening student learn, peer
instruction also helps the explaining student via consolidation of the
student’s knowledge. There is a difference between “knowing something”
and “knowing it well.” Explaining a topic to someone else helps
you figure out where your knowledge gaps are and can help you make sure
you understand the topic well. Additionally, studying by
explaining topics to others aligns more closely with the exam format
(short answer/essay), which demands recall rather than mere
recognition—recognition alone being typically adequate for
multiple-choice exams.
- Come to office hours if you still have questions!
Drop Deadline for this
Course
You may drop an individual course before the drop deadline; after
this deadline you will need collegiate approval. You can look up the
drop deadline for this course here. When you
drop a course, a “W” will appear on your transcript. The mark of “W” is
a neutral mark that does not affect your GPA. To discuss how dropping
(or staying in) a course might affect your academic goals, please
contact your Academic Advisor. Directions for adding or dropping a
course and other registration changes can be found on the Registrar’s
website. Students should adhere to the academic deadlines
and policies set by the Graduate College.
Feedback about the
Course
I welcome feedback at any point during the class. If you have
comments on the class or my teaching, please feel free to meet with me
during office hours.
Student
Complaints
Students with a complaint about a grade or a related matter should
first discuss the situation with the instructor, and finally with the
DEO (Chair) of the department, school, or program offering the course.
Sometimes students will be referred to the department or program’s
Director of Undergraduate Studies (DUS) or Director of Graduate Studies
(DGS). Students should contact the CLAS Graduate Affairs
Manager when additional support is needed.
Communication: UI
Email
Students are responsible for all official correspondences sent to
their UI email address (uiowa.edu) and must use this address for any
communication with instructors or staff in the UI community. For the
privacy and the protection of student records, UI faculty and staff can
only correspond with UI email addresses.
Other Expectations
of Student Performance
Students have the right to a distraction-free learning environment.
You have the responsibility to help create such a classroom environment.
Please treat other students in the class and the instructor with
respect. Students are expected to help each other learn and to
contribute overall to the learning environment of the course. Arriving
prepared for class is part of this expectation.
University
Policies
University
Policies
Accommodations
for Students with Disabilities
The University is committed to providing an educational experience that
is accessible to all students. If a student has a diagnosed disability
or other disabling condition that may impact the student’s ability to
complete the course requirements as stated in the syllabus, the student
may seek accommodations through Student Disability
Services (SDS). SDS is responsible for making Letters
of Accommodation (LOA) available to the student. The student must
provide a LOA to the instructor as early in the semester as possible,
but requests not made at least two weeks prior to the scheduled activity
for which an accommodation is sought may not be accommodated. The
LOA will specify what reasonable course accommodations the student is
eligible for and those the instructor should provide. Additional
information can be found on the SDS
website.
Class
Recordings
Students may be enrolled in a class where some sessions will be recorded
or live-streamed. Such recordings/streaming will only be available to
students registered for the class. These recordings are the intellectual
property of the instructor and they may not be shared or reproduced
without the explicit, written consent of the instructor. Further,
students may not share these sessions with those not in the class or
upload them to any other online environment. Doing so would be a breach
of the Code of Student Conduct, and, in some cases, a violation of state
and federal law, including the Federal Education Rights and Privacy Act
(FERPA).
The unauthorized video or audio recording of academic activities
(e.g., lectures, course discussions, office hours, etc.) by a student is
prohibited. Students with a reasonable accommodation for recording
approved by Student Disability Services should notify each instructor
and provide the Letter of Accommodation prior to using the
accommodation. A student may record classroom activities with prior
written permission from the instructor and notice to other students in
the class that audio or video recording may occur. Any and all classroom
recording must be for personal academic use only. The distribution,
sharing, sale, or posting of recordings on the internet (including
social media), in whole or in part, is prohibited and doing so may be a
violation of the Code of Student Life and/or state or federal privacy,
copyright, or other laws.
Where to Get Academic
Support for This Course
Mental Health
Resources and Student Support
Students are encouraged to be mindful of their mental health and seek
help as a preventive measure or if feeling overwhelmed and/or struggling
to meet course expectations. Students are encouraged to talk to their
instructor for assistance with specific class-related concerns. For
additional support and counseling, students are encouraged to contact
University Counseling Service (UCS). Information about UCS, including
resources and how to schedule an appointment, can be found at counseling.uiowa.edu. Find out
more about UI mental health services at: mentalhealth.uiowa.edu,
including the 24-7 UI
Support and Crisis Line.
Additionally, the Office of the Dean of Students can help students
navigate personal crisis situations. They can provide one-on-one
support, help with identifying options, and access to basic needs resources (such as food,
rent, childcare, etc.). Student Care and Assistance: 132 IMU, dos-assistance@uiowa.edu, or
319-335-1162 and more info: dos.uiowa.edu/assistance
If you feel that you or someone you know may be struggling with an
academic, emotional, or psychological problem, the following
organizations are available for assistance:
University of Iowa Academic Advising Center |
353-5700, https://advisingcenter.uiowa.edu |
University Counseling Services |
335-7294, https://www.uiowa.edu/ucs |
Student Health Service - Mental Health |
335-8394, https://studenthealth.uiowa.edu/services/psychiatry |
University of Iowa Hospitals and Clinics Adult
Psychiatry Services Clinic |
353-6314, https://www.uihealthcare.org/Psychiatry |
Seashore Clinic (in the UI Department of Psychological
and Brain Sciences) |
335-2467, https://psychology.uiowa.edu/resources/seashore-clinic |
Women’s Resource and Action Center |
335-1486, https://wrac.uiowa.edu |
Rape Victim Advocacy Program |
319-335-6000 or 800-228-1625, https://www.uiowa.edu/~rvap |
Office of Sexual Misconduct |
319-335-6200, https://osmrc.uiowa.edu |
CommUnity |
855-325-4296, https://builtbycommunity.org/crisis |
Community & Family Resources |
351-4357, https://www.cfrhelps.org/ |
If you or someone you know is contemplating suicide, either
call or text the Suicide and Crisis Lifeline at 988, or call 911.
Disclaimer
This syllabus is subject to change. Any changes will be discussed in
class, via email, and/or on ICON.
LS0tCnRpdGxlOiAiQ291cnNlIFN5bGxhYnVzIgotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlID0gRkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICBlY2hvID0gVFJVRSwKICBlcnJvciA9IFRSVUUsCiAgY29tbWVudCA9ICIiKQpgYGAKCkxhc3QgVXBkYXRlZDogYHIgZm9ybWF0KFN5cy5EYXRlKCksICIlbS8lZC8lWSIpYAoKIyBDb3Vyc2UgVGl0bGUgeyN0aXRsZX0KClBTWTo1MzMwIOKAkyBQcmluY2lwbGVzIG9mIFBzeWNob2xvZ2ljYWwgQXNzZXNzbWVudCAoU3ByaW5nIDIwMjYpCgojIENvdXJzZSBNZWV0aW5nIFRpbWUgYW5kIFBsYWNlIHsjbGVjdHVyZVRpbWV9CgpUdWVzZGF5ICYgVGh1cnNkYXkgOTozMCBhLm0u4oCTMTA6NDUgYS5tLiwgMTA5IFN0dWl0IEhhbGwgKFNUSCkKCiMgQ291cnNlIFdlYnNpdGUgeyN3ZWJzaXRlfQoKaHR0cHM6Ly9pY29uLnVpb3dhLmVkdQoKVG8gYWNjZXNzIHRoZSBjb3Vyc2Ugc2l0ZSwgbG9nIGludG8gW0lvd2EgQ291cnNlcyBPbmxpbmUgKElDT04pXShodHRwczovL2ljb24udWlvd2EuZWR1KSB1c2luZyB5b3VyIEhhd2sgSUQgYW5kIHBhc3N3b3JkLgoKIyBDb3Vyc2UgSG9tZSB7I2hvbWV9CgpUaGUgVW5pdmVyc2l0eSBvZiBJb3dhXApUaGUgQ29sbGVnZSBvZiBMaWJlcmFsIEFydHMgYW5kIFNjaWVuY2VzXApEZXBhcnRtZW50IG9mIFBzeWNob2xvZ2ljYWwgYW5kIEJyYWluIFNjaWVuY2VzCgpUaGUgQ29sbGVnZSBvZiBMaWJlcmFsIEFydHMgYW5kIFNjaWVuY2VzIChDTEFTKSBpcyB0aGUgaG9tZSBvZiB0aGlzIGNvdXJzZSwgYW5kIENMQVMgZ292ZXJucyB0aGUgcG9saWNpZXMgYW5kIHByb2NlZHVyZXMgZm9yIGl0cyBjb3Vyc2VzLgpHcmFkdWF0ZSBzdHVkZW50cywgaG93ZXZlciwgbXVzdCBhZGhlcmUgdG8gdGhlIFthY2FkZW1pYyBkZWFkbGluZXMgc2V0IGJ5IHRoZSBHcmFkdWF0ZSBDb2xsZWdlXShodHRwczovL2dyYWQudWlvd2EuZWR1L2FjYWRlbWljcy9kZWFkbGluZXMpLgoKIyBJbnN0cnVjdG9yIENvbnRhY3QgSW5mb3JtYXRpb24geyNpbnN0cnVjdG9yfQoKW0lzYWFjIFQuIFBldGVyc2VuLCBQaC5ELl0oaHR0cHM6Ly9wc3ljaG9sb2d5LnVpb3dhLmVkdS9wZW9wbGUvaXNhYWMtcGV0ZXJzZW4pXApPZmZpY2U6IDE3NSBQc3ljaG9sb2dpY2FsIGFuZCBCcmFpbiBTY2llbmNlcyBCdWlsZGluZyAoUEJTQilcCkUtbWFpbDogW2lzYWFjLXQtcGV0ZXJzZW5AdWlvd2EuZWR1XShtYWlsdG86aXNhYWMtdC1wZXRlcnNlbkB1aW93YS5lZHUpXApPZmZpY2UgUGhvbmU6IDQ2Ny0xMDE0XApPZmZpY2UgSG91cnM6IGJ5IGFwcG9pbnRtZW50XAoKIyBEZXBhcnRtZW50YWwgUmVzb3VyY2VzIHsjZGVwdFJlc291cmNlc30KCkRlcGFydG1lbnQgb2YgUHN5Y2hvbG9naWNhbCBhbmQgQnJhaW4gU2NpZW5jZXM6IFtodHRwczovL3BzeWNob2xvZ3kudWlvd2EuZWR1XShodHRwczovL3BzeWNob2xvZ3kudWlvd2EuZWR1KVwKRGVwYXJ0bWVudCBvZiBQc3ljaG9sb2dpY2FsIGFuZCBCcmFpbiBTY2llbmNlcyBNYWluIE9mZmljZTogRzYwIFBzeWNob2xvZ2ljYWwgYW5kIEJyYWluIFNjaWVuY2VzIEJ1aWxkaW5nICgzMzUtMjQwNilcCkRpcmVjdG9yIG9mIEdyYWR1YXRlIFN0dWRpZXM6IFJ5YW4gTGFMdW1pZXJlIChbcnlhbi1sYWx1bWllcmVAdWlvd2EuZWR1XShtYWlsdG86cnlhbi1sYWx1bWllcmVAdWlvd2EuZWR1KTsgMzM1LTM2ODEpXApEZXBhcnRtZW50YWwgRXhlY3V0aXZlIE9mZmljZXIgKERFTykvRGVwYXJ0bWVudCBDaGFpcjogUHJvZmVzc29yIEJsdW1iZXJnIChbbWFyay1ibHVtYmVyZ0B1aW93YS5lZHVdKG1haWx0bzptYXJrLWJsdW1iZXJnQHVpb3dhLmVkdSk7IDMzNS0yNDI0KQoKIyBQcmVyZXF1aXNpdGVzIHsjcHJlcmVxc30KClRvIHN1Y2NlZWQgaW4gdGhlIGNsYXNzLCBpdCBpcyBoZWxwZnVsIHRvIGhhdmUgZm91bmRhdGlvbmFsIHVuZGVyc3RhbmRpbmcgb2YgY29ycmVsYXRpb24gYW5kIG11bHRpcGxlIHJlZ3Jlc3Npb24uCgojIERlc2NyaXB0aW9uIG9mIENvdXJzZSB7I2Rlc2NyaXB0aW9ufQoKTXVjaCBvZiB0aGUgY3VycmVudCBkaXNjdXNzaW9uIGluIHBzeWNob2xvZ3kgc3Vycm91bmRpbmcgdGhlIHJlcGxpY2F0aW9uIGNyaXNpcyBkZWFscyB3aXRoIHF1ZXN0aW9uYWJsZSByZXNlYXJjaCBwcmFjdGljZXMuCkhvd2V2ZXIsIHRoZSBmaWVsZCBoYXMgcGFpZCBpbnN1ZmZpY2llbnQgYXR0ZW50aW9uIHRvIGhvdyBsb3VzeS9ub2lzeSBtZWFzdXJlcyBtaWdodCBjb250cmlidXRlIHRvIHRoZSByZXBsaWNhdGlvbiBjcmlzaXMgKExva2VuICYgR2VsbWFuLCAyMDE3KS4KSW4gdGhpcyBjbGFzcywgd2UgY292ZXIgY29udGVudCB0aGF0IGlzIHJlbGV2YW50IHRvIGFsbCBvZiBQc3ljaG9sb2d5IGFuZCBzY2llbmNlIG1vcmUgYnJvYWRseSwgaW5jbHVkaW5nIGhvdyB0byBkZXZlbG9wLCBhZG1pbmlzdGVyLCBzY29yZSwgaW50ZWdyYXRlLCBhbmQgaW50ZXJwcmV0IG1lYXN1cmVzLgpUb3BpY3Mgd2lsbCBpbmNsdWRlLCBmb3IgZXhhbXBsZSwgcHN5Y2hvbWV0cmljcyAoW3JlbGlhYmlsaXR5XSgjc2VjdGlvbjIpIGFuZCBbdmFsaWRpdHldKCNzZWN0aW9uNCkpLCBbcHJlZGljdGlvbl0oI3NlY3Rpb244KSwgW3N0cnVjdHVyYWwgZXF1YXRpb24gbW9kZWxpbmddKCNzZWN0aW9uNiksIFtmYWN0b3IgYW5hbHlzaXNdKCNzZWN0aW9uMjApLCBbc2lnbmFsIGRldGVjdGlvbiB0aGVvcnldKCNzZWN0aW9uOSksIFtpdGVtIHJlc3BvbnNlIHRoZW9yeV0oI3NlY3Rpb243KSwgW2FkYXB0aXZlIHRlc3RpbmddKCNzZWN0aW9uMjUpLCBbbG9uZ2l0dWRpbmFsL3JlcGVhdGVkIG1lYXN1cmVtZW50XSgjc2VjdGlvbjI3KSwgYW5kIGlzc3VlcyBpbiBbY29nbml0aXZlXSgjc2VjdGlvbjI5KSwgW3NvY2lhbC9iZWhhdmlvcmFsXSgjc2VjdGlvbjI2KSwgYW5kIFtwc3ljaG9waHlzaW9sb2dpY2FsXSgjc2VjdGlvbjI0KSBhc3Nlc3NtZW50LiAKCkluIHRoaXMgY291cnNlLCB3ZSBleGFtaW5lIGJhc2ljIHBzeWNob21ldHJpY3MgYW5kIHRoZSBiYWNrZ3JvdW5kLCBkZXZlbG9wbWVudCwgZXZhbHVhdGlvbiwgYWRtaW5pc3RyYXRpb24sIHNjb3JpbmcsIGludGVncmF0aW9uLCBhbmQgaW50ZXJwcmV0YXRpb24gb2Ygc2VsZWN0ZWQgdGVjaG5pcXVlcyBpbiBwc3ljaG9sb2dpY2FsIGFzc2Vzc21lbnQuClRoZSBjb3Vyc2UgYXBwbGllcyBhIHNjaWVudGlmaWMgcGVyc3BlY3RpdmUgdG8gcHN5Y2hvbG9naWNhbCBhc3Nlc3NtZW50LgoqWW91IGFyZSB1cmdlZCB0byByZWNvbnNpZGVyIHlvdXIgZGVjaXNpb24gdG8gdGFrZSB0aGlzIGNsYXNzIGlmIHlvdSBhcmUgcmVsdWN0YW50IHRvIGV4YW1pbmUgdGhlc2UgdG9waWNzIGluIGEgc2NpZW50aWZpYyBtYW5uZXIuKgoKIyBMZWFybmluZyBPdXRjb21lcyB7I2xlYXJuaW5nT3V0Y29tZXN9CgpUaGUgZm9jdXMgb2YgdGhpcyBjbGFzcyBpcyBOT1Qgb24gYXBwbGljYXRpb24gKGUuZy4sIGhvdyB0byBhc3Nlc3MgZWFjaCBwc3ljaG9sb2dpY2FsIGRpc29yZGVyLCBob3cgdG8gdXNlIHBhcnRpY3VsYXIgbWVhc3VyZXMsIGV0YykuClRoaXMgY291cnNlIGlzIGZvY3VzZWQgb24gaW1wb3J0YW50ICpwcmluY2lwbGVzKiBvZiBwc3ljaG9sb2dpY2FsIGFzc2Vzc21lbnQuClRoZSBnb2FsIG9mIHRoZSBjbGFzcyBpcyB0byBnaXZlIHlvdSBsb3RzIG9mICJ0aGlua2luZyB0b29scyIgcmVsZXZhbnQgdG8gcHN5Y2hvbG9naWNhbCBhc3Nlc3NtZW504oCUaS5lLiwgImhvdyB0byB0aGluayIgYWJvdXQgYW5kIGNyaXRpY2FsbHkgZXZhbHVhdGUgYXNzZXNzbWVudHMgaW4gcHN5Y2hvbG9neeKAlHRvIGhlbHAgeW91IGFkdmFuY2UgeW91ciByZXNlYXJjaCBwcm9ncmFtLgpMZWFybmluZyB0aGUgaW1wb3J0YW50IHByaW5jaXBsZXMgd2lsbCBwdXQgeW91IGluIGEgYmV0dGVyIHBvc2l0aW9uIHRvIGxlYXJuIGFueSBhc3Nlc3NtZW50LCBhbmQgdG8gZGV2ZWxvcCBiZXR0ZXIgb25lcy4KCiMgU3VwcGxlbWVudGFsIFJlc291cmNlcyB7I3N1cHBsZW1lbnRhbH0KCkV2ZW4gdGhvdWdoIHRoZSBjb3Vyc2UgaXMgZm9jdXNlZCBvbiBwcmluY2lwbGVzIG9mIHBzeWNob2xvZ2ljYWwgYXNzZXNzbWVudCBhbmQgbm90IG9uIGFwcGxpY2F0aW9uLCBJIHdhbnQgeW91IHRvIGJlIGFibGUgdG8gYXBwbHkgdGhlIHByaW5jaXBsZXMgd2UgZGlzY3Vzcy4KU28sIEkgcHJvdmlkZSBsb3RzIG9mIGFkZGl0aW9uYWwgcmVhZGluZ3MgYW5kIHJlc291cmNlcyBvbiB0aGUgYXNzZXNzbWVudCBvZiBwYXJ0aWN1bGFyIGRpc29yZGVycywgdXNpbmcgcGFydGljdWxhciBtZWFzdXJlcywgZXRjLgpUaGVzZSBzdXBwbGVtZW50YWwgcmVzb3VyY2VzIGFyZSBpbiB0aGUgIkZvciBNb3JlIEluZm8iIGZvbGRlciBpbiBbSUNPTl0oaHR0cHM6Ly9pY29uLnVpb3dhLmVkdSkuClRoZSBmb2xkZXIgYWxzbyBpbmNsdWRlcyBhbiBFbmROb3RlIGZpbGUgd2l0aCB0aGUgY291cnNlIHJlYWRpbmdzLgpJbiBhZGRpdGlvbiwgSSBwcm92aWRlIGEgY29tcGFuaW9uIGJvb2sgKHNlZSBbYmVsb3ddKCN0ZXh0Ym9vaykpLgoKIyBDb21wYW5pb24gQm9vayB7I3RleHRib29rfQoKSSB3YW50IHRob3NlIHdobyBhcmUgaW50ZXJlc3RlZCB0byBiZSBpbiB0aGUgYmVzdCBwb3NpdGlvbiB0byBhcHBseSB0aGUgcHJpbmNpcGxlcyB3ZSBkaXNjdXNzLgpUaHVzLCBJIGNyZWF0ZWQgYSBjb21wYW5pb24gYm9vayBmb3IgdGhlIGNvdXJzZSB0aGF0IGluY2x1ZGVzIHByYWN0aWNhbCBkYXRhIGFuZCBhbmFseXNpcyBleGFtcGxlcyB0byBoZWxwIHlvdSBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgcHJpbmNpcGxlcyBhbmQgaG93IHRvIGFwcGx5IHRoZW0gaW4geW91ciBvd24gcmVzZWFyY2guClRoZSBjb21wYW5pb24gYm9vayBpbmNsdWRlcyBleGVyY2lzZXMgdG8gaGVscCB5b3UgdGVzdCB5b3VyIGNvbXByZWhlbnNpb24uCjx1PlRoZSBjb21wYW5pb24gYm9vayBpcyBOT1QgaW50ZW5kZWQgdG8gcmVwbGFjZSB0aGUgaW1wb3J0YW5jZSBvZiByZWFkaW5nIHRoZSBbcmVxdWlyZWQgcHJpbWFyeSBzb3VyY2UgYXJ0aWNsZXNdKCNyZWFkaW5ncyk8L3U+ICh3aGljaCBhcmUgY292ZXJlZCBvbiB0aGUgZXhhbXMpLgo8dT5Zb3UgYXJlIE5PVCByZXF1aXJlZCBvciBleHBlY3RlZCB0byByZWFkIHRoZSBjb21wYW5pb24gYm9vayBmb3IgdGhpcyBjbGFzcy48L3U+ClRoZSBjb21wYW5pb24gYm9vayBpcyBtZXJlbHkgbWVhbnQgdG8gYmUgYSBoZWxwZnVsIHN1cHBsZW1lbnRhcnkgcmVzb3VyY2UgZm9yIHRob3NlIHdobyBhcmUgaW50ZXJlc3RlZC4KWW91IGNhbiBhY2Nlc3MgdGhlIGNvbXBhbmlvbiBib29rIGhlcmU6IGh0dHBzOi8vaXNhYWN0cGV0ZXJzZW4uZ2l0aHViLmlvL1ByaW5jaXBsZXMtUHN5Y2hvbG9naWNhbC1Bc3Nlc3NtZW50CgojIEFjYWRlbWljIEhvbmVzdHkgYW5kIE1pc2NvbmR1Y3QgeyNhY2FkZW1pY0hvbmVzdHl9CgpBbGwgc3R1ZGVudHMgaW4gQ0xBUyBjb3Vyc2VzIGFyZSBleHBlY3RlZCB0byBhYmlkZSBieSB0aGUgW2NvbGxlZ2UncyBzdGFuZGFyZHMgb2YgYWNhZGVtaWMgaG9uZXN0eV0oaHR0cHM6Ly9jbGFzLnVpb3dhLmVkdS9zdHVkZW50cy9oYW5kYm9vay9hY2FkZW1pYy1mcmF1ZC1ob25vci1jb2RlKS4KQWNhZGVtaWMgbWlzY29uZHVjdCBtdXN0IGJlIHJlcG9ydGVkIHRvIHRoZSBHcmFkdWF0ZSBDb2xsZWdlIGFjY29yZGluZyB0byBTZWN0aW9uIEYgb2YgdGhlIFtHcmFkdWF0ZSBDb2xsZWdlIE1hbnVhbF0oaHR0cHM6Ly9ncmFkLnVpb3dhLmVkdS9hY2FkZW1pY3MvbWFudWFsL2FjYWRlbWljLXByb2dyYW0vc2VjdGlvbi1pdi1hY2FkZW1pYy1zdGFuZGluZy1wcm9iYXRpb24tYW5kLWRpc21pc3NhbCkuClBsZWFzZSBub3RlIHRoYXQgY29sbGFib3JhdGlvbiB3aXRoIG90aGVyIGNsYXNzbWF0ZXMgZHVyaW5nIGV4YW1zIGlzIG5vdCBwZXJtaXR0ZWQuCkhvd2V2ZXIsIEkgZG8gZW5jb3VyYWdlIHlvdSB0byBjb2xsYWJvcmF0ZSB3aXRoIGNsYXNzbWF0ZXMgb24gcmVhZGluZ3MgYW5kIHRvICpwcmVwYXJlKiBmb3IgZXhhbXMgKGUuZy4sIGluZm9ybWFsIHN0dWR5IGdyb3VwcykuCkluIGFkZGl0aW9uLCB5b3UgYXJlIGV4cGVjdGVkIHRvIGZvbGxvdyB0aGUgY291cnNlJ3MgcG9saWN5IG9uIHRoZSB1c2Ugb2YgYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2UgKEFJKSwgd2hpY2ggaXMgb3V0bGluZWQgYmVsb3cuCgojIEFydGlmaWNpYWwgSW50ZWxsaWdlbmNlIChBSSkgUG9saWN5IHsjYWl9CgpCZWNhdXNlIHdyaXRpbmcsIGFuYWx5dGljYWwsIGFuZCBjcml0aWNhbCB0aGlua2luZyBza2lsbHMgYXJlIHBhcnQgb2YgdGhlIGxlYXJuaW5nIG91dGNvbWVzIG9mIHRoaXMgY291cnNlLCBhbGwgd29yayBzdWJtaXR0ZWQgYnkgc3R1ZGVudHMgc2hvdWxkIGJlIHByZXBhcmVkIGJ5IHRoZSBzdHVkZW50LgpZb3UgYXJlIHRyYWluaW5nIHRoZXNlIGNvZ25pdGl2ZSBtdXNjbGVzOyBpZiB5b3UgZ28gdG8gdGhlIGd5bSwgeW91IHdvdWxkIG5vdCBoYXZlIEFJIGxpZnQgdGhlIHdlaWdodHMgZm9yIHlvdS4KRm9yIHRoZXNlIHJlYXNvbnMsIEFJLWdlbmVyYXRlZCBzdWJtaXNzaW9ucyBhcmUgbm90IHBlcm1pdHRlZCBhbmQgd2lsbCBiZSB0cmVhdGVkIGFzIHBsYWdpYXJpc20uCkxlYXJuaW5nIHRoZXNlIGNvcmUgZm91bmRhdGlvbmFsIHNraWxscyB3aWxsIG1ha2UgeW91IGEgYmV0dGVyIHVzZXIgb2YgQUkgaW4gdGhlIGZ1dHVyZSwgYmVjYXVzZSB5b3Ugd2lsbCBiZSBiZXR0ZXItcG9zaXRpb25lZCBpbiB0aGUgZnV0dXJlIHRvIGNyaXRpY2FsbHkgZXZhbHVhdGUgQUkgcmVzcG9uc2VzIGFuZCB0byBpZGVudGlmeSB3aGVuIChhbmQgdGhlIHdheXMgaW4gd2hpY2gpIGl0cyByZXNwb25zZXMgYXJlIGluYWNjdXJhdGUuCk1vcmVvdmVyLCBpbiBtYW55IGluZHVzdHJpZXMsIHVzZSBvZiBBSSBpcyBub3QgcGVybWl0dGVkIGJlY2F1c2UgeW91IGNhbm5vdCBzaGFyZSB0aGUgY29tcGFueSdzIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uLgpUaHVzLCBkZXZlbG9waW5nIHN0cm9uZyBjb21wZXRlbmNpZXMgaW4gdGhlc2UgZG9tYWlucyAod2l0aG91dCB0aGUgdXNlIG9mIEFJKSB3aWxsIHByZXBhcmUgeW91IGZvciBhIGNvbXBldGl0aXZlIHdvcmtwbGFjZS4KCiMgQ291cnNlIFJlcXVpcmVtZW50cyBhbmQgUG9saWNpZXMgeyNyZXF1aXJlbWVudHN9CgotIFtBc3NpZ25lZCByZWFkaW5nc10oI3JlYWRpbmdzKQotIFtDbGFzcyBwYXJ0aWNpcGF0aW9uXSgjYXR0ZW5kYW5jZVBhcnRpY2lwYXRpb24pCi0gW01pZHRlcm0gRXhhbV0oI2V4YW1zKQotIFtGaW5hbCBFeGFtXSgjZXhhbXMpCi0gW1BhcGVyXSgjcGFwZXIpCgojIyBMZWN0dXJlIHsjbGVjdHVyZX0KClRoZSBjb3Vyc2UgaXMgcHJpbWFyaWx5IGxlY3R1cmUuCldlIHdpbGwgbWVldCB0d2ljZSB3ZWVrbHkgZm9yIGxlY3R1cmVzLCBhdCB0aGUgdGltZSBhbmQgbG9jYXRpb24gZGVzY3JpYmVkIFthYm92ZV0oI2xlY3R1cmVUaW1lKS4KVGhlcmUgaXMgY29uc2lkZXJhYmxlIG1hdGVyaWFsIHRvIGNvdmVyLCBhbmQgd2Ugd2lsbCBtb3ZlIHF1aWNrbHkuCllvdSBzaG91bGQgZmVlbCBmcmVlIHRvIGFzayBxdWVzdGlvbnMgZHVyaW5nIGxlY3R1cmUsIGFsdGhvdWdoIHNvbWUgcXVlc3Rpb25zIG1heSBuZWVkIHRvIGJlIGRlZmVycmVkIGdpdmVuIHRoZSBuZWVkIHRvIGNvbXBsZXRlIGNvdmVyYWdlIG9mIHNwZWNpZmljIG1hdGVyaWFsLgo8dT5RdWVzdGlvbnMgYW5kIGZ1cnRoZXIgZGlzY3Vzc2lvbiBvZiBjbGFzcyBtYXRlcmlhbCBhcmUgYWx3YXlzIHdlbGNvbWU8L3U+IGR1cmluZyBvZmZpY2UgaG91cnMgYW5kIHZpYSBlLW1haWwuClBsZWFzZSBiZWFyIGluIG1pbmQgdGhhdCBleHRlbnNpdmUgb3IgY29tcGxleCBxdWVzdGlvbnMgbWF5IG5vdCBiZSBhZGRyZXNzYWJsZSBvdmVyIGUtbWFpbC4KCiMjIyBMZWN0dXJlIFJlY29yZGluZ3MgeyNyZWNvcmRpbmdzfQoKTXkgaW50ZW50aW9uIGlzIHRvIHJlY29yZCBsZWN0dXJlcyBzbyB0aGUgbGVjdHVyZXMgYXJlIGF2YWlsYWJsZSB0byB5b3UgdmlydHVhbGx5IGFuZCBpbiBwZXJzb24gc28geW91IGhhdmUgdGhlIGNob2ljZSBvZiB2aWV3aW5nIHRoZW0gaG93IHlvdSBzZWUgZml0IGFuZCBzbyB5b3UgbWF5IHJldmlldyB0aGVtLgpSZWNvcmRlZCBsZWN0dXJlcyB3aWxsIGJlIHBvc3RlZCBvbiB0aGUgIlVJQ2FwdHVyZSIgdGFiIGluIFtJQ09OXShodHRwczovL2ljb24udWlvd2EuZWR1KS4KVW5mb3J0dW5hdGVseSwgdGhlIHJlY29yZGluZ3MgZG8gbm90IGNhcHR1cmUgd2hlbiBJIGRyYXcgb24gdGhlIGNsYXNzcm9vbSB3aGl0ZWJvYXJkLgpSZWNvcmRpbmdzIHdpbGwgYmUgYXZhaWxhYmxlIHVwIHRvIDQ4IGhvdXJzIGFmdGVyIGNsYXNzIChmb3IgVGh1cnNkYXkgbGVjdHVyZXMpIG9yIHVudGlsIHRoZSBUaHVyc2RheSBjbGFzcyBwZXJpb2QgKGZvciBUdWVzZGF5IGxlY3R1cmVzKS4KSG93ZXZlciwgPHU+cGxlYXNlIGRvIG5vdCBjb3VudCBvbiByZWNvcmRpbmdzIGJlaW5nIGF2YWlsYWJsZTwvdT4sIGluIGNhc2UgSSBhY2NpZGVudGFsbHkgZm9yZ2V0IHRvIGluaXRpYXRlIHRoZSByZWNvcmRpbmcgb3IgdGhlcmUgaXMgYSB0ZWNobmljYWwgbWFsZnVuY3Rpb24uClRoZSBhdmFpbGFiaWxpdHkgb2YgbGVjdHVyZSByZWNvcmRpbmdzIHdpbGwgbm90IGJlIGV4dGVuZGVkIGJleW9uZCA0OCBob3VycyBhZnRlciBsZWN0dXJl4oCUdGhlIHJlY29yZGluZ3MgYXJlIG1lYW50IHRvIGhlbHAgcGVvcGxlIGtlZXAgdXAgd2l0aCBsZWN0dXJlcyBhbmQgZm9yIHN0dWRlbnRzIHRvIHJldHJpZXZlIHRoZSByZWxldmFudCBjb250ZW50IGlmIHRoZXkgbWlzc2VkIGFueXRoaW5nIGR1cmluZyB0aGUgbGl2ZSBsZWN0dXJlIG9yIGlmIHRoZXkgbWlzcyB0aGUgbGVjdHVyZTsgdGhleSBhcmUgbm90IG1lYW50IHRvIGJlIGEgc3R1ZHkgbWV0aG9kIHRoYXQgYWxsb3dzIHBlb3BsZSB0byBmYWxsIGJlaGluZCBpbiBjbGFzcyBmcm9tIHdlZWsgdG8gd2Vlay4KSWYgeW91IG1pc3Mgc29tZXRoaW5nIGFuZCBhcmUgdW5hYmxlIHRvIHdhdGNoIHRoZSBsZWN0dXJlIHJlY29yZGluZywgeW91IGNhbiBnZXQvcmV2aWV3IG5vdGVzIHdpdGggYSBwZWVyLCBhbmQgdGhlbiBjb21lIHRvIG9mZmljZSBob3VycyBpZiB5b3UgaGF2ZSBzcGVjaWZpYyBxdWVzdGlvbnMuCgojIyBBdHRlbmRhbmNlIGFuZCBQYXJ0aWNpcGF0aW9uIHsjYXR0ZW5kYW5jZVBhcnRpY2lwYXRpb259CgpBdHRlbmRhbmNlIGFuZCBwYXJ0aWNpcGF0aW9uIGFyZSBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIG1heGltaXplIHlvdXIgYW5kIG90aGVycycgbGVhcm5pbmcuCgojIyBSZWFkaW5ncyB7I3JlYWRpbmdzfQoKV2UgaGF2ZSBsb3RzIG9mIGNvbnRlbnQgdG8gY292ZXIsIGFuZCB0aGUgbGVjdHVyZXMgd2lsbCBtb3ZlIHF1aWNrbHkuClRodXMsIGRvaW5nIHRoZSByZWxldmFudCByZWFkaW5ncyAqYmVmb3JlKiBlYWNoIGNsYXNzIHdpbGwgaGVscCB5b3UgYmVzdCBjb21lIHByZXBhcmVkIHRvIGxlYXJuIHRoZSBtYXRlcmlhbCBwcmVzZW50ZWQgaW4gY2xhc3MuClJlYWRpbmdzIGFuZCBvdGhlciBtYXRlcmlhbHMgd2lsbCBiZSBwb3N0ZWQgb24gW0lDT05dKGh0dHBzOi8vaWNvbi51aW93YS5lZHUpLgpUaGUgYXJ0aWNsZXMgdG8gcmVhZCBhcmUgc3BlY2lmaWVkIGluIHRoZSBbQXJ0aWNsZXNdKCNhcnRpY2xlcykgc2VjdGlvbiBvZiB0aGUgc3lsbGFidXMuCgojIyBFeGFtaW5hdGlvbnMgeyNleGFtc30KClRoZXJlIHdpbGwgYmUgMiBleGFtcy4KRXhhbSAxIHdpbGwgYmUgYWRtaW5pc3RlcmVkIGR1cmluZyBjbGFzcyB0aW1lLgpUaGUgZGF0ZSwgdGltZSwgYW5kIGxvY2F0aW9uIG9mIHRoZSBmaW5hbCBleGFtIHdpbGwgYmUgYW5ub3VuY2VkIGJ5IHRoZSA1dGggd2VlayBvZiBjbGFzcyBieSB0aGUgQ29sbGVnZSBvZiBMaWJlcmFsIEFydHMgYW5kIFNjaWVuY2VzOyB0aGUgZHVyYXRpb24gb2YgdGhlIGZpbmFsIGV4YW0gd2lsbCBiZSAxMjAgbWludXRlcy4KVGhlIGV4YW1zIHdpbGwgYmUgc2hvcnQgYW5zd2VyL2Vzc2F5IHF1ZXN0aW9ucy4KVGhlIGZpbmFsIGV4YW0gaXMgbm9uLWN1bXVsYXRpdmU7IGVhY2ggZXhhbSB3aWxsIGVtcGhhc2l6ZSBpbmZvcm1hdGlvbiBwcmVzZW50ZWQgZm9yIHRoZSBoYWxmIG9mIHRoZSBjbGFzcyB0aGF0IHByZWNlZGVzIGl0LgpIb3dldmVyLCBzb21lIGludGVncmF0aW9uIG9mIGluZm9ybWF0aW9uIHdpbGwgYmUgcmVxdWlyZWQgZm9yIHF1ZXN0aW9ucyBvbiB0aGUgc2Vjb25kIGV4YW0uCkV4YW0gcXVlc3Rpb25zIGNhbiBjb21lIGZyb20gbGVjdHVyZXMgb3IgcmVxdWlyZWQgcmVhZGluZ3MuCgojIyMgTWlzc2luZyBFeGFtcyB7I21pc3NpbmdFeGFtc30KCltVbml2ZXJzaXR5IHJlZ3VsYXRpb25zIHJlcXVpcmUgdGhhdCBzdHVkZW50cyBiZSBhbGxvd2VkIHRvIG1ha2UgdXAgZXhhbWluYXRpb25zXShodHRwczovL29wc21hbnVhbC51aW93YS5lZHUvc3R1ZGVudHMvYWJzZW5jZXMtY2xhc3MpIHRoYXQgaGF2ZSBiZWVuIG1pc3NlZCBkdWUgdG8gaWxsbmVzcywgcmVsaWdpb3VzIGhvbHkgZGF5cywgbWlsaXRhcnkgc2VydmljZSBvYmxpZ2F0aW9ucyAoaW5jbHVkaW5nIHNlcnZpY2UtcmVsYXRlZCBtZWRpY2FsIGFwcG9pbnRtZW50cyksIG9yIG90aGVyIHVuYXZvaWRhYmxlIGNpcmN1bXN0YW5jZXMgb3IgVW5pdmVyc2l0eS1zcG9uc29yZWQgYWN0aXZpdGllcy4KTm90ZTogdGhlIGZvcm1hdCBvZiB0aGUgbWFrZS11cCBleGFtIG1heSBkaWZmZXIgZnJvbSB0aGUgb3JpZ2luYWwgZXhhbS4KSWYgeW91IGtub3cgdGhhdCB5b3UgbXVzdCBiZSBhd2F5IGF0IHRoZSB0aW1lIG9mIGFuIGV4YW0gZm9yIG9uZSBvZiB0aGVzZSByZWFzb25zLCBwbGVhc2UgY29udGFjdCBtZSBpbiBhZHZhbmNlIHdoZW5ldmVyIHBvc3NpYmxlIHRvIHNjaGVkdWxlIGEgbWFrZS11cCBleGFtLgoKIyMgUGFwZXIgeyNwYXBlcn0KCllvdSB3aWxsIHdyaXRlIGEgZmluYWwvdGVybSBwYXBlciBvbiBhIHRvcGljIHBlcnRhaW5pbmcgdG8gYXNzZXNzbWVudC4KVGhlIHBhcGVyIGNhbiBiZSBhIGxpdGVyYXR1cmUgcmV2aWV3IHBlcnRhaW5pbmcgdG8gYXNzZXNzbWVudCAod2l0aCByZWNvbW1lbmRhdGlvbnMpLCBvciBpdCBjYW4gYmUgYSBwYXBlciBvbiB0aGUgZGV2ZWxvcG1lbnQgb2YgYW4gYXNzZXNzbWVudCB0ZWNobmlxdWUuClRoZSBnb2FsIGlzIGZvciB0aGUgcGFwZXIgdG8gYmUgYXMgcmVsZXZhbnQgdG8geW91ciByZXNlYXJjaCBpbnRlcmVzdHMgYXMgcG9zc2libGUsIHNvIGl0IGRpcmVjdGx5IGFkdmFuY2VzIHlvdXIgcmVzZWFyY2ggcHJvZ3JhbS4KUGxlYXNlIGRvIG5vdCBzdHJlc3MgYWJvdXQgdGhlIHBhcGVyLgpZb3VyIHBhcGVyIHNob3VsZCBiZSBsZXNzIHRoYW4gMjAgcGFnZXMgKGV4Y2x1ZGluZyByZWZlcmVuY2VzKS4KSXQgaXMgb2theSAoYW5kIGVuY291cmFnZWQhKSBmb3IgeW91IHRvIHVzZSwgYXMgeW91ciBwYXBlciwgc29tZXRoaW5nIHRoYXQgeW91IGFyZSBhbHJlYWR5IHdvcmtpbmcgb24gb3IgdG8gd3JpdGUgYSBwYXBlciB0aGF0IHlvdSBhcmUgc3VibWl0dGluZyBmb3IgYW5vdGhlciBhc3NpZ25tZW504oCUY29uc2lkZXIgd3JpdGluZyBhIHBhcGVyIHRoYXQgY291bGQgYmUgYSBwdWJsaWNhdGlvbi4KSSB3YW50IHRvIGtlZXAgdGhlIHRvcGljIHJlcXVpcmVtZW50cyBvZiB0aGUgcGFwZXIgZmxleGlibGUgYW5kIG9wZW4tZW5kZWQgc28gdGhlIHBhcGVyIGNhbiBiZSBhcyByZWxldmFudCBmb3IgeW91ciByZXNlYXJjaCBwcm9ncmFtIGFzIHBvc3NpYmxl4oCUdGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMgdGhhdCB0aGUgcGFwZXIgdG9waWMgaXMgcmVsZXZhbnQgdG8gYXNzZXNzbWVudCwgYW5kIHRoYXQgeW91ciBwYXBlciBpbmNvcnBvcmF0ZXMgaWRlYXMgd2UgZGlzY3VzcyBpbiBjbGFzcy4KCllvdXIgZmluYWwgcGFwZXIgaXMgZHVlIGJlZm9yZSB0aGUgbGFzdCBjbGFzcyAoPHU+KipEZWFkbGluZTogOTozMCBhbSBvbiBUaHVyc2RheSwgTWF5IDIqKjwvdT4pLgpQbGVhc2Ugc3VibWl0IHlvdXIgcGFwZXIgdmlhIFtJQ09OXShodHRwczovL2ljb24udWlvd2EuZWR1KS4KCiMgQXJ0aWNsZXMgeyNhcnRpY2xlc30KClRoZSBzZWN0aW9uIGNvdmVyZWQgZm9yIGVhY2ggY2xhc3MgaXMgZGVzY3JpYmVkIGluIHRoZSBbQ291cnNlIE91dGxpbmVdKCNvdXRsaW5lKS4KVGhlIGFydGljbGVzIHRvIHJlYWQgZm9yIGVhY2ggc2VjdGlvbiBhcmUgc3BlY2lmaWVkIGJlbG93LgpBcnRpY2xlcyBhcmUgcG9zdGVkIGluIHRoZSAiRmlsZXMiIHRhYiBvbiBbSUNPTl0oaHR0cHM6Ly9pY29uLnVpb3dhLmVkdSkuCgpcKkRlc2lnbmF0ZXMgYSBwYXBlciB0aGF0IHlvdSBzaG91bGQgcmVhZCwgZ2V0IHRoZSBiYXNpYyBpZGVhLCBhbmQgcmVtZW1iZXIgd2hlcmUgdG8gZmluZCBpdCBpZiB5b3UgbmVlZCBmdXJ0aGVyIGluZm9ybWF0aW9uLgpUaGVzZSBhcmUgdHlwaWNhbGx5IGhpc3RvcmljYWwgcGFwZXJzLCBpbGx1c3RyYXRpb25zIG9mIHNwZWNpZmljIHRlY2huaXF1ZXMsIG9yIHVzZWZ1bCByZWZlcmVuY2VzLgoKUmVmZXJlbmNlcyBoaWdobGlnaHRlZCBpbiB5ZWxsb3cgYXJlIHRoZSByZWFkaW5ncyB0aGF0IHlvdSBzaG91bGQgcGF5IGNsb3Nlc3QgYXR0ZW50aW9uIHRvLgpCbHVlIGhpZ2hsaWdodHMgcHJvdmlkZSBhZGRpdGlvbmFsIHVzZWZ1bCBpbmZvcm1hdGlvbi4KCiMjIFBzeWNob21ldHJpY3MsIFByZWRpY3Rpb24sIGFuZCBHZW5lcmFsIElzc3VlcwoKIyMjIFNjaWVuY2UgYW5kIHRoZSBSZXBsaWNhdGlvbiBDcmlzaXMgeyNzZWN0aW9uMX0KCjxkaXYgc3R5bGU9InRleHQtaW5kZW50OiAtNDBweDsgcGFkZGluZy1sZWZ0OiA0MHB4OyI+CgojIyMjIDx1PlNlY3Rpb24gMTwvdT4gey51bm51bWJlcmVkfQoKTG9rZW4sIEUuLCAmIEdlbG1hbiwgQS4gKDIwMTcpLiBNZWFzdXJlbWVudCBlcnJvciBhbmQgdGhlIHJlcGxpY2F0aW9uIGNyaXNpcy4gKlNjaWVuY2UsIDM1NSooNjMyNSksIDU4NOKAkzU4NS4gaHR0cHM6Ly9kb2kub3JnLzEwLjExMjYvc2NpZW5jZS5hYWwzNjE4Cgo8bWFyaz5NY0ZhbGwsIFIuIE0uICgxOTkxKS4gTWFuaWZlc3RvIGZvciBhIHNjaWVuY2Ugb2YgY2xpbmljYWwgcHN5Y2hvbG9neS4gKlRoZSBDbGluaWNhbCBQc3ljaG9sb2dpc3QsIDQ0Kig2KSwgNzXigJM5MS48L21hcms+Cgo8bWFyaz5NY0ZhbGwsIFIuIE0uICgyMDAwKS4gRWxhYm9yYXRlIHJlZmxlY3Rpb25zIG9uIGEgc2ltcGxlIG1hbmlmZXN0by4gKkFwcGxpZWQgJiBQcmV2ZW50aXZlIFBzeWNob2xvZ3ksIDkqKDEpLCA14oCTMjEuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDE2L3MwOTYyLTE4NDkoMDUpODAwMzUtNjwvbWFyaz4KCiMjIyBSZWxpYWJpbGl0eSB7I3NlY3Rpb24yfQoKIyMjIyA8dT5TZWN0aW9uIDI8L3U+IHsudW5udW1iZXJlZH0KCjxtYXJrPk1jTmVpc2gsIEQuICgyMDE4KS4gVGhhbmtzIGNvZWZmaWNpZW50IGFscGhhLCB3ZSdsbCB0YWtlIGl0IGZyb20gaGVyZS4gKlBzeWNob2xvZ2ljYWwgTWV0aG9kcywgMjMqKDMpLCA0MTLigJM0MzMuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3L21ldDAwMDAxNDQ8L21hcms+CgpcKkdhbHRvbiwgRi4gKDE5NDgpLiBDbGFzc2lmaWNhdGlvbiBvZiBtZW4gYWNjb3JkaW5nIHRvIHRoZWlyIG5hdHVyYWwgZ2lmdHMsIDE4NjkuIEluIFcuIERlbm5pcyAoRWQuKSwgKlJlYWRpbmdzIGluIHRoZSBoaXN0b3J5IG9mIHBzeWNob2xvZ3kqIChwcC4gMjMx4oCTMjQ3KS4gQXBwbGV0b24tQ2VudHVyeS1Dcm9mdHMuIGh0dHBzOi8vcHN5Y25ldC5hcGEub3JnL3JlY29yZC8yMDA2LTEwMjEzLTAwMAoKXCpHYXJsYW5kLCBMLiBILiAoMTk2MCkuIFRoZSBwcm9ibGVtIG9mIG9ic2VydmVyIGVycm9yLiAqQnVsbGV0aW4gb2YgdGhlIE5ldyBZb3JrIEFjYWRlbXkgb2YgTWVkaWNpbmUsIDM2Kig5KSwgNTcw4oCTNTg0LgoKIyMjIyA8dT5TZWN0aW9uIDM8L3U+IHsudW5udW1iZXJlZCAjc2VjdGlvbjN9Cgo8bWFyaz5TY2htaWR0LCBGLiBMLiwgJiBIdW50ZXIsIEouIEUuICgxOTk2KS4gTWVhc3VyZW1lbnQgZXJyb3IgaW4gcHN5Y2hvbG9naWNhbCByZXNlYXJjaDogTGVzc29ucyBmcm9tIDI2IHJlc2VhcmNoIHNjZW5hcmlvcy4gKlBzeWNob2xvZ2ljYWwgTWV0aG9kcywgMSooMiksIDE5OeKAkzIyMy4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMzcvMTA4Mi05ODlYLjEuMi4xOTk8L21hcms+CgpXaWdnaW5zLCBKLiBTLiAoMTk3MykuIE9ic2VydmF0aW9uYWwgdGVjaG5pcXVlczogSS4gR2VuZXJhbGl6YWJpbGl0eSBhbmQgZmFjZXRzIG9mIG9ic2VydmF0aW9uLiBJbiBKLiBTLiBXaWdnaW5zIChFZC4pLCAqUGVyc29uYWxpdHkgYW5kIHByZWRpY3Rpb246IFByaW5jaXBsZXMgb2YgcGVyc29uYWxpdHkgYXNzZXNzbWVudCogKHBwLiAyNzfigJMyOTUpLiBBZGRpc29uLVdlc2xleS4KCiMjIyBWYWxpZGl0eSB7I3NlY3Rpb240fQoKIyMjIyA8dT5TZWN0aW9uIDQ8L3U+IHsudW5udW1iZXJlZH0KCjxtYXJrPkNhbXBiZWxsLCBELiBULiwgJiBGaXNrZSwgRC4gVy4gKDE5NTkpLiBDb252ZXJnZW50IGFuZCBkaXNjcmltaW5hbnQgdmFsaWRhdGlvbiBieSB0aGUgbXVsdGl0cmFpdC1tdWx0aW1ldGhvZCBtYXRyaXguICpQc3ljaG9sb2dpY2FsIEJ1bGxldGluLCA1NiooMiksIDgx4oCTMTA1LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy9oMDA0NjAxNjwvbWFyaz4KCkhheWVzLCBTLiBDLiwgTmVsc29uLCBSLiBPLiwgJiBKYXJyZXR0LCBSLiBCLiAoMTk4NykuIFRoZSB0cmVhdG1lbnQgdXRpbGl0eSBvZiBhc3Nlc3NtZW50OiBBIGZ1bmN0aW9uYWwgYXBwcm9hY2ggdG8gZXZhbHVhdGluZyBhc3Nlc3NtZW50IHF1YWxpdHkuICpBbWVyaWNhbiBQc3ljaG9sb2dpc3QsIDQyKiwgOTYz4oCTOTc0LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8wMDAzLTA2NlguNDIuMTEuOTYzCgo8bWFyaz5NZWVobCwgUC4gRS4gKDE5NzMpLiBDaGFwdGVyIDEuICpQc3ljaG9kaWFnbm9zaXM6IFNlbGVjdGVkIHBhcGVycyouIFVuaXZlcnNpdHkgb2YgTWlubmVzb3RhIFByZXNzLjwvbWFyaz4KPG1hcmsgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1ZSI+W1RoaXMgaXMgQ3JvbmJhY2gsIEwuIEouLCAmIE1lZWhsLCBQLiBFLiAoMTk1NSkuIENvbnN0cnVjdCB2YWxpZGl0eSBpbiBwc3ljaG9sb2dpY2FsIHRlc3RzLiAqUHN5Y2hvbG9naWNhbCBCdWxsZXRpbiwgNTIqKDQpLCAyODHigJMzMDIuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3L2gwMDQwOTU3XTwvbWFyaz4KCiMjIyMgPHU+U2VjdGlvbiA1PC91PiB7LnVubnVtYmVyZWQgI3NlY3Rpb241fQoKPG1hcms+U2VjaHJlc3QsIEwuICgxOTYzKS4gSW5jcmVtZW50YWwgdmFsaWRpdHk6IEEgcmVjb21tZW5kYXRpb24uICpFZHVjYXRpb25hbCBhbmQgUHN5Y2hvbG9naWNhbCBNZWFzdXJlbWVudCwgMjMqLCAxNTPigJMxNTguIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTc3LzAwMTMxNjQ0NjMwMjMwMDExMzwvbWFyaz4KCjxtYXJrPlNoYXZlbHNvbiwgUi4gSi4sIFdlYmIsIE4uIE0uLCAmIFJhd2xleSwgUi4gTC4gKDE5ODkpLiBHZW5lcmFsaXphYmlsaXR5IHRoZW9yeS4gKkFtZXJpY2FuIFBzeWNob2xvZ2lzdCwgNDQqLCA5MjLigJM5MzIuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzAwMDMtMDY2WC40NC42LjkyMjwvbWFyaz4KCkJvcm5zdGVpbiwgUi4gRi4gKDIwMTEpLiBUb3dhcmQgYSBwcm9jZXNzLWZvY3VzZWQgbW9kZWwgb2YgdGVzdCBzY29yZSB2YWxpZGl0eTogSW1wcm92aW5nIHBzeWNob2xvZ2ljYWwgYXNzZXNzbWVudCBpbiBzY2llbmNlIGFuZCBwcmFjdGljZS4gKlBzeWNob2xvZ2ljYWwgQXNzZXNzbWVudCwgMjMqKDIpLCA1MzLigJM1NDQuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3L2EwMDIyNDAyCgpcKkFtZXJpY2FuIEVkdWNhdGlvbmFsIFJlc2VhcmNoIEFzc29jaWF0aW9uLCBBbWVyaWNhbiBQc3ljaG9sb2dpY2FsIEFzc29jaWF0aW9uLCAmIE5hdGlvbmFsIENvdW5jaWwgb24gTWVhc3VyZW1lbnQgaW4gRWR1Y2F0aW9uLiAoMjAxNCkuICpTdGFuZGFyZHMgZm9yIGVkdWNhdGlvbmFsIGFuZCBwc3ljaG9sb2dpY2FsIHRlc3RpbmcqLiBBbWVyaWNhbiBFZHVjYXRpb25hbCBSZXNlYXJjaCBBc3NvY2lhdGlvbi4KPG1hcmsgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1ZSI+W1RoaXMgaXMgYXZhaWxhYmxlIGluIHRoZSBjbGluaWMgbGlicmFyeS4KWW91IGRvbid0IG5lZWQgdG8gcmVhZCB0aGlzIGZvciBvdXIgY2xhc3MsIGJ1dCB5b3Ugc2hvdWxkIGtub3cgaXQgZXhpc3RzIGFzIGEgcmVmZXJlbmNlLCBiZWNhdXNlIGl0IHNldHMgdGhlIHN0YW5kYXJkIGZvciBBUEEgam91cm5hbHMsIGxpY2Vuc3VyZSBleGFtcywgYW5kIGJleW9uZC5dPC9tYXJrPgoKIyMjIEVtZXJnaW5nIFBlcnNwZWN0aXZlcyBpbiBNZWFzdXJlbWVudAoKIyMjIyBTdHJ1Y3R1cmFsIEVxdWF0aW9uIE1vZGVsaW5nIChTRU0pIHsjc2VjdGlvbjZ9CgojIyMjIDx1PlNlY3Rpb24gNjwvdT4gey51bm51bWJlcmVkfQoKPG1hcms+Qm9sbGVuLCBLLiBBLiwgJiBMZW5ub3gsIFIuIEQuICgxOTkxKS4gQ29udmVudGlvbmFsIHdpc2RvbSBvbiBtZWFzdXJlbWVudDogQSBzdHJ1Y3R1cmFsIGVxdWF0aW9uIHBlcnNwZWN0aXZlLiAqUHN5Y2hvbG9naWNhbCBCdWxsZXRpbiwgMTEwKigyKSwgMzA14oCTMzE0LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8wMDMzLTI5MDkuMTEwLjIuMzA1PC9tYXJrPgoKPG1hcms+UG9kc2Frb2ZmLCBQLiBNLiwgTWFjS2VuemllLCBTLiBCLiwgJiBQb2RzYWtvZmYsIE4uIFAuICgyMDEyKS4gU291cmNlcyBvZiBtZXRob2QgYmlhcyBpbiBzb2NpYWwgc2NpZW5jZSByZXNlYXJjaCBhbmQgcmVjb21tZW5kYXRpb25zIG9uIGhvdyB0byBjb250cm9sIGl0LiAqQW5udWFsIFJldmlldyBvZiBQc3ljaG9sb2d5LCA2MyooMSksIDUzOeKAkzU2OS4gaHR0cHM6Ly9kb2kub3JnLzEwLjExNDYvYW5udXJldi1wc3ljaC0xMjA3MTAtMTAwNDUyPC9tYXJrPgoKRWR3YXJkcywgSi4gUi4sICYgQmFnb3p6aSwgUi4gUC4gKDIwMDApLiBPbiB0aGUgbmF0dXJlIGFuZCBkaXJlY3Rpb24gb2YgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGNvbnN0cnVjdHMgYW5kIG1lYXN1cmVzLiAqUHN5Y2hvbG9naWNhbCBNZXRob2RzLCA1KigyKSwgMTU14oCTMTc0LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMDgyLTk4OVguNS4yLjE1NQo8bWFyayBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogbGlnaHRibHVlIj5bcmVhZCBwcC4gMTU14oCTMTYyIGNhcmVmdWxseSwgYnV0IGRvbid0IHdvcnJ5IGFib3V0IHRoZSBjb21wbGV4IHBhdGggbW9kZWxzIHRoYXQgZm9sbG93IHVubGVzcyB0aGV5IGFyZSByZWxldmFudCB0byB5b3VyIG93biByZXNlYXJjaC5dPC9tYXJrPgoKIyMjIyBJdGVtIFJlc3BvbnNlIFRoZW9yeSAoSVJUKSB7I3NlY3Rpb243fQoKIyMjIyA8dT5TZWN0aW9uIDc8L3U+IHsudW5udW1iZXJlZH0KCjxtYXJrPkVtYnJldHNvbiwgUy4gRS4gKDE5OTYpLiBUaGUgbmV3IHJ1bGVzIG9mIG1lYXN1cmVtZW50LiAqUHN5Y2hvbG9naWNhbCBBc3Nlc3NtZW50LCA4KiwgMzQx4oCTMzQ5LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMDQwLTM1OTAuOC40LjM0MTwvbWFyaz4KCjxtYXJrPktydWVnZXIsIFIuIEYuLCBOaWNob2wsIFAuIEUuLCBIaWNrcywgQi4gTS4sIE1hcmtvbiwgSy4gRS4sIFBhdHJpY2ssIEMuIEouLCBsYWNvbm8sIFcuIEcuLCAmIE1jR3VlLCBNLiAoMjAwNCkuIFVzaW5nIGxhdGVudCB0cmFpdCBtb2RlbGluZyB0byBjb25jZXB0dWFsaXplIGFuIGFsY29ob2wgcHJvYmxlbXMgY29udGludXVtLiAqUHN5Y2hvbG9naWNhbCBBc3Nlc3NtZW50LCAxNiooMiksIDEwN+KAkzExOS4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMzcvMTA0MC0zNTkwLjE2LjIuMTA3PC9tYXJrPgoKQ29vcGVyLCBMLiBELiwgJiBCYWxzaXMsIFMuICgyMDA5KS4gV2hlbiBsZXNzIGlzIG1vcmU6IEhvdyBmZXdlciBkaWFnbm9zdGljIGNyaXRlcmlhIGNhbiBpbmRpY2F0ZSBncmVhdGVyIHNldmVyaXR5LiAqUHN5Y2hvbG9naWNhbCBBc3Nlc3NtZW50LCAyMSooMyksIDI4NeKAkzI5My4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMzcvYTAwMTY2OTgKClJlaXNlLCBTLiBQLiwgJiBXYWxsZXIsIE4uIEcuICgyMDA5KS4gSXRlbSByZXNwb25zZSB0aGVvcnkgYW5kIGNsaW5pY2FsIG1lYXN1cmVtZW50LiAqQW5udWFsIFJldmlldyBvZiBDbGluaWNhbCBQc3ljaG9sb2d5LCA1KigxKSwgMjfigJM0OC4gaHR0cHM6Ly9kb2kub3JnLzEwLjExNDYvYW5udXJldi5jbGlucHN5LjAzMjQwOC4xNTM1NTMKCiMjIFByZWRpY3Rpb24geyNzZWN0aW9uOH0KCiMjIyBCYXNpY3MKCiMjIyMgPHU+U2VjdGlvbiA4PC91PiB7LnVubnVtYmVyZWR9Cgo8bWFyaz5NZWVobCwgUC4gRS4gKDE5NzMpLiBDaGFwdGVyIDIuICpQc3ljaG9kaWFnbm9zaXM6IFNlbGVjdGVkIHBhcGVycyouIFVuaXZlcnNpdHkgb2YgTWlubmVzb3RhIFByZXNzLjwvbWFyaz4KPG1hcmsgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1ZSI+W1RoaXMgaXMgTWVlaGwsIFAuIEUuLCAmIFJvc2VuLCBBLiAoMTk1NSkuIEFudGVjZWRlbnQgcHJvYmFiaWxpdHkgYW5kIHRoZSBlZmZpY2llbmN5IG9mIHBzeWNob21ldHJpYyBzaWducywgcGF0dGVybnMsIG9yIGN1dHRpbmcgc2NvcmVzLiAqUHN5Y2hvbG9naWNhbCBCdWxsZXRpbiwgNTIqKDMpLCAxOTTigJMyMTYuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3L2gwMDQ4MDcwXTwvbWFyaz4KCiMjIyBTaWduYWwgRGV0ZWN0aW9uIFRoZW9yeSB7I3NlY3Rpb245fQoKIyMjIyA8dT5TZWN0aW9uIDk8L3U+IHsudW5udW1iZXJlZH0KCjxtYXJrPlRyZWF0LCBULiBBLiwgJiBWaWtlbiwgUi4gSi4gKDIwMjMpLiBNZWFzdXJpbmcgdGVzdCBwZXJmb3JtYW5jZSB3aXRoIHNpZ25hbCBkZXRlY3Rpb24gdGhlb3J5IHRlY2huaXF1ZXMuIEluIEguIENvb3BlciwgTS4gTi4gQ291dGFuY2hlLCBMLiBNLiBNY011bGxlbiwgQS4gVC4gUGFudGVyLCBELiBSaW5kc2tvcGYsICYgSy4gSi4gU2hlciAoRWRzLiksICpBUEEgaGFuZGJvb2sgb2YgcmVzZWFyY2ggbWV0aG9kcyBpbiBwc3ljaG9sb2d5OiBGb3VuZGF0aW9ucywgcGxhbm5pbmcsIG1lYXN1cmVzLCBhbmQgcHN5Y2hvbWV0cmljcyogKDJuZCBlZC4sIFZvbC4gMSwgcHAuIDgzN+KAkzg1OCkuIEFtZXJpY2FuIFBzeWNob2xvZ2ljYWwgQXNzb2NpYXRpb24uIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzAwMDAzMTgtMDM4PC9tYXJrPgoKU3dldHMsIEouIEEuLCBEYXdlcywgUi4gTS4sICYgTW9uYWhhbiwgSi4gKDIwMDApLiBQc3ljaG9sb2dpY2FsIHNjaWVuY2UgY2FuIGltcHJvdmUgZGlhZ25vc3RpYyBkZWNpc2lvbnMuICpQc3ljaG9sb2dpY2FsIFNjaWVuY2UgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdCwgMSooMSksIDHigJMyNi4gaHR0cHM6Ly9kb2kub3JnLzEwLjExMTEvMTUyOS0xMDA2LjAwMQoKTGluZGhpZW0sIE8uLCBQZXRlcnNlbiwgSS4gVC4sIE1lbnRjaCwgTC4gSy4sICYgWW91bmdzdHJvbSwgRS4gQS4gKDIwMjApLiBUaGUgaW1wb3J0YW5jZSBvZiBjYWxpYnJhdGlvbiBpbiBjbGluaWNhbCBwc3ljaG9sb2d5LiAqQXNzZXNzbWVudCwgMjcqKDQpLCA4NDDigJM4NTQuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTc3LzEwNzMxOTExMTc3NTIwNTUgCgojIyMgQ2xpbmljYWwgSnVkZ21lbnQgdnMuIEFsZ29yaXRobWljIFByZWRpY3Rpb24geyNzZWN0aW9uMTB9CgojIyMjIDx1PlNlY3Rpb24gMTA8L3U+IHsudW5udW1iZXJlZH0KCkdhcmIsIEguIE4uICgyMDA1KS4gQ2xpbmljYWwganVkZ21lbnQgYW5kIGRlY2lzaW9uIG1ha2luZy4gKkFubnVhbCBSZXZpZXcgb2YgQ2xpbmljYWwgUHN5Y2hvbG9neSwgMSosIDY34oCTODkuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTQ2L2FubnVyZXYuY2xpbnBzeS4xLjEwMjgwMy4xNDM4MTAKCjxtYXJrPkRhd2VzLCBSLiBNLiwgRmF1c3QsIEQuLCAmIE1lZWhsLCBQLiBFLiAoMTk4OSkuIENsaW5pY2FsIHZlcnN1cyBhY3R1YXJpYWwganVkZ21lbnQuICpTY2llbmNlLCAyNDMqKDQ4OTkpLCAxNjY44oCTMTY3NC4gaHR0cHM6Ly9kb2kub3JnLzEwLjExMjYvc2NpZW5jZS4yNjQ4NTczPC9tYXJrPgoKPG1hcms+RGF3ZXMsIFIuIE0uICgxOTg2KS4gUmVwcmVzZW50YXRpdmUgdGhpbmtpbmcgaW4gY2xpbmljYWwganVkZ21lbnQuICpDbGluaWNhbCBQc3ljaG9sb2d5IFJldmlldywgNiosIDQyNeKAkzQ0MS4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMTYvMDI3Mi03MzU4KDg2KTkwMDMwLTk8L21hcms+CgpZb3VuZ3N0cm9tLCBFLiBBLiwgSGFsdmVyc29uLCBULiBGLiwgWW91bmdzdHJvbSwgSi4gSy4sIExpbmRoaWVtLCBPLiwgJiBGaW5kbGluZywgUi4gTC4gKDIwMTgpLiBFdmlkZW5jZS1iYXNlZCBhc3Nlc3NtZW50IGZyb20gc2ltcGxlIGNsaW5pY2FsIGp1ZGdtZW50cyB0byBzdGF0aXN0aWNhbCBsZWFybmluZzogRXZhbHVhdGluZyBhIHJhbmdlIG9mIG9wdGlvbnMgdXNpbmcgcGVkaWF0cmljIGJpcG9sYXIgZGlzb3JkZXIgYXMgYSBkaWFnbm9zdGljIGNoYWxsZW5nZS4gKkNsaW5pY2FsIFBzeWNob2xvZ2ljYWwgU2NpZW5jZSwgNiooMiksIDI0M+KAkzI2NS4gaHR0cHM6Ly9kb2kub3JnLzEwLjExNzcvMjE2NzcwMjYxNzc0MTg0NQoKIyMgR2VuZXJhbCBJc3N1ZXMgaW4gQ2xpbmljYWwgQXNzZXNzbWVudCB7I3NlY3Rpb24xMX0KCiMjIyMgPHU+U2VjdGlvbiAxMTwvdT4gey51bm51bWJlcmVkfQoKXCpCZW5qYW1pbiwgTC4gVC4gKDIwMDUpLiBBIGhpc3Rvcnkgb2YgY2xpbmljYWwgcHN5Y2hvbG9neSBhcyBhIHByb2Zlc3Npb24gaW4gQW1lcmljYSAoYW5kIGEgZ2xpbXBzZSBvZiBpdHMgZnV0dXJlKS4gKkFubnVhbCBSZXZpZXcgb2YgQ2xpbmljYWwgUHN5Y2hvbG9neSwgMSosIDHigJMzMC4gaHR0cHM6Ly9kb2kub3JnLzEwLjExNDYvYW5udXJldi5jbGlucHN5LjEuMTAyODAzLjE0Mzc1OAoKPG1hcms+S2F6ZGluLCBBLiBFLiAoMTk5NSkuIFByZXBhcmluZyBhbmQgZXZhbHVhdGluZyByZXNlYXJjaCByZXBvcnRzLiAqUHN5Y2hvbG9naWNhbCBBc3Nlc3NtZW50LCA3KigzKSwgMjI44oCTMjM3LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMDQwLTM1OTAuNy4zLjIyODwvbWFyaz4KClNlY2hyZXN0LCBMLiwgU3RpY2tsZSwgVC4gUi4sICYgU3Rld2FydCwgTS4gKDE5OTgpLiBUaGUgcm9sZSBvZiBhc3Nlc3NtZW50IGluIGNsaW5pY2FsIHBzeWNob2xvZ3kuIEluIEEuIEJlbGxhY2ssIE0uIEhlcnNlbiwgJiBDLiBSLiBSZXlub2xkcyAoRWRzLiksICpDb21wcmVoZW5zaXZlIGNsaW5pY2FsIHBzeWNob2xvZ3kqIChWb2wuIDQ6IEFzc2Vzc21lbnQpLiBQZXJnYW1vbi4KCiMjIEV2aWRlbmNlLUJhc2VkIEFzc2Vzc21lbnQgeyNzZWN0aW9uMTJ9CgojIyMjIDx1PlNlY3Rpb24gMTI8L3U+IHsudW5udW1iZXJlZH0KCjxtYXJrPkh1bnNsZXksIEouLCAmIE1hc2gsIEUuIEouICgyMDA3KS4gRXZpZGVuY2UtYmFzZWQgYXNzZXNzbWVudC4gKkFubnVhbCBSZXZpZXcgb2YgQ2xpbmljYWwgUHN5Y2hvbG9neSwgMyosIDI54oCTNTEuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTQ2L2FubnVyZXYuY2xpbnBzeS4zLjAyMjgwNi4wOTE0MTk8L21hcms+CgpBbnRvbnksIE0uIE0uLCAmIFJvd2EsIEsuICgyMDA1KS4gRXZpZGVuY2UtYmFzZWQgYXNzZXNzbWVudCBvZiBhbnhpZXR5IGRpc29yZGVycyBpbiBhZHVsdHMuICpQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQsIDE3KigzKSwgMjU24oCTMjY2LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMDQwLTM1OTAuMTcuMy4yNTYKPG1hcmsgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1ZSI+W1RoaXMgaXMgYSBjYXNlIHN0dWR5IGluIGV2aWRlbmNlLWJhc2VkIGFzc2Vzc21lbnTigJRpdCdzIHRoZSBnZW5lcmFsIGFwcHJvYWNoIHRoYXQgbWF0dGVycywgbm90IHdoYXQgaXMgc3BlY2lmaWMgYWJvdXQgYW54aWV0eS5dPC9tYXJrPgoKWW91bmdzdHJvbSwgRS4gQS4sICYgVmFuIE1ldGVyLCBBLiAoMjAxNikuIEVtcGlyaWNhbGx5IHN1cHBvcnRlZCBhc3Nlc3NtZW50IG9mIGNoaWxkcmVuIGFuZCBhZG9sZXNjZW50cy4gKkNsaW5pY2FsIFBzeWNob2xvZ3k6IFNjaWVuY2UgYW5kIFByYWN0aWNlLCAyMyooNCksIDMyN+KAkzM0Ny4gaHR0cHM6Ly9kb2kub3JnLzEwLjExMTEvY3BzcC4xMjE3MgoKPG1hcms+WW91bmdzdHJvbSwgRS4gQS4sIFZhbiBNZXRlciwgQS4sIEZyYXppZXIsIFQuIFcuLCBIdW5zbGV5LCBKLiwgUHJpbnN0ZWluLCBNLiBKLiwgT25nLCBNLi1MLiwgJiBZb3VuZ3N0cm9tLCBKLiBLLiAoMjAxNykuIEV2aWRlbmNlLWJhc2VkIGFzc2Vzc21lbnQgYXMgYW4gaW50ZWdyYXRpdmUgbW9kZWwgZm9yIGFwcGx5aW5nIHBzeWNob2xvZ2ljYWwgc2NpZW5jZSB0byBndWlkZSB0aGUgdm95YWdlIG9mIHRyZWF0bWVudC4gKkNsaW5pY2FsIFBzeWNob2xvZ3k6IFNjaWVuY2UgYW5kIFByYWN0aWNlLCAyNCooNCksIDMzMeKAkzM2My4gaHR0cHM6Ly9kb2kub3JnLzEwLjExMTEvY3BzcC4xMjIwNzwvbWFyaz4KCiMjIEV0aGljYWwgSXNzdWVzIGluIEFzc2Vzc21lbnQgeyNzZWN0aW9uMTN9CgojIyMjIDx1PlNlY3Rpb24gMTM8L3U+IHsudW5udW1iZXJlZH0KCjxtYXJrPkFtZXJpY2FuIFBzeWNob2xvZ2ljYWwgQXNzb2NpYXRpb24uICgyMDE3KS4gRXRoaWNhbCBwcmluY2lwbGVzIG9mIHBzeWNob2xvZ2lzdHMgYW5kIGNvZGUgb2YgY29uZHVjdC4gaHR0cHM6Ly93d3cuYXBhLm9yZy9ldGhpY3MvY29kZTwvbWFyaz4KPG1hcmsgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1ZSI+KFNlY3Rpb25zIDEsIDIsIDkpLjwvbWFyaz4KCk5hZ3ksIFQuIEYuICgyMDExKS4gRXRoaWNzIGluIHBzeWNob2xvZ2ljYWwgYXNzZXNzbWVudC4gSW4gVC4gRi4gTmFneSAoRWQuKSwgKkVzc2VudGlhbCBldGhpY3MgZm9yIHBzeWNob2xvZ2lzdHM6IGEgcHJpbWVyIGZvciB1bmRlcnN0YW5kaW5nIGFuZCBtYXN0ZXJpbmcgY29yZSBpc3N1ZXMqIChwcC4gMTcx4oCTMTgzKS4gQW1lcmljYW4gUHN5Y2hvbG9naWNhbCBBc3NvY2lhdGlvbi4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMzcvMTIzNDUtMDA5CgpDYW1wYmVsbCwgTC4sIFZhc3F1ZXosIE0uLCBCZWhua2UsIFMuLCAmIEtpbnNjaGVyZmYsIFIuICgyMDEwKS4gQXNzZXNzbWVudC4gSW4gTC4gQ2FtcGJlbGwsIE0uIFZhc3F1ZXosIFMuIEJlaG5rZSwgJiBSLiBLaW5zY2hlcmZmIChFZHMuKSwgKkFQQSBFdGhpY3MgQ29kZSBjb21tZW50YXJ5IGFuZCBjYXNlIGlsbHVzdHJhdGlvbnMqLiBBbWVyaWNhbiBQc3ljaG9sb2dpY2FsIEFzc29jaWF0aW9uLgoKPG1hcms+QmVyc29mZiwgRC4gTi4sIERlTWF0dGVvLCBELiwgJiBGb3N0ZXIsIEUuIEUuICgyMDEyKS4gQXNzZXNzbWVudCBhbmQgdGVzdGluZy4gSW4gUy4gSi4gS25hcHAgKEVkLiksICpBUEEgaGFuZGJvb2sgb2YgZXRoaWNzIGluIHBzeWNob2xvZ3kqIChWb2wuIDI6IFByYWN0aWNlLCBUZWFjaGluZywgYW5kIFJlc2VhcmNoLCBwcC4gNDXigJM3NCkuIEFtZXJpY2FuIFBzeWNob2xvZ2ljYWwgQXNzb2NpYXRpb24uPC9tYXJrPgoKXCpUYWNrZXR0LCBKLiBMLiwgQnJhbmRlcywgQy4gTS4sICYgUmVhcmRvbiwgSy4gVy4gKDIwMTkpLiBMZXZlcmFnaW5nIHRoZSBPcGVuIFNjaWVuY2UgRnJhbWV3b3JrIGluIGNsaW5pY2FsIHBzeWNob2xvZ2ljYWwgYXNzZXNzbWVudCByZXNlYXJjaC4gKlBzeWNob2xvZ2ljYWwgQXNzZXNzbWVudCwgMzEqKDEyKSwgMTM4NuKAkzEzOTQuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3L3BhczAwMDA1ODMKCiMjIEludGVsbGVjdHVhbCBBc3Nlc3NtZW50IHsjc2VjdGlvbjE1fQoKIyMjIyA8dT5TZWN0aW9uIDE1PC91PiB7LnVubnVtYmVyZWR9Cgo8bWFyaz5BY2tlcm1hbiwgUC4gTC4gKDIwMTMpLiBBc3Nlc3NtZW50IG9mIGludGVsbGVjdHVhbCBmdW5jdGlvbmluZyBpbiBhZHVsdHMuIEluIEsuIEYuIEdlaXNpbmdlciwgSi4gRi4gQ2FybHNvbiwgSi4tSS4gQy4gSGFuc2VuLCBOLiBSLiBLdW5jZWwsIFMuIFAuIFJlaXNlLCAmIE0uIEMuIFJvZHJpZ3VleiAoRWRzLiksICpBUEEgaGFuZGJvb2sgb2YgdGVzdGluZyBhbmQgYXNzZXNzbWVudCBpbiBwc3ljaG9sb2d5KiAoVm9sLiAyOiBUZXN0aW5nIGFuZCBBc3Nlc3NtZW50IGluIENsaW5pY2FsIGFuZCBDb3Vuc2VsaW5nIFBzeWNob2xvZ3ksIHBwLiAxMTnigJMxMzIpLiBBbWVyaWNhbiBQc3ljaG9sb2dpY2FsIEFzc29jaWF0aW9uLiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xNDA0OC0wMDg8L21hcms+CgpcKkJpbmV0LCBBLiwgJiBTaW1vbiwgVC4gKDE5NDgpLiBVcG9uIHRoZSBuZWNlc3NpdHkgb2YgZXN0YWJsaXNoaW5nIGEgc2NpZW50aWZpYyBkaWFnbm9zaXMgb2YgaW5mZXJpb3Igc3RhdGVzIG9mIGludGVsbGlnZW5jZS4gSW4gVy4gRGVubmlzIChFZC4pLCAqUmVhZGluZ3MgaW4gdGhlIGhpc3Rvcnkgb2YgcHN5Y2hvbG9neSogKHBwLiA0MDfigJM0MTEpLiBBcHBsZXRvbi1DZW50dXJ5LUNyb2Z0cy4KClwqQmluZXQsIEEuLCAmIFNpbW9uLCBULiAoMTk0OCkuIFRoZSBkZXZlbG9wbWVudCBvZiB0aGUgQmluZXQtU2ltb24gU2NhbGUsIDE5MDXigJMxOTA4LiBJbiBXLiBEZW5uaXMgKEVkLiksICpSZWFkaW5ncyBpbiB0aGUgaGlzdG9yeSBvZiBwc3ljaG9sb2d5KiAocHAuIDQxMuKAkzQyNCkuIEFwcGxldG9uLUNlbnR1cnktQ3JvZnRzLiAKClwqQ2F0dGVsbCwgSi4gTS4gKDE5NDgpLiBNZW50YWwgdGVzdHMgYW5kIG1lYXN1cmVtZW50cywgMTg5MC4gSW4gVy4gRGVubmlzIChFZC4pLCAqUmVhZGluZ3MgaW4gdGhlIGhpc3Rvcnkgb2YgcHN5Y2hvbG9neSogKHBwLiAzNDfigJMzNTQpLiBBcHBsZXRvbi1DZW50dXJ5LUNyb2Z0cy4KCiMjIyMgPHU+U2VjdGlvbiAxNjwvdT4gey51bm51bWJlcmVkICNzZWN0aW9uMTZ9Cgo8bWFyaz5NY0NsZWxsYW5kLCBELiBDLiAoMTk3MykuIFRlc3RpbmcgZm9yIGNvbXBldGVuY2UgcmF0aGVyIHRoYW4gZm9yICJpbnRlbGxpZ2VuY2UuIi4gQW1lcmljYW4gUHN5Y2hvbG9naXN0LCAyOCwgMeKAkzE0LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy9oMDAzNDA5MjwvbWFyaz4KPG1hcmsgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1ZSI+W1NlZSBhbHNvIHBhcGVyIGJ5IEJhcnJldHQgYW5kIERlcGluZXQgKDE5OTEpLCBBIHJlY29uc2lkZXJhdGlvbiBvZiBUZXN0aW5nIGZvciBDb21wZXRlbmNlIHJhdGhlciB0aGFuIGZvciBpbnRlbGxpZ2VuY2UsICpBbWVyaWNhbiBQc3ljaG9sb2dpc3QsIDQ2KiwgMTAxMuKAkzEwMjQ7IGFuZCBNY0NsZWxsYW5kIGFuZCB2YXJpb3VzIG90aGVycyBpbiByZXBseSAoMTk5NCksICpBbWVyaWNhbiBQc3ljaG9sb2dpc3QsIDQ5KiwgNjTigJM3MS5dPC9tYXJrPgoKIyMjIEJpYXMgeyNzZWN0aW9uMTd9CgojIyMjIDx1PlNlY3Rpb24gMTc8L3U+IHsudW5udW1iZXJlZH0KCjxtYXJrPkNvbGUsIE4uIFMuICgxOTgxKS4gQmlhcyBpbiB0ZXN0aW5nLiAqQW1lcmljYW4gUHN5Y2hvbG9naXN0LCAzNiooMTApLCAxMDY34oCTMTA3Ny4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMzcvMDAwMy0wNjZYLjM2LjEwLjEwNjc8L21hcms+Cgo8bWFyaz5TYWNrZXR0LCBQLiBSLiwgJiBXaWxrLCBTLiBMLiAoMTk5NCkuIFdpdGhpbi1ncm91cCBub3JtaW5nIGFuZCBvdGhlciBmb3JtcyBvZiBzY29yZSBhZGp1c3RtZW50IGluIHByZWVtcGxveW1lbnQgdGVzdGluZy4gKkFtZXJpY2FuIFBzeWNob2xvZ2lzdCwgNDkqKDExKSwgOTI54oCTOTU0LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8wMDAzLTA2NlguNDkuMTEuOTI5PC9tYXJrPgoKIyMjIyA8dT5TZWN0aW9uIDE4PC91PiB7LnVubnVtYmVyZWQgI3NlY3Rpb24xOH0KCjxtYXJrPlNhY2tldHQsIFAuIFIuLCBTY2htaXR0LCBOLiwgRWxsaW5nc29uLCBKLiBFLiwgJiBLYWJpbiwgTS4gQi4gKDIwMDEpLiBIaWdoLXN0YWtlcyB0ZXN0aW5nIGluIGVtcGxveW1lbnQsIGNyZWRlbnRpYWxpbmcsIGFuZCBoaWdoZXIgZWR1Y2F0aW9uLiAqQW1lcmljYW4gUHN5Y2hvbG9naXN0LCA1NiosIDMwMeKAkzMxOC4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMzcvMDAwMy0wNjZYLjU2LjQuMzAyPC9tYXJrPgoKPG1hcms+U2Fja2V0dCwgUC4gUi4sIEJvcm5lbWFuLCBNLiBKLiwgJiBDb25uZWxseSwgQi4gUy4gKDIwMDgpLiBIaWdoIHN0YWtlcyB0ZXN0aW5nIGluIGhpZ2hlciBlZHVjYXRpb24gYW5kIGVtcGxveW1lbnQ6IEFwcHJhaXNpbmcgdGhlIGV2aWRlbmNlIGZvciB2YWxpZGl0eSBhbmQgZmFpcm5lc3MuICpBbWVyaWNhbiBQc3ljaG9sb2dpc3QsIDYzKiwgMjE14oCTMjI3LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8wMDAzLTA2NlguNjMuNC4yMTU8L21hcms+CgojIyBUaGUgSW50ZXJ2aWV3IGFuZCB0aGUgRFNNIHsjc2VjdGlvbjE5fQoKIyMjIyA8dT5TZWN0aW9uIDE5PC91PiB7LnVubnVtYmVyZWR9Cgo8bWFyaz5GYXJhb25lLCBTLiBWLiwgJiBUc3VhbmcsIE0uIFQuICgxOTk0KS4gTWVhc3VyaW5nIGRpYWdub3N0aWMgYWNjdXJhY3kgaW4gdGhlIGFic2VuY2Ugb2YgYSAiZ29sZCBzdGFuZGFyZCIuICpBbWVyaWNhbiBKb3VybmFsIG9mIFBzeWNoaWF0cnksIDE1MSosIDY1MOKAkzY1Ny4gaHR0cHM6Ly9kb2kub3JnLzEwLjExNzYvYWpwLjE1MS41LjY1MDwvbWFyaz4KClwqU3VsbGl2YW4sIEguIFMuICgxOTcwKS4gKlRoZSBwc3ljaGlhdHJpYyBpbnRlcnZpZXcqLiBOb3J0b24uIENoYXB0ZXJzIDHigJM0LCA3CjxtYXJrIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJsdWUiPltUaGlzIGlzIGF2YWlsYWJsZSBpbiB0aGUgVUkgbGlicmFyeS4KWW91IGRvbid0IG5lZWQgdG8gcmVhZCBpdCBmb3IgdGhpcyBjbGFzcy4KQnV0IHlvdSBzaG91bGQgcmVhZCBpdCBhdCBzb21lIHBvaW50LCBhcyBhbiBleGFtcGxlIG9mIGEgbWFzdGVyIGNsaW5pY2lhbiBhc3Nlc3NpbmcgcGF0aWVudHMgYnkgd2F5IG9mIGludGVydmlldy5dPC9tYXJrPgoKU3VtbWVyZmVsZHQsIEwuIEouLCBLbG9vc3Rlcm1hbiwgUC4gSC4sICYgQW50b255LCBNLiBNLiAoMjAxMCkuIFN0cnVjdHVyZWQgYW5kIHNlbWlzdHJ1Y3R1cmVkIGRpYWdub3N0aWMgaW50ZXJ2aWV3cy4gSW4gTS4gTS4gQW50b255ICYgRC4gSC4gQmFybG93IChFZHMuKSwgKkhhbmRib29rIG9mIGFzc2Vzc21lbnQgYW5kIHRyZWF0bWVudCBwbGFubmluZyBmb3IgcHN5Y2hvbG9naWNhbCBkaXNvcmRlcnMqICgybmQgZWQuLCBwcC4gOTXigJMxMzcpLiBHdWlsZm9yZCBQcmVzcy4gCgpNdWxsaW5zLVN3ZWF0dCwgUy4gTi4sICYgV2lkaWdlciwgVC4gQS4gKDIwMDkpLiBDbGluaWNhbCB1dGlsaXR5IGFuZCBEU00tVi4gKlBzeWNob2xvZ2ljYWwgQXNzZXNzbWVudCwgMjEqKDMpLCAzMDLigJMzMTIuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3L2EwMDE2NjA3Cgo8bWFyaz5TaGFycCwgSy4gTC4sIFdpbGxpYW1zLCBBLiBKLiwgUmh5bmVyLCBLLiBULiwgJiBJbGFyZGksIFMuIFMuICgyMDEzKS4gVGhlIGNsaW5pY2FsIGludGVydmlldy4gSW4gSy4gRi4gR2Vpc2luZ2VyLCBKLiBGLiBDYXJsc29uLCBKLi1JLiBDLiBIYW5zZW4sIE4uIFIuIEt1bmNlbCwgUy4gUC4gUmVpc2UsICYgTS4gQy4gUm9kcmlndWV6IChFZHMuKSwgKkFQQSBoYW5kYm9vayBvZiB0ZXN0aW5nIGFuZCBhc3Nlc3NtZW50IGluIHBzeWNob2xvZ3kqIChWb2wuIDI6IFRlc3RpbmcgYW5kIGFzc2Vzc21lbnQgaW4gY2xpbmljYWwgYW5kIGNvdW5zZWxpbmcgcHN5Y2hvbG9neSwgcHAuIDEwM+KAkzExNykuIEFtZXJpY2FuIFBzeWNob2xvZ2ljYWwgQXNzb2NpYXRpb24uIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzE0MDQ4LTAwNzwvbWFyaz4KCiMjIEFzc2Vzc21lbnQgb2YgcGVyc29uYWxpdHkgYW5kIG90aGVyIHN5bXB0b21hdG9sb2d5IHsjc2VjdGlvbjIwfQoKIyMjIE9iamVjdGl2ZSB0ZXN0cwoKIyMjIyA8dT5TZWN0aW9uIDIwPC91PiB7LnVubnVtYmVyZWR9Cgo8bWFyaz5CdXJpc2NoLCBNLiAoMTk4NCkuIEFwcHJvYWNoZXMgdG8gcGVyc29uYWxpdHkgaW52ZW50b3J5IGNvbnN0cnVjdGlvbjogQSBjb21wYXJpc29uIG9mIG1lcml0cy4gKkFtZXJpY2FuIFBzeWNob2xvZ2lzdCwgMzkqLCAyMTTigJMyMjcuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzAwMDMtMDY2WC4zOS4zLjIxNDwvbWFyaz4KCkNsYXJrLCBMLiBBLiwgJiBXYXRzb24sIEQuICgyMDE5KS4gQ29uc3RydWN0aW5nIHZhbGlkaXR5OiBOZXcgZGV2ZWxvcG1lbnRzIGluIGNyZWF0aW5nIG9iamVjdGl2ZSBtZWFzdXJpbmcgaW5zdHJ1bWVudHMuICpQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQsIDMxKigxMiksIDE0MTLigJMxNDI3LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy9wYXMwMDAwNjI2Cgo8bWFyaz5GbG95ZCwgRi4gSi4sICYgV2lkYW1hbiwgSy4gRi4gKDE5OTUpLiBGYWN0b3IgYW5hbHlzaXMgaW4gdGhlIGRldmVsb3BtZW50IGFuZCByZWZpbmVtZW50IG9mIGNsaW5pY2FsIGFzc2Vzc21lbnQgaW5zdHJ1bWVudHMuICpQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQsIDcqLCAyODbigJMyOTkuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzEwNDAtMzU5MC43LjMuMjg2PC9tYXJrPgoKIyMjIyA8dT5TZWN0aW9uIDIxPC91PiB7LnVubnVtYmVyZWQgI3NlY3Rpb24yMX0KClwqR3JhaGFtLCBKLiBSLiAoMjAyMikuICpNTVBJIGluc3RydW1lbnRzOiBBc3Nlc3NpbmcgcGVyc29uYWxpdHkgYW5kIHBzeWNob3BhdGhvbG9neSogKDZ0aCBlZC4pLiBPeGZvcmQgVW5pdmVyc2l0eSBQcmVzcy4gKENoYXB0ZXJzIDHigJM1LCAxMykuCjxtYXJrIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJsdWUiPltUaGlzIGlzIGF2YWlsYWJsZSBpbiB0aGUgY2xpbmljIGxpYnJhcnkuCkdldCBhIGZlZWwgZm9yIHRoaXMgbWVhc3VyZSBhbmQgdGhlIHdheSBpdCB3YXMgZGV2ZWxvcGVkOyB5b3UgZG9uJ3QgbmVlZCB0byByZW1lbWJlciBkZXRhaWxzIGFib3V0IHRoZSBzY2FsZXMuXTwvbWFyaz4KClNlbGxib20sIE0uICgyMDE5KS4gVGhlIE1NUEktMi1SZXN0cnVjdHVyZWQgRm9ybSAoTU1QSS0yLVJGKTogQXNzZXNzbWVudCBvZiBwZXJzb25hbGl0eSBhbmQgcHN5Y2hvcGF0aG9sb2d5IGluIHRoZSB0d2VudHktZmlyc3QgY2VudHVyeS4gKkFubnVhbCBSZXZpZXcgb2YgQ2xpbmljYWwgUHN5Y2hvbG9neSwgMTUqKDEpLCAxNDnigJMxNzcuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTQ2L2FubnVyZXYtY2xpbnBzeS0wNTA3MTgtMDk1NzAxCgo8bWFyaz5XaWdnaW5zLCBKLiBTLiAoMTk3MykuIFN0cnVjdHVyZWQgdGVjaG5pcXVlcy4gSW4gSi4gUy4gV2lnZ2lucyAoRWQuKSwgKlBlcnNvbmFsaXR5IGFuZCBwcmVkaWN0aW9uOiBQcmluY2lwbGVzIG9mIHBlcnNvbmFsaXR5IGFzc2Vzc21lbnQqIChwcC4gMzgw4oCTNDQwKS4gQWRkaXNvbi1XZXNsZXkuPC9tYXJrPgoKIyMjIyA8dT5TZWN0aW9uIDIyPC91PiB7LnVubnVtYmVyZWQgI3NlY3Rpb24yMn0KCjxtYXJrPkR1bm5pbmcsIEQuLCBIZWF0aCwgQy4sICYgU3VscywgSi4gTS4gKDIwMDQpLiBGbGF3ZWQgc2VsZi1hc3Nlc3NtZW50OiBJbXBsaWNhdGlvbnMgZm9yIGhlYWx0aCwgZWR1Y2F0aW9uLCBhbmQgdGhlIHdvcmtwbGFjZS4gKlBzeWNob2xvZ2ljYWwgU2NpZW5jZSBpbiB0aGUgUHVibGljIEludGVyZXN0LCA1KiwgNjnigJMxMDYuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTExL2ouMTUyOS0xMDA2LjIwMDQuMDAwMTgueDwvbWFyaz4KCjxtYXJrPktyb3NuaWNrLCBKLiBBLiAoMTk5OSkuIFN1cnZleSByZXNlYXJjaC4gKkFubnVhbCBSZXZpZXcgb2YgUHN5Y2hvbG9neSwgNTAqLCA1MzfigJM1NjcuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTQ2L2FubnVyZXYucHN5Y2guNTAuMS41Mzc8L21hcms+CgojIyMgUHJvamVjdGl2ZSB0ZXN0cyB7I3NlY3Rpb24yM30KCiMjIyMgPHU+U2VjdGlvbiAyMzwvdT4gey51bm51bWJlcmVkfQoKXCpGcmFuaywgTC4gSy4gKDE5MzkpLiBQcm9qZWN0aXZlIG1ldGhvZHMgZm9yIHRoZSBzdHVkeSBvZiBwZXJzb25hbGl0eS4gKkpvdXJuYWwgb2YgUHN5Y2hvbG9neSwgOCosIDM4OeKAkzQxMy4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwODAvMDAyMjM5ODAuMTkzOS45OTE3NjcxCgpcKkxpbmR6ZXksIEcuICgxOTUyKS4gVGhlbWF0aWMgQXBwZXJjZXB0aW9uIFRlc3Q6IEludGVycHJldGl2ZSBhc3N1bXB0aW9ucyBhbmQgcmVsYXRlZCBlbXBpcmljYWwgZXZpZGVuY2UuICpQc3ljaG9sb2dpY2FsIEJ1bGxldGluLCA0OSosIDHigJMyNS4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMzcvaDAwNjIzNjMKCjxtYXJrPkxpbGllbmZlbGQsIFMuIE8uLCBXb29kLCBKLiBNLiwgJiBHYXJiLCBILiBOLiAoMjAwMCkuIFRoZSBzY2llbnRpZmljIHN0YXR1cyBvZiBwcm9qZWN0aXZlIHRlY2huaXF1ZXMuICpQc3ljaG9sb2dpY2FsIFNjaWVuY2UgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdCwgMSosIDI34oCTNjYuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTExLzE1MjktMTAwNi4wMDI8L21hcms+CgpcKldvb2QsIEouIE0uLCBOZXp3b3Jza2ksIE0uIFQuLCAmIFN0ZWpza2FsLCBXLiBKLiAoMTk5NikuIFRoZSBjb21wcmVoZW5zaXZlIHN5c3RlbSBmb3IgdGhlIFJvcnNjaGFjaDogQSBjcml0aWNhbCBleGFtaW5hdGlvbi4gKlBzeWNob2xvZ2ljYWwgU2NpZW5jZSwgNyooMSksIDPigJMxMC4gaHR0cHM6Ly9kb2kub3JnLzEwLjExMTEvai4xNDY3LTkyODAuMTk5Ni50YjAwNjU4LnguCjxtYXJrIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJsdWUiPltTZWUgYWxzbyB0aGUgcmVzcG9uc2UgZnJvbSBFeG5lciBhbmQgcmVwbHkgYnkgV29vZCBldCBhbC4gb24gcHAuIDEx4oCTMTcuXTwvbWFyaz4KCiMjIyBQc3ljaG9waHlzaW9sb2dpY2FsIE1lYXN1cmVzIGFuZCBSRG9DIHsjc2VjdGlvbjI0fQoKIyMjIyA8dT5TZWN0aW9uIDI0PC91PiB7LnVubnVtYmVyZWR9CgpEdWJvaXMsIEouLCAmIEFkb2xwaHMsIFIuICgyMDE2KS4gQnVpbGRpbmcgYSBzY2llbmNlIG9mIGluZGl2aWR1YWwgZGlmZmVyZW5jZXMgZnJvbSBmTVJJLiAqVHJlbmRzIGluIENvZ25pdGl2ZSBTY2llbmNlcywgMjAqKDYpLCA0MjXigJM0NDMuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDE2L2oudGljcy4yMDE2LjAzLjAxNAo8bWFyayBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogbGlnaHRibHVlIj5bU3R1ZGVudHMgbm90IHdvcmtpbmcgaW4gaW1hZ2luZyBjYW4gc2tpcCBvdmVyIG1vc3Qgb2YgdGhlIHRlY2huaWNhbCBkZXRhaWxzIGluIHRoaXMgYXJ0aWNsZS4KUmVhZCBpdCBhcyBhIG1vZGVsIGZvciB0YWtpbmcgbWVhc3VyZW1lbnQgc2VyaW91c2x5IGluIGFuIGVtZXJnaW5nIGFyZWEgb2YgY2xpbmljYWwgcmVzZWFyY2guXTwvbWFyaz4KCjxtYXJrPkhheW5lcywgUy4gTi4sICYgWW9zaGlva2EsIEQuIFQuICgyMDA3KS4gQ2xpbmljYWwgYXNzZXNzbWVudCBhcHBsaWNhdGlvbnMgb2YgYW1idWxhdG9yeSBiaW9zZW5zb3JzLiAqUHN5Y2hvbG9naWNhbCBBc3Nlc3NtZW50LCAxOSooMSksIDQ04oCTNTcuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzEwNDAtMzU5MC4xOS4xLjQ0PC9tYXJrPgoKPG1hcms+S296YWssIE0uIEouLCAmIEN1dGhiZXJ0LCBCLiBOLiAoMjAxNikuIFRoZSBOSU1IIHJlc2VhcmNoIGRvbWFpbiBjcml0ZXJpYSBpbml0aWF0aXZlOiBCYWNrZ3JvdW5kLCBpc3N1ZXMsIGFuZCBwcmFnbWF0aWNzLiAqUHN5Y2hvcGh5c2lvbG9neSwgNTMqKDMpLCAyODbigJMyOTcuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTExL3BzeXAuMTI1MTg8L21hcms+CjxtYXJrIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJsdWUiPltTdHVkZW50cyBhbHJlYWR5IGZhbWlsaWFyIHdpdGggUkRvQyBjYW4gc2tpbSB0aGlzIGludHJvZHVjdGlvbi4KT3VyIGludGVyZXN0IGlzIGluIGV4YW1pbmluZyBSRG9DIGZyb20gYSBtZWFzdXJlbWVudCBwZXJzcGVjdGl2ZS5dPC9tYXJrPgoKTWFjTmFtYXJhLCBBLiwgJiBQaGFuLCBLLiBMLiAoMjAxNikuIFBzeWNob2Jpb2xvZ2ljYWwgb3BlcmF0aW9uYWxpemF0aW9uIG9mIFJEb0MgY29uc3RydWN0czogTWV0aG9kb2xvZ2ljYWwgYW5kIGNvbmNlcHR1YWwgb3Bwb3J0dW5pdGllcyBhbmQgY2hhbGxlbmdlcy4gKlBzeWNob3BoeXNpb2xvZ3ksIDUzKigzKSwgNDA24oCTNDA5LiBodHRwczovL2RvaS5vcmcvMTAuMTExMS9wc3lwLjEyNTg3CgpNaWxsZXIsIEcuIEEuLCBSb2Nrc3Ryb2gsIEIuIFMuLCBIYW1pbHRvbiwgSC4gSy4sICYgWWVlLCBDLiBNLiAoMjAxNikuIFBzeWNob3BoeXNpb2xvZ3kgYXMgYSBjb3JlIHN0cmF0ZWd5IGluIFJEb0MuICpQc3ljaG9waHlzaW9sb2d5LCA1MyooMyksIDQxMOKAkzQxNC4gaHR0cHM6Ly9kb2kub3JnLzEwLjExMTEvcHN5cC4xMjU4MQoKPG1hcms+TWlsbGVyLCBHLiBBLiwgRWxiZXJ0LCBULiwgU3V0dG9uLCBCLiBQLiwgJiBIZWxsZXIsIFcuICgyMDA3KS4gSW5ub3ZhdGl2ZSBjbGluaWNhbCBhc3Nlc3NtZW50IHRlY2hub2xvZ2llczogQ2hhbGxlbmdlcyBhbmQgb3Bwb3J0dW5pdGllcyBpbiBuZXVyb2ltYWdpbmcuICpQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQsIDE5KigxKSwgNTjigJM3My4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMzcvMTA0MC0zNTkwLjE5LjEuNTg8L21hcms+CgpcKlN0b25lLCBBLiBBLiwgU2NobmVpZGVyLCBTLiwgJiBTbXl0aCwgSi4gTS4gKDIwMjMpLiBFdmFsdWF0aW9uIG9mIHByZXNzaW5nIGlzc3VlcyBpbiBlY29sb2dpY2FsIG1vbWVudGFyeSBhc3Nlc3NtZW50LiAqQW5udWFsIFJldmlldyBvZiBDbGluaWNhbCBQc3ljaG9sb2d5LCAxOSooMSksIDEwN+KAkzEzMS4gaHR0cHM6Ly9kb2kub3JnLzEwLjExNDYvYW5udXJldi1jbGlucHN5LTA4MDkyMS0wODMxMjgKCiMjIyBDb21wdXRlcnMgYW5kIEFkYXB0aXZlIFRlc3RpbmcgeyNzZWN0aW9uMjV9CgojIyMjIDx1PlNlY3Rpb24gMjU8L3U+IHsudW5udW1iZXJlZH0KCjxtYXJrPkJ1Y2hhbmFuLCBULiAoMjAwMikuIE9ubGluZSBhc3Nlc3NtZW50OiBEZXNpcmFibGUgb3IgZGFuZ2Vyb3VzPyAqUHJvZmVzc2lvbmFsIFBzeWNob2xvZ3k6IFJlc2VhcmNoIGFuZCBQcmFjdGljZSwgMzMqKDIpLCAxNDjigJMxNTQuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzA3MzUtNzAyOC4zMy4yLjE0ODwvbWFyaz4KClwqR2FsYXR6ZXItTGV2eSwgSS4gUi4sICYgT25uZWxhLCBKLi1QLiAoMjAyMykuIE1hY2hpbmUgbGVhcm5pbmcgYW5kIHRoZSBkaWdpdGFsIG1lYXN1cmVtZW50IG9mIHBzeWNob2xvZ2ljYWwgaGVhbHRoLiAqQW5udWFsIFJldmlldyBvZiBDbGluaWNhbCBQc3ljaG9sb2d5LCAxOSosIDEzM+KAkzE1NC4gaHR0cHM6Ly9kb2kub3JnLzEwLjExNDYvYW5udXJldi1jbGlucHN5LTA4MDkyMS0wNzMyMTIKCkdhcmIsIEguIE4uICgyMDA3KS4gQ29tcHV0ZXItYWRtaW5pc3RlcmVkIGludGVydmlld3MgYW5kIHJhdGluZyBzY2FsZXMuICpQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQsIDE5KigxKSwgNOKAkzEzLiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMDQwLTM1OTAuMTkuMS40CgpSdWl6LCBNLiBBLiwgRHJha2UsIEUuIEIuLCBHbGFzcywgQS4sIE1hcmNvdHRlLCBELiwgJiB2YW4gR29ycCwgVy4gRy4gKDIwMDIpLiBUcnlpbmcgdG8gYmVhdCB0aGUgc3lzdGVtOiBNaXN1c2Ugb2YgdGhlIGludGVybmV0IHRvIGFzc2lzdCBpbiBhdm9pZGluZyB0aGUgZGV0ZWN0aW9uIG9mIHBzeWNob2xvZ2ljYWwgc3ltcHRvbSBkaXNzaW11bGF0aW9uLiAqUHJvZmVzc2lvbmFsIFBzeWNob2xvZ3k6IFJlc2VhcmNoIGFuZCBQcmFjdGljZSwgMzMqKDMpLCAyOTTigJMyOTkuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzA3MzUtNzAyOC4zMy4zLjI5NAoKRm9yYmV5LCBKLiBELiwgJiBCZW4tUG9yYXRoLCBZLiBTLiAoMjAwNykuIENvbXB1dGVyaXplZCBhZGFwdGl2ZSBwZXJzb25hbGl0eSB0ZXN0aW5nOiBBIHJldmlldyBhbmQgaWxsdXN0cmF0aW9uIHdpdGggdGhlIE1NUEktMiBjb21wdXRlcml6ZWQgYWRhcHRpdmUgdmVyc2lvbi4gKlBzeWNob2xvZ2ljYWwgQXNzZXNzbWVudCwgMTkqKDEpLCAxNOKAkzI0LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMDQwLTM1OTAuMTkuMS4xNAoKPG1hcms+R2liYm9ucywgUi4gRC4sIFdlaXNzLCBELiBKLiwgRnJhbmssIEUuLCAmIEt1cGZlciwgRC4gKDIwMTYpLiBDb21wdXRlcml6ZWQgYWRhcHRpdmUgZGlhZ25vc2lzIGFuZCB0ZXN0aW5nIG9mIG1lbnRhbCBoZWFsdGggZGlzb3JkZXJzLiAqQW5udWFsIFJldmlldyBvZiBDbGluaWNhbCBQc3ljaG9sb2d5LCAxMiooMSksIDgz4oCTMTA0LiBodHRwczovL2RvaS5vcmcvMTAuMTE0Ni9hbm51cmV2LWNsaW5wc3ktMDIxODE1LTA5MzYzNDwvbWFyaz4KCiMjIEJlaGF2aW9yYWwgQXNzZXNzbWVudCB7I3NlY3Rpb24yNn0KCiMjIyMgPHU+U2VjdGlvbiAyNjwvdT4gey51bm51bWJlcmVkfQoKPG1hcms+R2lyYXJkLCBKLiBNLiwgJiBDb2huLCBKLiBGLiAoMjAxNikuIEEgcHJpbWVyIG9uIG9ic2VydmF0aW9uYWwgbWVhc3VyZW1lbnQuICpBc3Nlc3NtZW50LCAyMyooNCksIDQwNOKAkzQxMy4gaHR0cHM6Ly9kb2kub3JnLzEwLjExNzcvMTA3MzE5MTExNjYzNTgwNzwvbWFyaz4KCjxtYXJrPkhheW5lcywgUy4gTi4gKDIwMDEpLiBDbGluaWNhbCBhcHBsaWNhdGlvbnMgb2YgYW5hbG9ndWUgYmVoYXZpb3JhbCBvYnNlcnZhdGlvbjogRGltZW5zaW9ucyBvZiBwc3ljaG9tZXRyaWMgZXZhbHVhdGlvbi4gKlBzeWNob2xvZ2ljYWwgQXNzZXNzbWVudCwgMTMqKDEpLCA3M+KAkzg1LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMDQwLTM1OTAuMTMuMS43MzwvbWFyaz4KCktvcm90aXRzY2gsIFcuIEouLCAmIE5lbHNvbi1HcmF5LCBSLiBPLiAoMTk5OSkuIEFuIG92ZXJ2aWV3IG9mIHNlbGYtbW9uaXRvcmluZyByZXNlYXJjaCBpbiBhc3Nlc3NtZW50IGFuZCB0cmVhdG1lbnQuICpQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQsIDExKig0KSwgNDE14oCTNDI1LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMDQwLTM1OTAuMTEuNC40MTUgCgpQaWFzZWNraSwgVC4gTS4sIEh1ZmZvcmQsIE0uIFIuLCBTb2xoYW4sIE0uLCAmIFRydWxsLCBULiBKLiAoMjAwNykuIEFzc2Vzc2luZyBjbGllbnRzIGluIHRoZWlyIG5hdHVyYWwgZW52aXJvbm1lbnRzIHdpdGggZWxlY3Ryb25pYyBkaWFyaWVzOiBSYXRpb25hbGUsIGJlbmVmaXRzLCBsaW1pdGF0aW9ucywgYW5kIGJhcnJpZXJzLiAqUHN5Y2hvbG9naWNhbCBBc3Nlc3NtZW50LCAxOSooMSksIDI14oCTNDMuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzEwNDAtMzU5MC4xOS4xLjI1CgojIyBSZXBlYXRlZCBBc3Nlc3NtZW50cyBhY3Jvc3MgVGltZSB7I3NlY3Rpb24yN30KCiMjIyMgPHU+U2VjdGlvbiAyNzwvdT4gey51bm51bWJlcmVkfQoKU29iZWxsLCBMLiBDLiwgJiBTb2JlbGwsIE0uIEIuICgyMDA4KS4gVGltZWxpbmUgZm9sbG93YmFjayAoVExGQikuIEluIEEuIEouIFJ1c2ggSnIuLCBNLiBCLiBGaXJzdCwgJiBELiBCbGFja2VyIChFZHMuKSwgKkhhbmRib29rIG9mIHBzeWNoaWF0cmljIG1lYXN1cmVzKiAoMm5kIGVkLiwgcHAuIDQ2NuKAkzQ2OCkuIEFtZXJpY2FuIFBzeWNoaWF0cmljIFB1Ymxpc2hpbmcuIAoKPG1hcms+Q2FycGVudGVyLCBSLiBXLiwgV3ljb2ZmLCBBLiBNLiwgJiBUcnVsbCwgVC4gSi4gKDIwMTYpLiBBbWJ1bGF0b3J5IGFzc2Vzc21lbnQ6IE5ldyBhZHZlbnR1cmVzIGluIGNoYXJhY3Rlcml6aW5nIGR5bmFtaWMgcHJvY2Vzc2VzLiAqQXNzZXNzbWVudCwgMjMqKDQpLCA0MTTigJM0MjQuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTc3LzEwNzMxOTExMTY2MzIzNDE8L21hcms+Cgo8bWFyaz5NYXR0aGV3cywgTS4sIEFiZHVsbGFoLCBTLiwgTXVybmFuZSwgRS4sIFZvaWRhLCBTLiwgQ2hvdWRodXJ5LCBULiwgR2F5LCBHLiwgJiBGcmFuaywgRS4gKDIwMTYpLiBEZXZlbG9wbWVudCBhbmQgZXZhbHVhdGlvbiBvZiBhIHNtYXJ0cGhvbmUtYmFzZWQgbWVhc3VyZSBvZiBzb2NpYWwgcmh5dGhtcyBmb3IgYmlwb2xhciBkaXNvcmRlci4gKkFzc2Vzc21lbnQsIDIzKig0KSwgNDcy4oCTNDgzLiBodHRwczovL2RvaS5vcmcvMTAuMTE3Ny8xMDczMTkxMTE2NjU2Nzk0PC9tYXJrPgo8bWFyayBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogbGlnaHRibHVlIj5bYSBjYXNlIHN0dWR5IGluIHNlbGYtcmVwb3J0IGFjcm9zcyB0aW1lLgpTcGVjaWZpY3Mgb2YgdGhlaXIgc3R1ZHkgYXJlIGxlc3MgaW1wb3J0YW50Ll08L21hcms+CgojIyMjIDx1PlNlY3Rpb24gMjg8L3U+IHsudW5udW1iZXJlZCAjc2VjdGlvbjI4fQoKPG1hcms+SGVydHpvZywgQy4sICYgTmVzc2Vscm9hZGUsIEouIFIuICgyMDAzKS4gQXNzZXNzaW5nIHBzeWNob2xvZ2ljYWwgY2hhbmdlIGluIGFkdWx0aG9vZDogQW4gb3ZlcnZpZXcgb2YgbWV0aG9kb2xvZ2ljYWwgaXNzdWVzLiAqUHN5Y2hvbG9neSBhbmQgQWdpbmcsIDE4Kig0KSwgNjM54oCTNjU3LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8wODgyLTc5NzQuMTguNC42Mzk8L21hcms+CgpQZXRlcnNlbiwgSS4gVC4sIENob2UsIEQuIEUuLCAmIExlQmVhdSwgQi4gKDIwMjApLiBTdHVkeWluZyBhIG1vdmluZyB0YXJnZXQgaW4gZGV2ZWxvcG1lbnQ6IFRoZSBjaGFsbGVuZ2UgYW5kIG9wcG9ydHVuaXR5IG9mIGhldGVyb3R5cGljIGNvbnRpbnVpdHkuICpEZXZlbG9wbWVudGFsIFJldmlldywgNTgqLCAxMDA5MzUuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDE2L2ouZHIuMjAyMC4xMDA5MzUKCkJlbHR6LCBBLiBNLiwgV3JpZ2h0LCBBLiBHLiBDLiwgU3ByYWd1ZSwgQi4gTi4sICYgTW9sZW5hYXIsIFAuIEMuIE0uICgyMDE2KS4gQnJpZGdpbmcgdGhlIG5vbW90aGV0aWMgYW5kIGlkaW9ncmFwaGljIGFwcHJvYWNoZXMgdG8gdGhlIGFuYWx5c2lzIG9mIGNsaW5pY2FsIGRhdGEuICpBc3Nlc3NtZW50LCAyMyooNCksIDQ0N+KAkzQ1OC4gaHR0cHM6Ly9kb2kub3JnLzEwLjExNzcvMTA3MzE5MTExNjY0ODIwOQo8bWFyayBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogbGlnaHRibHVlIj5bZm9jdXMgb24gdGhlIGdlbmVyYWwgaXNzdWVzIG9mIGNvbWJpbmluZyBpZGlvZ3JhcGhpYyBhbmQgbm9tb3RoZXRpYyBkYXRhLgpZb3UgZG9uJ3QgbmVlZCB0byBrbm93IHRoZSB0ZWNobmljYWwgZGV0YWlscyBvZiB0aGVpciBHSU1NRSBtb2RlbC5dPC9tYXJrPgoKIyMgQXNzZXNzbWVudCBvZiBDb2duaXRpb24geyNzZWN0aW9uMjl9CgojIyMjIDx1PlNlY3Rpb24gMjk8L3U+IHsudW5udW1iZXJlZH0KClwqQnVzZW1leWVyLCBKLiBSLiwgJiBTdG91dCwgSi4gQy4gKDIwMDIpLiBBIGNvbnRyaWJ1dGlvbiBvZiBjb2duaXRpdmUgZGVjaXNpb24gbW9kZWxzIHRvIGNsaW5pY2FsIGFzc2Vzc21lbnQ6IERlY29tcG9zaW5nIHBlcmZvcm1hbmNlIG9uIHRoZSBCZWNoYXJhIGdhbWJsaW5nIHRhc2suICpQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQsIDE0KigzKSwgMjUz4oCTMjYyLiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMDQwLTM1OTAuMTQuMy4yNTMKCjxtYXJrPkR1bmtsZXksIEQuIE0uLCBTZWdhbCwgWi4gVi4sICYgQmxhbmtzdGVpbiwgSy4gUi4gKDIwMTkpLiBDb2duaXRpdmUgYXNzZXNzbWVudDogSXNzdWVzIGFuZCBtZXRob2RzLiBJbiBLLiBTLiBEb2Jzb24gJiBELiBKLiBBLiBEb3pvaXMgKEVkcy4pLCAqSGFuZGJvb2sgb2YgY29nbml0aXZlLWJlaGF2aW9yYWwgdGhlcmFwaWVzKiAoNHRoIGVkLiwgcHAuIDg14oCTMTE5KS4gR3VpbGZvcmQgUHJlc3MuPC9tYXJrPgoKRGF2aXNvbiwgRy4gQy4sIFZvZ2VsLCBSLiBTLiwgJiBDb2ZmbWFuLCBTLiBHLiAoMTk5NykuIFRoaW5rLWFsb3VkIGFwcHJvYWNoZXMgdG8gY29nbml0aXZlIGFzc2Vzc21lbnQgYW5kIHRoZSBhcnRpY3VsYXRlZCB0aG91Z2h0cyBpbiBzaW11bGF0ZWQgc2l0dWF0aW9ucyBwYXJhZGlnbS4gKkpvdXJuYWwgb2YgQ29uc3VsdGluZyBhbmQgQ2xpbmljYWwgUHN5Y2hvbG9neSwgNjUqKDYpLCA5NTDigJM5NTguIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzAwMjItMDA2WC42NS42Ljk1MAoKSHVybGJ1cnQsIFIuIFQuICgxOTk3KS4gUmFuZG9tbHkgc2FtcGxpbmcgdGhpbmtpbmcgaW4gdGhlIG5hdHVyYWwgZW52aXJvbm1lbnQuICpKb3VybmFsIG9mIENvbnN1bHRpbmcgYW5kIENsaW5pY2FsIFBzeWNob2xvZ3ksIDY1Kig2KSwgOTQx4oCTOTQ5LiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8wMDIyLTAwNlguNjUuNi45NDEgCgo8bWFyaz5Sb2RlYmF1Z2gsIFQuIEwuLCBTY3VsbGluLCBSLiBCLiwgTGFuZ2VyLCBKLiBLLiwgRGl4b24sIEQuIEouLCBIdXBwZXJ0LCBKLiBELiwgQmVybnN0ZWluLCBBLiwgWnZpZWxsaSwgQS4sICYgTGVuemUsIEUuIEouICgyMDE2KS4gVW5yZWxpYWJpbGl0eSBhcyBhIHRocmVhdCB0byB1bmRlcnN0YW5kaW5nIHBzeWNob3BhdGhvbG9neTogVGhlIGNhdXRpb25hcnkgdGFsZSBvZiBhdHRlbnRpb25hbCBiaWFzLiAqSm91cm5hbCBvZiBBYm5vcm1hbCBQc3ljaG9sb2d5LCAxMjUqKDYpLCA4NDDigJM4NTEuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3L2FibjAwMDAxODQ8L21hcms+CgpUcmVhdCwgVC4gQS4sIE1jRmFsbCwgUi4gTS4sIFZpa2VuLCBSLiBKLiwgS3J1c2Noa2UsIEouIEsuLCBOb3NvZnNreSwgUi4gTS4sICYgV2FuZywgUy4gUy4gKDIwMDcpLiBDbGluaWNhbCBjb2duaXRpdmUgc2NpZW5jZTogQXBwbHlpbmcgcXVhbnRpdGF0aXZlIG1vZGVscyBvZiBjb2duaXRpdmUgcHJvY2Vzc2luZyB0byBleGFtaW5lIGNvZ25pdGl2ZSBhc3BlY3RzIG9mIHBzeWNob3BhdGhvbG9neS4gSW4gUi4gVy4gSi4gTmV1ZmVsZCAoRWQuKSwgKkFkdmFuY2VzIGluIGNsaW5pY2FsIGNvZ25pdGl2ZSBzY2llbmNlOiBGb3JtYWwgbW9kZWxpbmcgb2YgcHJvY2Vzc2VzIGFuZCBzeW1wdG9tcyogKHBwLiAxNznigJMyMDUpLiBBbWVyaWNhbiBQc3ljaG9sb2dpY2FsIEFzc29jaWF0aW9uLiBodHRwczovL2RvaS5vcmcvMTAuMTAzNy8xMTU1Ni0wMDYKCjwvZGl2PgoKIyMgQ3VsdHVyYWwgYW5kIEluZGl2aWR1YWwgRGl2ZXJzaXR5IHsjc2VjdGlvbjMwfQoKIyMjIyA8dT5TZWN0aW9uIDMwPC91PiB7LnVubnVtYmVyZWR9Cgo8bWFyayBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogbGlnaHRibHVlIj5JdCBtYXkgYmUgaGVscGZ1bCB0byByZXZpZXcgdGhlIHRocmVlIFNhY2tldHQgcGFwZXJzIGFuZCB0aGUgQ29sZSBwYXBlciBmcm9tIHRoZSBJbnRlbGxlY3R1YWwgQXNzZXNzbWVudCBzZWN0aW9uLgpBbHNvIHJldmlldyByZWxldmFudCBzZWN0aW9ucyBvZiB0aGUgQVBBIFN0YW5kYXJkcyBmb3IgRWR1Y2F0aW9uYWwgYW5kIFBzeWNob2xvZ2ljYWwgVGVzdGluZyBmcm9tIHRoZSBWYWxpZGl0eSBzZWN0aW9uLjwvbWFyaz4KCjxkaXYgc3R5bGU9InRleHQtaW5kZW50OiAtNDBweDsgcGFkZGluZy1sZWZ0OiA0MHB4OyI+CgpCeXJkLCBELiBBLiwgUml2ZXJhIE1pbmR0LCBNLiBNLiwgQ2xhcmssIFUuIFMuLCBDbGFya2UsIFkuLCBUaGFtZXMsIEEuIEQuLCBHYW1tYWRhLCBFLiBaLiwgJiBNYW5seSwgSi4gSi4gKDIwMjEpLiBDcmVhdGluZyBhbiBhbnRpcmFjaXN0IHBzeWNob2xvZ3kgYnkgYWRkcmVzc2luZyBwcm9mZXNzaW9uYWwgY29tcGxpY2l0eSBpbiBwc3ljaG9sb2dpY2FsIGFzc2Vzc21lbnQuICpQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQsIDMzKigzKSwgMjc5LTI4NS4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMzcvcGFzMDAwMDk5MwoKPG1hcms+T2themFraSwgUy4sICYgU3VlLCBTLiAoMTk5NSkuIE1ldGhvZG9sb2dpY2FsIGlzc3VlcyBpbiBhc3Nlc3NtZW50IHJlc2VhcmNoIHdpdGggZXRobmljIG1pbm9yaXRpZXMuICpQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQsIDcqKDMpLCAzNjfigJMzNzUuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzEwNDAtMzU5MC43LjMuMzY3PC9tYXJrPgoKR2FyYiwgSC4gTi4gKDE5OTcpLiBSYWNlIGJpYXMsIHNvY2lhbCBjbGFzcyBiaWFzLCBhbmQgZ2VuZGVyIGJpYXMgaW4gY2xpbmljYWwganVkZ21lbnQuICpDbGluaWNhbCBQc3ljaG9sb2d5OiBTY2llbmNlIGFuZCBQcmFjdGljZSwgNCooMiksIDk54oCTMTIwLiBodHRwczovL2RvaS5vcmcvMTAuMTExMS9qLjE0NjgtMjg1MC4xOTk3LnRiMDAxMDQueAoKTGVvbmcsIEYuIFQuIEwuLCAmIEthbGliYXRzZXZhLCBaLiAoMjAxNikuIFRocmVhdHMgdG8gY3VsdHVyYWwgdmFsaWRpdHkgaW4gY2xpbmljYWwgZGlhZ25vc2lzIGFuZCBhc3Nlc3NtZW50OiBJbGx1c3RyYXRlZCB3aXRoIHRoZSBjYXNlIG9mIEFzaWFuIEFtZXJpY2Fucy4gSW4gTi4gWmFuZSwgRy4gQmVybmFsLCAmIEYuIFQuIEwuIExlb25nIChFZHMuKSwgKkV2aWRlbmNlLWJhc2VkIHBzeWNob2xvZ2ljYWwgcHJhY3RpY2Ugd2l0aCBldGhuaWMgbWlub3JpdGllczogQ3VsdHVyYWxseSBpbmZvcm1lZCByZXNlYXJjaCBhbmQgY2xpbmljYWwgc3RyYXRlZ2llcyogKHBwLiA1N+KAkzc0KS4gQW1lcmljYW4gUHN5Y2hvbG9naWNhbCBBc3NvY2lhdGlvbi4KCjxtYXJrPlN1enVraSwgTC4gQS4sIE9ub3VlLCBNLiBBLiwgJiBIaWxsLCBKLiBTLiAoMjAxMykuIENsaW5pY2FsIGFzc2Vzc21lbnQ6IEEgbXVsdGljdWx0dXJhbCBwZXJzcGVjdGl2ZS4gSW4gSy4gRi4gR2Vpc2luZ2VyLCBKLiBGLiBDYXJsc29uLCBKLi1JLiBDLiBIYW5zZW4sIE4uIFIuIEt1bmNlbCwgUy4gUC4gUmVpc2UsICYgTS4gQy4gUm9kcmlndWV6IChFZHMuKSwgKkFQQSBoYW5kYm9vayBvZiB0ZXN0aW5nIGFuZCBhc3Nlc3NtZW50IGluIHBzeWNob2xvZ3kqIChWb2wuIDI6IFRlc3RpbmcgYW5kIGFzc2Vzc21lbnQgaW4gY2xpbmljYWwgYW5kIGNvdW5zZWxpbmcgcHN5Y2hvbG9neSwgcHAuIDE5M+KAkzIxMikuIEFtZXJpY2FuIFBzeWNob2xvZ2ljYWwgQXNzb2NpYXRpb24uIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDM3LzE0MDQ4LTAxMjwvbWFyaz4KCjwvZGl2PgoKIyBHcmFkaW5nIFN5c3RlbSBhbmQgdGhlIFVzZSBvZiArLy0geyNncmFkaW5nU3lzdGVtfQoKRmluYWwgZ3JhZGVzIHdpbGwgYmUgYXNzaWduZWQgYXQgdGhlIGVuZCBvZiB0aGUgc2VtZXN0ZXIgb24gdGhlIGJhc2lzIG9mIHlvdXIgdG90YWwgcGVyY2VudGFnZSBvZiBwb2ludHMgZWFybmVkIG9uIGV4YW1pbmF0aW9ucyBhbmQgeW91ciBmaW5hbCBwYXBlci4KR3JhZGVzIHdpbGwgYmUgYXNzaWduZWQgb24gYW4gYWJzb2x1dGUgc2NhbGUgKGNyaXRlcmlvbi1yZWZlcmVuY2VkIGdyYWRpbmc7IHNlZSBiZWxvdyk7IGNvdXJzZSBncmFkZXMgd2lsbCBub3QgYmUgY3VydmVkLgpObyBleHRyYS1jcmVkaXQgb3Bwb3J0dW5pdGllcyBhcmUgYXZhaWxhYmxlIGZvciB0aGlzIGNvdXJzZS4KUGxlYXNlIG5vdGU6IEFzIGEgbWF0dGVyIG9mIGZhaXJuZXNzIHRvIGFsbCBzdHVkZW50cywgSSBhc3NpZ24gZ3JhZGVzIGJhc2VkIG9uIHBlcmZvcm1hbmNlIGFuZCBkbyBub3QgbmVnb3RpYXRlIGdyYWRlcy4KQWRkaXRpb25hbGx5LCBhIHBlbmFsdHkgb2YgMjAlIHBlciBkYXkgd2lsbCBiZSBhcHBsaWVkIHRvIGFsbCBhc3NpZ25tZW50cyB0dXJuZWQgaW4gbGF0ZS4KRmluYWwgZ3JhZGVzIHdpbGwgYmUgYXNzaWduZWQgYmFzZWQgb24gdGhlIGZvbGxvd2luZyByYW5nZXM6Cgp8IEdyYWRlIHwgUGVyY2VudCB8Cnw6LS0tLS0tfDotLS0tLS0tLXwKfCBBKyAgICB8IDk34oCTMTAwJSB8CnwgQSAgICAgfCA5M+KAkzk2ICAgfAp8IEHiiJIgICAgfCA5MOKAkzkyICAgfAp8IEIrICAgIHwgODfigJM4OSAgIHwKfCBCICAgICB8IDgz4oCTODYgICB8CnwgQuKIkiAgICB8IDgw4oCTODIgICB8CnwgQysgICAgfCA3N+KAkzc5ICAgfAp8IEMgICAgIHwgNzPigJM3NiAgIHwKfCBD4oiSICAgIHwgNzDigJM3MiAgIHwKfCBEKyAgICB8IDY34oCTNjkgICB8CnwgRCAgICAgfCA2M+KAkzY2ICAgfAp8IETiiJIgICAgfCA2MOKAkzYyICAgfAp8IEYgICAgIHwgMOKAkzU5ICAgIHwKCiMgQ291cnNlIEdyYWRlcyB7I2NvdXJzZUdyYWRlc30KCkZpbmFsIGNvdXJzZSBncmFkZXMgd2lsbCBiZSBhc3Nlc3NlZCBiYXNlZCBvbiB5b3VyIHBlcmZvcm1hbmNlIGluIHRoZSBhY3Rpdml0aWVzIGJlbG93LgpUaGUgcmVsYXRpdmUgY29udHJpYnV0aW9uIG9mIGVhY2ggY29tcG9uZW50IHRvIHlvdXIgZmluYWwgZ3JhZGUgaXMgYXMgZm9sbG93czoKCi0gMzAlICAgRXhhbSAxIChNaWQtVGVybSkKLSA0MCUgICBFeGFtIDIgKEZpbmFsKQotIDMwJSAgIEZpbmFsIFBhcGVyCgojIFRlbnRhdGl2ZSBDb3Vyc2UgT3V0bGluZSAoZXhhbSBkYXRlcyBmaXhlZCkgeyNvdXRsaW5lfQoKVGhpcyBpcyBhICp0ZW50YXRpdmUqIGNvdXJzZSBvdXRsaW5lLgpDaGFuZ2VzIHdpbGwgYmUgZGlzY3Vzc2VkIGluIGNsYXNzLgpUaGVyZSBhcmUgMTUgd2Vla3MgaW4gdGhlIHNlbWVzdGVyLCBhbmQgY2xhc3MgbWVldHMgdHdpY2UgcGVyIHdlZWsgKDMwIHNlY3Rpb25zKS4KV2Ugd2lsbCBoYXZlIG9uZSBleGFtIGR1cmluZyB0aGUgc2VtZXN0ZXIgYW5kIG9uZSBmaW5hbCBleGFtIGR1cmluZyBmaW5hbHMgd2Vlay4KCnwgKipTZWN0aW9uKiogICAgICB8ICoqRGF5KiogfCAqKkRhdGUqKiB8ICoqQ29udGVudCoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfDotLS0tLS0tLS0tLS0tLS0tLXw6LS0tLS0tLS18Oi0tLS0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAp8IFsxXSgjc2VjdGlvbjEpICAgfCBUICAgICAgIHwgMDEvMTYgICAgfCBPdmVydmlldyBvZiBDbGFzczsgQ2xpbmljYWwgU2NpZW5jZSBhbmQgdGhlIFJlcGxpY2F0aW9uIENyaXNpcyB8CnwgWzJdKCNzZWN0aW9uMikgICB8IFRoICAgICAgfCAwMS8xOCAgICB8IFJlbGlhYmlsaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbM10oI3NlY3Rpb24zKSAgIHwgVCAgICAgICB8IDAxLzIzICAgIHwgUmVsaWFiaWxpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFs0XSgjc2VjdGlvbjQpICAgfCBUaCAgICAgIHwgMDEvMjUgICAgfCBWYWxpZGl0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWzVdKCNzZWN0aW9uNSkgICB8IFQgICAgICAgfCAwMS8zMCAgICB8IFZhbGlkaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbNl0oI3NlY3Rpb242KSAgIHwgVGggICAgICB8IDAyLzAxICAgIHwgU3RydWN0dXJhbCBFcXVhdGlvbiBNb2RlbGluZyAoU0VNKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFs3XSgjc2VjdGlvbjcpICAgfCBUICAgICAgIHwgMDIvMDYgICAgfCBJdGVtIFJlc3BvbnNlIFRoZW9yeSAoSVJUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWzhdKCNzZWN0aW9uOCkgICB8IFRoICAgICAgfCAwMi8wOCAgICB8IFByZWRpY3Rpb24gQmFzaWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbOV0oI3NlY3Rpb245KSAgIHwgVCAgICAgICB8IDAyLzEzICAgIHwgU2lnbmFsIERldGVjdGlvbiBUaGVvcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFsxMF0oI3NlY3Rpb24xMCkgfCBUaCAgICAgIHwgMDIvMTUgICAgfCBDbGluaWNhbCBKdWRnbWVudCB2cy4gQWxnb3JpdGhtaWMgUHJlZGljdGlvbiAgICAgICAgICAgICAgICAgICB8CnwgWzExXSgjc2VjdGlvbjExKSB8IFQgICAgICAgfCAwMi8yMCAgICB8IEdlbmVyYWwgSXNzdWVzIGluIENsaW5pY2FsIEFzc2Vzc21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbMTJdKCNzZWN0aW9uMTIpIHwgVGggICAgICB8IDAyLzIyICAgIHwgRXZpZGVuY2UtQmFzZWQgQXNzZXNzbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFsxM10oI3NlY3Rpb24xMykgfCBUICAgICAgIHwgMDIvMjcgICAgfCBFdGhpY2FsIElzc3VlcyBpbiBBc3Nlc3NtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWzE0XSgjc2VjdGlvbjE0KSB8IFRoICAgICAgfCAwMi8yOSAgICB8ICoqTWlkdGVybSBFeGFtKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbMTVdKCNzZWN0aW9uMTUpIHwgVCAgICAgICB8IDAzLzA1ICAgIHwgSW50ZWxsZWN0dWFsIEFzc2Vzc21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFsxNl0oI3NlY3Rpb24xNikgfCBUaCAgICAgIHwgMDMvMDcgICAgfCBJbnRlbGxlY3R1YWwgQXNzZXNzbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgICB8IFQgICAgICAgfCAwMy8xMiAgICB8IFNwcmluZyBCcmVhayEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgIHwgVGggICAgICB8IDAzLzE0ICAgIHwgU3ByaW5nIEJyZWFrISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFsxN10oI3NlY3Rpb24xNykgfCBUICAgICAgIHwgMDMvMTkgICAgfCBCaWFzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWzE4XSgjc2VjdGlvbjE4KSB8IFRoICAgICAgfCAwMy8yMSAgICB8IEJpYXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbMTldKCNzZWN0aW9uMTkpIHwgVCAgICAgICB8IDAzLzI2ICAgIHwgVGhlIEludGVydmlldyBhbmQgdGhlIERTTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFsyMF0oI3NlY3Rpb24yMCkgfCBUaCAgICAgIHwgMDMvMjggICAgfCBPYmplY3RpdmUgUGVyc29uYWxpdHkgVGVzdGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWzIxXSgjc2VjdGlvbjIxKSB8IFQgICAgICAgfCAwNC8wMiAgICB8IE9iamVjdGl2ZSBQZXJzb25hbGl0eSBUZXN0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbMjJdKCNzZWN0aW9uMjIpIHwgVGggICAgICB8IDA0LzA0ICAgIHwgT2JqZWN0aXZlIFBlcnNvbmFsaXR5IFRlc3RpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFsyM10oI3NlY3Rpb24yMykgfCBUICAgICAgIHwgMDQvMDkgICAgfCBQcm9qZWN0aXZlIFBlcnNvbmFsaXR5IFRlc3RpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWzI0XSgjc2VjdGlvbjI0KSB8IFRoICAgICAgfCAwNC8xMSAgICB8IFBzeWNob3BoeXNpb2xvZ2ljYWwgTWVhc3VyZXMgYW5kIFJEb0MgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbMjVdKCNzZWN0aW9uMjUpIHwgVCAgICAgICB8IDA0LzE2ICAgIHwgQ29tcHV0ZXJzIGFuZCBBZGFwdGl2ZSBUZXN0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFsyNl0oI3NlY3Rpb24yNikgfCBUaCAgICAgIHwgMDQvMTggICAgfCBCZWhhdmlvcmFsIEFzc2Vzc21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWzI3XSgjc2VjdGlvbjI3KSB8IFQgICAgICAgfCAwNC8yMyAgICB8IFJlcGVhdGVkIEFzc2Vzc21lbnRzIGFjcm9zcyBUaW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbMjhdKCNzZWN0aW9uMjgpIHwgVGggICAgICB8IDA0LzI1ICAgIHwgUmVwZWF0ZWQgQXNzZXNzbWVudHMgYWNyb3NzIFRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFsyOV0oI3NlY3Rpb24yOSkgfCBUICAgICAgIHwgMDQvMzAgICAgfCBBc3Nlc3NtZW50IG9mIENvZ25pdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWzMwXSgjc2VjdGlvbjMwKSB8IFRoICAgICAgfCAwNS8wMiAgICB8IEN1bHR1cmFsIGFuZCBJbmRpdmlkdWFsIERpdmVyc2l0eTsgKipGaW5hbCBwYXBlciBkdWUhKiogICAgICAgIHwKfCBGaW5hbHMgV2VlayAgICAgIHwgICAgICAgICB8IFRCRCAod2VlayBvZiA1LzYpIHwgKipGaW5hbCBFeGFtKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgCiMgRGF0ZSBhbmQgVGltZSBvZiB0aGUgRmluYWwgRXhhbSB7I2ZpbmFsRXhhbX0KClRoZSBbZmluYWwgZXhhbWluYXRpb24gZGF0ZSBhbmQgdGltZV0oaHR0cHM6Ly9yZWdpc3RyYXIudWlvd2EuZWR1L2ZpbmFsLWV4YW0tc2NoZWR1bGVzKSB3aWxsIGJlIGFubm91bmNlZCBieSB0aGUgUmVnaXN0cmFyIGdlbmVyYWxseSBieSB0aGUgZmlmdGggd2VlayBvZiBjbGFzc2VzLCBhbmQgaXQgd2lsbCBiZSBhbm5vdW5jZWQgb24gdGhlIGNvdXJzZSBJQ09OIHNpdGUgb25jZSBpdCBpcyBrbm93bi4KPHU+RG8gbm90IHBsYW4geW91ciBlbmQgb2YgdGhlIHNlbWVzdGVyIHRyYXZlbCBwbGFucyB1bnRpbCB0aGUgZmluYWwgZXhhbSBzY2hlZHVsZSBpcyBtYWRlIHB1YmxpYy4KSXQgaXMgeW91ciByZXNwb25zaWJpbGl0eSB0byBrbm93IHRoZSBkYXRlLCB0aW1lLCBhbmQgcGxhY2Ugb2YgdGhlIGZpbmFsIGV4YW0uPC91PgpBY2NvcmRpbmcgdG8gdGhlIFJlZ2lzdHJhcidzIGZpbmFsIGV4YW0gcG9saWN5LCBzdHVkZW50cyA8dT5oYXZlIGEgbWF4aW11bSBvZiB0d28gd2Vla3MgYWZ0ZXIgdGhlIGFubm91bmNlZCBmaW5hbCBleGFtIHNjaGVkdWxlPC91PiB0byByZXF1ZXN0IGEgY2hhbmdlIGlmIGFuIGV4YW0gY29uZmxpY3QgZXhpc3RzIG9yIGlmIGEgc3R1ZGVudCBoYXMgbW9yZSB0aGFuIHR3byBleGFtcyBzY2hlZHVsZWQgZm9yIHRoZSBzYW1lIGRheSAoc2VlIHRoZSBbcG9saWN5XShodHRwczovL3JlZ2lzdHJhci51aW93YS5lZHUvbWFrZXVwLWZpbmFsLWV4YW1pbmF0aW9uLXBvbGljaWVzKSBoZXJlKS4KCiMgQ291cnNlIFJlc291cmNlcyB7I2NvdXJzZVJlc291cmNlc30KClRoZXJlIGFyZSBtYW55IGNvdXJzZSByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHN1Y2NlZWQgaW4gdGhlIGNsYXNzLCBpbmNsdWRpbmc6CgotIExlY3R1cmVzCi0gTGVjdHVyZSBzbGlkZXMKLSBbTGVjdHVyZSByZWNvcmRpbmdzXSgjcmVjb3JkaW5ncykKLSBbUmVhZGluZ3NdKCNhcnRpY2xlcykKLSBbQ29tcGFuaW9uIGJvb2tdKCN0ZXh0Ym9vaykKLSBbU3VwcGxlbWVudGFsIHJlc291cmNlc10oI3N1cHBsZW1lbnRhbCkKLSBEaXNjdXNzaW9ucyBvbiBbSUNPTl0oaHR0cHM6Ly9pY29uLnVpb3dhLmVkdSkKLSBPZmZpY2UgaG91cnMKLSBQZWVyIHN0dWR5IGdyb3VwcwotIHRoZSBVSSBbV3JpdGluZyBDZW50ZXJdKGh0dHBzOi8vd3JpdGluZ2NlbnRlci51aW93YS5lZHUpCi0gVHV0b3IgSW93YTogaHR0cHM6Ly90dXRvci51aW93YS5lZHUKCiMgSG93IHRvIFN0dWR5IGZvciB0aGlzIENsYXNzIHsjaG93VG9TdHVkeX0KClRvIHN0dWR5IGZvciB0aGlzIGNsYXNzLCBteSBzdWdnZXN0aW9ucyBhcmU6CgoxLiBSZWFkIHRoZSBbYXNzaWduZWQgcmVhZGluZ3NdKCNhcnRpY2xlcykgKmJlZm9yZSogZWFjaCBjbGFzcy4KV2UgaGF2ZSBsb3RzIG9mIGNvbnRlbnQgdG8gY292ZXIsIGFuZCB0aGUgbGVjdHVyZXMgd2lsbCBtb3ZlIHF1aWNrbHkuClRodXMsIGRvaW5nIHRoZSByZWxldmFudCByZWFkaW5ncyAqYmVmb3JlKiBlYWNoIGNsYXNzIHdpbGwgaGVscCB5b3UgYmVzdCBjb21lIHByZXBhcmVkIHRvIGxlYXJuIHRoZSBtYXRlcmlhbCBwcmVzZW50ZWQgaW4gY2xhc3MuCjIuIFRha2UgZ29vZCBub3RlcyB3aGlsZSBkb2luZyB0aGUgW2Fzc2lnbmVkIHJlYWRpbmdzXSgjYXJ0aWNsZXMpLgpBZnRlciByZWFkaW5nIGVhY2ggYXJ0aWNsZSwgbGVhdmUgYSBmZXcgYnVsbGV0IHBvaW50cyBhdCB0aGUgdG9wIG9mIHRoZSBhcnRpY2xlIHJlZ2FyZGluZyB0aGUga2V5IHBvaW50cyBhbmQgdGFrZS1hd2F5IG1lc3NhZ2VzIGZyb20gdGhlIGFydGljbGUuClRoYXQgd2F5LCB3aGVuIHlvdSBnbyBiYWNrIGFuZCByZXZpZXcgaXQsIHRoZSBrZXkgaWRlYXMgd2lsbCByZWZyZXNoIHlvdXIgbWVtb3J5IGFuZCB3aWxsIGhlbHAgeW91IG1ha2UgdGhlIHJlbGV2YW50IGNvbm5lY3Rpb25zIHRvIHRoZSByZXN0IG9mIHlvdXIgbm90ZXMgb24gdGhlIGFydGljbGUgYW5kIHRvIHRoZSBwb2ludHMgZGlzY3Vzc2VkIGluIGxlY3R1cmUuCjEuIEFmdGVyIGRvaW5nIHRoZSBbYXNzaWduZWQgcmVhZGluZ3NdKCNhcnRpY2xlcykgYW5kIGJlZm9yZSBjbGFzcyBwZXJpb2QsIHJldmlldyB5b3VyIG5vdGVzIGFuZCB0cnkgdG8gZGV0ZXJtaW5lIHdoYXQgYXJlIHRoZSBrZXkgbWVzc2FnZXMgaW50ZW5kZWQgdG8gY29udmV5ZWQgYnkgdGhlIGNvbGxlY3Rpb24gb2YgcmVhZGluZ3MuClRoZSB3aWxsIHNldCB5b3UgdXAgdG8gYmUgaW4gdGhlIGJlc3QgcG9zaXRpb24gdG8gYWNxdWlyZSB0aGUgbWF0ZXJpYWwgY292ZXJlZCBpbiBsZWN0dXJlLgoxLiBUYWtlIGdvb2Qgbm90ZXMgaW4gY2xhc3MuCjEuIElmIHNvbWV0aGluZyBpcyB1bmNsZWFyIGFib3V0IHRoZSByZWFkaW5nIG9yIGFib3V0IGEgcG9pbnQgZGlzY3Vzc2VkIGluIGxlY3R1cmUsIGZlZWwgZnJlZSB0byBjb25zdWx0IHRoZSBbY29tcGFuaW9uIGJvb2tdKCN0ZXh0Ym9vayksIHRvIHJldmlldyB0aGUgW2xlY3R1cmUgcmVjb3JkaW5nXSgjcmVjb3JkaW5ncyksIG9yIHRvIGFzayBxdWVzdGlvbnMgZHVyaW5nIG9yIGFmdGVyIGNsYXNzLCBvciBpbiBvZmZpY2UgaG91cnMuCkRvbid0IHN0cnVnZ2xlIGluIHNpbGVuY2UhCjEuIEFzIHlvdSBwcmVwYXJlIGZvciB0aGUgZXhhbSwgcmV2aWV3IHRoZSBtYXRlcmlhbCBjb3ZlcmVkIGJ5IGVhY2ggYXJ0aWNsZSBhbmQgbGVjdHVyZS4KSWYgdGhlcmUgaXMgYW4gZXhhbSByZXZpZXcgb3IgZXhhbXBsZSBzdHVkeSBxdWVzdGlvbnMsIG1ha2Ugc3VyZSB0byByZXZpZXcgdGhvc2UgY2xvc2VseS4KVGhlIGV4YW0gcmV2aWV3IHByZXNlbnRzIHNvbWUgb2YgdGhlIGtleSB0YWtlLWF3YXkgbWVzc2FnZXMgZnJvbSBlYWNoIGxlY3R1cmUgYW5kIHRodXMgcmVwcmVzZW50cyBwcmltZSBtYXRlcmlhbCBmb3IgZXhhbSBxdWVzdGlvbnMuClRoZSBleGFtcGxlIHN0dWR5IHF1ZXN0aW9ucyBhcmUgTk9UIGNvbXByZWhlbnNpdmUgYW5kIGFyZSBOT1QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgcXVlc3Rpb25zIHRoYXQgd2lsbCBiZSBhc2tlZCBvbiB0aGUgZXhhbSwgYnV0IHRoZXkgc2hvdWxkIGdpdmUgeW91IGEgc2Vuc2Ugb2YgdGhlIHN0eWxlIGluIHdoaWNoIHF1ZXN0aW9ucyBtYXkgYmUgYXNrZWQuCklmIHRoZXJlIGlzIGEgcXVlc3Rpb24geW91IGRvIG5vdCBrbm93IHRoZSBmdWxsIGFuc3dlciB0bywgdGhhdCBpcyBhIGNsdWUgdGhhdCB5b3UgbmVlZCB0byBzdHVkeSB0aGF0IHRvcGljIG1vcmUgY2xvc2VseS4KMS4gSSBzdHJvbmdseSBlbmNvdXJhZ2UgeW91IHRvIHN0dWR5IHdpdGggeW91ciBwZWVycy4KU3R1ZHlpbmcgd2l0aCB5b3VyIHBlZXJzIGhlbHBzIGdpdmUgeW91IGEgc2Vuc2UgYWJvdXQgdGhlIHRvcGljcyB3aGVyZSB5b3UgZmVlbCBzdHJvbmdlciBhbmQgdGhlIHRvcGljcyB3aGVyZSB5b3UgZmVlbCB3ZWFrZXIgKGFuZCBuZWVkIHRvIHN0dWR5IG1vcmUpLgpJdCBoZWxwcyBib3RoIHBlZXJzIGluIHRoZSBleGNoYW5nZSB3aGVuIG9uZSBwZWVyIGV4cGxhaW5zIGEgdG9waWMgdG8gYW5vdGhlci4KSW4gYWRkaXRpb24gdG8gaGVscGluZyB0aGUgbGlzdGVuaW5nIHN0dWRlbnQgbGVhcm4sIHBlZXIgaW5zdHJ1Y3Rpb24gYWxzbyBoZWxwcyB0aGUgZXhwbGFpbmluZyBzdHVkZW50IHZpYSBjb25zb2xpZGF0aW9uIG9mIHRoZSBzdHVkZW50J3Mga25vd2xlZGdlLgpUaGVyZSBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiAia25vd2luZyBzb21ldGhpbmciIGFuZCAia25vd2luZyBpdCAqd2VsbCouIgpFeHBsYWluaW5nIGEgdG9waWMgdG8gc29tZW9uZSBlbHNlIGhlbHBzIHlvdSBmaWd1cmUgb3V0IHdoZXJlIHlvdXIga25vd2xlZGdlIGdhcHMgYXJlIGFuZCBjYW4gaGVscCB5b3UgbWFrZSBzdXJlIHlvdSB1bmRlcnN0YW5kIHRoZSB0b3BpYyAqd2VsbCouCkFkZGl0aW9uYWxseSwgc3R1ZHlpbmcgYnkgZXhwbGFpbmluZyB0b3BpY3MgdG8gb3RoZXJzIGFsaWducyBtb3JlIGNsb3NlbHkgd2l0aCB0aGUgZXhhbSBmb3JtYXQgKHNob3J0IGFuc3dlci9lc3NheSksIHdoaWNoIGRlbWFuZHMgcmVjYWxsIHJhdGhlciB0aGFuIG1lcmUgcmVjb2duaXRpb27igJRyZWNvZ25pdGlvbiBhbG9uZSBiZWluZyB0eXBpY2FsbHkgYWRlcXVhdGUgZm9yIG11bHRpcGxlLWNob2ljZSBleGFtcy4KMS4gQ29tZSB0byBvZmZpY2UgaG91cnMgaWYgeW91IHN0aWxsIGhhdmUgcXVlc3Rpb25zIQoKIyBEcm9wIERlYWRsaW5lIGZvciB0aGlzIENvdXJzZSB7I2Ryb3BEZWFkbGluZX0KCllvdSBtYXkgZHJvcCBhbiBpbmRpdmlkdWFsIGNvdXJzZSBiZWZvcmUgdGhlIGRyb3AgZGVhZGxpbmU7IGFmdGVyIHRoaXMgZGVhZGxpbmUgeW91IHdpbGwgbmVlZCBjb2xsZWdpYXRlIGFwcHJvdmFsLgpZb3UgY2FuIGxvb2sgdXAgdGhlIGRyb3AgZGVhZGxpbmUgZm9yIHRoaXMgY291cnNlIFtoZXJlXShodHRwczovL3JlZ2lzdHJhci51aW93YS5lZHUvY291cnNlLWRlYWRsaW5lcykuCldoZW4geW91IGRyb3AgYSBjb3Vyc2UsIGEgIlciIHdpbGwgYXBwZWFyIG9uIHlvdXIgdHJhbnNjcmlwdC4KVGhlIG1hcmsgb2YgIlciIGlzIGEgbmV1dHJhbCBtYXJrIHRoYXQgZG9lcyBub3QgYWZmZWN0IHlvdXIgR1BBLgpUbyBkaXNjdXNzIGhvdyBkcm9wcGluZyAob3Igc3RheWluZyBpbikgYSBjb3Vyc2UgbWlnaHQgYWZmZWN0IHlvdXIgYWNhZGVtaWMgZ29hbHMsIHBsZWFzZSBjb250YWN0IHlvdXIgQWNhZGVtaWMgQWR2aXNvci4KRGlyZWN0aW9ucyBmb3IgYWRkaW5nIG9yIGRyb3BwaW5nIGEgY291cnNlIGFuZCBvdGhlciByZWdpc3RyYXRpb24gY2hhbmdlcyBjYW4gYmUgZm91bmQgb24gdGhlIFtSZWdpc3RyYXIncyB3ZWJzaXRlXShodHRwczovL3JlZ2lzdHJhci51aW93YS5lZHUvY2hhbmdlLXJlZ2lzdHJhdGlvbi1teXVpKS4KU3R1ZGVudHMgc2hvdWxkIGFkaGVyZSB0byB0aGUgW2FjYWRlbWljIGRlYWRsaW5lc10oaHR0cHM6Ly9ncmFkLnVpb3dhLmVkdS9hY2FkZW1pY3MvZGVhZGxpbmVzKSBhbmQgcG9saWNpZXMgc2V0IGJ5IHRoZSBHcmFkdWF0ZSBDb2xsZWdlLgoKIyBGZWVkYmFjayBhYm91dCB0aGUgQ291cnNlIHsjZmVlZGJhY2t9CgpJIHdlbGNvbWUgZmVlZGJhY2sgYXQgYW55IHBvaW50IGR1cmluZyB0aGUgY2xhc3MuCklmIHlvdSBoYXZlIGNvbW1lbnRzIG9uIHRoZSBjbGFzcyBvciBteSB0ZWFjaGluZywgcGxlYXNlIGZlZWwgZnJlZSB0byBtZWV0IHdpdGggbWUgZHVyaW5nIG9mZmljZSBob3Vycy4KCiMjIFN0dWRlbnQgQ29tcGxhaW50cyB7I2NvbXBsYWludHN9CgpTdHVkZW50cyB3aXRoIGEgY29tcGxhaW50IGFib3V0IGEgZ3JhZGUgb3IgYSByZWxhdGVkIG1hdHRlciBzaG91bGQgZmlyc3QgZGlzY3VzcyB0aGUgc2l0dWF0aW9uIHdpdGggdGhlIGluc3RydWN0b3IsIGFuZCBmaW5hbGx5IHdpdGggdGhlIERFTyAoQ2hhaXIpIG9mIHRoZSBkZXBhcnRtZW50LCBzY2hvb2wsIG9yIHByb2dyYW0gb2ZmZXJpbmcgdGhlIGNvdXJzZS4KU29tZXRpbWVzIHN0dWRlbnRzIHdpbGwgYmUgcmVmZXJyZWQgdG8gdGhlIGRlcGFydG1lbnQgb3IgcHJvZ3JhbSdzIERpcmVjdG9yIG9mIFVuZGVyZ3JhZHVhdGUgU3R1ZGllcyAoRFVTKSBvciBEaXJlY3RvciBvZiBHcmFkdWF0ZSBTdHVkaWVzIChER1MpLgpTdHVkZW50cyBzaG91bGQgY29udGFjdCB0aGUgW0NMQVMgR3JhZHVhdGUgQWZmYWlycyBNYW5hZ2VyXShtYWlsdG86RXJpa2EtY2hyaXN0aWFuc2VuQHVpb3dhLmVkdSkgd2hlbiBhZGRpdGlvbmFsIHN1cHBvcnQgaXMgbmVlZGVkLgoKIyBDb21tdW5pY2F0aW9uOiBVSSBFbWFpbCB7I2VtYWlsfQoKU3R1ZGVudHMgYXJlIHJlc3BvbnNpYmxlIGZvciBhbGwgb2ZmaWNpYWwgY29ycmVzcG9uZGVuY2VzIHNlbnQgdG8gdGhlaXIgVUkgZW1haWwgYWRkcmVzcyAodWlvd2EuZWR1KSBhbmQgbXVzdCB1c2UgdGhpcyBhZGRyZXNzIGZvciBhbnkgY29tbXVuaWNhdGlvbiB3aXRoIGluc3RydWN0b3JzIG9yIHN0YWZmIGluIHRoZSBVSSBjb21tdW5pdHkuCkZvciB0aGUgcHJpdmFjeSBhbmQgdGhlIHByb3RlY3Rpb24gb2Ygc3R1ZGVudCByZWNvcmRzLCBVSSBmYWN1bHR5IGFuZCBzdGFmZiBjYW4gb25seSBjb3JyZXNwb25kIHdpdGggVUkgZW1haWwgYWRkcmVzc2VzLgoKIyMgT3RoZXIgRXhwZWN0YXRpb25zIG9mIFN0dWRlbnQgUGVyZm9ybWFuY2UgeyNvdGhlckV4cGVjdGF0aW9uc30KClN0dWRlbnRzIGhhdmUgdGhlIHJpZ2h0IHRvIGEgZGlzdHJhY3Rpb24tZnJlZSBsZWFybmluZyBlbnZpcm9ubWVudC4KWW91IGhhdmUgdGhlIHJlc3BvbnNpYmlsaXR5IHRvIGhlbHAgY3JlYXRlIHN1Y2ggYSBjbGFzc3Jvb20gZW52aXJvbm1lbnQuClBsZWFzZSB0cmVhdCBvdGhlciBzdHVkZW50cyBpbiB0aGUgY2xhc3MgYW5kIHRoZSBpbnN0cnVjdG9yIHdpdGggcmVzcGVjdC4KU3R1ZGVudHMgYXJlIGV4cGVjdGVkIHRvIGhlbHAgZWFjaCBvdGhlciBsZWFybiBhbmQgdG8gY29udHJpYnV0ZSBvdmVyYWxsIHRvIHRoZSBsZWFybmluZyBlbnZpcm9ubWVudCBvZiB0aGUgY291cnNlLgpBcnJpdmluZyBwcmVwYXJlZCBmb3IgY2xhc3MgaXMgcGFydCBvZiB0aGlzIGV4cGVjdGF0aW9uLgoKIyBVbml2ZXJzaXR5IFBvbGljaWVzIHsjVUlvd2FQb2xpY2llc30KCltVbml2ZXJzaXR5IFBvbGljaWVzXShodHRwczovL3Byb3Zvc3QudWlvd2EuZWR1L3N0dWRlbnQtY291cnNlLXBvbGljaWVzKQoKW0FjY29tbW9kYXRpb25zIGZvciBTdHVkZW50cyB3aXRoIERpc2FiaWxpdGllc10oaHR0cHM6Ly9wcm92b3N0LnVpb3dhLmVkdS9zdHVkZW50LWNvdXJzZS1wb2xpY2llcylcClRoZSBVbml2ZXJzaXR5IGlzIGNvbW1pdHRlZCB0byBwcm92aWRpbmcgYW4gZWR1Y2F0aW9uYWwgZXhwZXJpZW5jZSB0aGF0IGlzIGFjY2Vzc2libGUgdG8gYWxsIHN0dWRlbnRzLgpJZiBhIHN0dWRlbnQgaGFzIGEgZGlhZ25vc2VkIGRpc2FiaWxpdHkgb3Igb3RoZXIgZGlzYWJsaW5nIGNvbmRpdGlvbiB0aGF0IG1heSBpbXBhY3QgdGhlIHN0dWRlbnQncyBhYmlsaXR5IHRvIGNvbXBsZXRlIHRoZSBjb3Vyc2UgcmVxdWlyZW1lbnRzIGFzIHN0YXRlZCBpbiB0aGUgc3lsbGFidXMsIHRoZSBzdHVkZW50IG1heSBzZWVrIGFjY29tbW9kYXRpb25zIHRocm91Z2ggW1N0dWRlbnQgRGlzYWJpbGl0eSBTZXJ2aWNlc10oaHR0cHM6Ly9zZHMuc3R1ZGVudGxpZmUudWlvd2EuZWR1L3N0dWRlbnRzKSAoU0RTKS4KU0RTIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgW0xldHRlcnMgb2YgQWNjb21tb2RhdGlvbiAoTE9BKV0oaHR0cHM6Ly9zZHMuc3R1ZGVudGxpZmUudWlvd2EuZWR1L3N0dWRlbnRzL2xldHRlci1hY2NvbW1vZGF0aW9ucy1sb2EpIGF2YWlsYWJsZSB0byB0aGUgc3R1ZGVudC4KPHU+VGhlIHN0dWRlbnQgbXVzdCBwcm92aWRlIGEgTE9BIHRvIHRoZSBpbnN0cnVjdG9yIGFzIGVhcmx5IGluIHRoZSBzZW1lc3RlciBhcyBwb3NzaWJsZSwgYnV0IHJlcXVlc3RzIG5vdCBtYWRlIGF0IGxlYXN0IHR3byB3ZWVrcyBwcmlvciB0byB0aGUgc2NoZWR1bGVkIGFjdGl2aXR5IGZvciB3aGljaCBhbiBhY2NvbW1vZGF0aW9uIGlzIHNvdWdodCBtYXkgbm90IGJlIGFjY29tbW9kYXRlZC48L3U+ClRoZSBMT0Egd2lsbCBzcGVjaWZ5IHdoYXQgcmVhc29uYWJsZSBjb3Vyc2UgYWNjb21tb2RhdGlvbnMgdGhlIHN0dWRlbnQgaXMgZWxpZ2libGUgZm9yIGFuZCB0aG9zZSB0aGUgaW5zdHJ1Y3RvciBzaG91bGQgcHJvdmlkZS4KQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgb24gdGhlIFtTRFMgd2Vic2l0ZV0oaHR0cHM6Ly9zZHMuc3R1ZGVudGxpZmUudWlvd2EuZWR1L3N0dWRlbnRzL2FwcGx5KS4KCltDbGFzcyBSZWNvcmRpbmdzXShodHRwczovL3Byb3Zvc3QudWlvd2EuZWR1L3N0dWRlbnQtY291cnNlLXBvbGljaWVzKVwKU3R1ZGVudHMgbWF5IGJlIGVucm9sbGVkIGluIGEgY2xhc3Mgd2hlcmUgc29tZSBzZXNzaW9ucyB3aWxsIGJlIHJlY29yZGVkIG9yIGxpdmUtc3RyZWFtZWQuClN1Y2ggcmVjb3JkaW5ncy9zdHJlYW1pbmcgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSB0byBzdHVkZW50cyByZWdpc3RlcmVkIGZvciB0aGUgY2xhc3MuClRoZXNlIHJlY29yZGluZ3MgYXJlIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgdGhlIGluc3RydWN0b3IgYW5kIHRoZXkgbWF5IG5vdCBiZSBzaGFyZWQgb3IgcmVwcm9kdWNlZCB3aXRob3V0IHRoZSBleHBsaWNpdCwgd3JpdHRlbiBjb25zZW50IG9mIHRoZSBpbnN0cnVjdG9yLgpGdXJ0aGVyLCBzdHVkZW50cyBtYXkgbm90IHNoYXJlIHRoZXNlIHNlc3Npb25zIHdpdGggdGhvc2Ugbm90IGluIHRoZSBjbGFzcyBvciB1cGxvYWQgdGhlbSB0byBhbnkgb3RoZXIgb25saW5lIGVudmlyb25tZW50LgpEb2luZyBzbyB3b3VsZCBiZSBhIGJyZWFjaCBvZiB0aGUgQ29kZSBvZiBTdHVkZW50IENvbmR1Y3QsIGFuZCwgaW4gc29tZSBjYXNlcywgYSB2aW9sYXRpb24gb2Ygc3RhdGUgYW5kIGZlZGVyYWwgbGF3LCBpbmNsdWRpbmcgdGhlIEZlZGVyYWwgRWR1Y2F0aW9uIFJpZ2h0cyBhbmQgUHJpdmFjeSBBY3QgKEZFUlBBKS4KClRoZSB1bmF1dGhvcml6ZWQgdmlkZW8gb3IgYXVkaW8gcmVjb3JkaW5nIG9mIGFjYWRlbWljIGFjdGl2aXRpZXMgKGUuZy4sIGxlY3R1cmVzLCBjb3Vyc2UgZGlzY3Vzc2lvbnMsIG9mZmljZSBob3VycywgZXRjLikgYnkgYSBzdHVkZW50IGlzIHByb2hpYml0ZWQuClN0dWRlbnRzIHdpdGggYSByZWFzb25hYmxlIGFjY29tbW9kYXRpb24gZm9yIHJlY29yZGluZyBhcHByb3ZlZCBieSBTdHVkZW50IERpc2FiaWxpdHkgU2VydmljZXMgc2hvdWxkIG5vdGlmeSBlYWNoIGluc3RydWN0b3IgYW5kIHByb3ZpZGUgdGhlIExldHRlciBvZiBBY2NvbW1vZGF0aW9uIHByaW9yIHRvIHVzaW5nIHRoZSBhY2NvbW1vZGF0aW9uLgpBIHN0dWRlbnQgbWF5IHJlY29yZCBjbGFzc3Jvb20gYWN0aXZpdGllcyB3aXRoIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIHRoZSBpbnN0cnVjdG9yIGFuZCBub3RpY2UgdG8gb3RoZXIgc3R1ZGVudHMgaW4gdGhlIGNsYXNzIHRoYXQgYXVkaW8gb3IgdmlkZW8gcmVjb3JkaW5nIG1heSBvY2N1ci4KQW55IGFuZCBhbGwgY2xhc3Nyb29tIHJlY29yZGluZyBtdXN0IGJlIGZvciBwZXJzb25hbCBhY2FkZW1pYyB1c2Ugb25seS4KVGhlIGRpc3RyaWJ1dGlvbiwgc2hhcmluZywgc2FsZSwgb3IgcG9zdGluZyBvZiByZWNvcmRpbmdzIG9uIHRoZSBpbnRlcm5ldCAoaW5jbHVkaW5nIHNvY2lhbCBtZWRpYSksIGluIHdob2xlIG9yIGluIHBhcnQsIGlzIHByb2hpYml0ZWQgYW5kIGRvaW5nIHNvIG1heSBiZSBhIHZpb2xhdGlvbiBvZiB0aGUgQ29kZSBvZiBTdHVkZW50IExpZmUgYW5kL29yIHN0YXRlIG9yIGZlZGVyYWwgcHJpdmFjeSwgY29weXJpZ2h0LCBvciBvdGhlciBsYXdzLgoKLSBbRnJlZSBTcGVlY2ggYW5kIEV4cHJlc3Npb25dKGh0dHBzOi8vcHJvdm9zdC51aW93YS5lZHUvc3R1ZGVudC1jb3Vyc2UtcG9saWNpZXMpCi0gW05vbi1EaXNjcmltaW5hdGlvbl0oaHR0cHM6Ly9wcm92b3N0LnVpb3dhLmVkdS9zdHVkZW50LWNvdXJzZS1wb2xpY2llcykKLSBbQWNjb21tb2RhdGlvbnMgZm9yIFN0dWRlbnRzIHdpdGggRGlzYWJpbGl0aWVzXShodHRwczovL3Byb3Zvc3QudWlvd2EuZWR1L3N0dWRlbnQtY291cnNlLXBvbGljaWVzKQotIFtBYnNlbmNlcyBmcm9tIENsYXNzXShodHRwczovL3Byb3Zvc3QudWlvd2EuZWR1L3N0dWRlbnQtY291cnNlLXBvbGljaWVzKQotIFtBYnNlbmNlcyBmb3IgUmVsaWdpb3VzIEhvbHkgRGF5c10oaHR0cHM6Ly9wcm92b3N0LnVpb3dhLmVkdS9zdHVkZW50LWNvdXJzZS1wb2xpY2llcykKLSBbQWJzZW5jZXMgZm9yIE1pbGl0YXJ5IFNlcnZpY2UgT2JsaWdhdGlvbnNdKGh0dHBzOi8vcHJvdm9zdC51aW93YS5lZHUvc3R1ZGVudC1jb3Vyc2UtcG9saWNpZXMpCi0gW0NsYXNzcm9vbSBFeHBlY3RhdGlvbnNdKGh0dHBzOi8vcHJvdm9zdC51aW93YS5lZHUvc3R1ZGVudC1jb3Vyc2UtcG9saWNpZXMpCi0gW1NleHVhbCBIYXJhc3NtZW50L01pc2NvbmR1Y3QgYW5kIFN1cHBvcnRpdmUgTWVhc3VyZXNdKGh0dHBzOi8vcHJvdm9zdC51aW93YS5lZHUvc3R1ZGVudC1jb3Vyc2UtcG9saWNpZXMpCi0gW0NvbmZsaWN0IFJlc29sdXRpb25dKGh0dHBzOi8vcHJvdm9zdC51aW93YS5lZHUvc3R1ZGVudC1jb3Vyc2UtcG9saWNpZXMpCi0gW01lbnRhbCBIZWFsdGhdKGh0dHBzOi8vcHJvdm9zdC51aW93YS5lZHUvc3R1ZGVudC1jb3Vyc2UtcG9saWNpZXMpCi0gW0Jhc2ljIE5lZWRzIGFuZCBTdHVkZW50IFN1cHBvcnRdKGh0dHBzOi8vcHJvdm9zdC51aW93YS5lZHUvc3R1ZGVudC1jb3Vyc2UtcG9saWNpZXMpCi0gW0NsYXNzIFJlY29yZGluZ3NdKGh0dHBzOi8vcHJvdm9zdC51aW93YS5lZHUvc3R1ZGVudC1jb3Vyc2UtcG9saWNpZXMpCgojIFdoZXJlIHRvIEdldCBBY2FkZW1pYyBTdXBwb3J0IGZvciBUaGlzIENvdXJzZSB7I2FjYWRlbWljLXN1cHBvcnR9CgotIERyb3AtaW4gc3R1ZHkgZ3JvdXBzIGFuZCBvbmUtb24tb25lIHR1dG9yaW5nOiBvZmZpY2UgaG91cnMgb2YgdGhlIGluc3RydWN0b3IKLSBGb3JtYWwgdHV0b3Jpbmc6IFR1dG9yIElvd2E6IGh0dHBzOi8vdHV0b3IudWlvd2EuZWR1Ci0gQWNhZGVtaWMgYWNjb21tb2RhdGlvbnM6IGh0dHBzOi8vc2RzLnN0dWRlbnRsaWZlLnVpb3dhLmVkdQoKIyBNZW50YWwgSGVhbHRoIFJlc291cmNlcyBhbmQgU3R1ZGVudCBTdXBwb3J0IHsjbWVudGFsLWhlYWx0aH0KClN0dWRlbnRzIGFyZSBlbmNvdXJhZ2VkIHRvIGJlIG1pbmRmdWwgb2YgdGhlaXIgbWVudGFsIGhlYWx0aCBhbmQgc2VlayBoZWxwIGFzIGEgcHJldmVudGl2ZSBtZWFzdXJlIG9yIGlmIGZlZWxpbmcgb3ZlcndoZWxtZWQgYW5kL29yIHN0cnVnZ2xpbmcgdG8gbWVldCBjb3Vyc2UgZXhwZWN0YXRpb25zLgpTdHVkZW50cyBhcmUgZW5jb3VyYWdlZCB0byB0YWxrIHRvIHRoZWlyIGluc3RydWN0b3IgZm9yIGFzc2lzdGFuY2Ugd2l0aCBzcGVjaWZpYyBjbGFzcy1yZWxhdGVkIGNvbmNlcm5zLgpGb3IgYWRkaXRpb25hbCBzdXBwb3J0IGFuZCBjb3Vuc2VsaW5nLCBzdHVkZW50cyBhcmUgZW5jb3VyYWdlZCB0byBjb250YWN0IFVuaXZlcnNpdHkgQ291bnNlbGluZyBTZXJ2aWNlIChVQ1MpLgpJbmZvcm1hdGlvbiBhYm91dCBVQ1MsIGluY2x1ZGluZyByZXNvdXJjZXMgYW5kIGhvdyB0byBzY2hlZHVsZSBhbiBhcHBvaW50bWVudCwgY2FuIGJlIGZvdW5kIGF0IFtjb3Vuc2VsaW5nLnVpb3dhLmVkdV0oaHR0cDovL2NvdW5zZWxpbmcudWlvd2EuZWR1KS4KRmluZCBvdXQgbW9yZSBhYm91dCBVSSBtZW50YWwgaGVhbHRoIHNlcnZpY2VzIGF0OiBbbWVudGFsaGVhbHRoLnVpb3dhLmVkdV0oaHR0cDovL21lbnRhbGhlYWx0aC51aW93YS5lZHUpLCBpbmNsdWRpbmcgdGhlIDI0LTcgW1VJIFN1cHBvcnQgYW5kIENyaXNpcyBMaW5lXShodHRwczovL21lbnRhbGhlYWx0aC51aW93YS5lZHUvdWktc3VwcG9ydC1hbmQtY3Jpc2lzLWxpbmUpLgoKQWRkaXRpb25hbGx5LCB0aGUgT2ZmaWNlIG9mIHRoZSBEZWFuIG9mIFN0dWRlbnRzIGNhbiBoZWxwIHN0dWRlbnRzIG5hdmlnYXRlIHBlcnNvbmFsIGNyaXNpcyBzaXR1YXRpb25zLgpUaGV5IGNhbiBwcm92aWRlIG9uZS1vbi1vbmUgc3VwcG9ydCwgaGVscCB3aXRoIGlkZW50aWZ5aW5nIG9wdGlvbnMsIGFuZCBhY2Nlc3MgdG8gW2Jhc2ljIG5lZWRzIHJlc291cmNlcyAoc3VjaCBhcyBmb29kLCByZW50LCBjaGlsZGNhcmUsIGV0Yy4pXShodHRwOi8vYmFzaWNuZWVkcy51aW93YS5lZHUpLgpTdHVkZW50IENhcmUgYW5kIEFzc2lzdGFuY2U6IDEzMiBJTVUsIFtkb3MtYXNzaXN0YW5jZUB1aW93YS5lZHVdKG1haWx0bzpkb3MtYXNzaXN0YW5jZUB1aW93YS5lZHUpLCBvciAzMTktMzM1LTExNjIgYW5kIG1vcmUgaW5mbzogW2Rvcy51aW93YS5lZHUvYXNzaXN0YW5jZV0oaHR0cHM6Ly9kb3MudWlvd2EuZWR1L2Fzc2lzdGFuY2UpCgpJZiB5b3UgZmVlbCB0aGF0IHlvdSBvciBzb21lb25lIHlvdSBrbm93IG1heSBiZSBzdHJ1Z2dsaW5nIHdpdGggYW4gYWNhZGVtaWMsIGVtb3Rpb25hbCwgb3IgcHN5Y2hvbG9naWNhbCBwcm9ibGVtLCB0aGUgZm9sbG93aW5nIG9yZ2FuaXphdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgYXNzaXN0YW5jZToKCnwgU2VydmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb250YWN0IEluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAp8IFVuaXZlcnNpdHkgb2YgSW93YSBBY2FkZW1pYyBBZHZpc2luZyBDZW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzUzLTU3MDAsIGh0dHBzOi8vYWR2aXNpbmdjZW50ZXIudWlvd2EuZWR1ICAgICAgICAgICAgICAgICAgICAgICB8CnwgVW5pdmVyc2l0eSBDb3Vuc2VsaW5nIFNlcnZpY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzMzUtNzI5NCwgaHR0cHM6Ly93d3cudWlvd2EuZWR1L3VjcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBTdHVkZW50IEhlYWx0aCBTZXJ2aWNlIC0gTWVudGFsIEhlYWx0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMzNS04Mzk0LCBodHRwczovL3N0dWRlbnRoZWFsdGgudWlvd2EuZWR1L3NlcnZpY2VzL3BzeWNoaWF0cnkgICAgfAp8IFVuaXZlcnNpdHkgb2YgSW93YSBIb3NwaXRhbHMgYW5kIENsaW5pY3MgQWR1bHQgUHN5Y2hpYXRyeSBTZXJ2aWNlcyBDbGluaWMgIHwgMzUzLTYzMTQsIGh0dHBzOi8vd3d3LnVpaGVhbHRoY2FyZS5vcmcvUHN5Y2hpYXRyeSAgICAgICAgICAgICAgICB8CnwgU2Vhc2hvcmUgQ2xpbmljIChpbiB0aGUgVUkgRGVwYXJ0bWVudCBvZiBQc3ljaG9sb2dpY2FsIGFuZCBCcmFpbiBTY2llbmNlcykgfCAzMzUtMjQ2NywgaHR0cHM6Ly9wc3ljaG9sb2d5LnVpb3dhLmVkdS9yZXNvdXJjZXMvc2Vhc2hvcmUtY2xpbmljIHwKfCBXb21lbidzIFJlc291cmNlIGFuZCBBY3Rpb24gQ2VudGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMzNS0xNDg2LCBodHRwczovL3dyYWMudWlvd2EuZWR1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFJhcGUgVmljdGltIEFkdm9jYWN5IFByb2dyYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzE5LTMzNS02MDAwIG9yIDgwMC0yMjgtMTYyNSwgaHR0cHM6Ly93d3cudWlvd2EuZWR1L35ydmFwICAgICAgICB8CnwgT2ZmaWNlIG9mIFNleHVhbCBNaXNjb25kdWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzMTktMzM1LTYyMDAsIGh0dHBzOi8vb3NtcmMudWlvd2EuZWR1ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBDb21tVW5pdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDg1NS0zMjUtNDI5NiwgaHR0cHM6Ly9idWlsdGJ5Y29tbXVuaXR5Lm9yZy9jcmlzaXMgICAgICAgICAgICAgICAgfAp8IENvbW11bml0eSAmIEZhbWlseSBSZXNvdXJjZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzUxLTQzNTcsIGh0dHBzOi8vd3d3LmNmcmhlbHBzLm9yZy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cgo8dT5JZiB5b3Ugb3Igc29tZW9uZSB5b3Uga25vdyBpcyBjb250ZW1wbGF0aW5nIHN1aWNpZGU8L3U+LCBlaXRoZXIgY2FsbCBvciB0ZXh0IHRoZSBTdWljaWRlIGFuZCBDcmlzaXMgTGlmZWxpbmUgYXQgOTg4LCBvciBjYWxsIDkxMS4KCiMgRGlzY2xhaW1lciB7I2Rpc2NsYWltZXJ9CgpUaGlzIHN5bGxhYnVzIGlzIHN1YmplY3QgdG8gY2hhbmdlLgpBbnkgY2hhbmdlcyB3aWxsIGJlIGRpc2N1c3NlZCBpbiBjbGFzcywgdmlhIGVtYWlsLCBhbmQvb3Igb24gSUNPTi4K