1 Mission Statement

1.1 External Mission Statement

We are striving to improve the health and well-being of families and communities by conducting research to advance the understanding of human development.

Date drafted: May 2018

1.2 Internal Mission Statement

As members of the Developmental Psychopathology Lab, we strive to create, maintain, and improve a fun and collaborative culture. We commit to bettering ourselves and others through respect, hard work, ethical practices, support, and meaningful, lasting relationships. As a team, we cultivate a supportive environment for a free exchange of ideas and embrace the value of failure to foster personal and professional growth.

Date drafted: August 2018

1.3 Diversity Statement

We seek to include members of various cultural, ethnic, and socioeconomic backgrounds so that our research might best represent the families which make up our diverse communities. We aim to provide a welcoming and respectful environment for people of all backgrounds.

Date drafted: October 2020

2 Lab Glossary

DevPsy Lab
shorthand for Developmental Psychopathology Lab
RA
research assistant
E
experimenter
TC
target child, or the child participant
PC
primary caregiver, often a child’s parent
coding
the term means different things depending on the context. In our lab, we use “coding” as a shorthand to refer to “behavioral coding from video,” which involves assessing a construct from video observation to turn the video segment into numbers that can be analyzed. This is distinct from computer programming, which is another type of coding.
RTFM
Read the ******* manual
RTFC
Read the ******* checklist

3 CITI Certification

Before you can interact with any data in the lab (including observing visits) you must be certified on human subject research protocols. This means completing the CITI training, which will upload to the IRB. You will need to complete the Group 1 – Biomedical Research – IRB-01 course. Instructions are below. If you have questions, please follow this link: https://hso.research.uiowa.edu/certifications-human-subjects-protections-citi

  1. Enter the CITI program at https://www.citiprogram.org
  2. On the Main Menu screen, under the ‘University of Iowa Courses’ tab, in the ‘My Learner Tools for University of Iowa’ box, select the ‘Add a Course or Update Learner Groups’ link
  3. Select the “I am required to complete human subjects’ research training.” to complete the IRB required course for certification in Human Subjects Protections. Click on the ‘Next’ button.
  4. Select Group 1 –Biomedical Research – IRB-01. Click on the ‘Next’ button.
  5. On the Main Menu screen, under the ‘University of Iowa Courses’ tab, click on the title of the course to enter course.
  6. Click on the ‘Complete the Integrity Assurance Statement before beginning the course’ link and complete. Click on the ‘Submit’ button.
  7. Click on the title of the first module to begin.
  8. Complete all of the required modules.

When you have finished the course, please send the Lab Coordinator a PDF of the completion certificate.

If you have already completed the HSO/IRB certification, just bring/send a copy of your certification. Please note, however, that it must be Group 1 – Biomedical Research – IRB-01.

IMPORTANT: It is likely that you will receive an email from the IRB upon completion of your IRB-01 CITI training asking you to confirm your lab, PI, the study, or that you completed the correct training. This is because it is uncommon for psychology labs to complete the IRB-01 training instead of the IRB-02 training. IT IS CRUCIALLY IMPORTANT THAT YOU RESPOND TO THIS EMAIL. If you do not, it will delay our ability to add you to the IRB project, and thus delay your ability continue RA training.

The basic information they may ask you to confirm is:

Department: Psychological and Brain Sciences
PI: Dr. Isaac Petersen
Which study or training: the IRB-01 study

4 Confidentiality

As part of every participant’s consent process, we promise that we will protect their information. Therefore, it is imperative that all identifying information related to our participants remains confidential. Below are guidelines on how to handle study data and participant information.

4.1 Handling Data

All hard-copy physical research data must remain in the lab. All electronic data should be accessed from the lab, on university computers, or secure private computers. Electronic data should not be accessed on public computers. Identifiable electronic data (including visit videos) should be stored only on the lab’s RDSS share and should not be saved onto your computer.

4.2 No Talking About Participants Outside of Lab

It is important that you not talk about participants outside of lab. Even if you are talking to other RAs or people on our IRB project, you never know who else might hear your conversation. Therefore, you should never use participant names, addresses, physical descriptions, or any other personally identifying information outside of the lab space.

4.3 Photos and Social Media

No one should ever take photos, screenshots, Snapchats, or any other kind of video recording of lab data, including visit videos. Additionally, no data or identifying information should be shared on social media, through email, etc. Even when using Slack to communicate with team members about visits or lab-related tasks, team members should always use TCIDs and waves, which are de-identified, to refer to specific participants/videos.

4.4 Remote Access

RAs should never access lab data remotely without permission or direction from the Lab Coordinator, a graduate student, or the PI. This is to ensure that the RA has received all of the requisite training, instructions, and resources to properly access data remotely. After receiving permission or direction to work on lab tasks remotely, it is critical that all team members follow these basic guidelines:

  • No lab-related data or documents should be saved to your local computer
  • All lab-related data or documents should only be opened when no one else can see your computer screen or hear visit videos. Therefore, if your parents/roommates/friends/etc. are in the room with you and can see or hear the videos, DO NOT OPEN THEM.

5 How to Register Lab for Credit

5.1 Regular Credit

Students who wish to receive credit for time spent in the lab may register for “PSY:3994:01IND – Research Practicum in Psychology”, “HONR:3994:01IND – Honors Research Practicum”, or “URES:3992”. Generally, students enroll in “PSY:3994” or, if they want Honors credit, “HONR:3994”.

URES:3992 is 0-hour and has no tuition or fees associated. It is recommended to enroll in URES:3992 when you cannot take credit-bearing courses (e.g., if you are getting paid, if you do not have the ability to maintain a regular schedule, etc.). URES:3992 is also useful for students in the summer so you do not have to pay the tuition and fees (which you will have to pay if you take a credit-bearing course).

Keep in mind that some courses differ in the way that they are graded.

  • Students receive a letter grade (see the section on Honors Credit) for PSY:4990 and HONR:3994.
  • Students receive a Pass/Fail grade for PSY:3994.

There are several advantages to registering for course credit:

  • Your participation in lab will be included on your transcript, which can look good when you apply to graduate/professional school and jobs
  • If you meet the hours and expectations, it can also help your GPA
  • The 10 hours per week you spend in lab will be accounted for in your course schedule

PSY:3994 Step 1 PSY:3994 Step 2

5.2 Honors Credit

Students who wish to receive Honors credit for participation in lab may register for “HONR:3994:01IND – Honors Research Practicum”. In addition to enrolling on MyUI, you can find the Honors Research Practicum syllabus on the lab drive (to be read and signed by the RA and Dr. Petersen) here: \\lc-rs-store24.hpc.uiowa.edu\lss_itpetersen\Lab\Miscellaneous\Course Syllabi\

If you are completing an Honors project and thesis in the lab, with approval by Dr. Petersen, you may enroll for “PSY:4990 – Honors Thesis Research”. Advantages for registering for honors course credit are:

  • Your work in the lab will be included on your transcript (letter graded), which can look good when apply to graduate/professional school and jobs
  • The 10 hours per week you spend in lab will be accounted for in your course schedule
  • The hours accumulated in the lab can count towards your honors experiential learning (up to 12 semester hours)

Interested students may be able to conduct an Honors project or non-thesis capstone for Honors in the Psychology Major. For information on conducting an Honors thesis/project, see here. Note that conducting an Honors thesis/project is not a requirement for enrolling in HONR:3994.

HONR:3994 Step 1 HONR:3994 Step 2

5.2.1 How to Fulfill the Experiential Learning Requirement for Honors Credit

HONR:3994 and PSY:3994 will appear automatically on your Honors degree audit as fulfilling part of the experiential learning requirement for Honors credit.

A student can still receive Honors credit by registering for URES:3992 or by participating in the lab on a volunteer basis without it showing on their transcript (so long as the student still completes their required 10 hours). However, these semester hours will not count toward the experiential learning requirement unless additional steps are taken.

  1. Complete the Pre-Experience Questionnaire before the semester begins
    1. https://uiowa.qualtrics.com/jfe/form/SV_6SGzYkFp1wQJJit
  2. Complete your lab responsibilities and engage in your 10 hours of research each week!
  3. Complete the Post-Experience Questionnaire after the semester ends (within the next 5 weeks)
    1. https://uiowa.qualtrics.com/jfe/form/SV_d1le3qR9toEIyCF
  4. Submit a Narrative (within 5 weeks of semester end)
    1. This final project is flexible in its formatting, but an essay (the typical choice) should be 500–1,000 words in length. This will allow you to reflect on your experiences and how you grew. A couple images, an author bio, and highlights of your experience are all required components of this piece.
    2. https://uiowa.qualtrics.com/jfe/form/SV_cDaXMAsEr3pHY57

More information on the Honors experiential learning process for research involvement can be found here: https://honors.uiowa.edu/requirements/experiential-learning

6 RA Roles

The Developmental Psychopathology Lab uses a “generalist with specialization” approach—there are some tasks that all RAs are trained to perform, and there are other tasks that RAs specialize in. We have three specialized tracks or roles that RAs can train in after completing basic lab training: Behavioral Testing Specialist, Electroencephalography (EEG) Specialist, and Data Specialist. Every role is important. Placement in these roles depends on each RA’s (a) interests, (b) aptitude, and (c) fit, in addition to (d) the team’s needs. We take into consideration the desired placement of every RA, but ultimately Dr. Petersen and the Lab Coordinator make this determination based on a, b, c, and d from above.

Below are cross-cutting responsibilities that all RAs are expected to contribute to.

Cross-Cutting Responsibilities

  • data entry
  • coding behavioral tasks from video
  • keeping lab clean and family- and child-friendly
  • quality control and improvement
  • helping run visits
  • updating/editing coding manual as needed
  • auditing “Question and Answer” (Q&A) and “Quality Control Improvement” (QCI) documents
  • providing answers to coding questions when applicable

6.1 Specialized Roles

6.1.1 Behavioral Testing Specialist

Below are necessary characteristics and potential responsibilities for Behavioral Testing Specialists:

Necessary Characteristics:

  • works well with 3–7-year-old children and parents
  • positive and cheerful attitude
  • mature
  • able to quickly and easily soothe upset children
  • able to stay calm and composed in the face of pressure
  • able to follow a script with adherence yet flexibility to tailor it to the individual child (based on the child’s age, interests, intellectual capacity, etc.)
  • able to take feedback non-defensively and learn from feedback
  • confidence to remain in control of a chaotic environment

Responsibilities Could Include:

  • serving as an experimenter (E) for behavioral testing (lab visit 1; LV1) visits
  • training new LV1 Es
  • assuring procedural adherence for LV1 (including coaching RA and Camera roles, collaborating with other Es to ensure consistent administration)
  • editing/updating LV1 manual procedures and scripts as needed
  • keeping LV1 observation room stocked and prepped for visits
  • having a lighter focus on coding

6.1.2 EEG Specialist

Below are necessary characteristics and potential responsibilities for EEG Specialists:

Necessary Characteristics:

  • technical skills
  • attention to detail
  • confidence to remain in control of a chaotic environment
  • comfortable trouble-shooting issues with technical equipment (after receiving extensive training); ability to follow strict procedures and guidelines
  • works well with 3–7-year-old children and parents
  • mature

Responsibilities Could Include:

  • serving as an E for EEG (lab visit 2; LV2) visits
  • training new LV2 Es
  • assuring procedural adherence for LV2 (including coaching RA roles, collaborating with other Es to trouble-shoot technical issues and assure procedural adherence)
  • editing/updating LV2 manual procedures and scripts as needed

6.1.3 Data Specialist

Below are necessary characteristics and potential responsibilities for Data Specialists:

Necessary Characteristics:

  • professional communication skills
  • knows the study well (able to describe the study and consent form thoroughly, can answer questions about the study)
  • able to interact well with people in the community for purposes of making connections with schools/preschools/daycares for recruitment
  • highly organized
  • attention to detail
  • technical skills
  • creative for developing recruitment and retention tools and discovering recruitment sources
  • comfortable in connecting with diverse people in diverse places

Responsibilities Could Include:

  • heavier focus on coding, coding tasks with advanced programs (e.g., Datavyu)
  • REDCap additions and edits (upon completion of advanced REDCap training)
  • train new RAs in LV1 RA and Camera roles, and LV2 RA roles
  • help run visits in RA and Camera roles
  • recruitment and retention, including helping to develop/improve current recruitment and retention systems and devising new recruitment and retention possibilities, updating social media pages
  • helping to develop new coding systems

7 RA Advancement in Lab

The DevPsy lab is happy to offer exceptional RAs the opportunity to gain advanced research experience in the form of leadership roles within the lab. Eligibility is at the discretion of the Lab Coordinator and Dr. Petersen.

7.1 Eligibility Criteria

Below are the eligibility criteria for advancement in lab:

  • Has been an active and engaged RA for at least 4 full semesters
  • Has shown a personal interest in the research being conducted in lab/research in general
  • Meaningful and engaging research and leadership opportunities can be helpful in building a CV and research background, but it also can involve considerable work and responsibility. Therefore, prospective Advanced RAs should be self-motivated and have consistently shown that they are reliable and capable of additional responsibility.

7.2 I meet the criteria, what should I do next?

After you have met all the criteria and feel that you are ready to pursue this opportunity, it is your responsibility to set up a meeting with the Lab Coordinator and Dr. Petersen, and to determine what types of responsibilities and projects you would like to lead. You should be prepared to come to this meeting with a thought-out idea of what projects and roles you are interested in given these new responsibilities and privileges.

7.3 Potential Advanced Roles

Some advanced roles that can be pursued include (but are not limited to):

If you are already a Behavior Testing Specialist and want to pursue further advancement to become an Advanced Behavior Testing Specialist:

  • Lead E: training, supervising, quality control (procedural and data audits) for LV1

If you are already an EEG Specialist and want to pursue further advancement to become an Advanced EEG Specialist:

  • Lead E: training, supervising, quality control (procedural and data audits) for LV2
  • Preliminary help with data analyses and data processing (e.g., EEG data)

If you are already a Data Specialist and want to pursue further advancement to become an Advanced Data Specialist:

  • Advanced coding responsibilities, including Datavyu coding, helping develop new coding systems for tasks not currently being coded, etc.
  • If you wish to be trained on Datavyu coding, you must commit to staying in lab at least an additional 3 semesters from when training begins.
  • In charge of recruitment and retention events/opportunities
  • Coming up with new ideas and systems for implementation
  • Contacting organizations to coordinate recruitment
  • Social media, postcards, newsletter, holiday cards, diplomas

7.4 Benefits of Assuming an Advanced Role

Research works for your CV: One of the major perks of this role is that you may be able to pursue a written piece of research (paper, poster, conference presentation, etc.) that can be a great boost for your CV!

Collaborative research projects in the lab: This can take many forms (e.g., poster, paper). You are encouraged to ask a current advanced RA, a graduate student in the lab, the Lab Coordinator, and/or Dr. Petersen about what this may entail.

Reduced availability expectation: advanced RAs are expected to make themselves available 1 night per week & 5 weekend days per semester to train/coach new experimenters/run visits (when needed).

Registering for Advanced Research Practicum in Psychology (PSY:3995): if the RA’s role includes advanced participation in lab-related research projects in such a way that includes significant reading and writing (such as when performing an independent research project), the RA may register for PSY:3995: “Advanced Research Practicum in Psychology”. However, RAs should seek permission from Dr. Petersen before enrolling in PSY:3995.

7.5 A Note About Other Opportunities for Advancement

In addition to opportunities for advancement in lab, there may also be opportunities to conduct independent research projects, to conduct an Honors project/thesis, or to contribute to papers, grants, or conference poster presentations. An important part of professional development is learning to advocate for yourself and to inquire about opportunities that are available. If you are interested in gaining experience in a certain area of lab work, taking on a leadership role, or if you are interested in an opportunity to take on a more advanced role in the project, just ask! There may be opportunities available for RAs to gain experience in specialized areas of lab work (e.g., recruitment of participants, data processing) or even to earn authorship on a paper or poster for an ongoing project. If you are motivated to gain these kinds of opportunities, you are welcome to ask and see what may be available. Advanced projects are given priority to RAs who have shown reliability and commitment.

7.6 A Note About Lab Hours for Advanced Tasks

As mentioned above, there are a number of opportunities to gain advanced experiences in the lab. There may be an opportunity for some experiences to count for lab hours if:

  1. The project is assigned to the RA
  2. The project benefits the overall lab
  3. The RA has demonstrated proficiency in the skills needed to complete the project
  4. The project is not part of an Honors project/thesis, or another independent research experience

For example, our lab leverages R for a variety of tasks. RAs may be able to use R to complete lab projects if they take the time outside of lab hours to tackle the learning curve of R. Furthermore, RAs may have an opportunity to learn how EEG data is processed. These expectations are not meant to discourage RAs from pursuing advanced experiences, but to set expectations for how these experiences can (or in other cases cannot) count for lab hours. However, even if experiences do not count toward lab hours, they are still valuable learning experiences that can advance your professional development in pursuit of your career goals. If you would like to learn more about either of these opportunities, or any others, please reach out to the Lab Coordinator.

7.7 Honors Theses/Projects

For information on conducting an Honors Thesis/Project, see here.

8 Lab Buddy System

Our buddy system is a knowledge-sharing method that we use when onboarding new RAs into the lab. Each new RA is paired up with an existing RA who will guide them through their first weeks in their new role. The exchange of information goes both ways. New RAs are encouraged to share tips, knowledge, and techniques from previous experiences, while the existing RAs makes sure that new lab members feel welcome.

During their first weeks, new RAs can feel very overwhelmed and lost, because they are presented with considerable new information in a short amount of time. Although new RAs typically have the essential skills and interests to succeed in the lab, they are unfamiliar with the work culture, the lab processes, and “unspoken rules1.” While the coding team teaches the RA the coding and entry skills, a lab buddy helps a new RA to ease their transition during the orientation phase and provides guidance and advice in a more informal setting. The goal of the buddy system is that new RAs feel welcome and have someone in the lab they can connect with. New RAs should be introduced to their buddy at the end of their orientation session.

9 Scheduling

9.1 Scheduling System Overview

After course registration at the end of each semester, RAs are to submit their course schedules for the following semester to the Lab Coordinator. If an RA has a strict, set work schedule, this can be included with the course schedule. We will do our best to accommodate work schedules; however, classes (including lab) take precedence over work schedules. The Lab Coordinator will review everyone’s individual schedules and create a lab schedule that best allows visits to be scheduled, while respecting RA course schedules and—as best as possible—other responsibilities. Once the Lab Coordinator has finalized the lab schedule for the semester, they will email each RA their weekly lab schedule. This weekly lab schedule consists of 10 total hours per week. This includes 9 weekly hours of lab time, during which RAs may run visits, help with recruitment, complete data entry and coding tasks, assist the Lab Coordinator with assigned tasks, etc. Additionally, all RAs are expected to attend a one-hour lab meeting every week when the entire team assembles to discuss lab-related issues and science. Once the semester schedules have been sent out to all RAs, it is expected that RAs schedule other events around their scheduled lab hours to the best of their availability (i.e., there are no major schedule changes that would impact an RA’s scheduled lab hours for the semester).

By the first day of the new semester, RAs are expected to submit to the Lab Coordinator their standard weekly availability. This should include all normally occurring weekly availability during which the Lab Coordinator can schedule them to run visits that occur outside of an RA’s normal lab hours. This availability schedule should include at least two available weekday evenings (M–F) per week. The Lab Coordinator will keep a composite schedule of RA weekly availability to use in scheduling visits when additional coverage is needed beyond RA lab schedules. If an RA is scheduled to run a visit during their availability but outside of their normal lab hours, the RA will be notified of the visit details via an invitation to the Outlook calendar event, but the Lab Coordinator will not reach out to them before scheduling to confirm their availability. The RA is expected to accept the invitation to the calendar event in Outlook.

If scheduling commitments come up throughout the semester during any time that an RA submitted as part of their weekly availability, they are responsible for adding it to the shared Outlook “Busy Calendar” (RES-DPL-Busy) so that the Lab Coordinator knows not to schedule them. It is acceptable for an RA’s available evenings to vary week to week, but all RAs are expected to maintain at least two available evenings every week. RAs are responsible for any visit they may be scheduled to run during the availability they provide at the beginning of the semester. Therefore, it is imperative that all appointments and events that occur during their normal weekly availability are shared with the Lab Coordinator via the “Busy Calendar” as soon as possible.

If an RA has been scheduled for a visit during their availability (including available time on weekdays, available evenings, and chosen weekend days), has been notified of this visit, and cannot run the visit due to an unexpected conflict, the RA is responsible for posting on the #scheduling channel on Slack to ask for a cover. It is the RA’s responsibility to let the Lab Coordinator know who will cover the visit. If unable to find a cover, it is the RA’s responsibility to let the Lab Coordinator know by at least 48 hours before the visit.

For information regarding weekend visits, please refer to the section regarding the Weekend On-Call Schedule.

For general information regarding the scheduling expectations for undergraduate RAs of the Developmental Psychopathology Lab, please refer to the section on Scheduling Expectations.

9.2 Weekend On-Call Schedule

9.2.1 Introduction

To ensure that the coverage responsibility for visits scheduled outside of normal lab hours is shared equally among all lab members, RAs are expected to sign up for at least 8 weekend days each semester when they will be “on-call”. Please note, this does not mean that you will be expected to come into lab for every day you sign up. This does mean that if a visit needs to be scheduled on a weekend day, the Lab Coordinator may schedule you to help run that visit without first contacting you to ask if you are available.

You are expected to stay available to run visits on the days you are signed up for until 24 hours prior. The Lab Coordinator will not automatically schedule you for a weekend or evening visit without 24 hours’ notice to lab members. The Lab Coordinator may request volunteers to run visits that are scheduled “last minute” (i.e., within 24 hours), but you are not expected to be available for “last-minute” visits unless they occur during your scheduled lab hours. If a weekend visit is scheduled and you are on-call that day, the Lab Coordinator will tag you in a Slack with the details of the visit.

If you can no longer help run a visit you have been scheduled for, it is your responsibility to find another RA to trade with you. Ultimately everyone is expected to be on-call for at least 8 weekend days per semester (apart from Advanced Specialists; see the section on RA Advancement).

9.2.2 Preparation

To ensure the process is as efficient as possible, please bring your calendar with your weekend availability for the semester. Bring a written list of the weekend days you cannot be on-call for that semester.

9.2.3 Procedure

  1. The Lab Coordinator will set up separate meetings with behavioral testing specialists, EEG testing specialists, and data specialists/new RAs during the first week of the semester. At these meetings, the Lab Coordinator will conduct the weekend scheduling.
  2. Everyone draws a number.
  3. Pass the sign-up sheet around your group from lowest number to highest number, and every RA will sign up for one day per turn. Each round, the order reverses (i.e., snake order). That is, whoever gets the first pick in round 1 gets the last pick in round 2. Continue this process to sign up for days until everyone has signed up for at least 8 days each. Note that this may mean signing up for a day that you are unavailable (in order to sign up for 8 days).
    1. Data Specialists and new RAs will sign up for RA slots—the Lab Coordinator will schedule RA and Camera roles interchangeably (i.e. RAs will be randomly assigned either a Camera or RA role by the Lab Coordinator).
    2. Trained returning RAs (Behavioral Testing Specialists, EEG Specialists, and Data Specialists) should prioritize signing up for visits earlier in the semester first, if possible. When the new RAs complete training for visit roles, they will be able to help with visits later in the semester.
    3. After everyone has signed up for 8 days, RAs will have an opportunity to trade days with each other (see below).
  4. Once this process is complete, the sign-up form will be kept in the Lab Coordinator’s office and remain there for one week. During this one week, RAs will have the opportunity to make any final adjustments necessary (i.e., trade days with other RAs). RAs must notify the Lab Coordinator of any trades/changes to their weekend sign ups within this week. Remember, at the end of the one week, everyone should still be signed up for a total of 8 days, and everyone will be responsible for helping run any visits that may be scheduled on those days.

9.3 Shared Calendars

How to add the shared calendars:

  1. Open your personal Office 365 Outlook calendar
  2. Select “Add Calendar” towards the top of the screen
    1. Select “From directory”
    2. Type in the Directory box:
  3. For the RA Schedule, type: “RES-RA-LC-Sched” ()
    1. Select “Open”
  4. For the Participants’ Schedule, type: “Developmental Psychopathology Lab” ()
    1. Select “Open”
  5. For the RA Availability Schedule, type: “RES-DPL-Busy” ()
    1. Select “Open”

Here is a description of the different calendars and instructions how to use them:

  1. RES-RA-LC-Sched
    • This calendar has your individual schedule in the lab. It is color-coded by RA. You can view but not edit this calendar. Changes to this need to be discussed with the Lab Coordinator and/or Dr. Petersen.
  2. Developmental Psychopathology Lab
    • This is the general lab calendar. It has lab events (e.g., participant visits, lab meeting, recruitment events). You can view but not edit this calendar.
  3. RES-DPL-Busy
    • This is where you are expected to mark yourself as unavailable for any scheduling commitments that come up during the weekly availability you submitted at the beginning of the semester, this includes time you may be taking off from your normal scheduled hours. Thus, if you are going to be unavailable during your regularly scheduled hours you must update this calendar. To do so, you will create a calendar entry that is titled “[Your Name] Busy” and add the current LC as a required attendee. This will notify the LC of your request for time off and allow them to accept or decline the request. Additionally, you must put in the description the reason for why you are not available during your regularly scheduled hours (i.e. over hours, doctors appointment). If your request is within 48 hours of the day you wish to be off, you must create the calendar entry AND slack the current Lab Coordinator in the #lab-time channel.

9.4 TimeClock

OpenTimeClock2008 is the program we use for keeping track of RA lab hours. Each RA is expected to clock in before beginning lab-related work (including running visits, but if you come in early to each lunch, visit with other RAs, or anything else NOT lab work-related, then do not clock in until you are ready to work), and to clock out when they have stopped lab-related work (e.g., if you leave to get lunch, please clock out then clock back in again when you return to work). The Lab Coordinator will add you to the system using your HawkID. To set up your profile the first time you use the program, follow the steps below:

  1. Click the TimeClock shortcut on your lab computer desktop (or go to https://www.opentimeclock.com/2008/free.html).
  2. In the “Company Name” textbox, type devpsylab and click the blue “Sign In” button
  3. Enter your HawkID in the “Username” field and click the “Login” button.
  4. Go to “My settings” at the top of the page.
  5. Check the “Change password” box, and create a new password in the subsequent boxes (i.e., “Current password” which can be left blank as you will not have a password until you set one up for yourself, “New password,” and “Confirm new password”). Then click the “Save” button.

NOTE: If a pop-up window appears asking if the website can have permission to access your location, be sure to click yes or accept. TimeClock login is GPS-restricted, so the program may not work if it is not allowed to verify your location.

To use this program to view your current hours for the semester:

  1. Login to your account and click on “List view” at the top of the page.
  2. Filter your days worked by adjusting the dates at the top left of the screen to encompass the current semester (either by typing in the relevant dates, or by using the dropdown calendars by clicking the calendar icons).
  3. Once you have selected the target timeframe, look at the top right-hand side of the screen above the table. There, you will find text that reads “total hours,” and should list your total time clocked-in in hours and minutes. If you are unsure of how many total hours you need for a semester, ask the Lab Coordinator.

10 The Basics of Lab

10.1 Lab Meetings

Lab meetings will take place once per week at a pre-determined time. The Lab Coordinator will choose the weekly lab meeting time based on everyone’s schedules and will try to schedule the meeting for a time when all lab members are available. Lab meeting is the most important time that the team has together every week, because it is the only time that everyone is present, and it helps everyone stay on the same page as part of working as a team. Attending lab meeting is mandatory.

The lab meeting is generally divided into two sections:

  1. The first 15–30 minutes of the meeting is reserved for lab announcements, as well as any updates or questions about the study. If you have questions or suggestions, please raise them.
  2. The second half of the meeting is reserved for an article discussion or a professional development workshop.

10.1.1 Article Discussion

Each lab meeting (with the exception of the meetings reserved for professional development workshops), an RA is expected to lead the discussion of a peer-reviewed, empirical research article of their choosing that is related to the interests (broadly defined) of the Developmental Psychopathology Lab. Article discussions serve several purposes:

  • in the spirit of getting course credit for lab experience, article discussions provide a seminar forum for learning about science
  • article discussions help students connect the work they are conducting in the lab to the broader scientific field
  • they help students gain greater skill in reading and critiquing scientific articles, which helps people be more critical consumers of information in society
  • they provide a space to explore scientific ideas and the potential practical implications of science
  • they provide opportunities to gain skill in leading a discussion, which is an important public-speaking skill
  • they provide opportunities in learning to digest complex concepts and to communicate them in a way that is understandable and relevant to others
  • they provide a nonjudgmental space to get out of your comfort zone and to grow intellectually and professionally

RAs will sign up to lead discussion of an article on the Lab Meeting Article Sign-Up Sheet (shared via OneDrive or during lab meeting) during the first week of classes. If there are fewer days available than there are RAs, priority is given to newer RAs or to RAs who have had fewer opportunities to lead the discussion of an article. All lab members are expected to contribute to each discussion.

By Monday of the week the article will be discussed, the RA picking the article should post 1) the article PDF (the actual PDF file of the article, not the URL link to the PDF) and 2) the full APA-style reference in the #lab-meetings channel on Slack. For more information on how to find and access articles, see here. For more information on APA formatting, see the resources on the lab drive: \\lc-rs-store24.hpc.uiowa.edu\lss_itpetersen\Lab\Miscellaneous\Professional Development\General ProfDev Materials\APA Formatting\

The RA who is leading the discussion of the article should structure the discussion following the format below:

  1. Provide a brief explanation of why you chose the article.
  2. Present a brief summary (~2–3 minutes) of the article’s main points (it is not a book report!), in which you describe the study and its key findings.
  3. Spend the majority of the time (~20–25 minutes) posing questions to elicit discussion. The questions should not be too vague (e.g., do not ask “What did you think of the methods?”), but instead should be specific and aim to elicit an interesting and critical discussion. You can also mention critiques you have, but keep it as question-oriented as possible to elicit discussion.
  4. Save time (~10 minutes) for big-picture questions pertaining to the implications of the findings for science/practice/policy/life, etc.

10.1.2 Lab Meeting Scribe

An RA will be designated (usually on a volunteer basis) each semester to be the lab meeting scribe. The scribe is responsible for taking notes throughout the meeting. The scribe also sends a brief summary of the important information from the meeting to the entire team via the #lab-meetings channel in Slack after the lab meeting has ended. The scribe also adds the summary to the “Lab Meeting Agendas – Team” in the lab’s OneDrive.

10.1.3 Attendance and Absence Policies

All members of the team are expected to attend every lab meeting. If an RA is unable to attend a meeting, they are responsible for letting the Lab Coordinator know as far in advance as possible so that the Lab Coordinator can work with the RA to arrange how they will make up the time. They are also responsible for emailing several detailed questions or comments on the article to the presenting student AND to the lab email () by the day before the meeting to help contribute to the discussion. If advanced notice is not possible, contact the Lab Coordinator as soon as you are able to and explain the absence. The RA is also responsible for reading the lab meeting agenda and summary notes after the meeting to learn what they missed.

10.2 Lab Communication

Forms of lab communication are described below. Please use Slack for as much communication as possible! Keeping lab-related communication on Slack helps our team work most effectively and efficiently, and it saves time for the Lab Coordinator, Dr. Petersen, and your team members because it allows other RAs to answer questions and allows people to jump in to provide corrective feedback, as necessary.

  1. Non-private lab-related communication (almost all communication)
    • Use Slack
      • See the Slack Checklist
      • Feel free to send messages and you can notify particular people if the message is for particular people (@isaac-petersen).
      • You can send pictures and attachments in Slack by using the plus sign next to the message.
      • Slack communication can be informal! We want it to be a fun place to communicate and chat with the team. Feel free to post memes, set up lab-wide social gatherings, etc.
  2. Private lab-related communication
    • Send to:
      • Examples: Sending your course schedule for the upcoming semester, notifying Lab Coordinator of an absence due to personal reasons/illness, asking Lab Coordinator for a reference, responding to an email that the Lab Coordinator sent to you.
  3. Communication directed specifically to Dr. Petersen rather than to the lab (e.g., to set up a meeting to discuss career goals, honors projects, etc.)
  4. Communication directed to the past members of the lab (e.g., to setup a social gathering)
  5. Communication directed to the public (e.g., to communicate results from a published study)

10.2.1 Resolving Conflicts and Personnel Issues

It is inappropriate and unprofessional to gossip about lab personnel (i.e., complaining about someone behind their back to other RAs). If someone gossips to you about concerns/conflicts/complaints with lab personnel, please ask them to deal with the person directly, or to address the issue directly with the chain of command (see below).

If the conflict/personnel issue is with a peer, the first step is to attempt to address the problem with your peer directly. If the conflict/personnel issue is with a peer, and you are unable to resolve the problem or you feel that this first step would be too difficult or uncomfortable for you, then please bring this to the attention of your direct supervisor (graduate student, postdoctoral student, or Lab Coordinator). If the conflict/personnel issue is with your direct supervisor and you are unable to resolve the problem or you feel that this first step would be too difficult or uncomfortable for you, then please bring this to the attention of your main supervisor (Dr. Petersen). Please express personnel concerns directly (in person or by email). Do not put personnel grievances in lab reports. We encourage you to express concerns to the chain of command if you feel the issues impair your or the team’s functioning.

10.2.2 Slack

10.2.2.1 Getting Started

  1. Download the “Slack” App to your mobile phone (it is free!)
  2. You can also access Slack on any internet browser (https://slack.com)
  3. Create an account with your university e-mail and a password you will remember
  4. Enter the workspace URL “devpsy-lab.slack.com” (the Lab Coordinator should have added you to the workspace prior to your start in lab as part of your onboarding)
  5. Make sure to add yourself to all the following “Channels”
  • #announcements
  • #coding-scoring
  • #data-entry
  • #data-specialist
  • #good-news
  • #irb
  • #lab-admin
  • #lab-design
  • #lab-meetings
  • #lab-time
  • #measures
  • #opportunities
  • #procedures
  • #quotes
  • #random
  • #recruitment
  • #research
  • #redcap
  • #scheduling
  • #visits
  • #website-socialmedia
  • #wiki

10.2.2.2 How/When to Use

  1. Channels: All channels are a certain category or topic of conversation so that it is easier to locate previous discussions relevant to that topic
    1. To notify specific people in your message, type “@” and then enter in their username before typing your message (usernames are located on the left side of the screen)
      1. @everyone notifies everyone (only admins can use)
      2. @channel notifies everyone in the channel
    2. #random: Use this channel if you are running late to lab, or if you have a question or comment that does not fall within the other channel categories; can also put memes or random funny things here!
  2. Attachments: Send pictures and attachments by clicking the plus sign next to the message
  3. Direct Messages: Do not use direct messaging in Slack. If you need to communicate privately with the Lab Coordinator or Dr. Petersen, please use email (see the section on Lab Communication for more information)

Slack channels are meant to organize conversations within broad overarching topics, but within each channel we want diverse conversation to span the gamut of each topic. For example, the #coding channel should include conversations ranging from discrepancies between two coders on a given task, to technical discussions about Datavyu, to general questions to the Lab Coordinator and Dr. Petersen about the constructs measured in a given task, to all of the procedures, systems, and programs in between. Think of each channel as a “theme” rather than a specific “topic of conversation.” You should simply choose the channel that seems most relevant to the question or comment you want to share and have at it! It is important to remember that, even though different team members are assigned different tasks within the lab, it does not mean that it is any less important for the whole team to stay informed about the general projects of the lab. We are all collaborating on the same project, on the same team, and working toward the same general goals.

10.2.3 Trello

  1. Log on to https://trello.com using your username and password
  2. On the “RAs” Board, there are categories of items that are performed in our lab
    1. Each of these categories has a list of cards with a title
      1. Within these cards, you can comment on what needs to be done, ideas for the titled item, etc.
      2. Members, due dates, attachments can also be added; to assign a person to work on a card, add them to members
      3. To notify specific people in comments, use @username
    2. If you would like to add a card to the desired category, you can go to the bottom of the column and click on ‘Add a card…’
  3. When working on a card, move the specific card to the ‘Doing’ category, so that others know you are working on that task
  4. When the task is completed, and does not need to be followed up by another person, move the card from ‘Doing’ to ‘Done’
  5. When you are assigned a task in Trello that requires another labmate to follow-up:
    1. The 1st person is assigned task (member 1 icon shows on card)
    2. 1st (member 1) completes task (i.e., enters questionnaire)
    3. 1st assigns a reviewer (member 2 icon shows on card)
    4. Reviewer makes comments and removes their icon—signaling to 1st that task is ready for updates
    5. 1st reads comments and makes updates
    6. 1st assigns final reviewer (member 3 icon shows on card)
    7. Final reviewer makes additional comments and removes icon (signaling member 1 that changes have been reviewed and is ready for final updates) OR determines that task is complete and moves card to DONE column.

10.2.4 Social Media

The purpose of our social media pages is to inform the outside world of our research. One to two members of the Data Specialist team are responsible for creating posts. All posts must be approved by the Lab Coordinator.

10.2.4.1 Facebook

Private Facebook Group

The purpose of this private group is to communicate with past and future RAs, as well as to organize fun activities outside of lab.

  1. Log on to https://www.facebook.com using your email and password
  2. Go to ‘Groups’
  3. Click on ‘Developmental Psychopathology Lab’ (https://www.facebook.com/groups/1483289471691634)
  4. You will have to request permission to join the group
  5. Once you have been added to the group, you can access the discussion, the members, events, and photos shared to this group

Public-Facing Facebook Page

The purpose of this page is to inform the outside world about the research, inform about changes (e.g., safety precautions, new team members) and provide updates (e.g., new research findings, conferences, grants, events in the lab).

  1. Log on to https://www.facebook.com using your email and password
  2. Like the lab page: https://www.facebook.com/DevPsyLab

10.2.4.2 Twitter

The purpose of this Twitter account is to post updates with the outside world about things we are working on in the lab. We invite everyone to follow us on this platform, so we can get the word out about what we do!

  1. Log on to https://twitter.com using your personal credentials
  2. Follow @devpsylab (https://twitter.com/devpsylab)

10.2.4.3 Instagram

The purpose of this Instagram account is to post updates with the outside world about things we are working on in the lab. We invite everyone to follow us on this platform, so we can get the word out about what we do!

  1. Log on to https://www.instagram.com using your personal credentials
  2. Follow @devpsylab (https://www.instagram.com/devpsylab)

10.3 Lab Documentation

We strive to maintain accurate, detailed, and step-by-step manuals or checklists for all lab procedures. Written documentation is important for many reasons, including that it facilitates training, reduces the likelihood of human error, allows us to share our processes with others, and increases replicability. If we are missing written documentation for something, please let us know and help us create a manual or checklist!

Just as important as creating written documentation is using it! Checklists to remind surgeons to wash their hands significantly reduce infection rates (archived at https://perma.cc/4Q62-ER5T); we are doing much more complicated work than washing hands, so it is crucial to follow our manuals and checklists. When you are training in a new procedure, do not rely just on what other RAs tell you. Despite their best efforts to help you, RAs may sometimes describe procedures incorrectly to you, and it is important to follow what is in the manual. If something is missing, incorrect, or out-of-date in the manual, please let us know so we can fix it.

10.4 Lab OneDrive

We have an online folder shared with the team through Office 365 OneDrive. In order to access this folder, you have to first be granted permission by Dr. Petersen or the Lab Coordinator (which should happen as part of your onboarding when you first join the lab). Once you have permission, you can access the folder here: https://iowa-my.sharepoint.com/personal/itpetersen_uiowa_edu/_layouts/15/onedrive.aspx?id=%2Fpersonal%2Fitpetersen%5Fuiowa%5Fedu%2FDocuments%2FResearch%2FLab%2FOneDrive

This folder contains three subfolders:

  1. “For RA Edit”: The documents in this folder allow for editing by all team members. This folder includes:
    • Lab Meeting Agendas – Team.docx: This is the running agenda for our weekly lab meetings. Every week, the lab scribe will add detailed meeting notes to this document
    • Lab Meeting Article Sign-Up.docx: This document is used by every RA at the beginning of every semester to sign up for the day they lead the article discussion. RAs can then access it throughout the semester to check which day they are scheduled to present on, but should not alter their sign-up day without first obtaining permission from the Lab Coordinator
    • Task Timing Sheet.xlsx: This Excel document is used by all RAs to record their coding progress (see Coding Manual for more information)
  2. “For RA View”: The documents in this folder allow for read-only access by all team members.
  3. “Lab Reports”: This is where you should save your bi-weekly lab reports throughout the semester. Lab report folders can only be accessed by the RA who owns it, the Lab Coordinator, and Dr. Petersen. Each lab report folder has a subfolder named “Past Lab Reports_HawkID” which should be used to archive old lab reports—in other words, every time you save a new lab report to your root lab report folder, you should move the previous one to the “Past Lab Reports_HawkID” folder.

10.5 Lab Drive

#1 Rule: Never delete any documents or data without explicit permission from the Lab Coordinator, graduate students, or Dr. Petersen first.

If there is an old or outdated document, like an outdated checklist or an old coding form that has since been re-coded, do not delete it. You may move it to an “00-Old” folder (see Folder Designations below), or, if you are unsure where it should be saved, consult your fellow lab members or the Lab Coordinator.

10.5.1 File Naming Conventions

Because the Lab Drive contains so many files across so many different tasks, TCs, and areas of the research process, it is imperative that all files are carefully named following a descriptive, standardized naming convention. All file names should be ALL lowercase, except when using the following established lab abbreviations: LV1/2, or T1/2/3/4, or TC/PC/PP/SC.

  • For visit-related files in “Coding”, “Entry”, and “Payment” folders, the file name should include: TCID, wave, and task/document type (e.g., 1000_36_consent).
  • For files within “Coded Data”, coding form files should also include which coder the form is from (e.g., 1000_36_grasssnow_coder1).
  • For files within “Scoring”, scoring form files should also include which scorer the form is from (e.g., 1000_36_maps_scorer1).
  • For visit-related files within “Payments”, file names should also indicate which visit or caregiver the receipt is from (e.g., 1000_36_receipt_LV1, 1000_36_W9_SC).
  • Any IRB documents in the IRB folder (\\lc-rs-store24.hpc.uiowa.edu\lss_itpetersen\Lab\Studies\School Readiness Study\IRB\) that are stamped with an expiration date (e.g., recruitment materials, consents) should also indicate the year in which they are valid (e.g., informedconsent_2018). When these materials expire, they can be moved to the “00-Old” folder within the relevant parent folder.

10.5.2 Folder Designations

Old: This file designation is used to store versions of documents that are outdated—this applies both to previous versions of active, updated documents as well as documents that are no longer in use.

Admin: This file designation is used to store miscellaneous admin-related documents (e.g., spreadsheets, checklists, etc.) that cannot logically be placed in another folder within the same parent folder. These folders are not meant to be a “junk drawer” to deposit new files, rather they are a clearly identifiable home for important files that do not have another obvious home, so they are not loose in a parent folder. If new documents are created that could logically be paired with a document in a 01-Admin folder, then do create a new folder and move the related file from 01-Admin into the new folder with its related documents. If a new folder needs to be created, contact the Lab Coordinator.

A Note About Creating New Folders:

The RA should ask the Lab Coordinator, Dr. Petersen, and graduate students before creating a new folder within the Lab Drive. RAs are able to create new TCID folders in their check data folders of their coding or entry task, as well as any new folders within their personal folder on the drive.

10.5.3 RA Folders

For every RA who joins the lab, we create two folders that are only theirs to use: their member folder and their lab report folder. Member folders and lab report folders are named using the RA’s HawkID.

10.5.4 Member Folders

Member folders can be found on the lab drive here: \\lc-rs-store24.hpc.uiowa.edu\lss_itpetersen\Lab\Members\

Member folders should be used for any lab-related work (excluding lab reports). They can be accessed by anyone in lab, including other RAs, so it is not advisable to save any personal or confidential documents within a member folder. However, if you ever work on a lab-related project (e.g., recruitment material, helping to develop a new task or coding system, etc.) any relevant documents should be saved in your member folder. When RAs graduate from the lab, these folders are archived so if we ever need to go back and find documents used in previous projects we have them saved.

10.5.5 Lab Drive Directory—Frequently Used Folders

Members Individual RA files, by HawkID
Miscellaneous Professional Development
RAs RA Lab Hours Folders are broken down by Semester and Year, and include RA Lab, Availability, and Weekend On-Call Schedules
RA Task Assignments Folders are broken down by Semester and Year, and include Coding, EntryCheck, and Lab Cleaning Schedules
Studies School Readiness Study Coding
Data
IRB
Payment
Procedures
Recruitment
Scoring
Videos
Training Orientation Checklists
REDCap Videos
PDF text versions of video training information, by topic
Website Photos Banner
Pictures
Tabs

10.5.6 Google Drive

Sometimes, the lab creates documents in Google Drive for purposes such as sharing, professional development workshops, etc. So the lab retains access to these documents, please transfer ownership to Dr. Petersen when creating them. To transfer ownership, right click the document, click “Share”, add Dr. Petersen (), and select “Transfer Ownership.”

10.6 Lab Access / Keys

Sometimes when visits occur outside of normal lab hours (M–F, 9AM–5PM), the Lab Coordinator is unable to be present to open lab or lock up. In these situations, it is permissible for RAs to open or close the lab on their own (provided the Lab Coordinator has requested/approved this). When this happens, the RA can retrieve the lab key from the lockbox or from the Department. If the RA is unable to retrieve the key from the lockbox, follow the steps below:

  1. WHERE to get keys to open the lab:
    1. The RA can access the key lockbox on the lab’s entry door so that all RAs assigned to help with a visit during the Lab Coordinator’s absence can access the lab
      1. If the Lab Coordinator or graduate students are in the lab and their door is open, they are more than happy to lend their key to open lab doors.
        1. The key lockbox passcode is changed every semester—the Lab Coordinator will provide RAs with the current passcode as needed
        2. If the key lockbox was used, the spare lab key should be returned to the key lockbox after the lab is fully locked up (see below) so that RAs on other visits can access the lab as well
    2. If the RA cannot retrieve the lab key from the lockbox (for whatever reason), you can retrieve the key from Carrie Whittaker, who sits at the front desk in the PBS department main office (G60 Psychological and Brain Sciences Building)
      1. If lab keys were taken from the department, return to Carrie when done
    3. The Spare Lab Key: BAA35 = All doors to the suite (Rooms 109–119)
  2. HOW to Lock Up:
    1. If you are leaving the lab and no one else is in the lab make sure to lock:
      1. All doors using key BAA35
        1. RA and Coding rooms
        2. All testing and observation rooms
        3. Kitchen space
        4. Waiting room
        5. Exterior door in the hallway
    2. Return keys to appropriate location—e.g., to the lockbox, to the Lab Coordinator, or to Carrie (wherever it was taken from)—and be sure to lock the lockbox.

10.7 Phone Procedures

  1. When the phone rings, and the Lab Coordinator is unavailable, it is the RA’s job to answer the phone.
  2. Upon answering the phone, say, “Developmental Psychopathology Lab, this is _____ [your name]”.
  3. If the person has any questions, answer them to the best of your ability
    1. If you do not know the answer, ask one of the other RAs, the Lab Coordinator, or Dr. Petersen
    2. If you still do not know the answer, write down their question on the “While you were out” cards, and let them know that we will call them back as soon as possible
  4. If the person is looking for the Lab Coordinator or Dr. Petersen, let them know that they are unavailable, but you can take a message if they would like.
    1. Write who called, and their message, on the “While you were out” cards that are next to the phone in the RA room.
    2. If they would like to call back later, and you know when they (the Lab Coordinator and Dr. Petersen) will be back, let them know when would be a good time for them to call back

10.8 Bi-Weekly Lab Reports

Lab reports serve important purposes:

  • they provide a channel of communication between you and Dr. Petersen
  • they help you gain experience and practice with writing, which is important for many careers
  • they provide an avenue for you to make suggestions that can help improve the lab and study. (Of course, you can make suggestions to the team in other ways, too.)

Follow these instructions when submitting lab reports:

  1. Lab reports are due by 5pm on Friday every other week throughout the semester.
  2. Write the lab report in Microsoft Word and save it as a .docx file. This is important so that Dr. Petersen can comment on the file.
  3. Save the reports to the the folder with your HawkID in the “Lab Reports” folder:
    1. https://iowa-my.sharepoint.com/personal/itpetersen_uiowa_edu/_layouts/15/onedrive.aspx?id=%2Fpersonal%2Fitpetersen%5Fuiowa%5Fedu%2FDocuments%2FResearch%2FLab%2FOneDrive%2FLab%20Reports&view=0
    2. Name the lab reports so that they are ordered by date (e.g., Lab Report_2017-12-31.docx).
    3. When saving lab reports, please leave only the newest lab report in the main folder—your old lab reports should be moved to the “Past Lab Reports_hawkID” folder within your personal lab reports folder.
  4. Bi-weekly reports include:
    1. A brief description of what you worked on the last two weeks
    2. What you have found interesting and why
    3. Questions you have
    4. Suggestions you have
  5. In general, you do not need much discussion of what specifically you worked on (2–3 sentences is fine). Dr. Petersen is most interested in what you have found interesting (and why), and any questions or suggestions you have.
  6. Reports should be a full page, double-spaced.
  7. Dr. Petersen will read and comment on your reports. Please review his comments and feel free to address anything he raised with him or with the Lab Coordinator.
  8. After reviewing the comments, put the prior lab report into your “Past Lab Reports” folder.

Notes:

  • If you have concerns about individual(s) in lab, please let the Lab Coordinator or Dr. Petersen know directly (in person or by email). Do not put personnel grievances in lab reports.

10.9 Tips and Tricks for Interacting with Children in Lab

10.9.1 When Interacting With Families in the Lab

We strive to ensure families are as comfortable as possible in the lab. We want to be non-judgmental. Families should not feel like they are being tested. If a family feels they are being tested, they may also feel they have failed if a task does not go as expected. For example, if we instruct a parent not to let their kids touch the toys and the kid does, we leave open the possibility a family could be embarrassed.

If a family asks you a question such as:

“Do you ask us to stop our kids from touching the toys to see if they will do it?”

Our response could be:

“We want to simulate as close to a home and school environment as we can. We just ask that you act normally.”

10.9.2 How to Give Praise

Syntax: Praise + Effort + Specific

Acknowledging:

  • “I know this game is hard.”
  • “I know this game is tricky.”

Praise:

  • “Thank you for”
  • “I appreciate”
  • “I really like”
  • “I notice”
  • “I can see”
  • “I can tell”
  • “I’m so impressed”
  • “I’m proud of you for”
  • “I’m so happy with you for”
  • “I like it when”
  • “Way to”
  • “Nice job”
  • “You’re doing a nice job”
  • “That’s a great way to”
  • “You should be proud of yourself for”
  • “It’s nice that you are”

Effort:

  • “doing your best”
  • “trying so hard”
  • “working so hard”
  • “your effort”
  • “getting through those”
  • “concentrating so hard”
  • “kept playing”

Specific:

  • “sitting so still like a statue”
  • “sitting so quietly”
  • “catching the fish”
  • “not catching the sharks”
  • “sorting the flowers”
  • “not touching the mushrooms”
  • “sorting the apples”
  • “not touching the worms”
  • “sorting the sheep”

10.9.3 How to Guide Children Through Difficult Tasks

10.9.3.1 DOs

The following are “Do”s when working with children in the lab:

  • Build rapport early
    • Use comments and compliments more than questions; questions can be perceived as commands
    • Comment on things they like (e.g., their shoes, hair, shirt, favorite superhero)
    • For anxious children: they will know you are safe by judging their parents’ cues, so for an anxious/clingy child, first build rapport with parent and then it will be easier to build rapport with child after they know you’re safe
  • Make sure the chair is not too big for the child (i.e., their feet solidly reach the floor)
  • Make it into a game!
  • Use high positivity and energy: be like a “preschool teacher on crack” (in EEG especially)
    • Both in terms of verbal AND nonverbal techniques
  • Focus on the child rather than the script in the EEG visit
    • What you say matters less than how you say it (as long as you correctly explain the rules)
  • If the child is not doing what you want, focus on what you expect them to do instead of what you do not want them to do
    • “Here, hold this toy” or “Keep your hands on the table” instead of “Don’t touch the…”
  • Use specific praise (“Nice job sitting so still!”) rather than general praise (“Nice job!”)
  • Praise effort, not outcome
    • “Thank you for trying so hard on these” instead of “Nice job answering these”
  • Use distraction and redirection (e.g., talking to the child about the movie when putting on the EEG net)
  • Model appropriate behavior
    • Sit and watch the screen during the task
  • Help the child feel more comfortable with the task
    • Put the EEG cap on yourself (or on a parent)
    • Let them touch the EEG cap
  • Give them choices we’re okay with
    • “Would you rather wear the red cape or the blue cape?”
  • Use Grandma’s Law:
    • “When you finish catching the fish, you can have some candy.”
    • “First sit down in your chair, and then we’ll play the game.”
  • Have the child take breaks
    • physical exercise (e.g., doing wiggles or jumping jacks) or playing a game can help children re-focus
  • Give the child juice/candy/snacks (if the parent is okay with that)

10.9.3.2 DON’Ts

The following are “Don’t”s when working with children in the lab:

  • Don’t ask commands in the form of a question (“Can you sit up in your chair?”)
    • Instead: Be polite but firm. (“Sit up in your chair” or “Please sit up in your chair” or “Let’s sit up in your chair.”)
  • Don’t frame things in the negative (or the absence of negative)—i.e., don’t provide reassurance (“It’s going to be okay” or “It’s not going to hurt.”)
    • Instead: frame things in the positive (“Let’s put on the special ocean cap to be just like Jamie so we can play the fun games!”)
  • Don’t ask yes/no questions to “no birds”
    • Instead: Give them choices we’re okay with (see above)
  • Don’t focus on the child’s distress and/or apologize
    • Instead: Distract, redirect, and be positive—children respond to your verbal and nonverbal cues!

10.10 Participant Payment

10.10.1 Rules

  1. Cash is the preferred method of payment (lab participants/PC only)
  2. Checks will be arranged as compensation for PP and SC when they complete the online questionnaire
  3. Participants will be compensated according to the escalating payment schedule
  4. Participants/PCs may be compensated for parking
  5. Payment to PP and SC only processed after the questionnaire is verified as completed
  6. All payment documents must include TCID, Wave, and date of service.
  7. No documents should ever contain participant SSN’s (unnecessary for our level of compensation)

10.10.2 Payment in Cash Issued to PC/Participant in the Laboratory

  • Each day, the Lab Coordinator will place individual payments in sealed envelopes with the TCID and Wave labeled on the envelope. This envelope will only include compensation for the lab session in which they participate, not compensation for parking.
  • A separate envelope with exactly $10 in $1 bills will be kept in the file drawer where the locked cashbox resides. This money will be designated for parking compensation. If this cash is added to the participant’s compensation on a given day, the TCID, date, and amount needs to be written on the extra cash envelope, and this amount should be reflected on payment receipts.
  • After payment has been made, relevant data will be entered in the Excel spreadsheet ledger (in the payments folder in on the lab drive). The Lab Coordinator is responsible for entering cash data in the ledger.
  • Each participant and the RA will sign a payment receipt form confirming that they received payment. Receipt must include TCID/Wave, data of service, amount distributed, and signatures of both participant and RA handling payment.

11 Professional Development

One of the goals of our lab is to advance the career and professional goals of our team members. We provide many professional development-related resources on the lab drive in the following location:

\\lc-rs-store24.hpc.uiowa.edu\lss_itpetersen\Lab\Miscellaneous\Professional Development\

The resources include resources on applying to graduate school, internships, postbacs, and medical school, comparing different mental health fields (e.g., clinical psychology, counseling psychology, school psychology, clinical mental health counseling, marriage and family therapy, social work), how to find programs, and resources on academic skills (e.g., reading scientific articles), cover letters, CVs/resumes, personal statements, standardized tests (e.g., GRE), and prior lab workshops on topics such as statistics and interviews. Please take advantage of the many resources available to help you succeed. And, if you have helpful resources, please give back by sharing them on the lab drive.

12 Lab Organizational Chart

Lab Organizational Chart
Lab Organizational Chart

  1. Let us know if you perceive any “unwritten rules.” We try to limit implicit (“unspoken”) rules to the extent possible. So-called “unspoken rules” should either be made explicit or they should be removed entirely.↩︎

LS0tCnRpdGxlOiAiTGFiIE1hbnVhbCIKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZSA9IEZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoCiAgZWNobyA9IFRSVUUsCiAgZXJyb3IgPSBUUlVFLAogIGNvbW1lbnQgPSAiIikKYGBgCgojIE1pc3Npb24gU3RhdGVtZW50IHsjbWlzc2lvblN0YXRlbWVudH0KCiMjIEV4dGVybmFsIE1pc3Npb24gU3RhdGVtZW50IHsjbWlzc2lvblN0YXRlbWVudC1leHRlcm5hbH0KCldlIGFyZSBzdHJpdmluZyB0byBpbXByb3ZlIHRoZSBoZWFsdGggYW5kIHdlbGwtYmVpbmcgb2YgZmFtaWxpZXMgYW5kIGNvbW11bml0aWVzIGJ5IGNvbmR1Y3RpbmcgcmVzZWFyY2ggdG8gYWR2YW5jZSB0aGUgdW5kZXJzdGFuZGluZyBvZiBodW1hbiBkZXZlbG9wbWVudC4KCkRhdGUgZHJhZnRlZDogTWF5IDIwMTgKCiMjIEludGVybmFsIE1pc3Npb24gU3RhdGVtZW50IHsjbWlzc2lvblN0YXRlbWVudC1pbnRlcm5hbH0KCkFzIG1lbWJlcnMgb2YgdGhlIERldmVsb3BtZW50YWwgUHN5Y2hvcGF0aG9sb2d5IExhYiwgd2Ugc3RyaXZlIHRvIGNyZWF0ZSwgbWFpbnRhaW4sIGFuZCBpbXByb3ZlIGEgZnVuIGFuZCBjb2xsYWJvcmF0aXZlIGN1bHR1cmUuCldlIGNvbW1pdCB0byBiZXR0ZXJpbmcgb3Vyc2VsdmVzIGFuZCBvdGhlcnMgdGhyb3VnaCByZXNwZWN0LCBoYXJkIHdvcmssIGV0aGljYWwgcHJhY3RpY2VzLCBzdXBwb3J0LCBhbmQgbWVhbmluZ2Z1bCwgbGFzdGluZyByZWxhdGlvbnNoaXBzLgpBcyBhIHRlYW0sIHdlIGN1bHRpdmF0ZSBhIHN1cHBvcnRpdmUgZW52aXJvbm1lbnQgZm9yIGEgZnJlZSBleGNoYW5nZSBvZiBpZGVhcyBhbmQgZW1icmFjZSB0aGUgdmFsdWUgb2YgZmFpbHVyZSB0byBmb3N0ZXIgcGVyc29uYWwgYW5kIHByb2Zlc3Npb25hbCBncm93dGguCgpEYXRlIGRyYWZ0ZWQ6IEF1Z3VzdCAyMDE4CgojIyBEaXZlcnNpdHkgU3RhdGVtZW50IHsjZGl2ZXJzaXR5U3RhdGVtZW50fQoKV2Ugc2VlayB0byBpbmNsdWRlIG1lbWJlcnMgb2YgdmFyaW91cyBjdWx0dXJhbCwgZXRobmljLCBhbmQgc29jaW9lY29ub21pYyBiYWNrZ3JvdW5kcyBzbyB0aGF0IG91ciByZXNlYXJjaCBtaWdodCBiZXN0IHJlcHJlc2VudCB0aGUgZmFtaWxpZXMgd2hpY2ggbWFrZSB1cCBvdXIgZGl2ZXJzZSBjb21tdW5pdGllcy4KV2UgYWltIHRvIHByb3ZpZGUgYSB3ZWxjb21pbmcgYW5kIHJlc3BlY3RmdWwgZW52aXJvbm1lbnQgZm9yIHBlb3BsZSBvZiBhbGwgYmFja2dyb3VuZHMuCgpEYXRlIGRyYWZ0ZWQ6IE9jdG9iZXIgMjAyMAoKIyBMYWIgR2xvc3NhcnkKCkRldlBzeSBMYWIKOiBzaG9ydGhhbmQgZm9yIERldmVsb3BtZW50YWwgUHN5Y2hvcGF0aG9sb2d5IExhYgoKUkEKOiByZXNlYXJjaCBhc3Npc3RhbnQKCkUKOiBleHBlcmltZW50ZXIKClRDCjogdGFyZ2V0IGNoaWxkLCBvciB0aGUgY2hpbGQgcGFydGljaXBhbnQKClBDCjogcHJpbWFyeSBjYXJlZ2l2ZXIsIG9mdGVuIGEgY2hpbGQncyBwYXJlbnQKCmNvZGluZwo6IHRoZSB0ZXJtIG1lYW5zIGRpZmZlcmVudCB0aGluZ3MgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LgpJbiBvdXIgbGFiLCB3ZSB1c2UgImNvZGluZyIgYXMgYSBzaG9ydGhhbmQgdG8gcmVmZXIgdG8gImJlaGF2aW9yYWwgY29kaW5nIGZyb20gdmlkZW8sIiB3aGljaCBpbnZvbHZlcyBhc3Nlc3NpbmcgYSBjb25zdHJ1Y3QgZnJvbSB2aWRlbyBvYnNlcnZhdGlvbiB0byB0dXJuIHRoZSB2aWRlbyBzZWdtZW50IGludG8gbnVtYmVycyB0aGF0IGNhbiBiZSBhbmFseXplZC4KVGhpcyBpcyBkaXN0aW5jdCBmcm9tIGNvbXB1dGVyIHByb2dyYW1taW5nLCB3aGljaCBpcyBhbm90aGVyIHR5cGUgb2YgY29kaW5nLgoKUlRGTQo6IFJlYWQgdGhlICoqKioqKiogbWFudWFsCgpSVEZDCjogUmVhZCB0aGUgKioqKioqKiBjaGVja2xpc3QKCiMgQ0lUSSBDZXJ0aWZpY2F0aW9uCgpCZWZvcmUgeW91IGNhbiBpbnRlcmFjdCB3aXRoIGFueSBkYXRhIGluIHRoZSBsYWIgKGluY2x1ZGluZyBvYnNlcnZpbmcgdmlzaXRzKSB5b3UgbXVzdCBiZSBjZXJ0aWZpZWQgb24gaHVtYW4gc3ViamVjdCByZXNlYXJjaCBwcm90b2NvbHMuClRoaXMgbWVhbnMgY29tcGxldGluZyB0aGUgQ0lUSSB0cmFpbmluZywgd2hpY2ggd2lsbCB1cGxvYWQgdG8gdGhlIElSQi4KWW91IHdpbGwgbmVlZCB0byBjb21wbGV0ZSB0aGUgKipHcm91cCAxIOKAkyBCaW9tZWRpY2FsIFJlc2VhcmNoIOKAkyBJUkItMDEqKiBjb3Vyc2UuCkluc3RydWN0aW9ucyBhcmUgYmVsb3cuCklmIHlvdSBoYXZlIHF1ZXN0aW9ucywgcGxlYXNlIGZvbGxvdyB0aGlzIGxpbms6IGh0dHBzOi8vaHNvLnJlc2VhcmNoLnVpb3dhLmVkdS9jZXJ0aWZpY2F0aW9ucy1odW1hbi1zdWJqZWN0cy1wcm90ZWN0aW9ucy1jaXRpCgoxLiBFbnRlciB0aGUgQ0lUSSBwcm9ncmFtIGF0IGh0dHBzOi8vd3d3LmNpdGlwcm9ncmFtLm9yZwoxLiBPbiB0aGUgTWFpbiBNZW51IHNjcmVlbiwgdW5kZXIgdGhlICdVbml2ZXJzaXR5IG9mIElvd2EgQ291cnNlcycgdGFiLCBpbiB0aGUgJ015IExlYXJuZXIgVG9vbHMgZm9yIFVuaXZlcnNpdHkgb2YgSW93YScgYm94LCBzZWxlY3QgdGhlICdBZGQgYSBDb3Vyc2Ugb3IgVXBkYXRlIExlYXJuZXIgR3JvdXBzJyBsaW5rIAoxLiBTZWxlY3QgdGhlICJJIGFtIHJlcXVpcmVkIHRvIGNvbXBsZXRlIGh1bWFuIHN1YmplY3RzJyByZXNlYXJjaCB0cmFpbmluZy4iIHRvIGNvbXBsZXRlIHRoZSBJUkIgcmVxdWlyZWQgY291cnNlIGZvciBjZXJ0aWZpY2F0aW9uIGluIEh1bWFuIFN1YmplY3RzIFByb3RlY3Rpb25zLgpDbGljayBvbiB0aGUgJ05leHQnIGJ1dHRvbi4KMS4gU2VsZWN0IEdyb3VwIDEg4oCTQmlvbWVkaWNhbCBSZXNlYXJjaCDigJMgSVJCLTAxLgpDbGljayBvbiB0aGUgJ05leHQnIGJ1dHRvbi4KMS4gT24gdGhlIE1haW4gTWVudSBzY3JlZW4sIHVuZGVyIHRoZSAnVW5pdmVyc2l0eSBvZiBJb3dhIENvdXJzZXMnIHRhYiwgY2xpY2sgb24gdGhlIHRpdGxlIG9mIHRoZSBjb3Vyc2UgdG8gZW50ZXIgY291cnNlLgoxLiBDbGljayBvbiB0aGUgJ0NvbXBsZXRlIHRoZSBJbnRlZ3JpdHkgQXNzdXJhbmNlIFN0YXRlbWVudCBiZWZvcmUgYmVnaW5uaW5nIHRoZSBjb3Vyc2UnIGxpbmsgYW5kIGNvbXBsZXRlLgpDbGljayBvbiB0aGUgJ1N1Ym1pdCcgYnV0dG9uLgoxLiBDbGljayBvbiB0aGUgdGl0bGUgb2YgdGhlIGZpcnN0IG1vZHVsZSB0byBiZWdpbi4KMS4gQ29tcGxldGUgYWxsIG9mIHRoZSByZXF1aXJlZCBtb2R1bGVzLgoKV2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCB0aGUgY291cnNlLCBwbGVhc2Ugc2VuZCB0aGUgTGFiIENvb3JkaW5hdG9yIGEgUERGIG9mIHRoZSBjb21wbGV0aW9uIGNlcnRpZmljYXRlLgoKSWYgeW91IGhhdmUgYWxyZWFkeSBjb21wbGV0ZWQgdGhlIEhTTy9JUkIgY2VydGlmaWNhdGlvbiwganVzdCBicmluZy9zZW5kIGEgY29weSBvZiB5b3VyIGNlcnRpZmljYXRpb24uClBsZWFzZSBub3RlLCBob3dldmVyLCB0aGF0IGl0IG11c3QgYmUgR3JvdXAgMSDigJMgQmlvbWVkaWNhbCBSZXNlYXJjaCDigJMgSVJCLTAxLgoKKipJTVBPUlRBTlQqKjogSXQgaXMgbGlrZWx5IHRoYXQgeW91IHdpbGwgcmVjZWl2ZSBhbiBlbWFpbCBmcm9tIHRoZSBJUkIgdXBvbiBjb21wbGV0aW9uIG9mIHlvdXIgSVJCLTAxIENJVEkgdHJhaW5pbmcgYXNraW5nIHlvdSB0byBjb25maXJtIHlvdXIgbGFiLCBQSSwgdGhlIHN0dWR5LCBvciB0aGF0IHlvdSBjb21wbGV0ZWQgdGhlIGNvcnJlY3QgdHJhaW5pbmcuClRoaXMgaXMgYmVjYXVzZSBpdCBpcyB1bmNvbW1vbiBmb3IgcHN5Y2hvbG9neSBsYWJzIHRvIGNvbXBsZXRlIHRoZSBJUkItMDEgdHJhaW5pbmcgaW5zdGVhZCBvZiB0aGUgSVJCLTAyIHRyYWluaW5nLgpJVCBJUyBDUlVDSUFMTFkgSU1QT1JUQU5UIFRIQVQgWU9VIFJFU1BPTkQgVE8gVEhJUyBFTUFJTC4KSWYgeW91IGRvIG5vdCwgaXQgd2lsbCBkZWxheSBvdXIgYWJpbGl0eSB0byBhZGQgeW91IHRvIHRoZSBJUkIgcHJvamVjdCwgYW5kIHRodXMgZGVsYXkgeW91ciBhYmlsaXR5IGNvbnRpbnVlIFJBIHRyYWluaW5nLgoKVGhlIGJhc2ljIGluZm9ybWF0aW9uIHRoZXkgbWF5IGFzayB5b3UgdG8gY29uZmlybSBpczoKCipEZXBhcnRtZW50KjogUHN5Y2hvbG9naWNhbCBhbmQgQnJhaW4gU2NpZW5jZXNcCipQSSo6IERyLiBJc2FhYyBQZXRlcnNlblwKKldoaWNoIHN0dWR5IG9yIHRyYWluaW5nKjogdGhlIElSQi0wMSBzdHVkeQoKIyBDb25maWRlbnRpYWxpdHkgeyNjb25maWRlbnRpYWxpdHl9CgpBcyBwYXJ0IG9mIGV2ZXJ5IHBhcnRpY2lwYW50J3MgY29uc2VudCBwcm9jZXNzLCB3ZSBwcm9taXNlIHRoYXQgd2Ugd2lsbCBwcm90ZWN0IHRoZWlyIGluZm9ybWF0aW9uLgpUaGVyZWZvcmUsIGl0IGlzIGltcGVyYXRpdmUgdGhhdCBhbGwgaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBvdXIgcGFydGljaXBhbnRzIHJlbWFpbnMgY29uZmlkZW50aWFsLgpCZWxvdyBhcmUgZ3VpZGVsaW5lcyBvbiBob3cgdG8gaGFuZGxlIHN0dWR5IGRhdGEgYW5kIHBhcnRpY2lwYW50IGluZm9ybWF0aW9uLgoKIyMgSGFuZGxpbmcgRGF0YQoKQWxsIGhhcmQtY29weSBwaHlzaWNhbCByZXNlYXJjaCBkYXRhIG11c3QgcmVtYWluIGluIHRoZSBsYWIuCkFsbCBlbGVjdHJvbmljIGRhdGEgc2hvdWxkIGJlIGFjY2Vzc2VkIGZyb20gdGhlIGxhYiwgb24gdW5pdmVyc2l0eSBjb21wdXRlcnMsIG9yIHNlY3VyZSBwcml2YXRlIGNvbXB1dGVycy4KRWxlY3Ryb25pYyBkYXRhIHNob3VsZCBub3QgYmUgYWNjZXNzZWQgb24gcHVibGljIGNvbXB1dGVycy4KSWRlbnRpZmlhYmxlIGVsZWN0cm9uaWMgZGF0YSAoaW5jbHVkaW5nIHZpc2l0IHZpZGVvcykgc2hvdWxkIGJlIHN0b3JlZCBvbmx5IG9uIHRoZSBsYWIncyBSRFNTIHNoYXJlIGFuZCBzaG91bGQgbm90IGJlIHNhdmVkIG9udG8geW91ciBjb21wdXRlci4KCiMjIE5vIFRhbGtpbmcgQWJvdXQgUGFydGljaXBhbnRzIE91dHNpZGUgb2YgTGFiCgpJdCBpcyBpbXBvcnRhbnQgdGhhdCB5b3UgKm5vdCogdGFsayBhYm91dCBwYXJ0aWNpcGFudHMgb3V0c2lkZSBvZiBsYWIuCkV2ZW4gaWYgeW91IGFyZSB0YWxraW5nIHRvIG90aGVyIFJBcyBvciBwZW9wbGUgb24gb3VyIElSQiBwcm9qZWN0LCB5b3UgbmV2ZXIga25vdyB3aG8gZWxzZSBtaWdodCBoZWFyIHlvdXIgY29udmVyc2F0aW9uLgpUaGVyZWZvcmUsIHlvdSBzaG91bGQgbmV2ZXIgdXNlIHBhcnRpY2lwYW50IG5hbWVzLCBhZGRyZXNzZXMsIHBoeXNpY2FsIGRlc2NyaXB0aW9ucywgb3IgYW55IG90aGVyIHBlcnNvbmFsbHkgaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24gb3V0c2lkZSBvZiB0aGUgbGFiIHNwYWNlLgoKIyMgUGhvdG9zIGFuZCBTb2NpYWwgTWVkaWEKCk5vIG9uZSBzaG91bGQgZXZlciB0YWtlIHBob3Rvcywgc2NyZWVuc2hvdHMsIFNuYXBjaGF0cywgb3IgYW55IG90aGVyIGtpbmQgb2YgdmlkZW8gcmVjb3JkaW5nIG9mIGxhYiBkYXRhLCBpbmNsdWRpbmcgdmlzaXQgdmlkZW9zLgpBZGRpdGlvbmFsbHksIG5vIGRhdGEgb3IgaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24gc2hvdWxkIGJlIHNoYXJlZCBvbiBzb2NpYWwgbWVkaWEsIHRocm91Z2ggZW1haWwsIGV0Yy4KRXZlbiB3aGVuIHVzaW5nIFNsYWNrIHRvIGNvbW11bmljYXRlIHdpdGggdGVhbSBtZW1iZXJzIGFib3V0IHZpc2l0cyBvciBsYWItcmVsYXRlZCB0YXNrcywgdGVhbSBtZW1iZXJzIHNob3VsZCBhbHdheXMgdXNlIFRDSURzIGFuZCB3YXZlcywgd2hpY2ggYXJlIGRlLWlkZW50aWZpZWQsIHRvIHJlZmVyIHRvIHNwZWNpZmljIHBhcnRpY2lwYW50cy92aWRlb3MuCgojIyBSZW1vdGUgQWNjZXNzIHsjcmVtb3RlfQoKUkFzIHNob3VsZCBuZXZlciBhY2Nlc3MgbGFiIGRhdGEgcmVtb3RlbHkgd2l0aG91dCBwZXJtaXNzaW9uIG9yIGRpcmVjdGlvbiBmcm9tIHRoZSBMYWIgQ29vcmRpbmF0b3IsIGEgZ3JhZHVhdGUgc3R1ZGVudCwgb3IgdGhlIFBJLgpUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBSQSBoYXMgcmVjZWl2ZWQgYWxsIG9mIHRoZSByZXF1aXNpdGUgdHJhaW5pbmcsIGluc3RydWN0aW9ucywgYW5kIHJlc291cmNlcyB0byBwcm9wZXJseSBhY2Nlc3MgZGF0YSByZW1vdGVseS4KQWZ0ZXIgcmVjZWl2aW5nIHBlcm1pc3Npb24gb3IgZGlyZWN0aW9uIHRvIHdvcmsgb24gbGFiIHRhc2tzIHJlbW90ZWx5LCBpdCBpcyBjcml0aWNhbCB0aGF0IGFsbCB0ZWFtIG1lbWJlcnMgZm9sbG93IHRoZXNlIGJhc2ljIGd1aWRlbGluZXM6CgotIE5vIGxhYi1yZWxhdGVkIGRhdGEgb3IgZG9jdW1lbnRzIHNob3VsZCBiZSBzYXZlZCB0byB5b3VyIGxvY2FsIGNvbXB1dGVyCi0gQWxsIGxhYi1yZWxhdGVkIGRhdGEgb3IgZG9jdW1lbnRzIHNob3VsZCBvbmx5IGJlIG9wZW5lZCB3aGVuIG5vIG9uZSBlbHNlIGNhbiBzZWUgeW91ciBjb21wdXRlciBzY3JlZW4gb3IgaGVhciB2aXNpdCB2aWRlb3MuClRoZXJlZm9yZSwgaWYgeW91ciBwYXJlbnRzL3Jvb21tYXRlcy9mcmllbmRzL2V0Yy4gYXJlIGluIHRoZSByb29tIHdpdGggeW91IGFuZCBjYW4gc2VlIG9yIGhlYXIgdGhlIHZpZGVvcywgRE8gTk9UIE9QRU4gVEhFTS4KCiMgSG93IHRvIFJlZ2lzdGVyIExhYiBmb3IgQ3JlZGl0IHsjY291cnNlUmVnaXN0cmF0aW9ufQoKIyMgUmVndWxhciBDcmVkaXQgeyNyZWd1bGFyQ3JlZGl0fQoKU3R1ZGVudHMgd2hvIHdpc2ggdG8gcmVjZWl2ZSBjcmVkaXQgZm9yIHRpbWUgc3BlbnQgaW4gdGhlIGxhYiBtYXkgcmVnaXN0ZXIgZm9yICJgUFNZOjM5OTQ6MDFJTkQg4oCTIFJlc2VhcmNoIFByYWN0aWN1bSBpbiBQc3ljaG9sb2d5YCIsICJbYEhPTlI6Mzk5NDowMUlORCDigJMgSG9ub3JzIFJlc2VhcmNoIFByYWN0aWN1bWBdKCNob25vcnNDcmVkaXQpIiwgb3IgImBVUkVTOjM5OTJgIi4KR2VuZXJhbGx5LCBzdHVkZW50cyBlbnJvbGwgaW4gImBQU1k6Mzk5NGAiIG9yLCBpZiB0aGV5IHdhbnQgW0hvbm9ycyBjcmVkaXRdKCNob25vcnNDcmVkaXQpLCAiW2BIT05SOjM5OTRgXSgjaG9ub3JzQ3JlZGl0KSIuCgpgVVJFUzozOTkyYCBpcyAwLWhvdXIgYW5kIGhhcyBubyB0dWl0aW9uIG9yIGZlZXMgYXNzb2NpYXRlZC4KSXQgaXMgcmVjb21tZW5kZWQgdG8gZW5yb2xsIGluIGBVUkVTOjM5OTJgIHdoZW4geW91IGNhbm5vdCB0YWtlIGNyZWRpdC1iZWFyaW5nIGNvdXJzZXMgKGUuZy4sIGlmIHlvdSBhcmUgZ2V0dGluZyBwYWlkLCBpZiB5b3UgZG8gbm90IGhhdmUgdGhlIGFiaWxpdHkgdG8gbWFpbnRhaW4gYSByZWd1bGFyIHNjaGVkdWxlLCBldGMuKS4KYFVSRVM6Mzk5MmAgaXMgYWxzbyB1c2VmdWwgZm9yIHN0dWRlbnRzIGluIHRoZSBzdW1tZXIgc28geW91IGRvIG5vdCBoYXZlIHRvIHBheSB0aGUgdHVpdGlvbiBhbmQgZmVlcyAod2hpY2ggeW91IHdpbGwgaGF2ZSB0byBwYXkgaWYgeW91IHRha2UgYSBjcmVkaXQtYmVhcmluZyBjb3Vyc2UpLgoKS2VlcCBpbiBtaW5kIHRoYXQgc29tZSBjb3Vyc2VzIGRpZmZlciBpbiB0aGUgd2F5IHRoYXQgdGhleSBhcmUgZ3JhZGVkLgoKLSBTdHVkZW50cyByZWNlaXZlIGEgbGV0dGVyIGdyYWRlIChzZWUgdGhlIHNlY3Rpb24gb24gW0hvbm9ycyBDcmVkaXRdKCNob25vcnNDcmVkaXQpKSBmb3IgYFBTWTo0OTkwYCBhbmQgYEhPTlI6Mzk5NGAuCi0gU3R1ZGVudHMgcmVjZWl2ZSBhIFBhc3MvRmFpbCBncmFkZSBmb3IgYFBTWTozOTk0YC4KClRoZXJlIGFyZSBzZXZlcmFsIGFkdmFudGFnZXMgdG8gcmVnaXN0ZXJpbmcgZm9yIGNvdXJzZSBjcmVkaXQ6CgotIFlvdXIgcGFydGljaXBhdGlvbiBpbiBsYWIgd2lsbCBiZSBpbmNsdWRlZCBvbiB5b3VyIHRyYW5zY3JpcHQsIHdoaWNoIGNhbiBsb29rIGdvb2Qgd2hlbiB5b3UgYXBwbHkgdG8gZ3JhZHVhdGUvcHJvZmVzc2lvbmFsIHNjaG9vbCBhbmQgam9icwotIElmIHlvdSBtZWV0IHRoZSBob3VycyBhbmQgZXhwZWN0YXRpb25zLCBpdCBjYW4gYWxzbyBoZWxwIHlvdXIgR1BBCi0gVGhlIDEwIGhvdXJzIHBlciB3ZWVrIHlvdSBzcGVuZCBpbiBsYWIgd2lsbCBiZSBhY2NvdW50ZWQgZm9yIGluIHlvdXIgY291cnNlIHNjaGVkdWxlCgohW1BTWTozOTk0IFN0ZXAgMV0oaW1hZ2VzL3BzeTM5OTRfMS5wbmcpCiFbUFNZOjM5OTQgU3RlcCAyXShpbWFnZXMvcHN5Mzk5NF8yLnBuZykKCiMjIEhvbm9ycyBDcmVkaXQgeyNob25vcnNDcmVkaXR9CgpTdHVkZW50cyB3aG8gd2lzaCB0byByZWNlaXZlIEhvbm9ycyBjcmVkaXQgZm9yIHBhcnRpY2lwYXRpb24gaW4gbGFiIG1heSByZWdpc3RlciBmb3IgImBIT05SOjM5OTQ6MDFJTkQg4oCTIEhvbm9ycyBSZXNlYXJjaCBQcmFjdGljdW1gIi4KSW4gYWRkaXRpb24gdG8gZW5yb2xsaW5nIG9uIE15VUksIHlvdSBjYW4gZmluZCB0aGUgSG9ub3JzIFJlc2VhcmNoIFByYWN0aWN1bSBzeWxsYWJ1cyBvbiB0aGUgbGFiIGRyaXZlICh0byBiZSByZWFkIGFuZCBzaWduZWQgYnkgdGhlIFJBIGFuZCBEci4gUGV0ZXJzZW4pIGhlcmU6IGBcXGxjLXJzLXN0b3JlMjQuaHBjLnVpb3dhLmVkdVxsc3NfaXRwZXRlcnNlblxMYWJcTWlzY2VsbGFuZW91c1xDb3Vyc2UgU3lsbGFiaVxgCgpJZiB5b3UgYXJlIGNvbXBsZXRpbmcgYW4gSG9ub3JzIHByb2plY3QgYW5kIHRoZXNpcyBpbiB0aGUgbGFiLCB3aXRoIGFwcHJvdmFsIGJ5IERyLiBQZXRlcnNlbiwgeW91IG1heSBlbnJvbGwgZm9yICJgUFNZOjQ5OTAg4oCTIEhvbm9ycyBUaGVzaXMgUmVzZWFyY2hgIi4KQWR2YW50YWdlcyBmb3IgcmVnaXN0ZXJpbmcgZm9yIGhvbm9ycyBjb3Vyc2UgY3JlZGl0IGFyZToKCi0gWW91ciB3b3JrIGluIHRoZSBsYWIgd2lsbCBiZSBpbmNsdWRlZCBvbiB5b3VyIHRyYW5zY3JpcHQgKGxldHRlciBncmFkZWQpLCB3aGljaCBjYW4gbG9vayBnb29kIHdoZW4gYXBwbHkgdG8gZ3JhZHVhdGUvcHJvZmVzc2lvbmFsIHNjaG9vbCBhbmQgam9icwotIFRoZSAxMCBob3VycyBwZXIgd2VlayB5b3Ugc3BlbmQgaW4gbGFiIHdpbGwgYmUgYWNjb3VudGVkIGZvciBpbiB5b3VyIGNvdXJzZSBzY2hlZHVsZQotIFRoZSBob3VycyBhY2N1bXVsYXRlZCBpbiB0aGUgbGFiIGNhbiBjb3VudCB0b3dhcmRzIHlvdXIgaG9ub3JzIGV4cGVyaWVudGlhbCBsZWFybmluZyAodXAgdG8gMTIgc2VtZXN0ZXIgaG91cnMpCgpJbnRlcmVzdGVkIHN0dWRlbnRzIG1heSBiZSBhYmxlIHRvIGNvbmR1Y3QgYW4gSG9ub3JzIHByb2plY3Qgb3Igbm9uLXRoZXNpcyBjYXBzdG9uZSBmb3IgSG9ub3JzIGluIHRoZSBQc3ljaG9sb2d5IE1ham9yLgpGb3IgaW5mb3JtYXRpb24gb24gY29uZHVjdGluZyBhbiBIb25vcnMgdGhlc2lzL3Byb2plY3QsIHNlZSBbaGVyZV0oaG9ub3JzLmh0bWwpLgpOb3RlIHRoYXQgY29uZHVjdGluZyBhbiBIb25vcnMgdGhlc2lzL3Byb2plY3QgaXMgbm90IGEgcmVxdWlyZW1lbnQgZm9yIGVucm9sbGluZyBpbiBgSE9OUjozOTk0YC4KCiFbSE9OUjozOTk0IFN0ZXAgMV0oaW1hZ2VzL2hvbnIzOTk0XzEucG5nKQohW0hPTlI6Mzk5NCBTdGVwIDJdKGltYWdlcy9ob25yMzk5NF8yLnBuZykKCiMjIyBIb3cgdG8gRnVsZmlsbCB0aGUgRXhwZXJpZW50aWFsIExlYXJuaW5nIFJlcXVpcmVtZW50IGZvciBIb25vcnMgQ3JlZGl0CgpIT05SOjM5OTQgYW5kIFBTWTozOTk0IHdpbGwgYXBwZWFyIGF1dG9tYXRpY2FsbHkgb24geW91ciBIb25vcnMgZGVncmVlIGF1ZGl0IGFzIGZ1bGZpbGxpbmcgcGFydCBvZiB0aGUgZXhwZXJpZW50aWFsIGxlYXJuaW5nIHJlcXVpcmVtZW50IGZvciBIb25vcnMgY3JlZGl0LgoKQSBzdHVkZW50IGNhbiBzdGlsbCByZWNlaXZlIEhvbm9ycyBjcmVkaXQgYnkgcmVnaXN0ZXJpbmcgZm9yIFVSRVM6Mzk5MiBvciBieSBwYXJ0aWNpcGF0aW5nIGluIHRoZSBsYWIgb24gYSB2b2x1bnRlZXIgYmFzaXMgd2l0aG91dCBpdCBzaG93aW5nIG9uIHRoZWlyIHRyYW5zY3JpcHQgKHNvIGxvbmcgYXMgdGhlIHN0dWRlbnQgc3RpbGwgY29tcGxldGVzIHRoZWlyIHJlcXVpcmVkIDEwIGhvdXJzKS4KSG93ZXZlciwgdGhlc2Ugc2VtZXN0ZXIgaG91cnMgd2lsbCBub3QgY291bnQgdG93YXJkIHRoZSBleHBlcmllbnRpYWwgbGVhcm5pbmcgcmVxdWlyZW1lbnQgdW5sZXNzIGFkZGl0aW9uYWwgc3RlcHMgYXJlIHRha2VuLgoKMS4gQ29tcGxldGUgdGhlIFByZS1FeHBlcmllbmNlIFF1ZXN0aW9ubmFpcmUgYmVmb3JlIHRoZSBzZW1lc3RlciBiZWdpbnMKICAgIGEuIGh0dHBzOi8vdWlvd2EucXVhbHRyaWNzLmNvbS9qZmUvZm9ybS9TVl82U0d6WWtGcDF3UUpKaXQKMS4gQ29tcGxldGUgeW91ciBsYWIgcmVzcG9uc2liaWxpdGllcyBhbmQgZW5nYWdlIGluIHlvdXIgMTAgaG91cnMgb2YgcmVzZWFyY2ggZWFjaCB3ZWVrIQoxLiBDb21wbGV0ZSB0aGUgUG9zdC1FeHBlcmllbmNlIFF1ZXN0aW9ubmFpcmUgYWZ0ZXIgdGhlIHNlbWVzdGVyIGVuZHMgKHdpdGhpbiB0aGUgbmV4dCA1IHdlZWtzKQogICAgYS4gaHR0cHM6Ly91aW93YS5xdWFsdHJpY3MuY29tL2pmZS9mb3JtL1NWX2QxbGUzcVI5dG9FSXlDRgoxLiBTdWJtaXQgYSBOYXJyYXRpdmUgKHdpdGhpbiA1IHdlZWtzIG9mIHNlbWVzdGVyIGVuZCkKICAgIGEuIFRoaXMgZmluYWwgcHJvamVjdCBpcyBmbGV4aWJsZSBpbiBpdHMgZm9ybWF0dGluZywgYnV0IGFuIGVzc2F5ICh0aGUgdHlwaWNhbCBjaG9pY2UpIHNob3VsZCBiZSA1MDDigJMxLDAwMCB3b3JkcyBpbiBsZW5ndGguCglUaGlzIHdpbGwgYWxsb3cgeW91IHRvIHJlZmxlY3Qgb24geW91ciBleHBlcmllbmNlcyBhbmQgaG93IHlvdSBncmV3LgoJQSBjb3VwbGUgaW1hZ2VzLCBhbiBhdXRob3IgYmlvLCBhbmQgaGlnaGxpZ2h0cyBvZiB5b3VyIGV4cGVyaWVuY2UgYXJlIGFsbCByZXF1aXJlZCBjb21wb25lbnRzIG9mIHRoaXMgcGllY2UuIAogICAgYi4gaHR0cHM6Ly91aW93YS5xdWFsdHJpY3MuY29tL2pmZS9mb3JtL1NWX2NEYVhNQXNFcjNwSFk1NwoKTW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgSG9ub3JzIGV4cGVyaWVudGlhbCBsZWFybmluZyBwcm9jZXNzIGZvciByZXNlYXJjaCBpbnZvbHZlbWVudCBjYW4gYmUgZm91bmQgaGVyZTogaHR0cHM6Ly9ob25vcnMudWlvd2EuZWR1L3JlcXVpcmVtZW50cy9leHBlcmllbnRpYWwtbGVhcm5pbmcKCiMgUkEgUm9sZXMgeyNyb2xlc30KClRoZSBEZXZlbG9wbWVudGFsIFBzeWNob3BhdGhvbG9neSBMYWIgdXNlcyBhICJnZW5lcmFsaXN0IHdpdGggc3BlY2lhbGl6YXRpb24iIGFwcHJvYWNo4oCUdGhlcmUgYXJlIHNvbWUgdGFza3MgdGhhdCBhbGwgUkFzIGFyZSB0cmFpbmVkIHRvIHBlcmZvcm0sIGFuZCB0aGVyZSBhcmUgb3RoZXIgdGFza3MgdGhhdCBSQXMgc3BlY2lhbGl6ZSBpbi4KV2UgaGF2ZSB0aHJlZSBzcGVjaWFsaXplZCB0cmFja3Mgb3Igcm9sZXMgdGhhdCBSQXMgY2FuIHRyYWluIGluIGFmdGVyIGNvbXBsZXRpbmcgYmFzaWMgbGFiIHRyYWluaW5nOiBbQmVoYXZpb3JhbCBUZXN0aW5nIFNwZWNpYWxpc3RdKCNiZWhhdmlvcmFsVGVzdGluZ1NwZWNpYWxpc3QpLCBbRWxlY3Ryb2VuY2VwaGFsb2dyYXBoeSAoRUVHKQogU3BlY2lhbGlzdF0oI2VlZ1NwZWNpYWxpc3QpLCBhbmQgW0RhdGEgU3BlY2lhbGlzdF0oI2RhdGFTcGVjaWFsaXN0KS4KICoqRXZlcnkgcm9sZSBpcyBpbXBvcnRhbnQqKi4KUGxhY2VtZW50IGluIHRoZXNlIHJvbGVzIGRlcGVuZHMgb24gZWFjaCBSQSdzIChhKSBpbnRlcmVzdHMsIChiKSBhcHRpdHVkZSwgYW5kIChjKSBmaXQsIGluIGFkZGl0aW9uIHRvIChkKSB0aGUgdGVhbSdzIG5lZWRzLgpXZSB0YWtlIGludG8gY29uc2lkZXJhdGlvbiB0aGUgZGVzaXJlZCBwbGFjZW1lbnQgb2YgZXZlcnkgUkEsIGJ1dCB1bHRpbWF0ZWx5IERyLiBQZXRlcnNlbiBhbmQgdGhlIExhYiBDb29yZGluYXRvciBtYWtlIHRoaXMgZGV0ZXJtaW5hdGlvbiBiYXNlZCBvbiBhLCBiLCBjLCBhbmQgZCBmcm9tIGFib3ZlLgoKQmVsb3cgYXJlIGNyb3NzLWN1dHRpbmcgcmVzcG9uc2liaWxpdGllcyB0aGF0IGFsbCBSQXMgYXJlIGV4cGVjdGVkIHRvIGNvbnRyaWJ1dGUgdG8uCgoqKkNyb3NzLUN1dHRpbmcgUmVzcG9uc2liaWxpdGllcyoqCgotIGRhdGEgZW50cnkKLSBjb2RpbmcgYmVoYXZpb3JhbCB0YXNrcyBmcm9tIHZpZGVvCi0ga2VlcGluZyBsYWIgY2xlYW4gYW5kIGZhbWlseS0gYW5kIGNoaWxkLWZyaWVuZGx5Ci0gcXVhbGl0eSBjb250cm9sIGFuZCBpbXByb3ZlbWVudAotIGhlbHBpbmcgcnVuIHZpc2l0cwotIHVwZGF0aW5nL2VkaXRpbmcgY29kaW5nIG1hbnVhbCBhcyBuZWVkZWQKLSBhdWRpdGluZyAiUXVlc3Rpb24gYW5kIEFuc3dlciIgKFEmQSkgYW5kICJRdWFsaXR5IENvbnRyb2wgSW1wcm92ZW1lbnQiIChRQ0kpIGRvY3VtZW50cwotIHByb3ZpZGluZyBhbnN3ZXJzIHRvIGNvZGluZyBxdWVzdGlvbnMgd2hlbiBhcHBsaWNhYmxlCgojIyBTcGVjaWFsaXplZCBSb2xlcyB7I3NwZWNpYWxpemVkUm9sZXN9CgojIyMgQmVoYXZpb3JhbCBUZXN0aW5nIFNwZWNpYWxpc3QgeyNiZWhhdmlvcmFsVGVzdGluZ1NwZWNpYWxpc3R9CgpCZWxvdyBhcmUgbmVjZXNzYXJ5IGNoYXJhY3RlcmlzdGljcyBhbmQgcG90ZW50aWFsIHJlc3BvbnNpYmlsaXRpZXMgZm9yIEJlaGF2aW9yYWwgVGVzdGluZyBTcGVjaWFsaXN0czoKCioqTmVjZXNzYXJ5IENoYXJhY3RlcmlzdGljczoqKgoKLSB3b3JrcyB3ZWxsIHdpdGggM+KAkzcteWVhci1vbGQgY2hpbGRyZW4gYW5kIHBhcmVudHMKLSBwb3NpdGl2ZSBhbmQgY2hlZXJmdWwgYXR0aXR1ZGUKLSBtYXR1cmUKLSBhYmxlIHRvIHF1aWNrbHkgYW5kIGVhc2lseSBzb290aGUgdXBzZXQgY2hpbGRyZW4KLSBhYmxlIHRvIHN0YXkgY2FsbSBhbmQgY29tcG9zZWQgaW4gdGhlIGZhY2Ugb2YgcHJlc3N1cmUKLSBhYmxlIHRvIGZvbGxvdyBhIHNjcmlwdCB3aXRoIGFkaGVyZW5jZSB5ZXQgZmxleGliaWxpdHkgdG8gdGFpbG9yIGl0IHRvIHRoZSBpbmRpdmlkdWFsIGNoaWxkIChiYXNlZCBvbiB0aGUgY2hpbGQncyBhZ2UsIGludGVyZXN0cywgaW50ZWxsZWN0dWFsIGNhcGFjaXR5LCBldGMuKQotIGFibGUgdG8gdGFrZSBmZWVkYmFjayBub24tZGVmZW5zaXZlbHkgYW5kIGxlYXJuIGZyb20gZmVlZGJhY2sKLSBjb25maWRlbmNlIHRvIHJlbWFpbiBpbiBjb250cm9sIG9mIGEgY2hhb3RpYyBlbnZpcm9ubWVudAoKKipSZXNwb25zaWJpbGl0aWVzIENvdWxkIEluY2x1ZGU6KioKCi0gc2VydmluZyBhcyBhbiBleHBlcmltZW50ZXIgKEUpIGZvciBiZWhhdmlvcmFsIHRlc3RpbmcgKGxhYiB2aXNpdCAxOyBMVjEpIHZpc2l0cwotIHRyYWluaW5nIG5ldyBMVjEgRXMKLSBhc3N1cmluZyBwcm9jZWR1cmFsIGFkaGVyZW5jZSBmb3IgTFYxIChpbmNsdWRpbmcgY29hY2hpbmcgUkEgYW5kIENhbWVyYSByb2xlcywgY29sbGFib3JhdGluZyB3aXRoIG90aGVyIEVzIHRvIGVuc3VyZSBjb25zaXN0ZW50IGFkbWluaXN0cmF0aW9uKQotIGVkaXRpbmcvdXBkYXRpbmcgTFYxIG1hbnVhbCBwcm9jZWR1cmVzIGFuZCBzY3JpcHRzIGFzIG5lZWRlZAotIGtlZXBpbmcgTFYxIG9ic2VydmF0aW9uIHJvb20gc3RvY2tlZCBhbmQgcHJlcHBlZCBmb3IgdmlzaXRzCi0gaGF2aW5nIGEgbGlnaHRlciBmb2N1cyBvbiBjb2RpbmcKCiMjIyBFRUcgU3BlY2lhbGlzdCB7I2VlZ1NwZWNpYWxpc3R9CgpCZWxvdyBhcmUgbmVjZXNzYXJ5IGNoYXJhY3RlcmlzdGljcyBhbmQgcG90ZW50aWFsIHJlc3BvbnNpYmlsaXRpZXMgZm9yIEVFRyBTcGVjaWFsaXN0czoKCioqTmVjZXNzYXJ5IENoYXJhY3RlcmlzdGljczoqKgoKLSB0ZWNobmljYWwgc2tpbGxzCi0gYXR0ZW50aW9uIHRvIGRldGFpbAotIGNvbmZpZGVuY2UgdG8gcmVtYWluIGluIGNvbnRyb2wgb2YgYSBjaGFvdGljIGVudmlyb25tZW50Ci0gY29tZm9ydGFibGUgdHJvdWJsZS1zaG9vdGluZyBpc3N1ZXMgd2l0aCB0ZWNobmljYWwgZXF1aXBtZW50IChhZnRlciByZWNlaXZpbmcgZXh0ZW5zaXZlIHRyYWluaW5nKTsgYWJpbGl0eSB0byBmb2xsb3cgc3RyaWN0IHByb2NlZHVyZXMgYW5kIGd1aWRlbGluZXMKLSB3b3JrcyB3ZWxsIHdpdGggM+KAkzcteWVhci1vbGQgY2hpbGRyZW4gYW5kIHBhcmVudHMKLSBtYXR1cmUKCioqUmVzcG9uc2liaWxpdGllcyBDb3VsZCBJbmNsdWRlOioqCgotIHNlcnZpbmcgYXMgYW4gRSBmb3IgRUVHIChsYWIgdmlzaXQgMjsgTFYyKSB2aXNpdHMKLSB0cmFpbmluZyBuZXcgTFYyIEVzCi0gYXNzdXJpbmcgcHJvY2VkdXJhbCBhZGhlcmVuY2UgZm9yIExWMiAoaW5jbHVkaW5nIGNvYWNoaW5nIFJBIHJvbGVzLCBjb2xsYWJvcmF0aW5nIHdpdGggb3RoZXIgRXMgdG8gdHJvdWJsZS1zaG9vdCB0ZWNobmljYWwgaXNzdWVzIGFuZCBhc3N1cmUgcHJvY2VkdXJhbCBhZGhlcmVuY2UpCi0gZWRpdGluZy91cGRhdGluZyBMVjIgbWFudWFsIHByb2NlZHVyZXMgYW5kIHNjcmlwdHMgYXMgbmVlZGVkCgojIyMgRGF0YSBTcGVjaWFsaXN0IHsjZGF0YVNwZWNpYWxpc3R9CgpCZWxvdyBhcmUgbmVjZXNzYXJ5IGNoYXJhY3RlcmlzdGljcyBhbmQgcG90ZW50aWFsIHJlc3BvbnNpYmlsaXRpZXMgZm9yIERhdGEgU3BlY2lhbGlzdHM6CgoqKk5lY2Vzc2FyeSBDaGFyYWN0ZXJpc3RpY3M6KioKCi0gcHJvZmVzc2lvbmFsIGNvbW11bmljYXRpb24gc2tpbGxzCi0ga25vd3MgdGhlIHN0dWR5IHdlbGwgKGFibGUgdG8gZGVzY3JpYmUgdGhlIHN0dWR5IGFuZCBjb25zZW50IGZvcm0gdGhvcm91Z2hseSwgY2FuIGFuc3dlciBxdWVzdGlvbnMgYWJvdXQgdGhlIHN0dWR5KQotIGFibGUgdG8gaW50ZXJhY3Qgd2VsbCB3aXRoIHBlb3BsZSBpbiB0aGUgY29tbXVuaXR5IGZvciBwdXJwb3NlcyBvZiBtYWtpbmcgY29ubmVjdGlvbnMgd2l0aCBzY2hvb2xzL3ByZXNjaG9vbHMvZGF5Y2FyZXMgZm9yIHJlY3J1aXRtZW50Ci0gaGlnaGx5IG9yZ2FuaXplZAotIGF0dGVudGlvbiB0byBkZXRhaWwKLSB0ZWNobmljYWwgc2tpbGxzCi0gY3JlYXRpdmUgZm9yIGRldmVsb3BpbmcgcmVjcnVpdG1lbnQgYW5kIHJldGVudGlvbiB0b29scyBhbmQgZGlzY292ZXJpbmcgcmVjcnVpdG1lbnQgc291cmNlcwotIGNvbWZvcnRhYmxlIGluIGNvbm5lY3Rpbmcgd2l0aCBkaXZlcnNlIHBlb3BsZSBpbiBkaXZlcnNlIHBsYWNlcwoKKipSZXNwb25zaWJpbGl0aWVzIENvdWxkIEluY2x1ZGU6KioKCi0gaGVhdmllciBmb2N1cyBvbiBjb2RpbmcsIGNvZGluZyB0YXNrcyB3aXRoIGFkdmFuY2VkIHByb2dyYW1zIChlLmcuLCBEYXRhdnl1KQotIFJFRENhcCBhZGRpdGlvbnMgYW5kIGVkaXRzICh1cG9uIGNvbXBsZXRpb24gb2YgYWR2YW5jZWQgUkVEQ2FwIHRyYWluaW5nKQotIHRyYWluIG5ldyBSQXMgaW4gTFYxIFJBIGFuZCBDYW1lcmEgcm9sZXMsIGFuZCBMVjIgUkEgcm9sZXMKLSBoZWxwIHJ1biB2aXNpdHMgaW4gUkEgYW5kIENhbWVyYSByb2xlcwotIHJlY3J1aXRtZW50IGFuZCByZXRlbnRpb24sIGluY2x1ZGluZyBoZWxwaW5nIHRvIGRldmVsb3AvaW1wcm92ZSBjdXJyZW50IHJlY3J1aXRtZW50IGFuZCByZXRlbnRpb24gc3lzdGVtcyBhbmQgZGV2aXNpbmcgbmV3IHJlY3J1aXRtZW50IGFuZCByZXRlbnRpb24gcG9zc2liaWxpdGllcywgdXBkYXRpbmcgc29jaWFsIG1lZGlhIHBhZ2VzCi0gaGVscGluZyB0byBkZXZlbG9wIG5ldyBjb2Rpbmcgc3lzdGVtcwoKIyBSQSBBZHZhbmNlbWVudCBpbiBMYWIgeyNhZHZhbmNlbWVudH0KClRoZSBEZXZQc3kgbGFiIGlzIGhhcHB5IHRvIG9mZmVyIGV4Y2VwdGlvbmFsIFJBcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZ2FpbiBhZHZhbmNlZCByZXNlYXJjaCBleHBlcmllbmNlIGluIHRoZSBmb3JtIG9mIGxlYWRlcnNoaXAgcm9sZXMgd2l0aGluIHRoZSBsYWIuCkVsaWdpYmlsaXR5IGlzIGF0IHRoZSBkaXNjcmV0aW9uIG9mIHRoZSBMYWIgQ29vcmRpbmF0b3IgYW5kIERyLiBQZXRlcnNlbi4KCiMjIEVsaWdpYmlsaXR5IENyaXRlcmlhCgpCZWxvdyBhcmUgdGhlIGVsaWdpYmlsaXR5IGNyaXRlcmlhIGZvciBhZHZhbmNlbWVudCBpbiBsYWI6CgotIEhhcyBiZWVuIGFuIGFjdGl2ZSBhbmQgZW5nYWdlZCBSQSBmb3IgYXQgbGVhc3QgNCBmdWxsIHNlbWVzdGVycwotIEhhcyBzaG93biBhIHBlcnNvbmFsIGludGVyZXN0IGluIHRoZSByZXNlYXJjaCBiZWluZyBjb25kdWN0ZWQgaW4gbGFiL3Jlc2VhcmNoIGluIGdlbmVyYWwKLSBNZWFuaW5nZnVsIGFuZCBlbmdhZ2luZyByZXNlYXJjaCBhbmQgbGVhZGVyc2hpcCBvcHBvcnR1bml0aWVzIGNhbiBiZSBoZWxwZnVsIGluIGJ1aWxkaW5nIGEgQ1YgYW5kIHJlc2VhcmNoIGJhY2tncm91bmQsIGJ1dCBpdCBhbHNvIGNhbiBpbnZvbHZlIGNvbnNpZGVyYWJsZSB3b3JrIGFuZCByZXNwb25zaWJpbGl0eS4KVGhlcmVmb3JlLCBwcm9zcGVjdGl2ZSBBZHZhbmNlZCBSQXMgc2hvdWxkIGJlICoqc2VsZi1tb3RpdmF0ZWQqKiBhbmQgaGF2ZSBjb25zaXN0ZW50bHkgc2hvd24gdGhhdCB0aGV5IGFyZSAqKnJlbGlhYmxlKiogYW5kICoqY2FwYWJsZSBvZiBhZGRpdGlvbmFsIHJlc3BvbnNpYmlsaXR5KiouCgojIyBJIG1lZXQgdGhlIGNyaXRlcmlhLCB3aGF0IHNob3VsZCBJIGRvIG5leHQ/CgpBZnRlciB5b3UgaGF2ZSBtZXQgYWxsIHRoZSBjcml0ZXJpYSBhbmQgZmVlbCB0aGF0IHlvdSBhcmUgcmVhZHkgdG8gcHVyc3VlIHRoaXMgb3Bwb3J0dW5pdHksIDx1Pml0IGlzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gc2V0IHVwIGEgbWVldGluZyB3aXRoIHRoZSBMYWIgQ29vcmRpbmF0b3IgYW5kIERyLiBQZXRlcnNlbjwvdT4sIGFuZCB0byBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiByZXNwb25zaWJpbGl0aWVzIGFuZCBwcm9qZWN0cyB5b3Ugd291bGQgbGlrZSB0byBsZWFkLgpZb3Ugc2hvdWxkIGJlIHByZXBhcmVkIHRvIGNvbWUgdG8gdGhpcyBtZWV0aW5nIHdpdGggYSB0aG91Z2h0LW91dCBpZGVhIG9mIHdoYXQgcHJvamVjdHMgYW5kIHJvbGVzIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiBnaXZlbiB0aGVzZSBuZXcgcmVzcG9uc2liaWxpdGllcyBhbmQgcHJpdmlsZWdlcy4KCiMjIFBvdGVudGlhbCBBZHZhbmNlZCBSb2xlcwoKU29tZSBhZHZhbmNlZCByb2xlcyB0aGF0IGNhbiBiZSBwdXJzdWVkIGluY2x1ZGUgKGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8pOgoKKipJZiB5b3UgYXJlIGFscmVhZHkgYSBCZWhhdmlvciBUZXN0aW5nIFNwZWNpYWxpc3QgYW5kIHdhbnQgdG8gcHVyc3VlIGZ1cnRoZXIgYWR2YW5jZW1lbnQgdG8gYmVjb21lIGFuICpBZHZhbmNlZCogQmVoYXZpb3IgVGVzdGluZyBTcGVjaWFsaXN0OioqCgotIExlYWQgRTogdHJhaW5pbmcsIHN1cGVydmlzaW5nLCBxdWFsaXR5IGNvbnRyb2wgKHByb2NlZHVyYWwgYW5kIGRhdGEgYXVkaXRzKSBmb3IgTFYxCgoqKklmIHlvdSBhcmUgYWxyZWFkeSBhbiBFRUcgU3BlY2lhbGlzdCBhbmQgd2FudCB0byBwdXJzdWUgZnVydGhlciBhZHZhbmNlbWVudCB0byBiZWNvbWUgYW4gKkFkdmFuY2VkKiBFRUcgU3BlY2lhbGlzdDoqKgoKLSBMZWFkIEU6IHRyYWluaW5nLCBzdXBlcnZpc2luZywgcXVhbGl0eSBjb250cm9sIChwcm9jZWR1cmFsIGFuZCBkYXRhIGF1ZGl0cykgZm9yIExWMgotIFByZWxpbWluYXJ5IGhlbHAgd2l0aCBkYXRhIGFuYWx5c2VzIGFuZCBkYXRhIHByb2Nlc3NpbmcgKGUuZy4sIEVFRyBkYXRhKQoKKipJZiB5b3UgYXJlIGFscmVhZHkgYSBEYXRhIFNwZWNpYWxpc3QgYW5kIHdhbnQgdG8gcHVyc3VlIGZ1cnRoZXIgYWR2YW5jZW1lbnQgdG8gYmVjb21lIGFuICpBZHZhbmNlZCogRGF0YSBTcGVjaWFsaXN0OioqCgotIEFkdmFuY2VkIGNvZGluZyByZXNwb25zaWJpbGl0aWVzLCBpbmNsdWRpbmcgRGF0YXZ5dSBjb2RpbmcsIGhlbHBpbmcgZGV2ZWxvcCBuZXcgY29kaW5nIHN5c3RlbXMgZm9yIHRhc2tzIG5vdCBjdXJyZW50bHkgYmVpbmcgY29kZWQsIGV0Yy4KLSBJZiB5b3Ugd2lzaCB0byBiZSB0cmFpbmVkIG9uIERhdGF2eXUgY29kaW5nLCB5b3UgbXVzdCBjb21taXQgdG8gc3RheWluZyBpbiBsYWIgYXQgbGVhc3QgYW4gYWRkaXRpb25hbCAzIHNlbWVzdGVycyBmcm9tIHdoZW4gdHJhaW5pbmcgYmVnaW5zLgotIEluIGNoYXJnZSBvZiByZWNydWl0bWVudCBhbmQgcmV0ZW50aW9uIGV2ZW50cy9vcHBvcnR1bml0aWVzCi0gQ29taW5nIHVwIHdpdGggbmV3IGlkZWFzIGFuZCBzeXN0ZW1zIGZvciBpbXBsZW1lbnRhdGlvbgotIENvbnRhY3Rpbmcgb3JnYW5pemF0aW9ucyB0byBjb29yZGluYXRlIHJlY3J1aXRtZW50Ci0gU29jaWFsIG1lZGlhLCBwb3N0Y2FyZHMsIG5ld3NsZXR0ZXIsIGhvbGlkYXkgY2FyZHMsIGRpcGxvbWFzCgojIyBCZW5lZml0cyBvZiBBc3N1bWluZyBhbiBBZHZhbmNlZCBSb2xlCgoqKlJlc2VhcmNoIHdvcmtzIGZvciB5b3VyIENWOioqIE9uZSBvZiB0aGUgbWFqb3IgcGVya3Mgb2YgdGhpcyByb2xlIGlzIHRoYXQgeW91IG1heSBiZSBhYmxlIHRvIHB1cnN1ZSBhIHdyaXR0ZW4gcGllY2Ugb2YgcmVzZWFyY2ggKHBhcGVyLCBwb3N0ZXIsIGNvbmZlcmVuY2UgcHJlc2VudGF0aW9uLCBldGMuKSB0aGF0IGNhbiBiZSBhIGdyZWF0IGJvb3N0IGZvciB5b3VyIENWIQoKKipDb2xsYWJvcmF0aXZlIHJlc2VhcmNoIHByb2plY3RzIGluIHRoZSBsYWI6KiogVGhpcyBjYW4gdGFrZSBtYW55IGZvcm1zIChlLmcuLCBwb3N0ZXIsIHBhcGVyKS4KWW91IGFyZSBlbmNvdXJhZ2VkIHRvIGFzayBhIGN1cnJlbnQgYWR2YW5jZWQgUkEsIGEgZ3JhZHVhdGUgc3R1ZGVudCBpbiB0aGUgbGFiLCB0aGUgTGFiIENvb3JkaW5hdG9yLCBhbmQvb3IgRHIuIFBldGVyc2VuIGFib3V0IHdoYXQgdGhpcyBtYXkgZW50YWlsLgoKKipSZWR1Y2VkIGF2YWlsYWJpbGl0eSBleHBlY3RhdGlvbjoqKiBhZHZhbmNlZCBSQXMgYXJlIGV4cGVjdGVkIHRvIG1ha2UgdGhlbXNlbHZlcyBhdmFpbGFibGUgMSBuaWdodCBwZXIgd2VlayAmIDUgd2Vla2VuZCBkYXlzIHBlciBzZW1lc3RlciB0byB0cmFpbi9jb2FjaCBuZXcgZXhwZXJpbWVudGVycy9ydW4gdmlzaXRzICh3aGVuIG5lZWRlZCkuCgoqKlJlZ2lzdGVyaW5nIGZvciBBZHZhbmNlZCBSZXNlYXJjaCBQcmFjdGljdW0gaW4gUHN5Y2hvbG9neSAoUFNZOjM5OTUpOioqIGlmIHRoZSBSQSdzIHJvbGUgaW5jbHVkZXMgYWR2YW5jZWQgcGFydGljaXBhdGlvbiBpbiBsYWItcmVsYXRlZCByZXNlYXJjaCBwcm9qZWN0cyBpbiBzdWNoIGEgd2F5IHRoYXQgaW5jbHVkZXMgc2lnbmlmaWNhbnQgcmVhZGluZyBhbmQgd3JpdGluZyAoc3VjaCBhcyB3aGVuIHBlcmZvcm1pbmcgYW4gaW5kZXBlbmRlbnQgcmVzZWFyY2ggcHJvamVjdCksIHRoZSBSQSBtYXkgcmVnaXN0ZXIgZm9yIFBTWTozOTk1OiAiQWR2YW5jZWQgUmVzZWFyY2ggUHJhY3RpY3VtIGluIFBzeWNob2xvZ3kiLgpIb3dldmVyLCBSQXMgc2hvdWxkIHNlZWsgcGVybWlzc2lvbiBmcm9tIERyLiBQZXRlcnNlbiBiZWZvcmUgZW5yb2xsaW5nIGluIFBTWTozOTk1LgoKIyMgQSBOb3RlIEFib3V0IE90aGVyIE9wcG9ydHVuaXRpZXMgZm9yIEFkdmFuY2VtZW50CgpJbiBhZGRpdGlvbiB0byBvcHBvcnR1bml0aWVzIGZvciBhZHZhbmNlbWVudCBpbiBsYWIsIHRoZXJlIG1heSBhbHNvIGJlIG9wcG9ydHVuaXRpZXMgdG8gY29uZHVjdCBpbmRlcGVuZGVudCByZXNlYXJjaCBwcm9qZWN0cywgdG8gY29uZHVjdCBhbiBbSG9ub3JzIHByb2plY3QvdGhlc2lzXShob25vcnMuaHRtbCksIG9yIHRvIGNvbnRyaWJ1dGUgdG8gcGFwZXJzLCBncmFudHMsIG9yIGNvbmZlcmVuY2UgcG9zdGVyIHByZXNlbnRhdGlvbnMuCkFuIGltcG9ydGFudCBwYXJ0IG9mIHByb2Zlc3Npb25hbCBkZXZlbG9wbWVudCBpcyBsZWFybmluZyB0byBhZHZvY2F0ZSBmb3IgeW91cnNlbGYgYW5kIHRvIGlucXVpcmUgYWJvdXQgb3Bwb3J0dW5pdGllcyB0aGF0IGFyZSBhdmFpbGFibGUuCklmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiBnYWluaW5nIGV4cGVyaWVuY2UgaW4gYSBjZXJ0YWluIGFyZWEgb2YgbGFiIHdvcmssIHRha2luZyBvbiBhIGxlYWRlcnNoaXAgcm9sZSwgb3IgaWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIGFuIG9wcG9ydHVuaXR5IHRvIHRha2Ugb24gYSBtb3JlIGFkdmFuY2VkIHJvbGUgaW4gdGhlIHByb2plY3QsIGp1c3QgYXNrIQpUaGVyZSBtYXkgYmUgb3Bwb3J0dW5pdGllcyBhdmFpbGFibGUgZm9yIFJBcyB0byBnYWluIGV4cGVyaWVuY2UgaW4gc3BlY2lhbGl6ZWQgYXJlYXMgb2YgbGFiIHdvcmsgKGUuZy4sIHJlY3J1aXRtZW50IG9mIHBhcnRpY2lwYW50cywgZGF0YSBwcm9jZXNzaW5nKSBvciBldmVuIHRvIGVhcm4gYXV0aG9yc2hpcCBvbiBhIHBhcGVyIG9yIHBvc3RlciBmb3IgYW4gb25nb2luZyBwcm9qZWN0LgpJZiB5b3UgYXJlIG1vdGl2YXRlZCB0byBnYWluIHRoZXNlIGtpbmRzIG9mIG9wcG9ydHVuaXRpZXMsIHlvdSBhcmUgd2VsY29tZSB0byBhc2sgYW5kIHNlZSB3aGF0IG1heSBiZSBhdmFpbGFibGUuCkFkdmFuY2VkIHByb2plY3RzIGFyZSBnaXZlbiBwcmlvcml0eSB0byBSQXMgd2hvIGhhdmUgc2hvd24gcmVsaWFiaWxpdHkgYW5kIGNvbW1pdG1lbnQuCgojIyBBIE5vdGUgQWJvdXQgTGFiIEhvdXJzIGZvciBBZHZhbmNlZCBUYXNrcwoKQXMgbWVudGlvbmVkIGFib3ZlLCB0aGVyZSBhcmUgYSBudW1iZXIgb2Ygb3Bwb3J0dW5pdGllcyB0byBnYWluIGFkdmFuY2VkIGV4cGVyaWVuY2VzIGluIHRoZSBsYWIuClRoZXJlIG1heSBiZSBhbiBvcHBvcnR1bml0eSBmb3Igc29tZSBleHBlcmllbmNlcyB0byBjb3VudCBmb3IgbGFiIGhvdXJzIGlmOgoKICAgMS4gVGhlIHByb2plY3QgaXMgYXNzaWduZWQgdG8gdGhlIFJBCiAgIDEuIFRoZSBwcm9qZWN0IGJlbmVmaXRzIHRoZSBvdmVyYWxsIGxhYgogICAxLiBUaGUgUkEgaGFzIGRlbW9uc3RyYXRlZCBwcm9maWNpZW5jeSBpbiB0aGUgc2tpbGxzIG5lZWRlZCB0byBjb21wbGV0ZSB0aGUgcHJvamVjdAogICAxLiBUaGUgcHJvamVjdCBpcyBub3QgcGFydCBvZiBhbiBbSG9ub3JzIHByb2plY3QvdGhlc2lzXShob25vcnMuaHRtbCksIG9yIGFub3RoZXIgaW5kZXBlbmRlbnQgcmVzZWFyY2ggZXhwZXJpZW5jZQoKRm9yIGV4YW1wbGUsIG91ciBsYWIgbGV2ZXJhZ2VzIFtgUmBdKGh0dHBzOi8vZGV2cHN5bGFiLmdpdGh1Yi5pby9EYXRhQW5hbHlzaXMvUi5odG1sKSBmb3IgYSB2YXJpZXR5IG9mIHRhc2tzLgpSQXMgbWF5IGJlIGFibGUgdG8gdXNlIFtgUmBdKGh0dHBzOi8vZGV2cHN5bGFiLmdpdGh1Yi5pby9EYXRhQW5hbHlzaXMvUi5odG1sKSB0byBjb21wbGV0ZSBsYWIgcHJvamVjdHMgaWYgdGhleSB0YWtlIHRoZSB0aW1lIG91dHNpZGUgb2YgbGFiIGhvdXJzIHRvIHRhY2tsZSB0aGUgbGVhcm5pbmcgY3VydmUgb2YgW2BSYF0oaHR0cHM6Ly9kZXZwc3lsYWIuZ2l0aHViLmlvL0RhdGFBbmFseXNpcy9SLmh0bWwpLgpGdXJ0aGVybW9yZSwgUkFzIG1heSBoYXZlIGFuIG9wcG9ydHVuaXR5IHRvIGxlYXJuIGhvdyBFRUcgZGF0YSBpcyBwcm9jZXNzZWQuClRoZXNlIGV4cGVjdGF0aW9ucyBhcmUgbm90IG1lYW50IHRvIGRpc2NvdXJhZ2UgUkFzIGZyb20gcHVyc3VpbmcgYWR2YW5jZWQgZXhwZXJpZW5jZXMsIGJ1dCB0byBzZXQgZXhwZWN0YXRpb25zIGZvciBob3cgdGhlc2UgZXhwZXJpZW5jZXMgY2FuIChvciBpbiBvdGhlciBjYXNlcyBjYW5ub3QpIGNvdW50IGZvciBsYWIgaG91cnMuCkhvd2V2ZXIsIGV2ZW4gaWYgZXhwZXJpZW5jZXMgZG8gbm90IGNvdW50IHRvd2FyZCBsYWIgaG91cnMsIHRoZXkgYXJlIHN0aWxsIHZhbHVhYmxlIGxlYXJuaW5nIGV4cGVyaWVuY2VzIHRoYXQgY2FuIGFkdmFuY2UgeW91ciBwcm9mZXNzaW9uYWwgZGV2ZWxvcG1lbnQgaW4gcHVyc3VpdCBvZiB5b3VyIGNhcmVlciBnb2Fscy4KSWYgeW91IHdvdWxkIGxpa2UgdG8gbGVhcm4gbW9yZSBhYm91dCBlaXRoZXIgb2YgdGhlc2Ugb3Bwb3J0dW5pdGllcywgb3IgYW55IG90aGVycywgcGxlYXNlIHJlYWNoIG91dCB0byB0aGUgTGFiIENvb3JkaW5hdG9yLgoKIyMgSG9ub3JzIFRoZXNlcy9Qcm9qZWN0cwoKRm9yIGluZm9ybWF0aW9uIG9uIGNvbmR1Y3RpbmcgYW4gSG9ub3JzIFRoZXNpcy9Qcm9qZWN0LCBzZWUgW2hlcmVdKGhvbm9ycy5odG1sKS4KCiMgTGFiIEJ1ZGR5IFN5c3RlbQoKT3VyIGJ1ZGR5IHN5c3RlbSBpcyBhIGtub3dsZWRnZS1zaGFyaW5nIG1ldGhvZCB0aGF0IHdlIHVzZSB3aGVuIG9uYm9hcmRpbmcgbmV3IFJBcyBpbnRvIHRoZSBsYWIuCkVhY2ggbmV3IFJBIGlzIHBhaXJlZCB1cCB3aXRoIGFuIGV4aXN0aW5nIFJBIHdobyB3aWxsIGd1aWRlIHRoZW0gdGhyb3VnaCB0aGVpciBmaXJzdCB3ZWVrcyBpbiB0aGVpciBuZXcgcm9sZS4KVGhlIGV4Y2hhbmdlIG9mIGluZm9ybWF0aW9uIGdvZXMgYm90aCB3YXlzLgpOZXcgUkFzIGFyZSBlbmNvdXJhZ2VkIHRvIHNoYXJlIHRpcHMsIGtub3dsZWRnZSwgYW5kIHRlY2huaXF1ZXMgZnJvbSBwcmV2aW91cyBleHBlcmllbmNlcywgd2hpbGUgdGhlIGV4aXN0aW5nIFJBcyBtYWtlcyBzdXJlIHRoYXQgbmV3IGxhYiBtZW1iZXJzIGZlZWwgd2VsY29tZS4gCgpEdXJpbmcgdGhlaXIgZmlyc3Qgd2Vla3MsIG5ldyBSQXMgY2FuIGZlZWwgdmVyeSBvdmVyd2hlbG1lZCBhbmQgbG9zdCwgYmVjYXVzZSB0aGV5IGFyZSBwcmVzZW50ZWQgd2l0aCBjb25zaWRlcmFibGUgbmV3IGluZm9ybWF0aW9uIGluIGEgc2hvcnQgYW1vdW50IG9mIHRpbWUuCkFsdGhvdWdoIG5ldyBSQXMgdHlwaWNhbGx5IGhhdmUgdGhlIGVzc2VudGlhbCBza2lsbHMgYW5kIGludGVyZXN0cyB0byBzdWNjZWVkIGluIHRoZSBsYWIsIHRoZXkgYXJlIHVuZmFtaWxpYXIgd2l0aCB0aGUgd29yayBjdWx0dXJlLCB0aGUgbGFiIHByb2Nlc3NlcywgYW5kICJ1bnNwb2tlbiBydWxlc1teMV0uIgpXaGlsZSB0aGUgY29kaW5nIHRlYW0gdGVhY2hlcyB0aGUgUkEgdGhlIGNvZGluZyBhbmQgZW50cnkgc2tpbGxzLCBhIGxhYiBidWRkeSBoZWxwcyBhIG5ldyBSQSB0byBlYXNlIHRoZWlyIHRyYW5zaXRpb24gZHVyaW5nIHRoZSBvcmllbnRhdGlvbiBwaGFzZSBhbmQgcHJvdmlkZXMgZ3VpZGFuY2UgYW5kIGFkdmljZSBpbiBhIG1vcmUgaW5mb3JtYWwgc2V0dGluZy4KVGhlIGdvYWwgb2YgdGhlIGJ1ZGR5IHN5c3RlbSBpcyB0aGF0IG5ldyBSQXMgZmVlbCB3ZWxjb21lIGFuZCBoYXZlIHNvbWVvbmUgaW4gdGhlIGxhYiB0aGV5IGNhbiBjb25uZWN0IHdpdGguCk5ldyBSQXMgc2hvdWxkIGJlIGludHJvZHVjZWQgdG8gdGhlaXIgYnVkZHkgYXQgdGhlIGVuZCBvZiB0aGVpciBvcmllbnRhdGlvbiBzZXNzaW9uLgoKIyBTY2hlZHVsaW5nIHsjc2NoZWR1bGluZ30KCiMjIFNjaGVkdWxpbmcgU3lzdGVtIE92ZXJ2aWV3IHsjc2NoZWR1bGluZ092ZXJ2aWV3fQoKQWZ0ZXIgY291cnNlIHJlZ2lzdHJhdGlvbiBhdCB0aGUgZW5kIG9mIGVhY2ggc2VtZXN0ZXIsIFJBcyBhcmUgdG8gc3VibWl0IHRoZWlyIGNvdXJzZSBzY2hlZHVsZXMgZm9yIHRoZSBmb2xsb3dpbmcgc2VtZXN0ZXIgdG8gdGhlIExhYiBDb29yZGluYXRvci4KSWYgYW4gUkEgaGFzIGEgc3RyaWN0LCBzZXQgd29yayBzY2hlZHVsZSwgdGhpcyBjYW4gYmUgaW5jbHVkZWQgd2l0aCB0aGUgY291cnNlIHNjaGVkdWxlLgpXZSB3aWxsIGRvIG91ciBiZXN0IHRvIGFjY29tbW9kYXRlIHdvcmsgc2NoZWR1bGVzOyBob3dldmVyLCBjbGFzc2VzIChpbmNsdWRpbmcgbGFiKSB0YWtlIHByZWNlZGVuY2Ugb3ZlciB3b3JrIHNjaGVkdWxlcy4KVGhlIExhYiBDb29yZGluYXRvciB3aWxsIHJldmlldyBldmVyeW9uZSdzIGluZGl2aWR1YWwgc2NoZWR1bGVzIGFuZCBjcmVhdGUgYSBsYWIgc2NoZWR1bGUgdGhhdCBiZXN0IGFsbG93cyB2aXNpdHMgdG8gYmUgc2NoZWR1bGVkLCB3aGlsZSByZXNwZWN0aW5nIFJBIGNvdXJzZSBzY2hlZHVsZXMgYW5k4oCUYXMgYmVzdCBhcyBwb3NzaWJsZeKAlG90aGVyIHJlc3BvbnNpYmlsaXRpZXMuCk9uY2UgdGhlIExhYiBDb29yZGluYXRvciBoYXMgZmluYWxpemVkIHRoZSBsYWIgc2NoZWR1bGUgZm9yIHRoZSBzZW1lc3RlciwgdGhleSB3aWxsIGVtYWlsIGVhY2ggUkEgdGhlaXIgd2Vla2x5IGxhYiBzY2hlZHVsZS4KVGhpcyB3ZWVrbHkgbGFiIHNjaGVkdWxlIGNvbnNpc3RzIG9mIDEwIHRvdGFsIGhvdXJzIHBlciB3ZWVrLgpUaGlzIGluY2x1ZGVzIDkgd2Vla2x5IGhvdXJzIG9mIGxhYiB0aW1lLCBkdXJpbmcgd2hpY2ggUkFzIG1heSBydW4gdmlzaXRzLCBoZWxwIHdpdGggcmVjcnVpdG1lbnQsIGNvbXBsZXRlIGRhdGEgZW50cnkgYW5kIGNvZGluZyB0YXNrcywgYXNzaXN0IHRoZSBMYWIgQ29vcmRpbmF0b3Igd2l0aCBhc3NpZ25lZCB0YXNrcywgZXRjLgpBZGRpdGlvbmFsbHksIGFsbCBSQXMgYXJlIGV4cGVjdGVkIHRvIGF0dGVuZCBhIG9uZS1ob3VyIGxhYiBtZWV0aW5nIGV2ZXJ5IHdlZWsgd2hlbiB0aGUgZW50aXJlIHRlYW0gYXNzZW1ibGVzIHRvIGRpc2N1c3MgbGFiLXJlbGF0ZWQgaXNzdWVzIGFuZCBzY2llbmNlLgpPbmNlIHRoZSBzZW1lc3RlciBzY2hlZHVsZXMgaGF2ZSBiZWVuIHNlbnQgb3V0IHRvIGFsbCBSQXMsIGl0IGlzIGV4cGVjdGVkIHRoYXQgUkFzIHNjaGVkdWxlIG90aGVyIGV2ZW50cyBhcm91bmQgdGhlaXIgc2NoZWR1bGVkIGxhYiBob3VycyB0byB0aGUgYmVzdCBvZiB0aGVpciBhdmFpbGFiaWxpdHkgKGkuZS4sIHRoZXJlIGFyZSBubyBtYWpvciBzY2hlZHVsZSBjaGFuZ2VzIHRoYXQgd291bGQgaW1wYWN0IGFuIFJBJ3Mgc2NoZWR1bGVkIGxhYiBob3VycyBmb3IgdGhlIHNlbWVzdGVyKS4KCkJ5IHRoZSBmaXJzdCBkYXkgb2YgdGhlIG5ldyBzZW1lc3RlciwgUkFzIGFyZSBleHBlY3RlZCB0byBzdWJtaXQgdG8gdGhlIExhYiBDb29yZGluYXRvciB0aGVpciBzdGFuZGFyZCB3ZWVrbHkgYXZhaWxhYmlsaXR5LgpUaGlzIHNob3VsZCBpbmNsdWRlIGFsbCBub3JtYWxseSBvY2N1cnJpbmcgd2Vla2x5IGF2YWlsYWJpbGl0eSBkdXJpbmcgd2hpY2ggdGhlIExhYiBDb29yZGluYXRvciBjYW4gc2NoZWR1bGUgdGhlbSB0byBydW4gdmlzaXRzIHRoYXQgb2NjdXIgb3V0c2lkZSBvZiBhbiBSQSdzIG5vcm1hbCBsYWIgaG91cnMuClRoaXMgYXZhaWxhYmlsaXR5IHNjaGVkdWxlIHNob3VsZCBpbmNsdWRlIGF0IGxlYXN0IHR3byBhdmFpbGFibGUgd2Vla2RheSBldmVuaW5ncyAoTeKAk0YpIHBlciB3ZWVrLgpUaGUgTGFiIENvb3JkaW5hdG9yIHdpbGwga2VlcCBhIGNvbXBvc2l0ZSBzY2hlZHVsZSBvZiBSQSB3ZWVrbHkgYXZhaWxhYmlsaXR5IHRvIHVzZSBpbiBzY2hlZHVsaW5nIHZpc2l0cyB3aGVuIGFkZGl0aW9uYWwgY292ZXJhZ2UgaXMgbmVlZGVkIGJleW9uZCBSQSBsYWIgc2NoZWR1bGVzLgpJZiBhbiBSQSBpcyBzY2hlZHVsZWQgdG8gcnVuIGEgdmlzaXQgZHVyaW5nIHRoZWlyIGF2YWlsYWJpbGl0eSBidXQgb3V0c2lkZSBvZiB0aGVpciBub3JtYWwgbGFiIGhvdXJzLCB0aGUgUkEgd2lsbCBiZSBub3RpZmllZCBvZiB0aGUgdmlzaXQgZGV0YWlscyB2aWEgYW4gaW52aXRhdGlvbiB0byB0aGUgT3V0bG9vayBjYWxlbmRhciBldmVudCwgYnV0IHRoZSBMYWIgQ29vcmRpbmF0b3Igd2lsbCBub3QgcmVhY2ggb3V0IHRvIHRoZW0gYmVmb3JlIHNjaGVkdWxpbmcgdG8gY29uZmlybSB0aGVpciBhdmFpbGFiaWxpdHkuClRoZSBSQSBpcyBleHBlY3RlZCB0byBhY2NlcHQgdGhlIGludml0YXRpb24gdG8gdGhlIGNhbGVuZGFyIGV2ZW50IGluIE91dGxvb2suCgpJZiBzY2hlZHVsaW5nIGNvbW1pdG1lbnRzIGNvbWUgdXAgdGhyb3VnaG91dCB0aGUgc2VtZXN0ZXIgZHVyaW5nIGFueSB0aW1lIHRoYXQgYW4gUkEgc3VibWl0dGVkIGFzIHBhcnQgb2YgdGhlaXIgd2Vla2x5IGF2YWlsYWJpbGl0eSwgdGhleSBhcmUgcmVzcG9uc2libGUgZm9yIGFkZGluZyBpdCB0byB0aGUgc2hhcmVkIE91dGxvb2sgIkJ1c3kgQ2FsZW5kYXIiIChSRVMtRFBMLUJ1c3kpIHNvIHRoYXQgdGhlIExhYiBDb29yZGluYXRvciBrbm93cyBub3QgdG8gc2NoZWR1bGUgdGhlbS4KSXQgaXMgYWNjZXB0YWJsZSBmb3IgYW4gUkEncyBhdmFpbGFibGUgZXZlbmluZ3MgdG8gdmFyeSB3ZWVrIHRvIHdlZWssIGJ1dCBhbGwgUkFzIGFyZSBleHBlY3RlZCB0byBtYWludGFpbiBhdCBsZWFzdCB0d28gYXZhaWxhYmxlIGV2ZW5pbmdzIGV2ZXJ5IHdlZWsuClJBcyBhcmUgcmVzcG9uc2libGUgZm9yIGFueSB2aXNpdCB0aGV5IG1heSBiZSBzY2hlZHVsZWQgdG8gcnVuIGR1cmluZyB0aGUgYXZhaWxhYmlsaXR5IHRoZXkgcHJvdmlkZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZW1lc3Rlci4KVGhlcmVmb3JlLCBpdCBpcyBpbXBlcmF0aXZlIHRoYXQgYWxsIGFwcG9pbnRtZW50cyBhbmQgZXZlbnRzIHRoYXQgb2NjdXIgZHVyaW5nIHRoZWlyIG5vcm1hbCB3ZWVrbHkgYXZhaWxhYmlsaXR5IGFyZSBzaGFyZWQgd2l0aCB0aGUgTGFiIENvb3JkaW5hdG9yIHZpYSB0aGUgIkJ1c3kgQ2FsZW5kYXIiIGFzIHNvb24gYXMgcG9zc2libGUuCgpJZiBhbiBSQSBoYXMgYmVlbiBzY2hlZHVsZWQgZm9yIGEgdmlzaXQgZHVyaW5nIHRoZWlyIGF2YWlsYWJpbGl0eSAoaW5jbHVkaW5nIGF2YWlsYWJsZSB0aW1lIG9uIHdlZWtkYXlzLCBhdmFpbGFibGUgZXZlbmluZ3MsIGFuZCBjaG9zZW4gd2Vla2VuZCBkYXlzKSwgaGFzIGJlZW4gbm90aWZpZWQgb2YgdGhpcyB2aXNpdCwgYW5kIGNhbm5vdCBydW4gdGhlIHZpc2l0IGR1ZSB0byBhbiB1bmV4cGVjdGVkIGNvbmZsaWN0LCB0aGUgUkEgaXMgcmVzcG9uc2libGUgZm9yIHBvc3Rpbmcgb24gdGhlIGAjc2NoZWR1bGluZ2AgY2hhbm5lbCBvbiBTbGFjayB0byBhc2sgZm9yIGEgY292ZXIuCkl0IGlzIHRoZSBSQSdzIHJlc3BvbnNpYmlsaXR5IHRvIGxldCB0aGUgTGFiIENvb3JkaW5hdG9yIGtub3cgd2hvIHdpbGwgY292ZXIgdGhlIHZpc2l0LgpJZiB1bmFibGUgdG8gZmluZCBhIGNvdmVyLCBpdCBpcyB0aGUgUkEncyByZXNwb25zaWJpbGl0eSB0byBsZXQgdGhlIExhYiBDb29yZGluYXRvciBrbm93IGJ5IGF0IGxlYXN0IDQ4IGhvdXJzIGJlZm9yZSB0aGUgdmlzaXQuCgpGb3IgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHdlZWtlbmQgdmlzaXRzLCBwbGVhc2UgcmVmZXIgdG8gdGhlIHNlY3Rpb24gcmVnYXJkaW5nIHRoZSBbV2Vla2VuZCBPbi1DYWxsIFNjaGVkdWxlXSgjc2NoZWR1bGluZ1dlZWtlbmQpLgoKRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBzY2hlZHVsaW5nIGV4cGVjdGF0aW9ucyBmb3IgdW5kZXJncmFkdWF0ZSBSQXMgb2YgdGhlIERldmVsb3BtZW50YWwgUHN5Y2hvcGF0aG9sb2d5IExhYiwgcGxlYXNlIHJlZmVyIHRvIHRoZSBzZWN0aW9uIG9uIFtTY2hlZHVsaW5nIEV4cGVjdGF0aW9uc10oZXhwZWN0YXRpb25zLXVuZGVyZ3JhZFJBLmh0bWwjc2NoZWR1bGluZ0V4cGVjdGF0aW9ucykuCgojIyBXZWVrZW5kIE9uLUNhbGwgU2NoZWR1bGUgeyNzY2hlZHVsaW5nV2Vla2VuZH0KCiMjIyBJbnRyb2R1Y3Rpb24KClRvIGVuc3VyZSB0aGF0IHRoZSBjb3ZlcmFnZSByZXNwb25zaWJpbGl0eSBmb3IgdmlzaXRzIHNjaGVkdWxlZCBvdXRzaWRlIG9mIG5vcm1hbCBsYWIgaG91cnMgaXMgc2hhcmVkIGVxdWFsbHkgYW1vbmcgYWxsIGxhYiBtZW1iZXJzLCBSQXMgYXJlIGV4cGVjdGVkIHRvIHNpZ24gdXAgZm9yIGF0IGxlYXN0IDggd2Vla2VuZCBkYXlzIGVhY2ggc2VtZXN0ZXIgd2hlbiB0aGV5IHdpbGwgYmUgIm9uLWNhbGwiLgpQbGVhc2Ugbm90ZSwgdGhpcyBkb2VzIG5vdCBtZWFuIHRoYXQgeW91IHdpbGwgYmUgZXhwZWN0ZWQgdG8gY29tZSBpbnRvIGxhYiBmb3IgZXZlcnkgZGF5IHlvdSBzaWduIHVwLgpUaGlzIGRvZXMgbWVhbiB0aGF0IGlmIGEgdmlzaXQgbmVlZHMgdG8gYmUgc2NoZWR1bGVkIG9uIGEgd2Vla2VuZCBkYXksIHRoZSBMYWIgQ29vcmRpbmF0b3IgbWF5IHNjaGVkdWxlIHlvdSB0byBoZWxwIHJ1biB0aGF0IHZpc2l0IHdpdGhvdXQgZmlyc3QgY29udGFjdGluZyB5b3UgdG8gYXNrIGlmIHlvdSBhcmUgYXZhaWxhYmxlLgoKWW91IGFyZSBleHBlY3RlZCB0byBzdGF5IGF2YWlsYWJsZSB0byBydW4gdmlzaXRzIG9uIHRoZSBkYXlzIHlvdSBhcmUgc2lnbmVkIHVwIGZvciB1bnRpbCAyNCBob3VycyBwcmlvci4KVGhlIExhYiBDb29yZGluYXRvciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IHNjaGVkdWxlIHlvdSBmb3IgYSB3ZWVrZW5kIG9yIGV2ZW5pbmcgdmlzaXQgd2l0aG91dCAyNCBob3Vycycgbm90aWNlIHRvIGxhYiBtZW1iZXJzLgpUaGUgTGFiIENvb3JkaW5hdG9yIG1heSByZXF1ZXN0IHZvbHVudGVlcnMgdG8gcnVuIHZpc2l0cyB0aGF0IGFyZSBzY2hlZHVsZWQgImxhc3QgbWludXRlIiAoaS5lLiwgd2l0aGluIDI0IGhvdXJzKSwgYnV0IHlvdSBhcmUgbm90IGV4cGVjdGVkIHRvIGJlIGF2YWlsYWJsZSBmb3IgImxhc3QtbWludXRlIiB2aXNpdHMgdW5sZXNzIHRoZXkgb2NjdXIgZHVyaW5nIHlvdXIgc2NoZWR1bGVkIGxhYiBob3Vycy4KSWYgYSB3ZWVrZW5kIHZpc2l0IGlzIHNjaGVkdWxlZCBhbmQgeW91IGFyZSBvbi1jYWxsIHRoYXQgZGF5LCB0aGUgTGFiIENvb3JkaW5hdG9yIHdpbGwgdGFnIHlvdSBpbiBhIFNsYWNrIHdpdGggdGhlIGRldGFpbHMgb2YgdGhlIHZpc2l0LgoKSWYgeW91IGNhbiBubyBsb25nZXIgaGVscCBydW4gYSB2aXNpdCB5b3UgaGF2ZSBiZWVuIHNjaGVkdWxlZCBmb3IsIGl0IGlzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gZmluZCBhbm90aGVyIFJBIHRvIHRyYWRlIHdpdGggeW91LgpVbHRpbWF0ZWx5IGV2ZXJ5b25lIGlzIGV4cGVjdGVkIHRvIGJlIG9uLWNhbGwgZm9yIGF0IGxlYXN0IDggd2Vla2VuZCBkYXlzIHBlciBzZW1lc3RlciAoYXBhcnQgZnJvbSBBZHZhbmNlZCBTcGVjaWFsaXN0czsgc2VlIHRoZSBzZWN0aW9uIG9uIFtSQSBBZHZhbmNlbWVudF0oI2FkdmFuY2VtZW50KSkuCgojIyMgUHJlcGFyYXRpb24KClRvIGVuc3VyZSB0aGUgcHJvY2VzcyBpcyBhcyBlZmZpY2llbnQgYXMgcG9zc2libGUsIHBsZWFzZSBicmluZyB5b3VyIGNhbGVuZGFyIHdpdGggeW91ciB3ZWVrZW5kIGF2YWlsYWJpbGl0eSBmb3IgdGhlIHNlbWVzdGVyLgpCcmluZyBhIHdyaXR0ZW4gbGlzdCBvZiB0aGUgd2Vla2VuZCBkYXlzIHlvdSBjYW5ub3QgYmUgb24tY2FsbCBmb3IgdGhhdCBzZW1lc3Rlci4KCiMjIyBQcm9jZWR1cmUKCjEuIFRoZSBMYWIgQ29vcmRpbmF0b3Igd2lsbCBzZXQgdXAgc2VwYXJhdGUgbWVldGluZ3Mgd2l0aCBiZWhhdmlvcmFsIHRlc3Rpbmcgc3BlY2lhbGlzdHMsIEVFRyB0ZXN0aW5nIHNwZWNpYWxpc3RzLCBhbmQgZGF0YSBzcGVjaWFsaXN0cy9uZXcgUkFzIGR1cmluZyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgc2VtZXN0ZXIuCkF0IHRoZXNlIG1lZXRpbmdzLCB0aGUgTGFiIENvb3JkaW5hdG9yIHdpbGwgY29uZHVjdCB0aGUgd2Vla2VuZCBzY2hlZHVsaW5nLgoxLiBFdmVyeW9uZSBkcmF3cyBhIG51bWJlci4KMS4gUGFzcyB0aGUgc2lnbi11cCBzaGVldCBhcm91bmQgeW91ciBncm91cCBmcm9tIGxvd2VzdCBudW1iZXIgdG8gaGlnaGVzdCBudW1iZXIsIGFuZCBldmVyeSBSQSB3aWxsIHNpZ24gdXAgZm9yIG9uZSBkYXkgcGVyIHR1cm4uCkVhY2ggcm91bmQsIHRoZSBvcmRlciByZXZlcnNlcyAoaS5lLiwgc25ha2Ugb3JkZXIpLgpUaGF0IGlzLCB3aG9ldmVyIGdldHMgdGhlIGZpcnN0IHBpY2sgaW4gcm91bmQgMSBnZXRzIHRoZSBsYXN0IHBpY2sgaW4gcm91bmQgMi4KQ29udGludWUgdGhpcyBwcm9jZXNzIHRvIHNpZ24gdXAgZm9yIGRheXMgdW50aWwgZXZlcnlvbmUgaGFzIHNpZ25lZCB1cCBmb3IgYXQgbGVhc3QgOCBkYXlzIGVhY2guCk5vdGUgdGhhdCB0aGlzIG1heSBtZWFuIHNpZ25pbmcgdXAgZm9yIGEgZGF5IHRoYXQgeW91IGFyZSB1bmF2YWlsYWJsZSAoaW4gb3JkZXIgdG8gc2lnbiB1cCBmb3IgOCBkYXlzKS4KICAgIGEuIERhdGEgU3BlY2lhbGlzdHMgYW5kIG5ldyBSQXMgd2lsbCBzaWduIHVwIGZvciBSQSBzbG90c+KAlHRoZSBMYWIgQ29vcmRpbmF0b3Igd2lsbCBzY2hlZHVsZSBSQSBhbmQgQ2FtZXJhIHJvbGVzIGludGVyY2hhbmdlYWJseSAoaS5lLiBSQXMgd2lsbCBiZSByYW5kb21seSBhc3NpZ25lZCBlaXRoZXIgYSBDYW1lcmEgb3IgUkEgcm9sZSBieSB0aGUgTGFiIENvb3JkaW5hdG9yKS4KICAgIGIuIFRyYWluZWQgcmV0dXJuaW5nIFJBcyAoQmVoYXZpb3JhbCBUZXN0aW5nIFNwZWNpYWxpc3RzLCBFRUcgU3BlY2lhbGlzdHMsIGFuZCBEYXRhIFNwZWNpYWxpc3RzKSBzaG91bGQgcHJpb3JpdGl6ZSBzaWduaW5nIHVwIGZvciB2aXNpdHMgZWFybGllciBpbiB0aGUgc2VtZXN0ZXIgZmlyc3QsIGlmIHBvc3NpYmxlLgogICAgV2hlbiB0aGUgbmV3IFJBcyBjb21wbGV0ZSB0cmFpbmluZyBmb3IgdmlzaXQgcm9sZXMsIHRoZXkgd2lsbCBiZSBhYmxlIHRvIGhlbHAgd2l0aCB2aXNpdHMgbGF0ZXIgaW4gdGhlIHNlbWVzdGVyLgogICAgYy4gQWZ0ZXIgZXZlcnlvbmUgaGFzIHNpZ25lZCB1cCBmb3IgOCBkYXlzLCBSQXMgd2lsbCBoYXZlIGFuIG9wcG9ydHVuaXR5IHRvIHRyYWRlIGRheXMgd2l0aCBlYWNoIG90aGVyIChzZWUgYmVsb3cpLgoxLiBPbmNlIHRoaXMgcHJvY2VzcyBpcyBjb21wbGV0ZSwgdGhlIHNpZ24tdXAgZm9ybSB3aWxsIGJlIGtlcHQgaW4gdGhlIExhYiBDb29yZGluYXRvcidzIG9mZmljZSBhbmQgcmVtYWluIHRoZXJlIGZvciBvbmUgd2Vlay4KRHVyaW5nIHRoaXMgb25lIHdlZWssIFJBcyB3aWxsIGhhdmUgdGhlIG9wcG9ydHVuaXR5IHRvIG1ha2UgYW55IGZpbmFsIGFkanVzdG1lbnRzIG5lY2Vzc2FyeSAoaS5lLiwgdHJhZGUgZGF5cyB3aXRoIG90aGVyIFJBcykuClJBcyBtdXN0IG5vdGlmeSB0aGUgTGFiIENvb3JkaW5hdG9yIG9mIGFueSB0cmFkZXMvY2hhbmdlcyB0byB0aGVpciB3ZWVrZW5kIHNpZ24gdXBzIHdpdGhpbiB0aGlzIHdlZWsuClJlbWVtYmVyLCBhdCB0aGUgZW5kIG9mIHRoZSBvbmUgd2VlaywgZXZlcnlvbmUgc2hvdWxkIHN0aWxsIGJlIHNpZ25lZCB1cCBmb3IgYSB0b3RhbCBvZiA4IGRheXMsIGFuZCBldmVyeW9uZSB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBoZWxwaW5nIHJ1biBhbnkgdmlzaXRzIHRoYXQgbWF5IGJlIHNjaGVkdWxlZCBvbiB0aG9zZSBkYXlzLgoKIyMgU2hhcmVkIENhbGVuZGFycwoKSG93IHRvIGFkZCB0aGUgc2hhcmVkIGNhbGVuZGFyczoKCjEuIE9wZW4geW91ciBwZXJzb25hbCBPZmZpY2UgMzY1IE91dGxvb2sgY2FsZW5kYXIgCjEuIFNlbGVjdCAiQWRkIENhbGVuZGFyIiB0b3dhcmRzIHRoZSB0b3Agb2YgdGhlIHNjcmVlbgogICAgYS4gU2VsZWN0ICJGcm9tIGRpcmVjdG9yeSIKICAgIGIuIFR5cGUgaW4gdGhlIERpcmVjdG9yeSBib3g6CjEuIEZvciB0aGUgUkEgU2NoZWR1bGUsIHR5cGU6ICJSRVMtUkEtTEMtU2NoZWQiIChSRVMtUkEtTEMtU2NoZWRAdWlvd2EuZWR1KQogICAgYS4gU2VsZWN0ICJPcGVuIgoxLiBGb3IgdGhlIFBhcnRpY2lwYW50cycgU2NoZWR1bGUsIHR5cGU6ICJEZXZlbG9wbWVudGFsIFBzeWNob3BhdGhvbG9neSBMYWIiIChkZXYtcHN5bGFiQHVpb3dhLmVkdSkKICAgIGEuIFNlbGVjdCAiT3BlbiIKMS4gRm9yIHRoZSBSQSBBdmFpbGFiaWxpdHkgU2NoZWR1bGUsIHR5cGU6ICJSRVMtRFBMLUJ1c3kiIChSRVMtRFBMLUJ1c3lAdWlvd2EuZWR1KQogICAgYS4gU2VsZWN0ICJPcGVuIgoKSGVyZSBpcyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBkaWZmZXJlbnQgY2FsZW5kYXJzIGFuZCBpbnN0cnVjdGlvbnMgaG93IHRvIHVzZSB0aGVtOgoKMS4gUkVTLVJBLUxDLVNjaGVkCiAgICAtIFRoaXMgY2FsZW5kYXIgaGFzIHlvdXIgaW5kaXZpZHVhbCBzY2hlZHVsZSBpbiB0aGUgbGFiLgogICAgSXQgaXMgY29sb3ItY29kZWQgYnkgUkEuCglZb3UgY2FuIHZpZXcgYnV0IG5vdCBlZGl0IHRoaXMgY2FsZW5kYXIuCiAgICBDaGFuZ2VzIHRvIHRoaXMgbmVlZCB0byBiZSBkaXNjdXNzZWQgd2l0aCB0aGUgTGFiIENvb3JkaW5hdG9yIGFuZC9vciBEci4gUGV0ZXJzZW4uCjEuIERldmVsb3BtZW50YWwgUHN5Y2hvcGF0aG9sb2d5IExhYgogICAgLSBUaGlzIGlzIHRoZSBnZW5lcmFsIGxhYiBjYWxlbmRhci4KICAgIEl0IGhhcyBsYWIgZXZlbnRzIChlLmcuLCBwYXJ0aWNpcGFudCB2aXNpdHMsIGxhYiBtZWV0aW5nLCByZWNydWl0bWVudCBldmVudHMpLgogICAgWW91IGNhbiB2aWV3IGJ1dCBub3QgZWRpdCB0aGlzIGNhbGVuZGFyLgoxLiBSRVMtRFBMLUJ1c3kKICAgIC0gVGhpcyBpcyB3aGVyZSB5b3UgYXJlIGV4cGVjdGVkIHRvIG1hcmsgeW91cnNlbGYgYXMgdW5hdmFpbGFibGUgZm9yIGFueSBzY2hlZHVsaW5nIGNvbW1pdG1lbnRzIHRoYXQgY29tZSB1cCBkdXJpbmcgdGhlIHdlZWtseSBhdmFpbGFiaWxpdHkgeW91IHN1Ym1pdHRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZW1lc3RlciwgdGhpcyBpbmNsdWRlcyB0aW1lIHlvdSBtYXkgYmUgdGFraW5nIG9mZiBmcm9tIHlvdXIgbm9ybWFsIHNjaGVkdWxlZCBob3Vycy4KICAgIFRodXMsIGlmIHlvdSBhcmUgZ29pbmcgdG8gYmUgdW5hdmFpbGFibGUgZHVyaW5nIHlvdXIgcmVndWxhcmx5IHNjaGVkdWxlZCBob3VycyB5b3UgbXVzdCB1cGRhdGUgdGhpcyBjYWxlbmRhci4gCiAgICBUbyBkbyBzbywgeW91IHdpbGwgY3JlYXRlIGEgY2FsZW5kYXIgZW50cnkgdGhhdCBpcyB0aXRsZWQgIltZb3VyIE5hbWVdIEJ1c3kiIGFuZCBhZGQgdGhlIGN1cnJlbnQgTEMgYXMgYSByZXF1aXJlZCBhdHRlbmRlZS4KICAgIFRoaXMgd2lsbCBub3RpZnkgdGhlIExDIG9mIHlvdXIgcmVxdWVzdCBmb3IgdGltZSBvZmYgYW5kIGFsbG93IHRoZW0gdG8gYWNjZXB0IG9yIGRlY2xpbmUgdGhlIHJlcXVlc3QuCiAgICBBZGRpdGlvbmFsbHksIHlvdSBtdXN0IHB1dCBpbiB0aGUgZGVzY3JpcHRpb24gdGhlIHJlYXNvbiBmb3Igd2h5IHlvdSBhcmUgbm90IGF2YWlsYWJsZSBkdXJpbmcgeW91ciByZWd1bGFybHkgc2NoZWR1bGVkIGhvdXJzIChpLmUuIG92ZXIgaG91cnMsIGRvY3RvcnMgYXBwb2ludG1lbnQpLiAKICAgICoqSWYgeW91ciByZXF1ZXN0IGlzIHdpdGhpbiA0OCBob3VycyBvZiB0aGUgZGF5IHlvdSB3aXNoIHRvIGJlIG9mZiwgeW91IG11c3QgY3JlYXRlIHRoZSBjYWxlbmRhciBlbnRyeSAqQU5EKiBzbGFjayB0aGUgY3VycmVudCBMYWIgQ29vcmRpbmF0b3IgaW4gdGhlIGAjbGFiLXRpbWVgIGNoYW5uZWwuKiogCgoKIyMgVGltZUNsb2NrIAoKYE9wZW5UaW1lQ2xvY2syMDA4YCBpcyB0aGUgcHJvZ3JhbSB3ZSB1c2UgZm9yIGtlZXBpbmcgdHJhY2sgb2YgUkEgbGFiIGhvdXJzLgpFYWNoIFJBIGlzIGV4cGVjdGVkIHRvIGNsb2NrIGluIGJlZm9yZSBiZWdpbm5pbmcgbGFiLXJlbGF0ZWQgd29yayAoaW5jbHVkaW5nIHJ1bm5pbmcgdmlzaXRzLCBidXQgaWYgeW91IGNvbWUgaW4gZWFybHkgdG8gZWFjaCBsdW5jaCwgdmlzaXQgd2l0aCBvdGhlciBSQXMsIG9yIGFueXRoaW5nIGVsc2UgTk9UIGxhYiB3b3JrLXJlbGF0ZWQsIHRoZW4gZG8gbm90IGNsb2NrIGluIHVudGlsIHlvdSBhcmUgcmVhZHkgdG8gd29yayksIGFuZCB0byBjbG9jayBvdXQgd2hlbiB0aGV5IGhhdmUgc3RvcHBlZCBsYWItcmVsYXRlZCB3b3JrIChlLmcuLCBpZiB5b3UgbGVhdmUgdG8gZ2V0IGx1bmNoLCBwbGVhc2UgY2xvY2sgb3V0IHRoZW4gY2xvY2sgYmFjayBpbiBhZ2FpbiB3aGVuIHlvdSByZXR1cm4gdG8gd29yaykuClRoZSBMYWIgQ29vcmRpbmF0b3Igd2lsbCBhZGQgeW91IHRvIHRoZSBzeXN0ZW0gdXNpbmcgeW91ciBgSGF3a0lEYC4KVG8gc2V0IHVwIHlvdXIgcHJvZmlsZSB0aGUgZmlyc3QgdGltZSB5b3UgdXNlIHRoZSBwcm9ncmFtLCBmb2xsb3cgdGhlIHN0ZXBzIGJlbG93OgoKMS4gQ2xpY2sgdGhlIFRpbWVDbG9jayBzaG9ydGN1dCBvbiB5b3VyIGxhYiBjb21wdXRlciBkZXNrdG9wIChvciBnbyB0byBodHRwczovL3d3dy5vcGVudGltZWNsb2NrLmNvbS8yMDA4L2ZyZWUuaHRtbCkuCjEuIEluIHRoZSAiQ29tcGFueSBOYW1lIiB0ZXh0Ym94LCB0eXBlIGBkZXZwc3lsYWJgIGFuZCBjbGljayB0aGUgYmx1ZSAiU2lnbiBJbiIgYnV0dG9uCjEuIEVudGVyIHlvdXIgYEhhd2tJRGAgaW4gdGhlICJVc2VybmFtZSIgZmllbGQgYW5kIGNsaWNrIHRoZSAiTG9naW4iIGJ1dHRvbi4KMS4gR28gdG8gIk15IHNldHRpbmdzIiBhdCB0aGUgdG9wIG9mIHRoZSBwYWdlLgoxLiBDaGVjayB0aGUgIkNoYW5nZSBwYXNzd29yZCIgYm94LCBhbmQgY3JlYXRlIGEgbmV3IHBhc3N3b3JkIGluIHRoZSBzdWJzZXF1ZW50IGJveGVzIChpLmUuLCAiQ3VycmVudCBwYXNzd29yZCIgd2hpY2ggY2FuIGJlIGxlZnQgYmxhbmsgYXMgeW91IHdpbGwgbm90IGhhdmUgYSBwYXNzd29yZCB1bnRpbCB5b3Ugc2V0IG9uZSB1cCBmb3IgeW91cnNlbGYsICJOZXcgcGFzc3dvcmQsIiBhbmQgIkNvbmZpcm0gbmV3IHBhc3N3b3JkIikuClRoZW4gY2xpY2sgdGhlICJTYXZlIiBidXR0b24uCgoqTk9URSo6IElmIGEgcG9wLXVwIHdpbmRvdyBhcHBlYXJzIGFza2luZyBpZiB0aGUgd2Vic2l0ZSBjYW4gaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB5b3VyIGxvY2F0aW9uLCBiZSBzdXJlIHRvIGNsaWNrIHllcyBvciBhY2NlcHQuClRpbWVDbG9jayBsb2dpbiBpcyBHUFMtcmVzdHJpY3RlZCwgc28gdGhlIHByb2dyYW0gbWF5IG5vdCB3b3JrIGlmIGl0IGlzIG5vdCBhbGxvd2VkIHRvIHZlcmlmeSB5b3VyIGxvY2F0aW9uLgoKVG8gdXNlIHRoaXMgcHJvZ3JhbSB0byB2aWV3IHlvdXIgY3VycmVudCBob3VycyBmb3IgdGhlIHNlbWVzdGVyOgoKMS4gTG9naW4gdG8geW91ciBhY2NvdW50IGFuZCBjbGljayBvbiAiTGlzdCB2aWV3IiBhdCB0aGUgdG9wIG9mIHRoZSBwYWdlLgoxLiBGaWx0ZXIgeW91ciBkYXlzIHdvcmtlZCBieSBhZGp1c3RpbmcgdGhlIGRhdGVzIGF0IHRoZSB0b3AgbGVmdCBvZiB0aGUgc2NyZWVuIHRvIGVuY29tcGFzcyB0aGUgY3VycmVudCBzZW1lc3RlciAoZWl0aGVyIGJ5IHR5cGluZyBpbiB0aGUgcmVsZXZhbnQgZGF0ZXMsIG9yIGJ5IHVzaW5nIHRoZSBkcm9wZG93biBjYWxlbmRhcnMgYnkgY2xpY2tpbmcgdGhlIGNhbGVuZGFyIGljb25zKS4KMS4JT25jZSB5b3UgaGF2ZSBzZWxlY3RlZCB0aGUgdGFyZ2V0IHRpbWVmcmFtZSwgbG9vayBhdCB0aGUgdG9wIHJpZ2h0LWhhbmQgc2lkZSBvZiB0aGUgc2NyZWVuIGFib3ZlIHRoZSB0YWJsZS4KVGhlcmUsIHlvdSB3aWxsIGZpbmQgdGV4dCB0aGF0IHJlYWRzICJ0b3RhbCBob3VycywiIGFuZCBzaG91bGQgbGlzdCB5b3VyIHRvdGFsIHRpbWUgY2xvY2tlZC1pbiBpbiBob3VycyBhbmQgbWludXRlcy4KSWYgeW91IGFyZSB1bnN1cmUgb2YgaG93IG1hbnkgdG90YWwgaG91cnMgeW91IG5lZWQgZm9yIGEgc2VtZXN0ZXIsIGFzayB0aGUgTGFiIENvb3JkaW5hdG9yLgoKIyBUaGUgQmFzaWNzIG9mIExhYgoKIyMgTGFiIE1lZXRpbmdzIHsjbGFiLW1lZXRpbmdzfQoKTGFiIG1lZXRpbmdzIHdpbGwgdGFrZSBwbGFjZSBvbmNlIHBlciB3ZWVrIGF0IGEgcHJlLWRldGVybWluZWQgdGltZS4KVGhlIExhYiBDb29yZGluYXRvciB3aWxsIGNob29zZSB0aGUgd2Vla2x5IGxhYiBtZWV0aW5nIHRpbWUgYmFzZWQgb24gZXZlcnlvbmUncyBzY2hlZHVsZXMgYW5kIHdpbGwgdHJ5IHRvIHNjaGVkdWxlIHRoZSBtZWV0aW5nIGZvciBhIHRpbWUgd2hlbiBhbGwgbGFiIG1lbWJlcnMgYXJlIGF2YWlsYWJsZS4KTGFiIG1lZXRpbmcgaXMgdGhlIG1vc3QgaW1wb3J0YW50IHRpbWUgdGhhdCB0aGUgdGVhbSBoYXMgdG9nZXRoZXIgZXZlcnkgd2VlaywgYmVjYXVzZSBpdCBpcyB0aGUgb25seSB0aW1lIHRoYXQgZXZlcnlvbmUgaXMgcHJlc2VudCwgYW5kIGl0IGhlbHBzIGV2ZXJ5b25lIHN0YXkgb24gdGhlIHNhbWUgcGFnZSBhcyBwYXJ0IG9mIHdvcmtpbmcgYXMgYSB0ZWFtLgpBdHRlbmRpbmcgbGFiIG1lZXRpbmcgaXMgPHU+KiptYW5kYXRvcnkqKjwvdT4uCgpUaGUgbGFiIG1lZXRpbmcgaXMgZ2VuZXJhbGx5IGRpdmlkZWQgaW50byB0d28gc2VjdGlvbnM6CgoxLiBUaGUgZmlyc3QgMTXigJMzMCBtaW51dGVzIG9mIHRoZSBtZWV0aW5nIGlzIHJlc2VydmVkIGZvciBsYWIgYW5ub3VuY2VtZW50cywgYXMgd2VsbCBhcyBhbnkgdXBkYXRlcyBvciBxdWVzdGlvbnMgYWJvdXQgdGhlIHN0dWR5LgpJZiB5b3UgaGF2ZSBxdWVzdGlvbnMgb3Igc3VnZ2VzdGlvbnMsIHBsZWFzZSByYWlzZSB0aGVtLgoxLiBUaGUgc2Vjb25kIGhhbGYgb2YgdGhlIG1lZXRpbmcgaXMgcmVzZXJ2ZWQgZm9yIGFuIGFydGljbGUgZGlzY3Vzc2lvbiBvciBhIHByb2Zlc3Npb25hbCBkZXZlbG9wbWVudCB3b3Jrc2hvcC4gCgojIyMgQXJ0aWNsZSBEaXNjdXNzaW9uIHsjYXJ0aWNsZURpc2N1c3Npb259CgpFYWNoIGxhYiBtZWV0aW5nICh3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIG1lZXRpbmdzIHJlc2VydmVkIGZvciBwcm9mZXNzaW9uYWwgZGV2ZWxvcG1lbnQgd29ya3Nob3BzKSwgYW4gUkEgaXMgZXhwZWN0ZWQgdG8gbGVhZCB0aGUgZGlzY3Vzc2lvbiBvZiBhIDx1PnBlZXItcmV2aWV3ZWQsIGVtcGlyaWNhbCByZXNlYXJjaCBhcnRpY2xlPC91PiBvZiB0aGVpciBjaG9vc2luZyB0aGF0IGlzIHJlbGF0ZWQgdG8gdGhlIGludGVyZXN0cyAoYnJvYWRseSBkZWZpbmVkKSBvZiB0aGUgRGV2ZWxvcG1lbnRhbCBQc3ljaG9wYXRob2xvZ3kgTGFiLgpBcnRpY2xlIGRpc2N1c3Npb25zIHNlcnZlIHNldmVyYWwgcHVycG9zZXM6CgotIGluIHRoZSBzcGlyaXQgb2YgZ2V0dGluZyBjb3Vyc2UgY3JlZGl0IGZvciBsYWIgZXhwZXJpZW5jZSwgYXJ0aWNsZSBkaXNjdXNzaW9ucyBwcm92aWRlIGEgc2VtaW5hciBmb3J1bSBmb3IgbGVhcm5pbmcgYWJvdXQgc2NpZW5jZQotIGFydGljbGUgZGlzY3Vzc2lvbnMgaGVscCBzdHVkZW50cyBjb25uZWN0IHRoZSB3b3JrIHRoZXkgYXJlIGNvbmR1Y3RpbmcgaW4gdGhlIGxhYiB0byB0aGUgYnJvYWRlciBzY2llbnRpZmljIGZpZWxkCi0gdGhleSBoZWxwIHN0dWRlbnRzIGdhaW4gZ3JlYXRlciBza2lsbCBpbiByZWFkaW5nIGFuZCBjcml0aXF1aW5nIHNjaWVudGlmaWMgYXJ0aWNsZXMsIHdoaWNoIGhlbHBzIHBlb3BsZSBiZSBtb3JlIGNyaXRpY2FsIGNvbnN1bWVycyBvZiBpbmZvcm1hdGlvbiBpbiBzb2NpZXR5Ci0gdGhleSBwcm92aWRlIGEgc3BhY2UgdG8gZXhwbG9yZSBzY2llbnRpZmljIGlkZWFzIGFuZCB0aGUgcG90ZW50aWFsIHByYWN0aWNhbCBpbXBsaWNhdGlvbnMgb2Ygc2NpZW5jZQotIHRoZXkgcHJvdmlkZSBvcHBvcnR1bml0aWVzIHRvIGdhaW4gc2tpbGwgaW4gbGVhZGluZyBhIGRpc2N1c3Npb24sIHdoaWNoIGlzIGFuIGltcG9ydGFudCBwdWJsaWMtc3BlYWtpbmcgc2tpbGwKLSB0aGV5IHByb3ZpZGUgb3Bwb3J0dW5pdGllcyBpbiBsZWFybmluZyB0byBkaWdlc3QgY29tcGxleCBjb25jZXB0cyBhbmQgdG8gY29tbXVuaWNhdGUgdGhlbSBpbiBhIHdheSB0aGF0IGlzIHVuZGVyc3RhbmRhYmxlIGFuZCByZWxldmFudCB0byBvdGhlcnMKLSB0aGV5IHByb3ZpZGUgYSBub25qdWRnbWVudGFsIHNwYWNlIHRvIGdldCBvdXQgb2YgeW91ciBjb21mb3J0IHpvbmUgYW5kIHRvIGdyb3cgaW50ZWxsZWN0dWFsbHkgYW5kIHByb2Zlc3Npb25hbGx5CgpSQXMgd2lsbCBzaWduIHVwIHRvIGxlYWQgZGlzY3Vzc2lvbiBvZiBhbiBhcnRpY2xlIG9uIHRoZSBMYWIgTWVldGluZyBBcnRpY2xlIFNpZ24tVXAgU2hlZXQgKHNoYXJlZCB2aWEgT25lRHJpdmUgb3IgZHVyaW5nIGxhYiBtZWV0aW5nKSBkdXJpbmcgdGhlIGZpcnN0IHdlZWsgb2YgY2xhc3Nlcy4KSWYgdGhlcmUgYXJlIGZld2VyIGRheXMgYXZhaWxhYmxlIHRoYW4gdGhlcmUgYXJlIFJBcywgcHJpb3JpdHkgaXMgZ2l2ZW4gdG8gbmV3ZXIgUkFzIG9yIHRvIFJBcyB3aG8gaGF2ZSBoYWQgZmV3ZXIgb3Bwb3J0dW5pdGllcyB0byBsZWFkIHRoZSBkaXNjdXNzaW9uIG9mIGFuIGFydGljbGUuCioqQWxsIGxhYiBtZW1iZXJzIGFyZSBleHBlY3RlZCB0byBjb250cmlidXRlIHRvIGVhY2ggZGlzY3Vzc2lvbi4qKgoKQnkgTW9uZGF5IG9mIHRoZSB3ZWVrIHRoZSBhcnRpY2xlIHdpbGwgYmUgZGlzY3Vzc2VkLCB0aGUgUkEgcGlja2luZyB0aGUgYXJ0aWNsZSBzaG91bGQgcG9zdCAxKSB0aGUgYXJ0aWNsZSBQREYgKHRoZSBhY3R1YWwgUERGIGZpbGUgb2YgdGhlIGFydGljbGUsIG5vdCB0aGUgVVJMIGxpbmsgdG8gdGhlIFBERikgYW5kIDIpIHRoZSBmdWxsIEFQQS1zdHlsZSByZWZlcmVuY2UgaW4gdGhlIGAjbGFiLW1lZXRpbmdzYCBjaGFubmVsIG9uIFNsYWNrLgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZmluZCBhbmQgYWNjZXNzIGFydGljbGVzLCBzZWUgW2hlcmVdKGhvbm9ycy5odG1sI2FydGljbGVzKS4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQVBBIGZvcm1hdHRpbmcsIHNlZSB0aGUgcmVzb3VyY2VzIG9uIHRoZSBsYWIgZHJpdmU6CmBcXGxjLXJzLXN0b3JlMjQuaHBjLnVpb3dhLmVkdVxsc3NfaXRwZXRlcnNlblxMYWJcTWlzY2VsbGFuZW91c1xQcm9mZXNzaW9uYWwgRGV2ZWxvcG1lbnRcR2VuZXJhbCBQcm9mRGV2IE1hdGVyaWFsc1xBUEEgRm9ybWF0dGluZ1xgCgpUaGUgUkEgd2hvIGlzIGxlYWRpbmcgdGhlIGRpc2N1c3Npb24gb2YgdGhlIGFydGljbGUgc2hvdWxkIHN0cnVjdHVyZSB0aGUgZGlzY3Vzc2lvbiBmb2xsb3dpbmcgdGhlIGZvcm1hdCBiZWxvdzoKCjEuIFByb3ZpZGUgYSBicmllZiBleHBsYW5hdGlvbiBvZiB3aHkgeW91IGNob3NlIHRoZSBhcnRpY2xlLgoxLiBQcmVzZW50IGEgYnJpZWYgc3VtbWFyeSAofjLigJMzIG1pbnV0ZXMpIG9mIHRoZSBhcnRpY2xlJ3MgbWFpbiBwb2ludHMgKGl0IGlzIG5vdCBhIGJvb2sgcmVwb3J0ISksIGluIHdoaWNoIHlvdSBkZXNjcmliZSB0aGUgc3R1ZHkgYW5kIGl0cyBrZXkgZmluZGluZ3MuCjEuIFNwZW5kIHRoZSBtYWpvcml0eSBvZiB0aGUgdGltZSAofjIw4oCTMjUgbWludXRlcykgcG9zaW5nIHF1ZXN0aW9ucyB0byBlbGljaXQgZGlzY3Vzc2lvbi4gVGhlIHF1ZXN0aW9ucyBzaG91bGQgbm90IGJlIHRvbyB2YWd1ZSAoZS5nLiwgZG8gbm90IGFzayAiV2hhdCBkaWQgeW91IHRoaW5rIG9mIHRoZSBtZXRob2RzPyIpLCBidXQgaW5zdGVhZCBzaG91bGQgYmUgc3BlY2lmaWMgYW5kIGFpbSB0byBlbGljaXQgYW4gaW50ZXJlc3RpbmcgYW5kIGNyaXRpY2FsIGRpc2N1c3Npb24uCllvdSBjYW4gYWxzbyBtZW50aW9uIGNyaXRpcXVlcyB5b3UgaGF2ZSwgYnV0IGtlZXAgaXQgYXMgcXVlc3Rpb24tb3JpZW50ZWQgYXMgcG9zc2libGUgdG8gZWxpY2l0IGRpc2N1c3Npb24uCjEuIFNhdmUgdGltZSAofjEwIG1pbnV0ZXMpIGZvciBiaWctcGljdHVyZSBxdWVzdGlvbnMgcGVydGFpbmluZyB0byB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBmaW5kaW5ncyBmb3Igc2NpZW5jZS9wcmFjdGljZS9wb2xpY3kvbGlmZSwgZXRjLgoKIyMjIExhYiBNZWV0aW5nIFNjcmliZSB7I2xhYlNjcmliZX0KCkFuIFJBIHdpbGwgYmUgZGVzaWduYXRlZCAodXN1YWxseSBvbiBhIHZvbHVudGVlciBiYXNpcykgZWFjaCBzZW1lc3RlciB0byBiZSB0aGUgbGFiIG1lZXRpbmcgc2NyaWJlLgpUaGUgc2NyaWJlIGlzIHJlc3BvbnNpYmxlIGZvciB0YWtpbmcgbm90ZXMgdGhyb3VnaG91dCB0aGUgbWVldGluZy4KVGhlIHNjcmliZSBhbHNvIHNlbmRzIGEgYnJpZWYgc3VtbWFyeSBvZiB0aGUgaW1wb3J0YW50IGluZm9ybWF0aW9uIGZyb20gdGhlIG1lZXRpbmcgdG8gdGhlIGVudGlyZSB0ZWFtIHZpYSB0aGUgYCNsYWItbWVldGluZ3NgIGNoYW5uZWwgaW4gU2xhY2sgYWZ0ZXIgdGhlIGxhYiBtZWV0aW5nIGhhcyBlbmRlZC4KVGhlIHNjcmliZSBhbHNvIGFkZHMgdGhlIHN1bW1hcnkgdG8gdGhlICJMYWIgTWVldGluZyBBZ2VuZGFzIOKAkyBUZWFtIiBpbiB0aGUgW2xhYidzIE9uZURyaXZlXSgjb25lZHJpdmUpLgoKIyMjIEF0dGVuZGFuY2UgYW5kIEFic2VuY2UgUG9saWNpZXMgeyNsYWItbWVldGluZy1hdHRlbmRhbmNlfQoKQWxsIG1lbWJlcnMgb2YgdGhlIHRlYW0gYXJlIGV4cGVjdGVkIHRvIGF0dGVuZCBldmVyeSBsYWIgbWVldGluZy4KSWYgYW4gUkEgaXMgdW5hYmxlIHRvIGF0dGVuZCBhIG1lZXRpbmcsIHRoZXkgYXJlIHJlc3BvbnNpYmxlIGZvciBsZXR0aW5nIHRoZSBMYWIgQ29vcmRpbmF0b3Iga25vdyBhcyBmYXIgaW4gYWR2YW5jZSBhcyBwb3NzaWJsZSBzbyB0aGF0IHRoZSBMYWIgQ29vcmRpbmF0b3IgY2FuIHdvcmsgd2l0aCB0aGUgUkEgdG8gYXJyYW5nZSBob3cgdGhleSB3aWxsIG1ha2UgdXAgdGhlIHRpbWUuClRoZXkgYXJlIGFsc28gcmVzcG9uc2libGUgZm9yIGVtYWlsaW5nIHNldmVyYWwgZGV0YWlsZWQgcXVlc3Rpb25zIG9yIGNvbW1lbnRzIG9uIHRoZSBhcnRpY2xlIHRvIHRoZSBwcmVzZW50aW5nIHN0dWRlbnQgQU5EIHRvIHRoZSBsYWIgZW1haWwgKGRldnBzeS1sYWJAdWlvd2EuZWR1KSBieSB0aGUgZGF5IGJlZm9yZSB0aGUgbWVldGluZyB0byBoZWxwIGNvbnRyaWJ1dGUgdG8gdGhlIGRpc2N1c3Npb24uCklmIGFkdmFuY2VkIG5vdGljZSBpcyBub3QgcG9zc2libGUsIGNvbnRhY3QgdGhlIExhYiBDb29yZGluYXRvciBhcyBzb29uIGFzIHlvdSBhcmUgYWJsZSB0byBhbmQgZXhwbGFpbiB0aGUgYWJzZW5jZS4KVGhlIFJBIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIHJlYWRpbmcgdGhlIGxhYiBtZWV0aW5nIGFnZW5kYSBhbmQgc3VtbWFyeSBub3RlcyBhZnRlciB0aGUgbWVldGluZyB0byBsZWFybiB3aGF0IHRoZXkgbWlzc2VkLgoKIyMgTGFiIENvbW11bmljYXRpb24geyNsYWJDb21tdW5pY2F0aW9ufQoKRm9ybXMgb2YgbGFiIGNvbW11bmljYXRpb24gYXJlIGRlc2NyaWJlZCBiZWxvdy4KKipQbGVhc2UgdXNlIFNsYWNrIGZvciBhcyBtdWNoIGNvbW11bmljYXRpb24gYXMgcG9zc2libGUhKioKS2VlcGluZyBsYWItcmVsYXRlZCBjb21tdW5pY2F0aW9uIG9uIFNsYWNrIGhlbHBzIG91ciB0ZWFtIHdvcmsgbW9zdCBlZmZlY3RpdmVseSBhbmQgZWZmaWNpZW50bHksIGFuZCBpdCBzYXZlcyB0aW1lIGZvciB0aGUgTGFiIENvb3JkaW5hdG9yLCBEci4gUGV0ZXJzZW4sIGFuZCB5b3VyIHRlYW0gbWVtYmVycyBiZWNhdXNlIGl0IGFsbG93cyBvdGhlciBSQXMgdG8gYW5zd2VyIHF1ZXN0aW9ucyBhbmQgYWxsb3dzIHBlb3BsZSB0byBqdW1wIGluIHRvIHByb3ZpZGUgY29ycmVjdGl2ZSBmZWVkYmFjaywgYXMgbmVjZXNzYXJ5LgoKMS4gTm9uLXByaXZhdGUgbGFiLXJlbGF0ZWQgY29tbXVuaWNhdGlvbiAoYWxtb3N0IGFsbCBjb21tdW5pY2F0aW9uKQogICAgLSBVc2UgU2xhY2sKICAgICAgICAtIFNlZSB0aGUgW1NsYWNrIENoZWNrbGlzdF0oI3NsYWNrKQogICAgICAgIC0gRmVlbCBmcmVlIHRvIHNlbmQgbWVzc2FnZXMgYW5kIHlvdSBjYW4gbm90aWZ5IHBhcnRpY3VsYXIgcGVvcGxlIGlmIHRoZSBtZXNzYWdlIGlzIGZvciBwYXJ0aWN1bGFyIHBlb3BsZSAoQGlzYWFjLXBldGVyc2VuKS4KICAgICAgICAtIFlvdSBjYW4gc2VuZCBwaWN0dXJlcyBhbmQgYXR0YWNobWVudHMgaW4gU2xhY2sgYnkgdXNpbmcgdGhlIHBsdXMgc2lnbiBuZXh0IHRvIHRoZSBtZXNzYWdlLgogICAgICAgIC0gU2xhY2sgY29tbXVuaWNhdGlvbiBjYW4gYmUgaW5mb3JtYWwhCiAgICAgICAgV2Ugd2FudCBpdCB0byBiZSBhIGZ1biBwbGFjZSB0byBjb21tdW5pY2F0ZSBhbmQgY2hhdCB3aXRoIHRoZSB0ZWFtLgogICAgICAgIEZlZWwgZnJlZSB0byBwb3N0IG1lbWVzLCBzZXQgdXAgbGFiLXdpZGUgc29jaWFsIGdhdGhlcmluZ3MsIGV0Yy4KMS4gUHJpdmF0ZSBsYWItcmVsYXRlZCBjb21tdW5pY2F0aW9uIAogICAgLSBTZW5kIHRvOiBkZXZwc3ktbGFiQHVpb3dhLmVkdQogICAgICAgIC0gRXhhbXBsZXM6IFNlbmRpbmcgeW91ciBjb3Vyc2Ugc2NoZWR1bGUgZm9yIHRoZSB1cGNvbWluZyBzZW1lc3Rlciwgbm90aWZ5aW5nIExhYiBDb29yZGluYXRvciBvZiBhbiBhYnNlbmNlIGR1ZSB0byBwZXJzb25hbCByZWFzb25zL2lsbG5lc3MsIGFza2luZyBMYWIgQ29vcmRpbmF0b3IgZm9yIGEgcmVmZXJlbmNlLCByZXNwb25kaW5nIHRvIGFuIGVtYWlsIHRoYXQgdGhlIExhYiBDb29yZGluYXRvciBzZW50IHRvIHlvdS4KMS4gQ29tbXVuaWNhdGlvbiBkaXJlY3RlZCBzcGVjaWZpY2FsbHkgdG8gRHIuIFBldGVyc2VuIHJhdGhlciB0aGFuIHRvIHRoZSBsYWIgKGUuZy4sIHRvIHNldCB1cCBhIG1lZXRpbmcgdG8gZGlzY3VzcyBjYXJlZXIgZ29hbHMsIGhvbm9ycyBwcm9qZWN0cywgZXRjLikKICAgIC0gU2VuZCBlbWFpbCB0byBbRHIuIFBldGVyc2VuXShodHRwczovL3BzeWNob2xvZ3kudWlvd2EuZWR1L3Blb3BsZS9pc2FhYy1wZXRlcnNlbikKMS4gQ29tbXVuaWNhdGlvbiBkaXJlY3RlZCB0byB0aGUgcGFzdCBtZW1iZXJzIG9mIHRoZSBsYWIgKGUuZy4sIHRvIHNldHVwIGEgc29jaWFsIGdhdGhlcmluZykKICAgIC0gVXNlIEZhY2Vib29rCiAgICAgICAgLSBTZWUgdGhlIFtTb2NpYWwgTWVkaWEgQ2hlY2tsaXN0XSgjc29jaWFsTWVkaWEpCjEuIENvbW11bmljYXRpb24gZGlyZWN0ZWQgdG8gdGhlIHB1YmxpYyAoZS5nLiwgdG8gY29tbXVuaWNhdGUgcmVzdWx0cyBmcm9tIGEgcHVibGlzaGVkIHN0dWR5KQogICAgLSBVc2UgVHdpdHRlciBhbmQgSW5zdGFncmFtCiAgICAgICAgLSBTZWUgdGhlIFtTb2NpYWwgTWVkaWEgQ2hlY2tsaXN0XSgjc29jaWFsTWVkaWEpCgojIyMgUmVzb2x2aW5nIENvbmZsaWN0cyBhbmQgUGVyc29ubmVsIElzc3VlcyB7I3Jlc29sdmluZ0NvbmZsaWN0c30KCkl0IGlzIGluYXBwcm9wcmlhdGUgYW5kIHVucHJvZmVzc2lvbmFsIHRvIGdvc3NpcCBhYm91dCBsYWIgcGVyc29ubmVsIChpLmUuLCBjb21wbGFpbmluZyBhYm91dCBzb21lb25lIGJlaGluZCB0aGVpciBiYWNrIHRvIG90aGVyIFJBcykuCklmIHNvbWVvbmUgZ29zc2lwcyB0byB5b3UgYWJvdXQgY29uY2VybnMvY29uZmxpY3RzL2NvbXBsYWludHMgd2l0aCBsYWIgcGVyc29ubmVsLCBwbGVhc2UgYXNrIHRoZW0gdG8gZGVhbCB3aXRoIHRoZSBwZXJzb24gZGlyZWN0bHksIG9yIHRvIGFkZHJlc3MgdGhlIGlzc3VlIGRpcmVjdGx5IHdpdGggdGhlIGNoYWluIG9mIGNvbW1hbmQgKHNlZSBiZWxvdykuCgpJZiB0aGUgY29uZmxpY3QvcGVyc29ubmVsIGlzc3VlIGlzIHdpdGggYSBwZWVyLCB0aGUgZmlyc3Qgc3RlcCBpcyB0byBhdHRlbXB0IHRvIGFkZHJlc3MgdGhlIHByb2JsZW0gd2l0aCB5b3VyIHBlZXIgZGlyZWN0bHkuCklmIHRoZSBjb25mbGljdC9wZXJzb25uZWwgaXNzdWUgaXMgd2l0aCBhIHBlZXIsIGFuZCB5b3UgYXJlIHVuYWJsZSB0byByZXNvbHZlIHRoZSBwcm9ibGVtIG9yIHlvdSBmZWVsIHRoYXQgdGhpcyBmaXJzdCBzdGVwIHdvdWxkIGJlIHRvbyBkaWZmaWN1bHQgb3IgdW5jb21mb3J0YWJsZSBmb3IgeW91LCB0aGVuIHBsZWFzZSBicmluZyB0aGlzIHRvIHRoZSBhdHRlbnRpb24gb2YgeW91ciBkaXJlY3Qgc3VwZXJ2aXNvciAoZ3JhZHVhdGUgc3R1ZGVudCwgcG9zdGRvY3RvcmFsIHN0dWRlbnQsIG9yIExhYiBDb29yZGluYXRvcikuCklmIHRoZSBjb25mbGljdC9wZXJzb25uZWwgaXNzdWUgaXMgd2l0aCB5b3VyIGRpcmVjdCBzdXBlcnZpc29yIGFuZCB5b3UgYXJlIHVuYWJsZSB0byByZXNvbHZlIHRoZSBwcm9ibGVtIG9yIHlvdSBmZWVsIHRoYXQgdGhpcyBmaXJzdCBzdGVwIHdvdWxkIGJlIHRvbyBkaWZmaWN1bHQgb3IgdW5jb21mb3J0YWJsZSBmb3IgeW91LCB0aGVuIHBsZWFzZSBicmluZyB0aGlzIHRvIHRoZSBhdHRlbnRpb24gb2YgeW91ciBtYWluIHN1cGVydmlzb3IgKERyLiBQZXRlcnNlbikuClBsZWFzZSBleHByZXNzIHBlcnNvbm5lbCBjb25jZXJucyBkaXJlY3RseSAoaW4gcGVyc29uIG9yIGJ5IGVtYWlsKS4KRG8gbm90IHB1dCBwZXJzb25uZWwgZ3JpZXZhbmNlcyBpbiBsYWIgcmVwb3J0cy4KV2UgZW5jb3VyYWdlIHlvdSB0byBleHByZXNzIGNvbmNlcm5zIHRvIHRoZSBjaGFpbiBvZiBjb21tYW5kIGlmIHlvdSBmZWVsIHRoZSBpc3N1ZXMgaW1wYWlyIHlvdXIgb3IgdGhlIHRlYW0ncyBmdW5jdGlvbmluZy4KCiMjIyBTbGFjayB7I3NsYWNrfQoKIyMjIyBHZXR0aW5nIFN0YXJ0ZWQKCjEuIERvd25sb2FkIHRoZSAiU2xhY2siIEFwcCB0byB5b3VyIG1vYmlsZSBwaG9uZSAoaXQgaXMgZnJlZSEpCjEuIFlvdSBjYW4gYWxzbyBhY2Nlc3MgU2xhY2sgb24gYW55IGludGVybmV0IGJyb3dzZXIgKGh0dHBzOi8vc2xhY2suY29tKSAKMS4gQ3JlYXRlIGFuIGFjY291bnQgd2l0aCB5b3VyIHVuaXZlcnNpdHkgZS1tYWlsIGFuZCBhIHBhc3N3b3JkIHlvdSB3aWxsIHJlbWVtYmVyIAoxLiBFbnRlciB0aGUgd29ya3NwYWNlIFVSTCAiZGV2cHN5LWxhYi5zbGFjay5jb20iICh0aGUgTGFiIENvb3JkaW5hdG9yIHNob3VsZCBoYXZlIGFkZGVkIHlvdSB0byB0aGUgd29ya3NwYWNlIHByaW9yIHRvIHlvdXIgc3RhcnQgaW4gbGFiIGFzIHBhcnQgb2YgeW91ciBvbmJvYXJkaW5nKSAKMS4gTWFrZSBzdXJlIHRvIGFkZCB5b3Vyc2VsZiB0byBhbGwgdGhlIGZvbGxvd2luZyAiQ2hhbm5lbHMiCiAKLSBgI2Fubm91bmNlbWVudHNgCi0gYCNjb2Rpbmctc2NvcmluZ2AKLSBgI2RhdGEtZW50cnlgCi0gYCNkYXRhLXNwZWNpYWxpc3RgCi0gYCNnb29kLW5ld3NgCi0gYCNpcmJgCi0gYCNsYWItYWRtaW5gCi0gYCNsYWItZGVzaWduYAotIGAjbGFiLW1lZXRpbmdzYAotIGAjbGFiLXRpbWVgCi0gYCNtZWFzdXJlc2AKLSBgI29wcG9ydHVuaXRpZXNgCi0gYCNwcm9jZWR1cmVzYAotIGAjcXVvdGVzYAotIGAjcmFuZG9tYAotIGAjcmVjcnVpdG1lbnRgCi0gYCNyZXNlYXJjaGAKLSBgI3JlZGNhcGAKLSBgI3NjaGVkdWxpbmdgCi0gYCN2aXNpdHNgCi0gYCN3ZWJzaXRlLXNvY2lhbG1lZGlhYAotIGAjd2lraWAKCiMjIyMgSG93L1doZW4gdG8gVXNlCgoxLiBDaGFubmVsczogQWxsIGNoYW5uZWxzIGFyZSBhIGNlcnRhaW4gY2F0ZWdvcnkgb3IgdG9waWMgb2YgY29udmVyc2F0aW9uIHNvIHRoYXQgaXQgaXMgZWFzaWVyIHRvIGxvY2F0ZSBwcmV2aW91cyBkaXNjdXNzaW9ucyByZWxldmFudCB0byB0aGF0IHRvcGljCiAgICBhLiBUbyBub3RpZnkgc3BlY2lmaWMgcGVvcGxlIGluIHlvdXIgbWVzc2FnZSwgdHlwZSAiQCIgYW5kIHRoZW4gZW50ZXIgaW4gdGhlaXIgdXNlcm5hbWUgYmVmb3JlIHR5cGluZyB5b3VyIG1lc3NhZ2UgKHVzZXJuYW1lcyBhcmUgbG9jYXRlZCBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBzY3JlZW4pIAogICAgICAgIDEuIGBAZXZlcnlvbmVgIG5vdGlmaWVzIGV2ZXJ5b25lIChvbmx5IGFkbWlucyBjYW4gdXNlKQogICAgICAgIDEuIGBAY2hhbm5lbGAgbm90aWZpZXMgZXZlcnlvbmUgaW4gdGhlIGNoYW5uZWwgCiAgICBiLiBgI3JhbmRvbWA6IFVzZSB0aGlzIGNoYW5uZWwgaWYgeW91IGFyZSBydW5uaW5nIGxhdGUgdG8gbGFiLCBvciBpZiB5b3UgaGF2ZSBhIHF1ZXN0aW9uIG9yIGNvbW1lbnQgdGhhdCBkb2VzIG5vdCBmYWxsIHdpdGhpbiB0aGUgb3RoZXIgY2hhbm5lbCBjYXRlZ29yaWVzOyBjYW4gYWxzbyBwdXQgbWVtZXMgb3IgcmFuZG9tIGZ1bm55IHRoaW5ncyBoZXJlIQoxLiBBdHRhY2htZW50czogU2VuZCBwaWN0dXJlcyBhbmQgYXR0YWNobWVudHMgYnkgY2xpY2tpbmcgdGhlIHBsdXMgc2lnbiBuZXh0IHRvIHRoZSBtZXNzYWdlCjEuIERpcmVjdCBNZXNzYWdlczogRG8gbm90IHVzZSBkaXJlY3QgbWVzc2FnaW5nIGluIFNsYWNrLgpJZiB5b3UgbmVlZCB0byBjb21tdW5pY2F0ZSBwcml2YXRlbHkgd2l0aCB0aGUgTGFiIENvb3JkaW5hdG9yIG9yIERyLiBQZXRlcnNlbiwgcGxlYXNlIHVzZSBlbWFpbCAoc2VlIHRoZSBzZWN0aW9uIG9uIFtMYWIgQ29tbXVuaWNhdGlvbl0oI2xhYkNvbW11bmljYXRpb24pIGZvciBtb3JlIGluZm9ybWF0aW9uKQoKU2xhY2sgY2hhbm5lbHMgYXJlIG1lYW50IHRvIG9yZ2FuaXplIGNvbnZlcnNhdGlvbnMgd2l0aGluIGJyb2FkIG92ZXJhcmNoaW5nIHRvcGljcywgYnV0IHdpdGhpbiBlYWNoIGNoYW5uZWwgd2Ugd2FudCBkaXZlcnNlIGNvbnZlcnNhdGlvbiB0byBzcGFuIHRoZSBnYW11dCBvZiBlYWNoIHRvcGljLgpGb3IgZXhhbXBsZSwgdGhlIGAjY29kaW5nYCBjaGFubmVsIHNob3VsZCBpbmNsdWRlIGNvbnZlcnNhdGlvbnMgcmFuZ2luZyBmcm9tIGRpc2NyZXBhbmNpZXMgYmV0d2VlbiB0d28gY29kZXJzIG9uIGEgZ2l2ZW4gdGFzaywgdG8gdGVjaG5pY2FsIGRpc2N1c3Npb25zIGFib3V0IERhdGF2eXUsIHRvIGdlbmVyYWwgcXVlc3Rpb25zIHRvIHRoZSBMYWIgQ29vcmRpbmF0b3IgYW5kIERyLiBQZXRlcnNlbiBhYm91dCB0aGUgY29uc3RydWN0cyBtZWFzdXJlZCBpbiBhIGdpdmVuIHRhc2ssIHRvIGFsbCBvZiB0aGUgcHJvY2VkdXJlcywgc3lzdGVtcywgYW5kIHByb2dyYW1zIGluIGJldHdlZW4uClRoaW5rIG9mIGVhY2ggY2hhbm5lbCBhcyBhICJ0aGVtZSIgcmF0aGVyIHRoYW4gYSBzcGVjaWZpYyAidG9waWMgb2YgY29udmVyc2F0aW9uLiIKWW91IHNob3VsZCBzaW1wbHkgY2hvb3NlIHRoZSBjaGFubmVsIHRoYXQgc2VlbXMgbW9zdCByZWxldmFudCB0byB0aGUgcXVlc3Rpb24gb3IgY29tbWVudCB5b3Ugd2FudCB0byBzaGFyZSBhbmQgaGF2ZSBhdCBpdCEKSXQgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQsIGV2ZW4gdGhvdWdoIGRpZmZlcmVudCB0ZWFtIG1lbWJlcnMgYXJlIGFzc2lnbmVkIGRpZmZlcmVudCB0YXNrcyB3aXRoaW4gdGhlIGxhYiwgaXQgZG9lcyBub3QgbWVhbiB0aGF0IGl0IGlzIGFueSBsZXNzIGltcG9ydGFudCBmb3IgdGhlIHdob2xlIHRlYW0gdG8gc3RheSBpbmZvcm1lZCBhYm91dCB0aGUgZ2VuZXJhbCBwcm9qZWN0cyBvZiB0aGUgbGFiLgpXZSBhcmUgYWxsIGNvbGxhYm9yYXRpbmcgb24gdGhlIHNhbWUgcHJvamVjdCwgb24gdGhlIHNhbWUgdGVhbSwgYW5kIHdvcmtpbmcgdG93YXJkIHRoZSBzYW1lIGdlbmVyYWwgZ29hbHMuCgojIyMgVHJlbGxvCgoxLiBMb2cgb24gdG8gaHR0cHM6Ly90cmVsbG8uY29tIHVzaW5nIHlvdXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkCjEuIE9uIHRoZSAiUkFzIiBCb2FyZCwgdGhlcmUgYXJlIGNhdGVnb3JpZXMgb2YgaXRlbXMgdGhhdCBhcmUgcGVyZm9ybWVkIGluIG91ciBsYWIKICAgIGEuIEVhY2ggb2YgdGhlc2UgY2F0ZWdvcmllcyBoYXMgYSBsaXN0IG9mIGNhcmRzIHdpdGggYSB0aXRsZQogICAgICAgIGkuIFdpdGhpbiB0aGVzZSBjYXJkcywgeW91IGNhbiBjb21tZW50IG9uIHdoYXQgbmVlZHMgdG8gYmUgZG9uZSwgaWRlYXMgZm9yIHRoZSB0aXRsZWQgaXRlbSwgZXRjLiAKICAgICAgICBpaS4gTWVtYmVycywgZHVlIGRhdGVzLCBhdHRhY2htZW50cyBjYW4gYWxzbyBiZSBhZGRlZDsgdG8gYXNzaWduIGEgcGVyc29uIHRvIHdvcmsgb24gYSBjYXJkLCBhZGQgdGhlbSB0byBtZW1iZXJzIAogICAgICAgIGlpaS4gVG8gbm90aWZ5IHNwZWNpZmljIHBlb3BsZSBpbiBjb21tZW50cywgdXNlIGBAdXNlcm5hbWVgCiAgICBiLiBJZiB5b3Ugd291bGQgbGlrZSB0byBhZGQgYSBjYXJkIHRvIHRoZSBkZXNpcmVkIGNhdGVnb3J5LCB5b3UgY2FuIGdvIHRvIHRoZSBib3R0b20gb2YgdGhlIGNvbHVtbiBhbmQgY2xpY2sgb24gJ0FkZCBhIGNhcmTigKYnIAoxLiBXaGVuIHdvcmtpbmcgb24gYSBjYXJkLCBtb3ZlIHRoZSBzcGVjaWZpYyBjYXJkIHRvIHRoZSAnRG9pbmcnIGNhdGVnb3J5LCBzbyB0aGF0IG90aGVycyBrbm93IHlvdSBhcmUgd29ya2luZyBvbiB0aGF0IHRhc2sKMS4gV2hlbiB0aGUgdGFzayBpcyBjb21wbGV0ZWQsIGFuZCBkb2VzIG5vdCBuZWVkIHRvIGJlIGZvbGxvd2VkIHVwIGJ5IGFub3RoZXIgcGVyc29uLCBtb3ZlIHRoZSBjYXJkIGZyb20gJ0RvaW5nJyB0byAnRG9uZScKMS4gV2hlbiB5b3UgYXJlIGFzc2lnbmVkIGEgdGFzayBpbiBUcmVsbG8gdGhhdCByZXF1aXJlcyBhbm90aGVyIGxhYm1hdGUgdG8gZm9sbG93LXVwOgogICAgYS4gVGhlIDFzdCBwZXJzb24gaXMgYXNzaWduZWQgdGFzayAobWVtYmVyIDEgaWNvbiBzaG93cyBvbiBjYXJkKQogICAgYi4gMXN0IChtZW1iZXIgMSkgY29tcGxldGVzIHRhc2sgKGkuZS4sIGVudGVycyBxdWVzdGlvbm5haXJlKQogICAgYy4gMXN0IGFzc2lnbnMgYSByZXZpZXdlciAobWVtYmVyIDIgaWNvbiBzaG93cyBvbiBjYXJkKSAKICAgIGQuCVJldmlld2VyIG1ha2VzIGNvbW1lbnRzIGFuZCByZW1vdmVzIHRoZWlyIGljb27igJRzaWduYWxpbmcgdG8gMXN0IHRoYXQgdGFzayBpcyByZWFkeSBmb3IgdXBkYXRlcyAKICAgIGUuIDFzdCByZWFkcyBjb21tZW50cyBhbmQgbWFrZXMgdXBkYXRlcyAKICAgIGYuIDFzdCBhc3NpZ25zIGZpbmFsIHJldmlld2VyIChtZW1iZXIgMyBpY29uIHNob3dzIG9uIGNhcmQpCiAgICBnLiBGaW5hbCByZXZpZXdlciBtYWtlcyBhZGRpdGlvbmFsIGNvbW1lbnRzIGFuZCByZW1vdmVzIGljb24gKHNpZ25hbGluZyBtZW1iZXIgMSB0aGF0IGNoYW5nZXMgaGF2ZSBiZWVuIHJldmlld2VkIGFuZCBpcyByZWFkeSBmb3IgZmluYWwgdXBkYXRlcykgT1IgZGV0ZXJtaW5lcyB0aGF0IHRhc2sgaXMgY29tcGxldGUgYW5kIG1vdmVzIGNhcmQgdG8gPHU+KipET05FKio8L3U+IGNvbHVtbi4KCiMjIyBTb2NpYWwgTWVkaWEgeyNzb2NpYWxNZWRpYX0KClRoZSBwdXJwb3NlIG9mIG91ciBzb2NpYWwgbWVkaWEgcGFnZXMgaXMgdG8gaW5mb3JtIHRoZSBvdXRzaWRlIHdvcmxkIG9mIG91ciByZXNlYXJjaC4KT25lIHRvIHR3byBtZW1iZXJzIG9mIHRoZSBbRGF0YSBTcGVjaWFsaXN0IHRlYW1dKCNkYXRhU3BlY2lhbGlzdCkgYXJlIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBwb3N0cy4KQWxsIHBvc3RzIG11c3QgYmUgYXBwcm92ZWQgYnkgdGhlIExhYiBDb29yZGluYXRvci4KCiMjIyMgRmFjZWJvb2sKCioqUHJpdmF0ZSBGYWNlYm9vayBHcm91cCoqCgpUaGUgcHVycG9zZSBvZiB0aGlzIHByaXZhdGUgZ3JvdXAgaXMgdG8gY29tbXVuaWNhdGUgd2l0aCBwYXN0IGFuZCBmdXR1cmUgUkFzLCBhcyB3ZWxsIGFzIHRvIG9yZ2FuaXplIGZ1biBhY3Rpdml0aWVzIG91dHNpZGUgb2YgbGFiLgoKMS4gTG9nIG9uIHRvIGh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbSB1c2luZyB5b3VyIGVtYWlsIGFuZCBwYXNzd29yZAoyLiBHbyB0byAnR3JvdXBzJwozLiBDbGljayBvbiAnRGV2ZWxvcG1lbnRhbCBQc3ljaG9wYXRob2xvZ3kgTGFiJyAoaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2dyb3Vwcy8xNDgzMjg5NDcxNjkxNjM0KQo0LiBZb3Ugd2lsbCBoYXZlIHRvIHJlcXVlc3QgcGVybWlzc2lvbiB0byBqb2luIHRoZSBncm91cAo1LiBPbmNlIHlvdSBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGdyb3VwLCB5b3UgY2FuIGFjY2VzcyB0aGUgZGlzY3Vzc2lvbiwgdGhlIG1lbWJlcnMsIGV2ZW50cywgYW5kIHBob3RvcyBzaGFyZWQgdG8gdGhpcyBncm91cAoKKipQdWJsaWMtRmFjaW5nIEZhY2Vib29rIFBhZ2UqKgoKVGhlIHB1cnBvc2Ugb2YgdGhpcyBwYWdlIGlzIHRvIGluZm9ybSB0aGUgb3V0c2lkZSB3b3JsZCBhYm91dCB0aGUgcmVzZWFyY2gsIGluZm9ybSBhYm91dCBjaGFuZ2VzIChlLmcuLCBzYWZldHkgcHJlY2F1dGlvbnMsIG5ldyB0ZWFtIG1lbWJlcnMpIGFuZCBwcm92aWRlIHVwZGF0ZXMgKGUuZy4sIG5ldyByZXNlYXJjaCBmaW5kaW5ncywgY29uZmVyZW5jZXMsIGdyYW50cywgZXZlbnRzIGluIHRoZSBsYWIpLgoKMS4gTG9nIG9uIHRvIGh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbSB1c2luZyB5b3VyIGVtYWlsIGFuZCBwYXNzd29yZAoyLiBMaWtlIHRoZSBsYWIgcGFnZTogaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL0RldlBzeUxhYgoKIyMjIyBUd2l0dGVyCgpUaGUgcHVycG9zZSBvZiB0aGlzIFR3aXR0ZXIgYWNjb3VudCBpcyB0byBwb3N0IHVwZGF0ZXMgd2l0aCB0aGUgb3V0c2lkZSB3b3JsZCBhYm91dCB0aGluZ3Mgd2UgYXJlIHdvcmtpbmcgb24gaW4gdGhlIGxhYi4KV2UgaW52aXRlIGV2ZXJ5b25lIHRvIGZvbGxvdyB1cyBvbiB0aGlzIHBsYXRmb3JtLCBzbyB3ZSBjYW4gZ2V0IHRoZSB3b3JkIG91dCBhYm91dCB3aGF0IHdlIGRvIQoKMS4gTG9nIG9uIHRvIGh0dHBzOi8vdHdpdHRlci5jb20gdXNpbmcgeW91ciBwZXJzb25hbCBjcmVkZW50aWFscwoyLiBGb2xsb3cgYEBkZXZwc3lsYWJgIChodHRwczovL3R3aXR0ZXIuY29tL2RldnBzeWxhYikKCiMjIyMgSW5zdGFncmFtCgpUaGUgcHVycG9zZSBvZiB0aGlzIEluc3RhZ3JhbSBhY2NvdW50IGlzIHRvIHBvc3QgdXBkYXRlcyB3aXRoIHRoZSBvdXRzaWRlIHdvcmxkIGFib3V0IHRoaW5ncyB3ZSBhcmUgd29ya2luZyBvbiBpbiB0aGUgbGFiLgpXZSBpbnZpdGUgZXZlcnlvbmUgdG8gZm9sbG93IHVzIG9uIHRoaXMgcGxhdGZvcm0sIHNvIHdlIGNhbiBnZXQgdGhlIHdvcmQgb3V0IGFib3V0IHdoYXQgd2UgZG8hCgoxLiBMb2cgb24gdG8gaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbSB1c2luZyB5b3VyIHBlcnNvbmFsIGNyZWRlbnRpYWxzCjIuIEZvbGxvdyBgQGRldnBzeWxhYmAgKGh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZGV2cHN5bGFiKQoKIyMgTGFiIERvY3VtZW50YXRpb24KCldlIHN0cml2ZSB0byBtYWludGFpbiBhY2N1cmF0ZSwgZGV0YWlsZWQsIGFuZCBzdGVwLWJ5LXN0ZXAgbWFudWFscyBvciBjaGVja2xpc3RzIGZvciBhbGwgbGFiIHByb2NlZHVyZXMuCldyaXR0ZW4gZG9jdW1lbnRhdGlvbiBpcyBpbXBvcnRhbnQgZm9yIG1hbnkgcmVhc29ucywgaW5jbHVkaW5nIHRoYXQgaXQgZmFjaWxpdGF0ZXMgdHJhaW5pbmcsIHJlZHVjZXMgdGhlIGxpa2VsaWhvb2Qgb2YgaHVtYW4gZXJyb3IsIGFsbG93cyB1cyB0byBzaGFyZSBvdXIgcHJvY2Vzc2VzIHdpdGggb3RoZXJzLCBhbmQgaW5jcmVhc2VzIHJlcGxpY2FiaWxpdHkuCklmIHdlIGFyZSBtaXNzaW5nIHdyaXR0ZW4gZG9jdW1lbnRhdGlvbiBmb3Igc29tZXRoaW5nLCBwbGVhc2UgbGV0IHVzIGtub3cgYW5kIGhlbHAgdXMgY3JlYXRlIGEgbWFudWFsIG9yIGNoZWNrbGlzdCEKCkp1c3QgYXMgaW1wb3J0YW50IGFzIGNyZWF0aW5nIHdyaXR0ZW4gZG9jdW1lbnRhdGlvbiBpcyB1c2luZyBpdCEKW0NoZWNrbGlzdHMgdG8gcmVtaW5kIHN1cmdlb25zIHRvIHdhc2ggdGhlaXIgaGFuZHMgc2lnbmlmaWNhbnRseSByZWR1Y2UgaW5mZWN0aW9uIHJhdGVzXShodHRwczovL3d3dy5uZXd5b3JrZXIuY29tL21hZ2F6aW5lLzIwMDcvMTIvMTAvdGhlLWNoZWNrbGlzdCkgKGFyY2hpdmVkIGF0IGh0dHBzOi8vcGVybWEuY2MvNFE2Mi1FUjVUKTsgd2UgYXJlIGRvaW5nIG11Y2ggbW9yZSBjb21wbGljYXRlZCB3b3JrIHRoYW4gd2FzaGluZyBoYW5kcywgc28gaXQgaXMgY3J1Y2lhbCB0byBmb2xsb3cgb3VyIG1hbnVhbHMgYW5kIGNoZWNrbGlzdHMuCldoZW4geW91IGFyZSB0cmFpbmluZyBpbiBhIG5ldyBwcm9jZWR1cmUsIGRvIG5vdCByZWx5IGp1c3Qgb24gd2hhdCBvdGhlciBSQXMgdGVsbCB5b3UuCkRlc3BpdGUgdGhlaXIgYmVzdCBlZmZvcnRzIHRvIGhlbHAgeW91LCBSQXMgbWF5IHNvbWV0aW1lcyBkZXNjcmliZSBwcm9jZWR1cmVzIGluY29ycmVjdGx5IHRvIHlvdSwgYW5kIGl0IGlzIGltcG9ydGFudCB0byBmb2xsb3cgd2hhdCBpcyBpbiB0aGUgbWFudWFsLgpJZiBzb21ldGhpbmcgaXMgbWlzc2luZywgaW5jb3JyZWN0LCBvciBvdXQtb2YtZGF0ZSBpbiB0aGUgbWFudWFsLCBwbGVhc2UgbGV0IHVzIGtub3cgc28gd2UgY2FuIGZpeCBpdC4KCiMjIExhYiBPbmVEcml2ZSB7I29uZWRyaXZlfQoKV2UgaGF2ZSBhbiBvbmxpbmUgZm9sZGVyIHNoYXJlZCB3aXRoIHRoZSB0ZWFtIHRocm91Z2ggT2ZmaWNlIDM2NSBPbmVEcml2ZS4KSW4gb3JkZXIgdG8gYWNjZXNzIHRoaXMgZm9sZGVyLCB5b3UgaGF2ZSB0byBmaXJzdCBiZSBncmFudGVkIHBlcm1pc3Npb24gYnkgRHIuIFBldGVyc2VuIG9yIHRoZSBMYWIgQ29vcmRpbmF0b3IgKHdoaWNoIHNob3VsZCBoYXBwZW4gYXMgcGFydCBvZiB5b3VyIG9uYm9hcmRpbmcgd2hlbiB5b3UgZmlyc3Qgam9pbiB0aGUgbGFiKS4KT25jZSB5b3UgaGF2ZSBwZXJtaXNzaW9uLCB5b3UgY2FuIGFjY2VzcyB0aGUgZm9sZGVyIGhlcmU6IApodHRwczovL2lvd2EtbXkuc2hhcmVwb2ludC5jb20vcGVyc29uYWwvaXRwZXRlcnNlbl91aW93YV9lZHUvX2xheW91dHMvMTUvb25lZHJpdmUuYXNweD9pZD0lMkZwZXJzb25hbCUyRml0cGV0ZXJzZW4lNUZ1aW93YSU1RmVkdSUyRkRvY3VtZW50cyUyRlJlc2VhcmNoJTJGTGFiJTJGT25lRHJpdmUKClRoaXMgZm9sZGVyIGNvbnRhaW5zIHRocmVlIHN1YmZvbGRlcnM6CgoxLiAiRm9yIFJBIEVkaXQiOiBUaGUgZG9jdW1lbnRzIGluIHRoaXMgZm9sZGVyIGFsbG93IGZvciBlZGl0aW5nIGJ5IGFsbCB0ZWFtIG1lbWJlcnMuClRoaXMgZm9sZGVyIGluY2x1ZGVzOgogICAgLSBgTGFiIE1lZXRpbmcgQWdlbmRhcyDigJMgVGVhbS5kb2N4YDogVGhpcyBpcyB0aGUgcnVubmluZyBhZ2VuZGEgZm9yIG91ciB3ZWVrbHkgbGFiIG1lZXRpbmdzLgogICAgRXZlcnkgd2VlaywgdGhlIFtsYWIgc2NyaWJlXSgjbGFiU2NyaWJlKSB3aWxsIGFkZCBkZXRhaWxlZCBtZWV0aW5nIG5vdGVzIHRvIHRoaXMgZG9jdW1lbnQKICAgIC0gYExhYiBNZWV0aW5nIEFydGljbGUgU2lnbi1VcC5kb2N4YDogVGhpcyBkb2N1bWVudCBpcyB1c2VkIGJ5IGV2ZXJ5IFJBIGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgc2VtZXN0ZXIgdG8gc2lnbiB1cCBmb3IgdGhlIGRheSB0aGV5IGxlYWQgdGhlIGFydGljbGUgZGlzY3Vzc2lvbi4KICAgIFJBcyBjYW4gdGhlbiBhY2Nlc3MgaXQgdGhyb3VnaG91dCB0aGUgc2VtZXN0ZXIgdG8gY2hlY2sgd2hpY2ggZGF5IHRoZXkgYXJlIHNjaGVkdWxlZCB0byBwcmVzZW50IG9uLCBidXQgc2hvdWxkIG5vdCBhbHRlciB0aGVpciBzaWduLXVwIGRheSB3aXRob3V0IGZpcnN0IG9idGFpbmluZyBwZXJtaXNzaW9uIGZyb20gdGhlIExhYiBDb29yZGluYXRvcgogICAgLSBgVGFzayBUaW1pbmcgU2hlZXQueGxzeGA6IFRoaXMgRXhjZWwgZG9jdW1lbnQgaXMgdXNlZCBieSBhbGwgUkFzIHRvIHJlY29yZCB0aGVpciBjb2RpbmcgcHJvZ3Jlc3MgKHNlZSBgQ29kaW5nIE1hbnVhbGAgZm9yIG1vcmUgaW5mb3JtYXRpb24pCjEuICJGb3IgUkEgVmlldyI6IFRoZSBkb2N1bWVudHMgaW4gdGhpcyBmb2xkZXIgYWxsb3cgZm9yIHJlYWQtb25seSBhY2Nlc3MgYnkgYWxsIHRlYW0gbWVtYmVycy4KMS4gIkxhYiBSZXBvcnRzIjogVGhpcyBpcyB3aGVyZSB5b3Ugc2hvdWxkIHNhdmUgeW91ciBiaS13ZWVrbHkgbGFiIHJlcG9ydHMgdGhyb3VnaG91dCB0aGUgc2VtZXN0ZXIuCkxhYiByZXBvcnQgZm9sZGVycyBjYW4gb25seSBiZSBhY2Nlc3NlZCBieSB0aGUgUkEgd2hvIG93bnMgaXQsIHRoZSBMYWIgQ29vcmRpbmF0b3IsIGFuZCBEci4gUGV0ZXJzZW4uCkVhY2ggbGFiIHJlcG9ydCBmb2xkZXIgaGFzIGEgc3ViZm9sZGVyIG5hbWVkICJQYXN0IExhYiBSZXBvcnRzX0hhd2tJRCIgd2hpY2ggc2hvdWxkIGJlIHVzZWQgdG8gYXJjaGl2ZSBvbGQgbGFiIHJlcG9ydHPigJRpbiBvdGhlciB3b3JkcywgZXZlcnkgdGltZSB5b3Ugc2F2ZSBhIG5ldyBsYWIgcmVwb3J0IHRvIHlvdXIgcm9vdCBsYWIgcmVwb3J0IGZvbGRlciwgeW91IHNob3VsZCBtb3ZlIHRoZSBwcmV2aW91cyBvbmUgdG8gdGhlICJQYXN0IExhYiBSZXBvcnRzX0hhd2tJRCIgZm9sZGVyLgoKIyMgTGFiIERyaXZlCgoqKiYjMzU7MSBSdWxlOiBOZXZlciBkZWxldGUgYW55IGRvY3VtZW50cyBvciBkYXRhIHdpdGhvdXQgZXhwbGljaXQgcGVybWlzc2lvbiBmcm9tIHRoZSBMYWIgQ29vcmRpbmF0b3IsIGdyYWR1YXRlIHN0dWRlbnRzLCBvciBEci4gUGV0ZXJzZW4gZmlyc3QuKioKCklmIHRoZXJlIGlzIGFuIG9sZCBvciBvdXRkYXRlZCBkb2N1bWVudCwgbGlrZSBhbiBvdXRkYXRlZCBjaGVja2xpc3Qgb3IgYW4gb2xkIGNvZGluZyBmb3JtIHRoYXQgaGFzIHNpbmNlIGJlZW4gcmUtY29kZWQsIGRvIG5vdCBkZWxldGUgaXQuCllvdSBtYXkgbW92ZSBpdCB0byBhbiAiMDAtT2xkIiBmb2xkZXIgKHNlZSBbRm9sZGVyIERlc2lnbmF0aW9uc10oI2ZvbGRlckRlc2lnbmF0aW9ucykgYmVsb3cpLCBvciwgaWYgeW91IGFyZSB1bnN1cmUgd2hlcmUgaXQgc2hvdWxkIGJlIHNhdmVkLCBjb25zdWx0IHlvdXIgZmVsbG93IGxhYiBtZW1iZXJzIG9yIHRoZSBMYWIgQ29vcmRpbmF0b3IuCgojIyMgRmlsZSBOYW1pbmcgQ29udmVudGlvbnMKCkJlY2F1c2UgdGhlIExhYiBEcml2ZSBjb250YWlucyBzbyBtYW55IGZpbGVzIGFjcm9zcyBzbyBtYW55IGRpZmZlcmVudCB0YXNrcywgVENzLCBhbmQgYXJlYXMgb2YgdGhlIHJlc2VhcmNoIHByb2Nlc3MsIGl0IGlzIGltcGVyYXRpdmUgdGhhdCBhbGwgZmlsZXMgYXJlIGNhcmVmdWxseSBuYW1lZCBmb2xsb3dpbmcgYSBkZXNjcmlwdGl2ZSwgc3RhbmRhcmRpemVkIG5hbWluZyBjb252ZW50aW9uLgoqKkFsbCBmaWxlIG5hbWVzIHNob3VsZCBiZSBBTEwgbG93ZXJjYXNlLCBleGNlcHQgd2hlbiB1c2luZyB0aGUgZm9sbG93aW5nIGVzdGFibGlzaGVkIGxhYiBhYmJyZXZpYXRpb25zOiBMVjEvMiwgb3IgVDEvMi8zLzQsIG9yIFRDL1BDL1BQL1NDKiouCgotIEZvciB2aXNpdC1yZWxhdGVkIGZpbGVzIGluICIqQ29kaW5nKiIsICIqRW50cnkqIiwgYW5kICIqUGF5bWVudCoiIGZvbGRlcnMsIHRoZSBmaWxlIG5hbWUgc2hvdWxkIGluY2x1ZGU6IGBUQ0lEYCwgYHdhdmVgLCBhbmQgdGFzay9kb2N1bWVudCB0eXBlIChlLmcuLCBgMTAwMF8zNl9jb25zZW50YCkuCi0gRm9yIGZpbGVzIHdpdGhpbiAiKkNvZGVkIERhdGEqIiwgY29kaW5nIGZvcm0gZmlsZXMgc2hvdWxkIGFsc28gaW5jbHVkZSB3aGljaCBjb2RlciB0aGUgZm9ybSBpcyBmcm9tIChlLmcuLCBgMTAwMF8zNl9ncmFzc3Nub3dfY29kZXIxYCkuCi0gRm9yIGZpbGVzIHdpdGhpbiAiKlNjb3JpbmcqIiwgc2NvcmluZyBmb3JtIGZpbGVzIHNob3VsZCBhbHNvIGluY2x1ZGUgd2hpY2ggc2NvcmVyIHRoZSBmb3JtIGlzIGZyb20gKGUuZy4sIGAxMDAwXzM2X21hcHNfc2NvcmVyMWApLgotIEZvciB2aXNpdC1yZWxhdGVkIGZpbGVzIHdpdGhpbiAiKlBheW1lbnRzKiIsIGZpbGUgbmFtZXMgc2hvdWxkIGFsc28gaW5kaWNhdGUgd2hpY2ggdmlzaXQgb3IgY2FyZWdpdmVyIHRoZSByZWNlaXB0IGlzIGZyb20gKGUuZy4sIGAxMDAwXzM2X3JlY2VpcHRfTFYxYCwgYDEwMDBfMzZfVzlfU0NgKS4KLSBBbnkgSVJCIGRvY3VtZW50cyBpbiB0aGUgSVJCIGZvbGRlciAoYFxcbGMtcnMtc3RvcmUyNC5ocGMudWlvd2EuZWR1XGxzc19pdHBldGVyc2VuXExhYlxTdHVkaWVzXFNjaG9vbCBSZWFkaW5lc3MgU3R1ZHlcSVJCXGApIHRoYXQgYXJlIHN0YW1wZWQgd2l0aCBhbiBleHBpcmF0aW9uIGRhdGUgKGUuZy4sIHJlY3J1aXRtZW50IG1hdGVyaWFscywgY29uc2VudHMpIHNob3VsZCBhbHNvIGluZGljYXRlIHRoZSB5ZWFyIGluIHdoaWNoIHRoZXkgYXJlIHZhbGlkIChlLmcuLCBgaW5mb3JtZWRjb25zZW50XzIwMThgKS4KV2hlbiB0aGVzZSBtYXRlcmlhbHMgZXhwaXJlLCB0aGV5IGNhbiBiZSBtb3ZlZCB0byB0aGUgIjAwLU9sZCIgZm9sZGVyIHdpdGhpbiB0aGUgcmVsZXZhbnQgcGFyZW50IGZvbGRlci4KCiMjIyBGb2xkZXIgRGVzaWduYXRpb25zIHsjZm9sZGVyRGVzaWduYXRpb25zfQoKKk9sZCo6IFRoaXMgZmlsZSBkZXNpZ25hdGlvbiBpcyB1c2VkIHRvIHN0b3JlIHZlcnNpb25zIG9mIGRvY3VtZW50cyB0aGF0IGFyZSBvdXRkYXRlZOKAlHRoaXMgYXBwbGllcyBib3RoIHRvIHByZXZpb3VzIHZlcnNpb25zIG9mIGFjdGl2ZSwgdXBkYXRlZCBkb2N1bWVudHMgYXMgd2VsbCBhcyBkb2N1bWVudHMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHVzZS4KCipBZG1pbio6IFRoaXMgZmlsZSBkZXNpZ25hdGlvbiBpcyB1c2VkIHRvIHN0b3JlIG1pc2NlbGxhbmVvdXMgYWRtaW4tcmVsYXRlZCBkb2N1bWVudHMgKGUuZy4sIHNwcmVhZHNoZWV0cywgY2hlY2tsaXN0cywgZXRjLikgdGhhdCBjYW5ub3QgbG9naWNhbGx5IGJlIHBsYWNlZCBpbiBhbm90aGVyIGZvbGRlciB3aXRoaW4gdGhlIHNhbWUgcGFyZW50IGZvbGRlci4KVGhlc2UgZm9sZGVycyBhcmUgbm90IG1lYW50IHRvIGJlIGEgImp1bmsgZHJhd2VyIiB0byBkZXBvc2l0IG5ldyBmaWxlcywgcmF0aGVyIHRoZXkgYXJlIGEgY2xlYXJseSBpZGVudGlmaWFibGUgaG9tZSBmb3IgaW1wb3J0YW50IGZpbGVzIHRoYXQgZG8gbm90IGhhdmUgYW5vdGhlciBvYnZpb3VzIGhvbWUsIHNvIHRoZXkgYXJlIG5vdCBsb29zZSBpbiBhIHBhcmVudCBmb2xkZXIuCklmIG5ldyBkb2N1bWVudHMgYXJlIGNyZWF0ZWQgdGhhdCBjb3VsZCBsb2dpY2FsbHkgYmUgcGFpcmVkIHdpdGggYSBkb2N1bWVudCBpbiBhIGAwMS1BZG1pbmAgZm9sZGVyLCB0aGVuIGRvIGNyZWF0ZSBhIG5ldyBmb2xkZXIgYW5kIG1vdmUgdGhlIHJlbGF0ZWQgZmlsZSBmcm9tIGAwMS1BZG1pbmAgaW50byB0aGUgbmV3IGZvbGRlciB3aXRoIGl0cyByZWxhdGVkIGRvY3VtZW50cy4KSWYgYSBuZXcgZm9sZGVyIG5lZWRzIHRvIGJlIGNyZWF0ZWQsIGNvbnRhY3QgdGhlIExhYiBDb29yZGluYXRvci4KCioqQSBOb3RlIEFib3V0IENyZWF0aW5nIE5ldyBGb2xkZXJzOioqCgpUaGUgUkEgc2hvdWxkIGFzayB0aGUgTGFiIENvb3JkaW5hdG9yLCBEci4gUGV0ZXJzZW4sIGFuZCBncmFkdWF0ZSBzdHVkZW50cyBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgZm9sZGVyIHdpdGhpbiB0aGUgTGFiIERyaXZlLgpSQXMgYXJlIGFibGUgdG8gY3JlYXRlIG5ldyBUQ0lEIGZvbGRlcnMgaW4gdGhlaXIgY2hlY2sgZGF0YSBmb2xkZXJzIG9mIHRoZWlyIGNvZGluZyBvciBlbnRyeSB0YXNrLCBhcyB3ZWxsIGFzIGFueSBuZXcgZm9sZGVycyB3aXRoaW4gdGhlaXIgcGVyc29uYWwgZm9sZGVyIG9uIHRoZSBkcml2ZS4KCiMjIyBSQSBGb2xkZXJzCgpGb3IgZXZlcnkgUkEgd2hvIGpvaW5zIHRoZSBsYWIsIHdlIGNyZWF0ZSB0d28gZm9sZGVycyB0aGF0IGFyZSBvbmx5IHRoZWlycyB0byB1c2U6IHRoZWlyIG1lbWJlciBmb2xkZXIgYW5kIHRoZWlyIGxhYiByZXBvcnQgZm9sZGVyLgpNZW1iZXIgZm9sZGVycyBhbmQgbGFiIHJlcG9ydCBmb2xkZXJzIGFyZSBuYW1lZCB1c2luZyB0aGUgUkEncyBgSGF3a0lEYC4KCiMjIyBNZW1iZXIgRm9sZGVycwoKTWVtYmVyIGZvbGRlcnMgY2FuIGJlIGZvdW5kIG9uIHRoZSBsYWIgZHJpdmUgaGVyZToKYFxcbGMtcnMtc3RvcmUyNC5ocGMudWlvd2EuZWR1XGxzc19pdHBldGVyc2VuXExhYlxNZW1iZXJzXGAKCk1lbWJlciBmb2xkZXJzIHNob3VsZCBiZSB1c2VkIGZvciBhbnkgbGFiLXJlbGF0ZWQgd29yayAoZXhjbHVkaW5nIGxhYiByZXBvcnRzKS4KVGhleSBjYW4gYmUgYWNjZXNzZWQgYnkgYW55b25lIGluIGxhYiwgaW5jbHVkaW5nIG90aGVyIFJBcywgc28gaXQgaXMgbm90IGFkdmlzYWJsZSB0byBzYXZlIGFueSBwZXJzb25hbCBvciBjb25maWRlbnRpYWwgZG9jdW1lbnRzIHdpdGhpbiBhIG1lbWJlciBmb2xkZXIuCkhvd2V2ZXIsIGlmIHlvdSBldmVyIHdvcmsgb24gYSBsYWItcmVsYXRlZCBwcm9qZWN0IChlLmcuLCByZWNydWl0bWVudCBtYXRlcmlhbCwgaGVscGluZyB0byBkZXZlbG9wIGEgbmV3IHRhc2sgb3IgY29kaW5nIHN5c3RlbSwgZXRjLikgYW55IHJlbGV2YW50IGRvY3VtZW50cyBzaG91bGQgYmUgc2F2ZWQgaW4geW91ciBtZW1iZXIgZm9sZGVyLgpXaGVuIFJBcyBncmFkdWF0ZSBmcm9tIHRoZSBsYWIsIHRoZXNlIGZvbGRlcnMgYXJlIGFyY2hpdmVkIHNvIGlmIHdlIGV2ZXIgbmVlZCB0byBnbyBiYWNrIGFuZCBmaW5kIGRvY3VtZW50cyB1c2VkIGluIHByZXZpb3VzIHByb2plY3RzIHdlIGhhdmUgdGhlbSBzYXZlZC4KCiMjIyBMYWIgRHJpdmUgRGlyZWN0b3J54oCURnJlcXVlbnRseSBVc2VkIEZvbGRlcnMKCnwgPCEtLSAtLT4gICAgICB8IDwhLS0gLS0+ICAgICAgICAgICAgICAgICAgICAgICAgIHwgPCEtLSAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA8IS0tIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8Oi0tLS0tLS0tLS0tLS0tfDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKfCBNZW1iZXJzICAgICAgIHwgKkluZGl2aWR1YWwgUkEgZmlsZXMsIGJ5IEhhd2tJRCogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgTWlzY2VsbGFuZW91cyB8IFByb2Zlc3Npb25hbCBEZXZlbG9wbWVudCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgfCBSQXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJBIExhYiBIb3VycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKkZvbGRlcnMgYXJlIGJyb2tlbiBkb3duIGJ5IFNlbWVzdGVyIGFuZCBZZWFyLCBhbmQgaW5jbHVkZSBSQSBMYWIsIEF2YWlsYWJpbGl0eSwgYW5kIFdlZWtlbmQgT24tQ2FsbCBTY2hlZHVsZXMqIHwKfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSQSBUYXNrIEFzc2lnbm1lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICpGb2xkZXJzIGFyZSBicm9rZW4gZG93biBieSBTZW1lc3RlciBhbmQgWWVhciwgYW5kIGluY2x1ZGUgQ29kaW5nLCBFbnRyeUNoZWNrLCBhbmQgTGFiIENsZWFuaW5nIFNjaGVkdWxlcyogICAgICB8CnwgU3R1ZGllcyAgICAgICB8IFNjaG9vbCBSZWFkaW5lc3MgU3R1ZHkgICAgICAgICAgIHwgQ29kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF5bWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFByb2NlZHVyZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSZWNydWl0bWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU2NvcmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFZpZGVvcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBUcmFpbmluZyAgICAgIHwgT3JpZW50YXRpb24gICAgICAgICAgICAgICAgICAgICAgfCBDaGVja2xpc3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICB8IFJFRENhcCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVmlkZW9zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICpQREYgdGV4dCB2ZXJzaW9ucyBvZiB2aWRlbyB0cmFpbmluZyBpbmZvcm1hdGlvbiwgYnkgdG9waWMqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBXZWJzaXRlICAgICAgIHwgUGhvdG9zICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCYW5uZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGljdHVyZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRhYnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKCiMjIyBHb29nbGUgRHJpdmUgeyNnb29nbGVEcml2ZX0KClNvbWV0aW1lcywgdGhlIGxhYiBjcmVhdGVzIGRvY3VtZW50cyBpbiBHb29nbGUgRHJpdmUgZm9yIHB1cnBvc2VzIHN1Y2ggYXMgc2hhcmluZywgcHJvZmVzc2lvbmFsIGRldmVsb3BtZW50IHdvcmtzaG9wcywgZXRjLgpTbyB0aGUgbGFiIHJldGFpbnMgYWNjZXNzIHRvIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIHRyYW5zZmVyIG93bmVyc2hpcCB0byBEci4gUGV0ZXJzZW4gd2hlbiBjcmVhdGluZyB0aGVtLgpUbyB0cmFuc2ZlciBvd25lcnNoaXAsIHJpZ2h0IGNsaWNrIHRoZSBkb2N1bWVudCwgY2xpY2sgIlNoYXJlIiwgYWRkIERyLiBQZXRlcnNlbiAoaXNhYWN0cGV0ZXJzZW5AZ21haWwuY29tKSwgYW5kIHNlbGVjdCAiVHJhbnNmZXIgT3duZXJzaGlwLiIKCiMjIExhYiBBY2Nlc3MgLyBLZXlzCgpTb21ldGltZXMgd2hlbiB2aXNpdHMgb2NjdXIgb3V0c2lkZSBvZiBub3JtYWwgbGFiIGhvdXJzIChN4oCTRiwgOUFN4oCTNVBNKSwgdGhlIExhYiBDb29yZGluYXRvciBpcyB1bmFibGUgdG8gYmUgcHJlc2VudCB0byBvcGVuIGxhYiBvciBsb2NrIHVwLgpJbiB0aGVzZSBzaXR1YXRpb25zLCBpdCBpcyBwZXJtaXNzaWJsZSBmb3IgUkFzIHRvIG9wZW4gb3IgY2xvc2UgdGhlIGxhYiBvbiB0aGVpciBvd24gKHByb3ZpZGVkIHRoZSBMYWIgQ29vcmRpbmF0b3IgaGFzIHJlcXVlc3RlZC9hcHByb3ZlZCB0aGlzKS4KV2hlbiB0aGlzIGhhcHBlbnMsIHRoZSBSQSBjYW4gcmV0cmlldmUgdGhlIGxhYiBrZXkgZnJvbSB0aGUgbG9ja2JveCBvciBmcm9tIHRoZSBEZXBhcnRtZW50LgpJZiB0aGUgUkEgaXMgdW5hYmxlIHRvIHJldHJpZXZlIHRoZSBrZXkgZnJvbSB0aGUgbG9ja2JveCwgZm9sbG93IHRoZSBzdGVwcyBiZWxvdzoKCjEuIFdIRVJFIHRvIGdldCBrZXlzIHRvIG9wZW4gdGhlIGxhYjoKICAgIGEuIFRoZSBSQSBjYW4gYWNjZXNzIHRoZSBrZXkgbG9ja2JveCBvbiB0aGUgbGFiJ3MgZW50cnkgZG9vciBzbyB0aGF0IGFsbCBSQXMgYXNzaWduZWQgdG8gaGVscCB3aXRoIGEgdmlzaXQgZHVyaW5nIHRoZSBMYWIgQ29vcmRpbmF0b3IncyBhYnNlbmNlIGNhbiBhY2Nlc3MgdGhlIGxhYgogICAgICAgIGkuIElmIHRoZSBMYWIgQ29vcmRpbmF0b3Igb3IgZ3JhZHVhdGUgc3R1ZGVudHMgYXJlIGluIHRoZSBsYWIgYW5kIHRoZWlyIGRvb3IgaXMgb3BlbiwgdGhleSBhcmUgbW9yZSB0aGFuIGhhcHB5IHRvIGxlbmQgdGhlaXIga2V5IHRvIG9wZW4gbGFiIGRvb3JzLgogICAgICAgICAgICAxLiBUaGUga2V5IGxvY2tib3ggcGFzc2NvZGUgaXMgY2hhbmdlZCBldmVyeSBzZW1lc3RlcuKAlHRoZSBMYWIgQ29vcmRpbmF0b3Igd2lsbCBwcm92aWRlIFJBcyB3aXRoIHRoZSBjdXJyZW50IHBhc3Njb2RlIGFzIG5lZWRlZAogICAgICAgICAgICAxLglJZiB0aGUga2V5IGxvY2tib3ggd2FzIHVzZWQsIHRoZSBzcGFyZSBsYWIga2V5IHNob3VsZCBiZSByZXR1cm5lZCB0byB0aGUga2V5IGxvY2tib3ggYWZ0ZXIgdGhlIGxhYiBpcyBmdWxseSBsb2NrZWQgdXAgKHNlZSBiZWxvdykgc28gdGhhdCBSQXMgb24gb3RoZXIgdmlzaXRzIGNhbiBhY2Nlc3MgdGhlIGxhYiBhcyB3ZWxsCiAgICBiLiBJZiB0aGUgUkEgY2Fubm90IHJldHJpZXZlIHRoZSBsYWIga2V5IGZyb20gdGhlIGxvY2tib3ggKGZvciB3aGF0ZXZlciByZWFzb24pLCB5b3UgY2FuIHJldHJpZXZlIHRoZSBrZXkgZnJvbSBDYXJyaWUgV2hpdHRha2VyLCB3aG8gc2l0cyBhdCB0aGUgZnJvbnQgZGVzayBpbiB0aGUgUEJTIGRlcGFydG1lbnQgbWFpbiBvZmZpY2UgKEc2MCBQc3ljaG9sb2dpY2FsIGFuZCBCcmFpbiBTY2llbmNlcyBCdWlsZGluZykKICAgICAgICBpLglJZiBsYWIga2V5cyB3ZXJlIHRha2VuIGZyb20gdGhlIGRlcGFydG1lbnQsIHJldHVybiB0byBDYXJyaWUgd2hlbiBkb25lCiAgICBjLglUaGUgU3BhcmUgTGFiIEtleTogQkFBMzUgPSBBbGwgZG9vcnMgdG8gdGhlIHN1aXRlIChSb29tcyAxMDnigJMxMTkpCjEuIEhPVyB0byBMb2NrIFVwOgogICAgYS4gSWYgeW91IGFyZSBsZWF2aW5nIHRoZSBsYWIgYW5kIG5vIG9uZSBlbHNlIGlzIGluIHRoZSBsYWIgbWFrZSBzdXJlIHRvIGxvY2s6CiAgICAgICAgaS4gQWxsIGRvb3JzIHVzaW5nIGtleSBCQUEzNSAKICAgICAgICAgICAgMS4gUkEgYW5kIENvZGluZyByb29tcwogICAgICAgICAgICAyLglBbGwgdGVzdGluZyBhbmQgb2JzZXJ2YXRpb24gcm9vbXMKICAgICAgICAgICAgMy4JS2l0Y2hlbiBzcGFjZSAKICAgICAgICAgICAgNC4JV2FpdGluZyByb29tCiAgICAgICAgICAgIDUuCUV4dGVyaW9yIGRvb3IgaW4gdGhlIGhhbGx3YXkKICAgIGIuCVJldHVybiBrZXlzIHRvIGFwcHJvcHJpYXRlIGxvY2F0aW9u4oCUZS5nLiwgdG8gdGhlIGxvY2tib3gsIHRvIHRoZSBMYWIgQ29vcmRpbmF0b3IsIG9yIHRvIENhcnJpZSAod2hlcmV2ZXIgaXQgd2FzIHRha2VuIGZyb20p4oCUYW5kIGJlIHN1cmUgdG8gbG9jayB0aGUgbG9ja2JveC4KCiMjIFBob25lIFByb2NlZHVyZXMKCjEuIFdoZW4gdGhlIHBob25lIHJpbmdzLCBhbmQgdGhlIExhYiBDb29yZGluYXRvciBpcyB1bmF2YWlsYWJsZSwgaXQgaXMgdGhlIFJBJ3Mgam9iIHRvIGFuc3dlciB0aGUgcGhvbmUuCjEuIFVwb24gYW5zd2VyaW5nIHRoZSBwaG9uZSwgc2F5LCAiRGV2ZWxvcG1lbnRhbCBQc3ljaG9wYXRob2xvZ3kgTGFiLCB0aGlzIGlzIF9fX19fIFt5b3VyIG5hbWVdIi4KMS4gSWYgdGhlIHBlcnNvbiBoYXMgYW55IHF1ZXN0aW9ucywgYW5zd2VyIHRoZW0gdG8gdGhlIGJlc3Qgb2YgeW91ciBhYmlsaXR5CiAgICBhLiBJZiB5b3UgZG8gbm90IGtub3cgdGhlIGFuc3dlciwgYXNrIG9uZSBvZiB0aGUgb3RoZXIgUkFzLCB0aGUgTGFiIENvb3JkaW5hdG9yLCBvciBEci4gUGV0ZXJzZW4KICAgIGIuIElmIHlvdSBzdGlsbCBkbyBub3Qga25vdyB0aGUgYW5zd2VyLCB3cml0ZSBkb3duIHRoZWlyIHF1ZXN0aW9uIG9uIHRoZSAiV2hpbGUgeW91IHdlcmUgb3V0IiBjYXJkcywgYW5kIGxldCB0aGVtIGtub3cgdGhhdCB3ZSB3aWxsIGNhbGwgdGhlbSBiYWNrIGFzIHNvb24gYXMgcG9zc2libGUKMS4gSWYgdGhlIHBlcnNvbiBpcyBsb29raW5nIGZvciB0aGUgTGFiIENvb3JkaW5hdG9yIG9yIERyLiBQZXRlcnNlbiwgbGV0IHRoZW0ga25vdyB0aGF0IHRoZXkgYXJlIHVuYXZhaWxhYmxlLCBidXQgeW91IGNhbiB0YWtlIGEgbWVzc2FnZSBpZiB0aGV5IHdvdWxkIGxpa2UuCiAgICBhLiBXcml0ZSB3aG8gY2FsbGVkLCBhbmQgdGhlaXIgbWVzc2FnZSwgb24gdGhlICJXaGlsZSB5b3Ugd2VyZSBvdXQiIGNhcmRzIHRoYXQgYXJlIG5leHQgdG8gdGhlIHBob25lIGluIHRoZSBSQSByb29tLgogICAgYi4gSWYgdGhleSB3b3VsZCBsaWtlIHRvIGNhbGwgYmFjayBsYXRlciwgYW5kIHlvdSBrbm93IHdoZW4gdGhleSAodGhlIExhYiBDb29yZGluYXRvciBhbmQgRHIuIFBldGVyc2VuKSB3aWxsIGJlIGJhY2ssIGxldCB0aGVtIGtub3cgd2hlbiB3b3VsZCBiZSBhIGdvb2QgdGltZSBmb3IgdGhlbSB0byBjYWxsIGJhY2sKCiMjIEJpLVdlZWtseSBMYWIgUmVwb3J0cyB7I2xhYlJlcG9ydH0KCkxhYiByZXBvcnRzIHNlcnZlIGltcG9ydGFudCBwdXJwb3NlczoKCi0gdGhleSBwcm92aWRlIGEgY2hhbm5lbCBvZiBjb21tdW5pY2F0aW9uIGJldHdlZW4geW91IGFuZCBEci4gUGV0ZXJzZW4KLSB0aGV5IGhlbHAgeW91IGdhaW4gZXhwZXJpZW5jZSBhbmQgcHJhY3RpY2Ugd2l0aCB3cml0aW5nLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIG1hbnkgY2FyZWVycwotIHRoZXkgcHJvdmlkZSBhbiBhdmVudWUgZm9yIHlvdSB0byBtYWtlIHN1Z2dlc3Rpb25zIHRoYXQgY2FuIGhlbHAgaW1wcm92ZSB0aGUgbGFiIGFuZCBzdHVkeS4gKE9mIGNvdXJzZSwgeW91IGNhbiBtYWtlIHN1Z2dlc3Rpb25zIHRvIHRoZSB0ZWFtIGluIG90aGVyIHdheXMsIHRvby4pCgpGb2xsb3cgdGhlc2UgaW5zdHJ1Y3Rpb25zIHdoZW4gc3VibWl0dGluZyBsYWIgcmVwb3J0czoKCjEuIExhYiByZXBvcnRzIGFyZSBkdWUgYnkgNXBtIG9uIEZyaWRheSBldmVyeSBvdGhlciB3ZWVrIHRocm91Z2hvdXQgdGhlIHNlbWVzdGVyLgoxLiBXcml0ZSB0aGUgbGFiIHJlcG9ydCBpbiBNaWNyb3NvZnQgV29yZCBhbmQgc2F2ZSBpdCBhcyBhIGAuZG9jeGAgZmlsZS4KVGhpcyBpcyBpbXBvcnRhbnQgc28gdGhhdCBEci4gUGV0ZXJzZW4gY2FuIGNvbW1lbnQgb24gdGhlIGZpbGUuCjEuIFNhdmUgdGhlIHJlcG9ydHMgdG8gdGhlIHRoZSBmb2xkZXIgd2l0aCB5b3VyIEhhd2tJRCBpbiB0aGUgIkxhYiBSZXBvcnRzIiBmb2xkZXI6CiAgICBhLiBodHRwczovL2lvd2EtbXkuc2hhcmVwb2ludC5jb20vcGVyc29uYWwvaXRwZXRlcnNlbl91aW93YV9lZHUvX2xheW91dHMvMTUvb25lZHJpdmUuYXNweD9pZD0lMkZwZXJzb25hbCUyRml0cGV0ZXJzZW4lNUZ1aW93YSU1RmVkdSUyRkRvY3VtZW50cyUyRlJlc2VhcmNoJTJGTGFiJTJGT25lRHJpdmUlMkZMYWIlMjBSZXBvcnRzJnZpZXc9MAogICAgYi4gTmFtZSB0aGUgbGFiIHJlcG9ydHMgc28gdGhhdCB0aGV5IGFyZSBvcmRlcmVkIGJ5IGRhdGUgKGUuZy4sIGBMYWIgUmVwb3J0XzIwMTctMTItMzEuZG9jeGApLgogICAgYy4gV2hlbiBzYXZpbmcgbGFiIHJlcG9ydHMsIHBsZWFzZSBsZWF2ZSBvbmx5IHRoZSBuZXdlc3QgbGFiIHJlcG9ydCBpbiB0aGUgbWFpbiBmb2xkZXLigJR5b3VyIG9sZCBsYWIgcmVwb3J0cyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlICJQYXN0IExhYiBSZXBvcnRzX2hhd2tJRCIgZm9sZGVyIHdpdGhpbiB5b3VyIHBlcnNvbmFsIGxhYiByZXBvcnRzIGZvbGRlci4KMS4gQmktd2Vla2x5IHJlcG9ydHMgaW5jbHVkZToKICAgIGEuIEEgYnJpZWYgZGVzY3JpcHRpb24gb2Ygd2hhdCB5b3Ugd29ya2VkIG9uIHRoZSBsYXN0IHR3byB3ZWVrcwogICAgYi4gV2hhdCB5b3UgaGF2ZSBmb3VuZCBpbnRlcmVzdGluZyBhbmQgd2h5CiAgICBjLiBRdWVzdGlvbnMgeW91IGhhdmUKICAgIGQuIFN1Z2dlc3Rpb25zIHlvdSBoYXZlCjEuIEluIGdlbmVyYWwsIHlvdSBkbyBub3QgbmVlZCBtdWNoIGRpc2N1c3Npb24gb2Ygd2hhdCBzcGVjaWZpY2FsbHkgeW91IHdvcmtlZCBvbiAoMuKAkzMgc2VudGVuY2VzIGlzIGZpbmUpLgpEci4gUGV0ZXJzZW4gaXMgbW9zdCBpbnRlcmVzdGVkIGluIHdoYXQgeW91IGhhdmUgZm91bmQgaW50ZXJlc3RpbmcgKGFuZCB3aHkpLCBhbmQgYW55IHF1ZXN0aW9ucyBvciBzdWdnZXN0aW9ucyB5b3UgaGF2ZS4KMS4gUmVwb3J0cyBzaG91bGQgYmUgYSBmdWxsIHBhZ2UsIGRvdWJsZS1zcGFjZWQuCjEuIERyLiBQZXRlcnNlbiB3aWxsIHJlYWQgYW5kIGNvbW1lbnQgb24geW91ciByZXBvcnRzLgpQbGVhc2UgcmV2aWV3IGhpcyBjb21tZW50cyBhbmQgZmVlbCBmcmVlIHRvIGFkZHJlc3MgYW55dGhpbmcgaGUgcmFpc2VkIHdpdGggaGltIG9yIHdpdGggdGhlIExhYiBDb29yZGluYXRvci4KMS4gQWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb21tZW50cywgcHV0IHRoZSBwcmlvciBsYWIgcmVwb3J0IGludG8geW91ciAiUGFzdCBMYWIgUmVwb3J0cyIgZm9sZGVyLgoKTm90ZXM6CgotIElmIHlvdSBoYXZlIGNvbmNlcm5zIGFib3V0IGluZGl2aWR1YWwocykgaW4gbGFiLCBwbGVhc2UgbGV0IHRoZSBMYWIgQ29vcmRpbmF0b3Igb3IgRHIuIFBldGVyc2VuIGtub3cgZGlyZWN0bHkgKGluIHBlcnNvbiBvciBieSBlbWFpbCkuCkRvIG5vdCBwdXQgcGVyc29ubmVsIGdyaWV2YW5jZXMgaW4gbGFiIHJlcG9ydHMuCgojIyBUaXBzIGFuZCBUcmlja3MgZm9yIEludGVyYWN0aW5nIHdpdGggQ2hpbGRyZW4gaW4gTGFiIHsjaW50ZXJhY3RpbmdXaXRoQ2hpbGRyZW59CgojIyMgV2hlbiBJbnRlcmFjdGluZyBXaXRoIEZhbWlsaWVzIGluIHRoZSBMYWIKCldlIHN0cml2ZSB0byBlbnN1cmUgZmFtaWxpZXMgYXJlIGFzIGNvbWZvcnRhYmxlIGFzIHBvc3NpYmxlIGluIHRoZSBsYWIuCldlIHdhbnQgdG8gYmUgbm9uLWp1ZGdtZW50YWwuCkZhbWlsaWVzIHNob3VsZCBub3QgZmVlbCBsaWtlIHRoZXkgYXJlIGJlaW5nIHRlc3RlZC4KSWYgYSBmYW1pbHkgZmVlbHMgdGhleSBhcmUgYmVpbmcgdGVzdGVkLCB0aGV5IG1heSBhbHNvIGZlZWwgdGhleSBoYXZlIGZhaWxlZCBpZiBhIHRhc2sgZG9lcyBub3QgZ28gYXMgZXhwZWN0ZWQuCkZvciBleGFtcGxlLCBpZiB3ZSBpbnN0cnVjdCBhIHBhcmVudCBub3QgdG8gbGV0IHRoZWlyIGtpZHMgdG91Y2ggdGhlIHRveXMgYW5kIHRoZSBraWQgZG9lcywgd2UgbGVhdmUgb3BlbiB0aGUgcG9zc2liaWxpdHkgYSBmYW1pbHkgY291bGQgYmUgZW1iYXJyYXNzZWQuCgpJZiBhIGZhbWlseSBhc2tzIHlvdSBhIHF1ZXN0aW9uIHN1Y2ggYXM6CgoiRG8geW91IGFzayB1cyB0byBzdG9wIG91ciBraWRzIGZyb20gdG91Y2hpbmcgdGhlIHRveXMgdG8gc2VlIGlmIHRoZXkgd2lsbCBkbyBpdD8iCgpPdXIgcmVzcG9uc2UgY291bGQgYmU6IAoKIldlIHdhbnQgdG8gc2ltdWxhdGUgYXMgY2xvc2UgdG8gYSBob21lIGFuZCBzY2hvb2wgZW52aXJvbm1lbnQgYXMgd2UgY2FuLgpXZSBqdXN0IGFzayB0aGF0IHlvdSBhY3Qgbm9ybWFsbHkuIgoKIyMjIEhvdyB0byBHaXZlIFByYWlzZQoKKipTeW50YXgqKjogUHJhaXNlICsgRWZmb3J0ICsgU3BlY2lmaWMKCioqQWNrbm93bGVkZ2luZzoqKgoKLQkiSSBrbm93IHRoaXMgZ2FtZSBpcyBoYXJkLiIKLQkiSSBrbm93IHRoaXMgZ2FtZSBpcyB0cmlja3kuIgoKKipQcmFpc2U6KioKCi0JIlRoYW5rIHlvdSBmb3IiCi0JIkkgYXBwcmVjaWF0ZSIKLQkiSSByZWFsbHkgbGlrZSIKLQkiSSBub3RpY2UiCi0JIkkgY2FuIHNlZSIKLQkiSSBjYW4gdGVsbCIKLQkiSSdtIHNvIGltcHJlc3NlZCIKLQkiSSdtIHByb3VkIG9mIHlvdSBmb3IiCi0JIkknbSBzbyBoYXBweSB3aXRoIHlvdSBmb3IiCi0JIkkgbGlrZSBpdCB3aGVuIgotCSJXYXkgdG8iCi0JIk5pY2Ugam9iIgotCSJZb3UncmUgZG9pbmcgYSBuaWNlIGpvYiIKLQkiVGhhdCdzIGEgZ3JlYXQgd2F5IHRvIgotCSJZb3Ugc2hvdWxkIGJlIHByb3VkIG9mIHlvdXJzZWxmIGZvciIKLQkiSXQncyBuaWNlIHRoYXQgeW91IGFyZSIKCioqRWZmb3J0OioqCgotCSJkb2luZyB5b3VyIGJlc3QiCi0JInRyeWluZyBzbyBoYXJkIgotCSJ3b3JraW5nIHNvIGhhcmQiCi0JInlvdXIgZWZmb3J0IgotCSJnZXR0aW5nIHRocm91Z2ggdGhvc2UiCi0JImNvbmNlbnRyYXRpbmcgc28gaGFyZCIKLQkia2VwdCBwbGF5aW5nIgoKKipTcGVjaWZpYzoqKgoKLQkic2l0dGluZyBzbyBzdGlsbCBsaWtlIGEgc3RhdHVlIgotCSJzaXR0aW5nIHNvIHF1aWV0bHkiCi0JImNhdGNoaW5nIHRoZSBmaXNoIgotCSJub3QgY2F0Y2hpbmcgdGhlIHNoYXJrcyIKLQkic29ydGluZyB0aGUgZmxvd2VycyIKLQkibm90IHRvdWNoaW5nIHRoZSBtdXNocm9vbXMiCi0JInNvcnRpbmcgdGhlIGFwcGxlcyIKLQkibm90IHRvdWNoaW5nIHRoZSB3b3JtcyIKLQkic29ydGluZyB0aGUgc2hlZXAiCgojIyMgSG93IHRvIEd1aWRlIENoaWxkcmVuIFRocm91Z2ggRGlmZmljdWx0IFRhc2tzIHsjZ3VpZGVDaGlsZHJlbkRpZmZpY3VsdFRhc2tzfQoKIyMjIyBET3MKClRoZSBmb2xsb3dpbmcgYXJlICJEbyJzIHdoZW4gd29ya2luZyB3aXRoIGNoaWxkcmVuIGluIHRoZSBsYWI6CgotIEJ1aWxkIHJhcHBvcnQgZWFybHkKICAgIC0gVXNlIGNvbW1lbnRzIGFuZCBjb21wbGltZW50cyBtb3JlIHRoYW4gcXVlc3Rpb25zOyBxdWVzdGlvbnMgY2FuIGJlIHBlcmNlaXZlZCBhcyBjb21tYW5kcwogICAgLSBDb21tZW50IG9uIHRoaW5ncyB0aGV5IGxpa2UgKGUuZy4sIHRoZWlyIHNob2VzLCBoYWlyLCBzaGlydCwgZmF2b3JpdGUgc3VwZXJoZXJvKQogICAgLSBGb3IgYW54aW91cyBjaGlsZHJlbjogdGhleSB3aWxsIGtub3cgeW91IGFyZSBzYWZlIGJ5IGp1ZGdpbmcgdGhlaXIgcGFyZW50cycgY3Vlcywgc28gZm9yIGFuIGFueGlvdXMvY2xpbmd5IGNoaWxkLCBmaXJzdCBidWlsZCByYXBwb3J0IHdpdGggcGFyZW50IGFuZCB0aGVuIGl0IHdpbGwgYmUgZWFzaWVyIHRvIGJ1aWxkIHJhcHBvcnQgd2l0aCBjaGlsZCBhZnRlciB0aGV5IGtub3cgeW91J3JlIHNhZmUKLSBNYWtlIHN1cmUgdGhlIGNoYWlyIGlzIG5vdCB0b28gYmlnIGZvciB0aGUgY2hpbGQgKGkuZS4sIHRoZWlyIGZlZXQgc29saWRseSByZWFjaCB0aGUgZmxvb3IpCi0gTWFrZSBpdCBpbnRvIGEgZ2FtZSEKLSBVc2UgaGlnaCBwb3NpdGl2aXR5IGFuZCBlbmVyZ3k6IGJlIGxpa2UgYSAicHJlc2Nob29sIHRlYWNoZXIgb24gY3JhY2siIChpbiBFRUcgZXNwZWNpYWxseSkKICAgIC0gQm90aCBpbiB0ZXJtcyBvZiB2ZXJiYWwgQU5EIG5vbnZlcmJhbCB0ZWNobmlxdWVzCi0gRm9jdXMgb24gdGhlIGNoaWxkIHJhdGhlciB0aGFuIHRoZSBzY3JpcHQgaW4gdGhlIEVFRyB2aXNpdAogICAgLSBXaGF0IHlvdSBzYXkgbWF0dGVycyBsZXNzIHRoYW4gKmhvdyogeW91IHNheSBpdCAoYXMgbG9uZyBhcyB5b3UgY29ycmVjdGx5IGV4cGxhaW4gdGhlIHJ1bGVzKQotIElmIHRoZSBjaGlsZCBpcyBub3QgZG9pbmcgd2hhdCB5b3Ugd2FudCwgZm9jdXMgb24gd2hhdCB5b3UgZXhwZWN0IHRoZW0gdG8gZG8gaW5zdGVhZCBvZiB3aGF0IHlvdSBkbyBub3Qgd2FudCB0aGVtIHRvIGRvCiAgICAtICJIZXJlLCBob2xkIHRoaXMgdG95IiBvciAiS2VlcCB5b3VyIGhhbmRzIG9uIHRoZSB0YWJsZSIgaW5zdGVhZCBvZiAiRG9uJ3QgdG91Y2ggdGhl4oCmIgotIFVzZSBzcGVjaWZpYyBwcmFpc2UgKCJOaWNlIGpvYiBzaXR0aW5nIHNvIHN0aWxsISIpIHJhdGhlciB0aGFuIGdlbmVyYWwgcHJhaXNlICgiTmljZSBqb2IhIikKLSBQcmFpc2UgZWZmb3J0LCBub3Qgb3V0Y29tZQogICAgLSAiVGhhbmsgeW91IGZvciB0cnlpbmcgc28gaGFyZCBvbiB0aGVzZSIgaW5zdGVhZCBvZiAiTmljZSBqb2IgYW5zd2VyaW5nIHRoZXNlIgotIFVzZSBkaXN0cmFjdGlvbiBhbmQgcmVkaXJlY3Rpb24gKGUuZy4sIHRhbGtpbmcgdG8gdGhlIGNoaWxkIGFib3V0IHRoZSBtb3ZpZSB3aGVuIHB1dHRpbmcgb24gdGhlIEVFRyBuZXQpCi0gTW9kZWwgYXBwcm9wcmlhdGUgYmVoYXZpb3IKICAgIC0gU2l0IGFuZCB3YXRjaCB0aGUgc2NyZWVuIGR1cmluZyB0aGUgdGFzawotIEhlbHAgdGhlIGNoaWxkIGZlZWwgbW9yZSBjb21mb3J0YWJsZSB3aXRoIHRoZSB0YXNrCiAgICAtIFB1dCB0aGUgRUVHIGNhcCBvbiB5b3Vyc2VsZiAob3Igb24gYSBwYXJlbnQpCiAgICAtIExldCB0aGVtIHRvdWNoIHRoZSBFRUcgY2FwCi0gR2l2ZSB0aGVtIGNob2ljZXMgd2UncmUgb2theSB3aXRoCiAgICAtICJXb3VsZCB5b3UgcmF0aGVyIHdlYXIgdGhlIHJlZCBjYXBlIG9yIHRoZSBibHVlIGNhcGU/IgotIFVzZSBHcmFuZG1hJ3MgTGF3OgogICAgLSAiV2hlbiB5b3UgZmluaXNoIGNhdGNoaW5nIHRoZSBmaXNoLCB5b3UgY2FuIGhhdmUgc29tZSBjYW5keS4iCiAgICAtICJGaXJzdCBzaXQgZG93biBpbiB5b3VyIGNoYWlyLCBhbmQgdGhlbiB3ZSdsbCBwbGF5IHRoZSBnYW1lLiIKLSBIYXZlIHRoZSBjaGlsZCB0YWtlIGJyZWFrcwogICAgLSBwaHlzaWNhbCBleGVyY2lzZSAoZS5nLiwgZG9pbmcgd2lnZ2xlcyBvciBqdW1waW5nIGphY2tzKSBvciBwbGF5aW5nIGEgZ2FtZSBjYW4gaGVscCBjaGlsZHJlbiByZS1mb2N1cwotIEdpdmUgdGhlIGNoaWxkIGp1aWNlL2NhbmR5L3NuYWNrcyAoaWYgdGhlIHBhcmVudCBpcyBva2F5IHdpdGggdGhhdCkKCiMjIyMgRE9OJ1RzCgpUaGUgZm9sbG93aW5nIGFyZSAiRG9uJ3QicyB3aGVuIHdvcmtpbmcgd2l0aCBjaGlsZHJlbiBpbiB0aGUgbGFiOgoKLSBEb24ndCBhc2sgY29tbWFuZHMgaW4gdGhlIGZvcm0gb2YgYSBxdWVzdGlvbiAoIkNhbiB5b3Ugc2l0IHVwIGluIHlvdXIgY2hhaXI/IikKICAgIC0gSW5zdGVhZDogQmUgcG9saXRlIGJ1dCBmaXJtLgogICAgKCJTaXQgdXAgaW4geW91ciBjaGFpciIgb3IgIlBsZWFzZSBzaXQgdXAgaW4geW91ciBjaGFpciIgb3IgIkxldCdzIHNpdCB1cCBpbiB5b3VyIGNoYWlyLiIpCi0gRG9uJ3QgZnJhbWUgdGhpbmdzIGluIHRoZSBuZWdhdGl2ZSAob3IgdGhlIGFic2VuY2Ugb2YgbmVnYXRpdmUp4oCUaS5lLiwgZG9uJ3QgcHJvdmlkZSByZWFzc3VyYW5jZSAoIkl0J3MgZ29pbmcgdG8gYmUgb2theSIgb3IgIkl0J3Mgbm90IGdvaW5nIHRvIGh1cnQuIikKICAgIC0gSW5zdGVhZDogZnJhbWUgdGhpbmdzIGluIHRoZSBwb3NpdGl2ZSAoIkxldCdzIHB1dCBvbiB0aGUgc3BlY2lhbCBvY2VhbiBjYXAgdG8gYmUganVzdCBsaWtlIEphbWllIHNvIHdlIGNhbiBwbGF5IHRoZSBmdW4gZ2FtZXMhIikKLSBEb24ndCBhc2sgeWVzL25vIHF1ZXN0aW9ucyB0byAibm8gYmlyZHMiCiAgICAtIEluc3RlYWQ6IEdpdmUgdGhlbSBjaG9pY2VzIHdlJ3JlIG9rYXkgd2l0aCAoc2VlIGFib3ZlKQotIERvbid0IGZvY3VzIG9uIHRoZSBjaGlsZCdzIGRpc3RyZXNzIGFuZC9vciBhcG9sb2dpemUKICAgIC0gSW5zdGVhZDogRGlzdHJhY3QsIHJlZGlyZWN0LCBhbmQgYmUgcG9zaXRpdmXigJRjaGlsZHJlbiByZXNwb25kIHRvIHlvdXIgdmVyYmFsIGFuZCBub252ZXJiYWwgY3VlcyEKCiMjIFBhcnRpY2lwYW50IFBheW1lbnQKCiMjIyBSdWxlcwoKMS4gQ2FzaCBpcyB0aGUgcHJlZmVycmVkIG1ldGhvZCBvZiBwYXltZW50IChsYWIgcGFydGljaXBhbnRzL1BDIG9ubHkpCjEuIENoZWNrcyB3aWxsIGJlIGFycmFuZ2VkIGFzIGNvbXBlbnNhdGlvbiBmb3IgUFAgYW5kIFNDIHdoZW4gdGhleSBjb21wbGV0ZSB0aGUgb25saW5lIHF1ZXN0aW9ubmFpcmUKMS4gUGFydGljaXBhbnRzIHdpbGwgYmUgY29tcGVuc2F0ZWQgYWNjb3JkaW5nIHRvIHRoZSBlc2NhbGF0aW5nIHBheW1lbnQgc2NoZWR1bGUKMS4gUGFydGljaXBhbnRzL1BDcyBtYXkgYmUgY29tcGVuc2F0ZWQgZm9yIHBhcmtpbmcKMS4gUGF5bWVudCB0byBQUCBhbmQgU0Mgb25seSBwcm9jZXNzZWQgYWZ0ZXIgdGhlIHF1ZXN0aW9ubmFpcmUgaXMgdmVyaWZpZWQgYXMgY29tcGxldGVkCjEuIEFsbCBwYXltZW50IGRvY3VtZW50cyBtdXN0IGluY2x1ZGUgVENJRCwgV2F2ZSwgYW5kIGRhdGUgb2Ygc2VydmljZS4KMS4gTm8gZG9jdW1lbnRzIHNob3VsZCBldmVyIGNvbnRhaW4gcGFydGljaXBhbnQgU1NOJ3MgKHVubmVjZXNzYXJ5IGZvciBvdXIgbGV2ZWwgb2YgY29tcGVuc2F0aW9uKQoKIyMjIFBheW1lbnQgaW4gQ2FzaCBJc3N1ZWQgdG8gUEMvUGFydGljaXBhbnQgaW4gdGhlIExhYm9yYXRvcnkKCi0gRWFjaCBkYXksIHRoZSBMYWIgQ29vcmRpbmF0b3Igd2lsbCBwbGFjZSBpbmRpdmlkdWFsIHBheW1lbnRzIGluIHNlYWxlZCBlbnZlbG9wZXMgd2l0aCB0aGUgVENJRCBhbmQgV2F2ZSBsYWJlbGVkIG9uIHRoZSBlbnZlbG9wZS4KVGhpcyBlbnZlbG9wZSB3aWxsIG9ubHkgaW5jbHVkZSBjb21wZW5zYXRpb24gZm9yIHRoZSBsYWIgc2Vzc2lvbiBpbiB3aGljaCB0aGV5IHBhcnRpY2lwYXRlLCBub3QgY29tcGVuc2F0aW9uIGZvciBwYXJraW5nLgotIEEgc2VwYXJhdGUgZW52ZWxvcGUgd2l0aCBleGFjdGx5ICQxMCBpbiAkMSBiaWxscyB3aWxsIGJlIGtlcHQgaW4gdGhlIGZpbGUgZHJhd2VyIHdoZXJlIHRoZSBsb2NrZWQgY2FzaGJveCByZXNpZGVzLgpUaGlzIG1vbmV5IHdpbGwgYmUgZGVzaWduYXRlZCBmb3IgcGFya2luZyBjb21wZW5zYXRpb24uCklmIHRoaXMgY2FzaCBpcyBhZGRlZCB0byB0aGUgcGFydGljaXBhbnQncyBjb21wZW5zYXRpb24gb24gYSBnaXZlbiBkYXksIHRoZSBUQ0lELCBkYXRlLCBhbmQgYW1vdW50IG5lZWRzIHRvIGJlIHdyaXR0ZW4gb24gdGhlIGV4dHJhIGNhc2ggZW52ZWxvcGUsIGFuZCB0aGlzIGFtb3VudCBzaG91bGQgYmUgcmVmbGVjdGVkIG9uIHBheW1lbnQgcmVjZWlwdHMuCi0gQWZ0ZXIgcGF5bWVudCBoYXMgYmVlbiBtYWRlLCByZWxldmFudCBkYXRhIHdpbGwgYmUgZW50ZXJlZCBpbiB0aGUgRXhjZWwgc3ByZWFkc2hlZXQgbGVkZ2VyIChpbiB0aGUgcGF5bWVudHMgZm9sZGVyIGluIG9uIHRoZSBsYWIgZHJpdmUpLgpUaGUgTGFiIENvb3JkaW5hdG9yIGlzIHJlc3BvbnNpYmxlIGZvciBlbnRlcmluZyBjYXNoIGRhdGEgaW4gdGhlIGxlZGdlci4KLSBFYWNoIHBhcnRpY2lwYW50IGFuZCB0aGUgUkEgd2lsbCBzaWduIGEgcGF5bWVudCByZWNlaXB0IGZvcm0gY29uZmlybWluZyB0aGF0IHRoZXkgcmVjZWl2ZWQgcGF5bWVudC4KUmVjZWlwdCBtdXN0IGluY2x1ZGUgVENJRC9XYXZlLCBkYXRhIG9mIHNlcnZpY2UsIGFtb3VudCBkaXN0cmlidXRlZCwgYW5kIHNpZ25hdHVyZXMgb2YgYm90aCBwYXJ0aWNpcGFudCBhbmQgUkEgaGFuZGxpbmcgcGF5bWVudC4KCiMgUHJvZmVzc2lvbmFsIERldmVsb3BtZW50IHsjcHJvZmVzc2lvbmFsRGV2ZWxvcG1lbnR9CgpPbmUgb2YgdGhlIGdvYWxzIG9mIG91ciBsYWIgaXMgdG8gYWR2YW5jZSB0aGUgY2FyZWVyIGFuZCBwcm9mZXNzaW9uYWwgZ29hbHMgb2Ygb3VyIHRlYW0gbWVtYmVycy4KV2UgcHJvdmlkZSBtYW55IHByb2Zlc3Npb25hbCBkZXZlbG9wbWVudC1yZWxhdGVkIHJlc291cmNlcyBvbiB0aGUgbGFiIGRyaXZlIGluIHRoZSBmb2xsb3dpbmcgbG9jYXRpb246CgpgXFxsYy1ycy1zdG9yZTI0LmhwYy51aW93YS5lZHVcbHNzX2l0cGV0ZXJzZW5cTGFiXE1pc2NlbGxhbmVvdXNcUHJvZmVzc2lvbmFsIERldmVsb3BtZW50XGAKClRoZSByZXNvdXJjZXMgaW5jbHVkZSByZXNvdXJjZXMgb24gYXBwbHlpbmcgdG8gZ3JhZHVhdGUgc2Nob29sLCBpbnRlcm5zaGlwcywgcG9zdGJhY3MsIGFuZCBtZWRpY2FsIHNjaG9vbCwgY29tcGFyaW5nIGRpZmZlcmVudCBtZW50YWwgaGVhbHRoIGZpZWxkcyAoZS5nLiwgY2xpbmljYWwgcHN5Y2hvbG9neSwgY291bnNlbGluZyBwc3ljaG9sb2d5LCBzY2hvb2wgcHN5Y2hvbG9neSwgY2xpbmljYWwgbWVudGFsIGhlYWx0aCBjb3Vuc2VsaW5nLCBtYXJyaWFnZSBhbmQgZmFtaWx5IHRoZXJhcHksIHNvY2lhbCB3b3JrKSwgaG93IHRvIGZpbmQgcHJvZ3JhbXMsIGFuZCByZXNvdXJjZXMgb24gYWNhZGVtaWMgc2tpbGxzIChlLmcuLCByZWFkaW5nIHNjaWVudGlmaWMgYXJ0aWNsZXMpLCBjb3ZlciBsZXR0ZXJzLCBDVnMvcmVzdW1lcywgcGVyc29uYWwgc3RhdGVtZW50cywgc3RhbmRhcmRpemVkIHRlc3RzIChlLmcuLCBHUkUpLCBhbmQgcHJpb3IgbGFiIHdvcmtzaG9wcyBvbiB0b3BpY3Mgc3VjaCBhcyBzdGF0aXN0aWNzIGFuZCBpbnRlcnZpZXdzLgpQbGVhc2UgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG1hbnkgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSBzdWNjZWVkLgpBbmQsIGlmIHlvdSBoYXZlIGhlbHBmdWwgcmVzb3VyY2VzLCBwbGVhc2UgZ2l2ZSBiYWNrIGJ5IHNoYXJpbmcgdGhlbSBvbiB0aGUgbGFiIGRyaXZlLgoKIyBMYWIgT3JnYW5pemF0aW9uYWwgQ2hhcnQgeyNvcmdhbml6YXRpb25hbENoYXJ0fQoKIVtMYWIgT3JnYW5pemF0aW9uYWwgQ2hhcnRdKGltYWdlcy9sYWJPcmdDaGFydC5wbmcpCgpbXjFdOiBMZXQgdXMga25vdyBpZiB5b3UgcGVyY2VpdmUgYW55ICJ1bndyaXR0ZW4gcnVsZXMuIgogIFdlIHRyeSB0byBsaW1pdCBpbXBsaWNpdCAoInVuc3Bva2VuIikgcnVsZXMgdG8gdGhlIGV4dGVudCBwb3NzaWJsZS4KICBTby1jYWxsZWQgInVuc3Bva2VuIHJ1bGVzIiBzaG91bGQgZWl0aGVyIGJlIG1hZGUgZXhwbGljaXQgb3IgdGhleSBzaG91bGQgYmUgcmVtb3ZlZCBlbnRpcmVseS4K



Developmental Psychopathology Lab