Introduction

Dataset Source:

The data used in this R Markdown comes from the Census of Law Enforcement Training Academies (CLETA), 2018 (ICPSR 38250) released on November 30, 2021. This data was collected and published by the Inter-University Consortium for Political and Social Research, the U.S. Department of Justice’s Office of Justice Programs, and the Bureau of Justice Statistics.

The data can be accessed here. The data dictionary can be found at the same site. To find this, select the “Download” button and click on the “Codebook (PDF)” option.

Citation:

United States Department of Justice. Office of Justice Programs. Bureau of Justice Statistics. Census of Law Enforcement Training Academies, 2018. Inter-university Consortium for Political and Social Research [distributor], 2021-11-30. https://doi.org/10.3886/ICPSR38250.v1

Methodology and Set Up

This section will walk you through how to completely start this data work from scratch. It will show you how to download the data and how to clean and standardize it. After that, follow along with the next sections to analyze the data. Here are the set up steps:

1. Load the data into R and give it a name: for example, “trainingdata.”

trainingdata <- load(file="38250-0001-Data.rda")

2. Clean the names and glimpse.

trainingdata <- da38250.0001 %>%
  clean_names() %>%
  glimpse
## Rows: 769
## Columns: 428
## $ id                     <dbl> 91, 569, 731, 724, 551, 587, 87, 144, 485, 82, …
## $ academyname            <fct> PUEBLO LAW ENFORCEMENT ACADEMY                 …
## $ statecode              <fct> CO, PA, VA, VA, OK, SC, CO, FL, NY, CO, VA, CA,…
## $ agencycletatype        <fct> (07) 2-year college, (06) 4-year university, (0…
## $ entity                 <fct> (7) Academy affiliated with a 2-year college/co…
## $ entity_other           <fct> "                                              …
## $ basic                  <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ post                   <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ calea                  <fct> (2) No, (2) No, (1) Yes, (1) Yes, (2) No, (1) Y…
## $ associate              <fct> (1) Yes, (2) No, (2) No, (2) No, (2) No, (2) No…
## $ bachelor               <fct> (2) No, (2) No, (2) No, (2) No, (2) No, (2) No,…
## $ credit                 <fct> "(1) Yes, college credit was awarded automatica…
## $ train_inserv           <fct> (2) No, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1)…
## $ train_special          <fct> (2) No, (1) Yes, (1) Yes, (2) No, (2) No, (1) Y…
## $ train_first            <fct> (2) No, (2) No, (1) Yes, (1) Yes, (2) No, (1) Y…
## $ train_field            <fct> (2) No, (2) No, (1) Yes, (1) Yes, (2) No, (1) Y…
## $ train_lateral          <fct> (2) No, (1) Yes, (2) No, (2) No, (2) No, (1) Ye…
## $ train_pre              <fct> (2) No, (1) Yes, (2) No, (1) Yes, (2) No, (2) N…
## $ train_night            <fct> (2) No, (1) Yes, (2) No, (2) No, (2) No, (1) Ye…
## $ train_reserve          <fct> (2) No, (2) No, (2) No, (2) No, (2) No, (1) Yes…
## $ pos_local              <fct> (1) Yes, (1) Yes, (1) Yes, (2) No, (1) Yes, (1)…
## $ pos_sher               <fct> (1) Yes, (2) No, (2) No, (1) Yes, (1) Yes, (1) …
## $ pos_camp               <fct> (1) Yes, (1) Yes, (2) No, (2) No, (1) Yes, (1) …
## $ pos_corr               <fct> (1) Yes, (2) No, (2) No, (1) Yes, (2) No, (1) Y…
## $ pos_ranger             <fct> (1) Yes, (2) No, (2) No, (2) No, (1) Yes, (1) Y…
## $ pos_sro                <fct> (2) No, (2) No, (2) No, (2) No, (1) Yes, (1) Ye…
## $ pos_hwy                <fct> (1) Yes, (2) No, (2) No, (2) No, (1) Yes, (1) Y…
## $ pos_aux                <fct> (1) Yes, (2) No, (2) No, (2) No, (2) No, (1) Ye…
## $ pos_pre                <fct> (1) Yes, (1) Yes, (2) No, (2) No, (2) No, (1) Y…
## $ pos_nat                <fct> (2) No, (1) Yes, (2) No, (2) No, (1) Yes, (1) Y…
## $ pos_arson              <fct> (2) No, (2) No, (2) No, (2) No, (1) Yes, (2) No…
## $ pos_constable          <fct> (1) Yes, (2) No, (2) No, (2) No, (1) Yes, (1) Y…
## $ pos_transport          <fct> (1) Yes, (2) No, (2) No, (2) No, (1) Yes, (1) Y…
## $ pos_tribe              <fct> (1) Yes, (2) No, (2) No, (2) No, (1) Yes, (2) N…
## $ pos_mar                <fct> (1) Yes, (2) No, (2) No, (2) No, (1) Yes, (2) N…
## $ rno_self               <fct> NA, (1) Yes, (0) No, (1) Yes, (0) No, (0) No, (…
## $ rno_local              <dbl> 0, NA, 1, NA, 311, 150, 4, 2, 4, NA, NA, NA, 40…
## $ rno_sher               <dbl> 1, NA, 0, NA, 77, 35, 3, 1, 1, NA, NA, NA, 3, N…
## $ rno_state              <dbl> 0, NA, 0, NA, 0, 5, 0, 0, 0, NA, NA, NA, 0, NA,…
## $ rno_special            <dbl> 0, NA, 0, NA, 24, 2, 0, 1, 1, NA, NA, NA, 0, NA…
## $ rno_total              <dbl> 1, NA, 1, NA, 412, 192, 7, 4, 6, NA, NA, NA, 43…
## $ basic_lgth             <dbl> 18, 25, 32, 16, 583, 12, 21, 770, 6, 22, 27, 12…
## $ basic_type             <fct> (2) Weeks, (2) Weeks, (2) Weeks, (2) Weeks, (1)…
## $ basic_type_other       <fct> "                                              …
## $ field_man              <fct> "(3) No", "(3) No", "(1) Yes, it was mandatory …
## $ oversee                <fct> (2) No, (2) No, (1) Yes, (1) Yes, (2) No, (2) N…
## $ field_lgth             <dbl> NA, NA, 8.0, 2.0, NA, NA, NA, NA, NA, 12.0, NA,…
## $ field_type             <fct> NA, NA, (2) Weeks, (2) Weeks, NA, NA, NA, NA, N…
## $ field_type_other       <fct>                                                …
## $ families               <fct> (2) No, (2) No, (1) Yes, (2) No, (2) No, (2) No…
## $ present                <fct> NA, NA, (2) No, NA, NA, NA, NA, NA, (1) Yes, (1…
## $ ft_sworn               <dbl> 1, NA, 8, 5, 8, 45, 2, 0, 5, 0, 6, 0, 0, 0, 0, …
## $ pt_sworn               <dbl> 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1…
## $ ft_ondut               <dbl> 0, NA, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1…
## $ pt_ondut               <dbl> 36, 0, 0, 0, 3, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ ft_offdut              <dbl> 0, NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, NA, 0, 0, 0, …
## $ pt_offdut              <dbl> 6, 13, 0, 0, 0, 0, 57, 35, 20, 0, NA, 23, 0, 30…
## $ ft_ret                 <dbl> 0, NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ pt_ret                 <dbl> 6, 4, 0, 0, 0, 0, 0, 6, 2, 0, 0, 4, 0, 0, 17, 5…
## $ ft_civ                 <dbl> 1, NA, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 2, 0, 0…
## $ pt_civ                 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 3, 6,…
## $ ft_civ_temp            <dbl> 0, NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ pt_civ_temp            <dbl> 3, 7, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ ft_total               <dbl> 2, NA, 12, 6, 8, 45, 3, 1, 7, 0, 7, 0, 0, 2, 0,…
## $ pt_total               <dbl> 51, 24, 20, 0, 3, 0, 120, 41, 22, 0, 1, 27, 0, …
## $ min_ed                 <fct> (5) High school diploma or equivalent required,…
## $ min_exp                <dbl> NA, 3, 2, 0, 4, 6, 0, 10, 3, 2, 3, 5, 0, 0, 0, …
## $ req_post               <fct> (1) Yes, (1) Yes, (2) No, (2) No, (1) Yes, (1) …
## $ req_acad               <fct> (2) No, (2) No, (1) Yes, (1) Yes, (1) Yes, (1) …
## $ req_sme                <fct> (1) Yes, (1) Yes, (2) No, (2) No, (2) No, (1) Y…
## $ req_cert               <fct> (1) Yes, (2) No, (2) No, (2) No, (1) Yes, (2) N…
## $ req_cert_other         <fct> "SKILLS LEAD-INST. TRAINING OF THE TRAINERS AKA…
## $ eval_post              <fct> (2) No, (1) Yes, (2) No, (2) No, (1) Yes, (1) Y…
## $ eval_supe              <fct> (2) No, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1)…
## $ eval_peer              <fct> (2) No, (2) No, (1) Yes, (1) Yes, (1) Yes, (1) …
## $ eval_stud              <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ refresher              <fct> (2) No, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1)…
## $ cont_job               <fct> NA, (2) No, (1) Yes, (1) Yes, (2) No, (1) Yes, …
## $ cont_post              <fct> NA, (1) Yes, (2) No, (2) No, (1) Yes, (2) No, N…
## $ cont_sme               <fct> NA, (2) No, (1) Yes, (2) No, (2) No, (1) Yes, N…
## $ cont_le                <fct> NA, (2) No, (2) No, (2) No, (2) No, (1) Yes, NA…
## $ cont_acad              <fct> NA, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes…
## $ clab_1                 <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (0) No, (1)…
## $ clab_2                 <fct> (0) No, (0) No, (0) No, (0) No, (0) No, (0) No,…
## $ no_clab                <fct> (0) No, (0) No, (0) No, (0) No, (1) Yes, (0) No…
## $ tab_1                  <fct> (1) Yes, (0) No, (1) Yes, (1) Yes, (0) No, (1) …
## $ tab_2                  <fct> (0) No, (0) No, (0) No, (0) No, (0) No, (0) No,…
## $ no_tab                 <fct> (0) No, (1) Yes, (0) No, (0) No, (1) Yes, (0) N…
## $ int_1                  <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (0) No, (1)…
## $ int_2                  <fct> (0) No, (0) No, (0) No, (0) No, (0) No, (0) No,…
## $ no_int                 <fct> (0) No, (0) No, (0) No, (0) No, (1) Yes, (0) No…
## $ media_1                <fct> (0) No, (0) No, (0) No, (1) Yes, (0) No, (0) No…
## $ media_2                <fct> (0) No, (0) No, (1) Yes, (0) No, (0) No, (0) No…
## $ no_media               <fct> (1) Yes, (1) Yes, (0) No, (0) No, (1) Yes, (1) …
## $ mobile_1               <fct> (0) No, (0) No, (1) Yes, (1) Yes, (0) No, (0) N…
## $ mobile_2               <fct> (0) No, (0) No, (0) No, (0) No, (0) No, (0) No,…
## $ no_mobile              <fct> (1) Yes, (1) Yes, (0) No, (0) No, (1) Yes, (1) …
## $ lib_1                  <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (0) No, (1)…
## $ lib_2                  <fct> (0) No, (0) No, (0) No, (0) No, (0) No, (0) No,…
## $ no_lib                 <fct> (0) No, (0) No, (0) No, (0) No, (1) Yes, (0) No…
## $ subsc_1                <fct> (0) No, (0) No, (0) No, (0) No, (0) No, (0) No,…
## $ subsc_2                <fct> (0) No, (0) No, (0) No, (0) No, (0) No, (0) No,…
## $ no_subsc               <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ video_1                <fct> (0) No, (0) No, (1) Yes, (0) No, (0) No, (0) No…
## $ video_2                <fct> (0) No, (0) No, (0) No, (0) No, (0) No, (0) No,…
## $ no_video               <fct> (1) Yes, (1) Yes, (0) No, (1) Yes, (1) Yes, (1)…
## $ def_1                  <fct> (0) No, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1)…
## $ def_2                  <fct> (1) Yes, (0) No, (0) No, (0) No, (0) No, (0) No…
## $ no_def                 <fct> (0) No, (0) No, (0) No, (0) No, (0) No, (0) No,…
## $ simu_1                 <fct> (0) No, (0) No, (1) Yes, (1) Yes, (1) Yes, (1) …
## $ simu_2                 <fct> (1) Yes, (0) No, (0) No, (0) No, (0) No, (0) No…
## $ no_simu                <fct> (0) No, (1) Yes, (0) No, (0) No, (0) No, (0) No…
## $ in_fire_1              <fct> (0) No, (0) No, (1) Yes, (0) No, (0) No, (1) Ye…
## $ in_fire_2              <fct> (0) No, (0) No, (0) No, (1) Yes, (0) No, (0) No…
## $ no_in_fire             <fct> (1) Yes, (1) Yes, (0) No, (0) No, (1) Yes, (0) …
## $ out_fire_1             <fct> (0) No, (1) Yes, (1) Yes, (0) No, (1) Yes, (1) …
## $ out_fire_2             <fct> (1) Yes, (0) No, (0) No, (1) Yes, (0) No, (0) N…
## $ no_out_fire            <fct> (0) No, (0) No, (0) No, (0) No, (0) No, (0) No,…
## $ scenario_1             <fct> (0) No, (1) Yes, (0) No, (0) No, (1) Yes, (1) Y…
## $ scenario_2             <fct> (1) Yes, (0) No, (1) Yes, (1) Yes, (0) No, (0) …
## $ no_scenario            <fct> (0) No, (0) No, (0) No, (0) No, (0) No, (0) No,…
## $ fitness_1              <fct> (1) Yes, (1) Yes, (1) Yes, (0) No, (1) Yes, (1)…
## $ fitness_2              <fct> (0) No, (0) No, (0) No, (1) Yes, (0) No, (0) No…
## $ no_fitness             <fct> (0) No, (0) No, (0) No, (0) No, (0) No, (0) No,…
## $ obstacle_1             <fct> (0) No, (0) No, (1) Yes, (1) Yes, (0) No, (1) Y…
## $ obstacle_2             <fct> (0) No, (0) No, (0) No, (0) No, (0) No, (0) No,…
## $ no_obstacle            <fct> (1) Yes, (1) Yes, (0) No, (0) No, (1) Yes, (0) …
## $ swim_1                 <fct> (0) No, (1) Yes, (0) No, (0) No, (0) No, (0) No…
## $ swim_2                 <fct> (0) No, (0) No, (0) No, (0) No, (0) No, (0) No,…
## $ no_swim                <fct> (1) Yes, (0) No, (1) Yes, (1) Yes, (1) Yes, (1)…
## $ drive_sim_1            <fct> (0) No, (0) No, (1) Yes, (0) No, (0) No, (0) No…
## $ drive_sim_2            <fct> (0) No, (0) No, (0) No, (0) No, (0) No, (0) No,…
## $ no_drive_sim           <fct> (1) Yes, (1) Yes, (0) No, (1) Yes, (1) Yes, (1)…
## $ drive_track_1          <fct> (0) No, (0) No, (1) Yes, (0) No, (1) Yes, (1) Y…
## $ drive_track_2          <fct> (1) Yes, (1) Yes, (0) No, (1) Yes, (0) No, (0) …
## $ no_drive_track         <fct> (0) No, (0) No, (0) No, (0) No, (0) No, (0) No,…
## $ dorm_1                 <fct> (0) No, (1) Yes, (0) No, (0) No, (1) Yes, (1) Y…
## $ dorm_2                 <fct> (0) No, (0) No, (0) No, (0) No, (0) No, (0) No,…
## $ no_dorm                <fct> (1) Yes, (0) No, (1) Yes, (1) Yes, (0) No, (0) …
## $ opbudget               <dbl> NA, 100000, 300000, 50000, 2897155, 14500000, 3…
## $ opbudget_est           <fct> NA, (1) Yes, (1) Yes, (1) Yes, (0) No, (0) No, …
## $ ebudget                <dbl> NA, 6000, 300000, 50000, 0, 62945, 25000, 5000,…
## $ ebudget_est            <fct> NA, (1) Yes, (1) Yes, (1) Yes, (0) No, (0) No, …
## $ male_start             <dbl> 23, 14, 48, 34, 220, 1040, 30, 96, 21, 60, 23, …
## $ male_comp              <dbl> 22, 11, 43, 30, 210, 778, 30, 82, 19, 50, 23, 1…
## $ fem_start              <dbl> 12, 3, 13, 20, 101, 273, 9, 25, 4, 9, 8, 6, 7, …
## $ fem_comp               <dbl> 11, 2, 10, 16, 94, 182, 9, 21, 4, 8, 8, 3, 5, 0…
## $ sex_start_total        <dbl> 35, 17, 61, 54, 321, 1313, 39, 121, 25, 69, 31,…
## $ sex_comp_total         <dbl> 33, 13, 53, 46, 304, 960, 39, 103, 23, 58, 31, …
## $ white_start            <dbl> 20, 16, 31, 14, 0, 946, 32, 65, 17, 48, 27, 19,…
## $ white_comp             <dbl> 18, 12, 30, 11, 0, 751, 32, 54, 15, 42, 27, 10,…
## $ blk_start              <dbl> 3, 1, 25, 29, 0, 303, 0, 12, 2, 3, 3, 2, 6, 0, …
## $ blk_comp               <dbl> 3, 1, 22, 26, 0, 166, 0, 10, 2, 3, 3, 0, 5, 0, …
## $ hisp_start             <dbl> 11, 0, 4, 9, 0, 39, 3, 36, 5, 15, 0, 19, 7, 0, …
## $ hisp_comp              <dbl> 11, 0, 1, 7, 0, 27, 3, 32, 5, 12, 0, 7, 7, 0, 3…
## $ ami_start              <dbl> 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 4, 0,…
## $ ami_comp               <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,…
## $ asian_start            <dbl> 0, 0, 1, 1, 0, 8, 1, 1, 1, 2, 1, 2, 1, 0, 19, 1…
## $ asian_comp             <dbl> 0, 0, 0, 1, 0, 8, 1, 1, 1, 1, 1, 2, 1, 0, 5, 1,…
## $ hapi_start             <dbl> 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ hapi_comp              <dbl> 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ two_start              <dbl> 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 2, 0,…
## $ two_comp               <dbl> 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 1, 0,…
## $ dk_start               <dbl> 0, 0, 0, 1, 321, 14, 2, 1, 0, 0, 0, 0, 0, 0, 0,…
## $ dk_comp                <dbl> 0, 0, 0, 1, 304, 7, 2, 1, 0, 0, 0, 0, 0, 0, 0, …
## $ eth_start_total        <dbl> 35, 17, 61, 54, 321, 1313, 39, 121, 25, 69, 31,…
## $ eth_comp_total         <dbl> 33, 13, 53, 46, 304, 960, 39, 103, 23, 58, 31, …
## $ all_completed          <fct> NA, (0) No, (0) No, (0) No, (0) No, (0) No, (1)…
## $ fail_inj_m             <dbl> 0, 0, 0, 3, 1, 39, NA, 0, 0, 0, 0, 1, 0, 0, 3, …
## $ fail_inj_f             <dbl> 0, 0, 0, 0, 1, 10, NA, 0, 0, 0, 0, 0, 1, 0, 2, …
## $ fail_fire_m            <dbl> 0, 0, 0, 0, 0, 2, NA, 0, 0, 0, 0, 0, 0, 0, 1, 0…
## $ fail_fire_f            <dbl> 0, 0, 0, 0, 0, 9, NA, 1, 0, 0, 0, 0, 0, 0, 2, 0…
## $ fail_drive_m           <dbl> 0, 0, 0, 0, 0, 0, NA, 0, 0, 0, 0, 0, 0, 0, 1, 0…
## $ fail_drive_f           <dbl> 0, 0, 0, 1, 0, 2, NA, 0, 0, 0, 0, 0, 0, 0, 1, 0…
## $ fail_other_m           <dbl> 0, 0, 0, 0, 0, 17, NA, 0, 0, 0, 0, 7, 0, 0, 0, …
## $ fail_other_f           <dbl> 0, 0, 0, 0, 0, 7, NA, 1, 0, 0, 0, 2, 0, 0, 0, 0…
## $ fail_phys_m            <dbl> 0, 0, 0, 1, 0, 4, NA, 0, 0, 0, 0, 1, 0, 0, 1, 0…
## $ fail_phys_f            <dbl> 0, 0, 0, 2, 0, 14, NA, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ fail_acad_m            <dbl> 0, 1, 0, 0, 0, 125, NA, 3, 0, 0, 0, 1, 0, 0, 9,…
## $ fail_acad_f            <dbl> 0, 0, 0, 0, 0, 23, NA, 0, 0, 0, 0, 1, 0, 0, 2, …
## $ fail_disc_m            <dbl> 0, 0, 1, 0, 0, 8, NA, 1, 0, 1, 0, 2, 0, 0, 14, …
## $ fail_disc_f            <dbl> 0, 0, 1, 0, 0, 2, NA, 0, 0, 0, 0, 0, 0, 0, 1, 4…
## $ fail_vol_m             <dbl> 0, 2, 4, 0, 0, 12, NA, 3, 2, 9, 0, 5, 2, 0, 19,…
## $ fail_vol_f             <dbl> 0, 1, 2, 0, 0, 2, NA, 2, 0, 1, 0, 0, 0, 0, 2, 0…
## $ fail_with_m            <dbl> 0, 0, 0, 0, 9, 10, NA, 0, 0, 0, 0, 0, 0, 0, 1, …
## $ fail_with_f            <dbl> 0, 0, 0, 0, 6, 5, NA, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ fail_ornc_m            <dbl> 1, 0, 0, 0, 0, 32, NA, 7, 0, 0, 0, 0, 0, 0, 0, …
## $ fail_ornc_f            <dbl> 1, 0, 0, 1, 0, 12, NA, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ fail_dk_m              <dbl> 0, 0, 0, 0, 0, 13, NA, 0, 0, 0, 0, NA, 0, 0, 0,…
## $ fail_dk_f              <dbl> 0, 0, 0, 0, 0, 5, NA, 0, 0, 0, 0, NA, 1, 0, 0, …
## $ fail_total_m           <dbl> 1, 3, 5, 4, 10, 262, NA, 14, 2, 10, 0, 17, 2, 0…
## $ fail_total_f           <dbl> 1, 1, 3, 4, 7, 91, NA, 4, 0, 1, 0, 3, 2, 0, 10,…
## $ behave                 <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ counsel                <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ demerit                <fct> (2) No, (2) No, (2) No, (2) No, (2) No, (1) Yes…
## $ extra                  <fct> (2) No, (1) Yes, (1) Yes, (2) No, (1) Yes, (2) …
## $ priv                   <fct> (2) No, (1) Yes, (1) Yes, (2) No, (2) No, (1) Y…
## $ grade                  <fct> (2) No, (2) No, (2) No, (2) No, (2) No, (2) No,…
## $ phys                   <fct> (2) No, (1) Yes, (1) Yes, (2) No, (2) No, (1) Y…
## $ prob                   <fct> (2) No, (2) No, (2) No, (2) No, (2) No, (2) No,…
## $ term                   <fct> (2) No, (2) No, (1) Yes, (2) No, (1) Yes, (1) Y…
## $ verbal                 <fct> (1) Yes, (1) Yes, (1) Yes, (2) No, (1) Yes, (2)…
## $ written                <fct> (2) No, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (2)…
## $ environment            <fct> (3) Equal balance of stress and non-stress mode…
## $ cpr_yn                 <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (2…
## $ cpr                    <dbl> 8, 40, 8, 8, 10, NA, 8, 40, 16, 4, 8, 25, 56, 6…
## $ cpr_est                <fct> NA, (0) No, (1) Yes, (0) No, (0) No, NA, (0) No…
## $ comp_yn                <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (2) No, (1)…
## $ comp                   <dbl> 8, 2, 40, 4, NA, 1, NA, NA, NA, 18, 16, 6, 10, …
## $ comp_est               <fct> (1) Yes, (0) No, (1) Yes, (0) No, NA, (0) No, N…
## $ emv_yn                 <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ emv                    <dbl> 4, 40, 80, 56, 52, 23, 55, 48, 24, 70, 80, 48, …
## $ emv_est                <fct> (1) Yes, (0) No, (1) Yes, (0) No, (0) No, (0) N…
## $ evid_yn                <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ evid                   <dbl> 20, 18, 16, 8, 16, 1, 35, 35, 8, 10, 40, 20, 20…
## $ evid_est               <fct> (1) Yes, (0) No, (1) Yes, (0) No, (0) No, (0) N…
## $ intel_yn               <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (2) No, (2)…
## $ intel                  <dbl> 8, 4, 24, 8, NA, NA, NA, NA, 8, 16, 16, NA, 8, …
## $ intel_est              <fct> NA, (0) No, (1) Yes, (0) No, NA, NA, NA, NA, (1…
## $ intero_yn              <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ intero                 <dbl> 6, 12, 24, 8, 2, 6, 8, 56, 24, 4, 16, 6, 8, 10,…
## $ intero_est             <fct> (1) Yes, (0) No, (1) Yes, (0) No, (0) No, (0) N…
## $ inv_yn                 <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ inv                    <dbl> 31, 22, 80, 8, 70, 2, 24, 50, 32, 30, 40, 8, 24…
## $ inv_est                <fct> (1) Yes, (0) No, (1) Yes, (0) No, (1) Yes, (0) …
## $ pat_yn                 <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ pat                    <dbl> 90, 46, 160, 8, 70, 6, 12, 35, 32, 24, 120, 22,…
## $ pat_est                <fct> NA, (0) No, (1) Yes, (0) No, (1) Yes, (0) No, (…
## $ rad_yn                 <fct> (1) Yes, NA, (2) No, (2) No, (1) Yes, (2) No, (…
## $ rad                    <dbl> 2, 0, NA, NA, 20, NA, NA, NA, 16, 8, 40, NA, 32…
## $ rad_est                <fct> (1) Yes, (0) No, NA, NA, (0) No, NA, NA, NA, (1…
## $ rep_yn                 <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ rep                    <dbl> NA, 4, 40, 4, 15, 2, 24, 56, 40, 30, 80, 56, 8,…
## $ rep_est                <fct> NA, (0) No, (1) Yes, (0) No, (0) No, (0) No, (0…
## $ traf_yn                <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ traf                   <dbl> 16, 22, 40, 8, 2, 8, 16, 32, 24, 80, 80, 15, 20…
## $ traf_est               <fct> NA, NA, (1) Yes, NA, NA, NA, NA, NA, (1) Yes, N…
## $ judo_yn                <fct> (1) Yes, (2) No, (1) Yes, (1) Yes, (1) Yes, (1)…
## $ judo                   <dbl> 8, NA, 8, 40, 5, 5, 8, 5, 80, 8, 20, 8, NA, 10,…
## $ judo_est               <fct> NA, NA, (1) Yes, (0) No, (0) No, (0) No, (0) No…
## $ def_tac_yn             <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ def_tac                <dbl> 64, 66, 80, 120, 70, 65, 64, 80, 120, 80, 100, …
## $ def_tac_est            <fct> NA, (0) No, (1) Yes, (0) No, (0) No, (0) No, (0…
## $ fire_skill_yn          <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ fire_skill             <dbl> 84, 126, 120, 60, 70, 36, 108, 80, 120, 90, 80,…
## $ fire_skill_est         <fct> NA, (0) No, (1) Yes, (0) No, (0) No, (0) No, (0…
## $ nonl_yn                <fct> NA, (1) Yes, (1) Yes, (1) Yes, (2) No, (1) Yes,…
## $ nonl                   <dbl> 50, 8, 40, 24, NA, 2, 16, 10, 40, 28, 40, 25, 1…
## $ nonl_est               <fct> (1) Yes, (0) No, (1) Yes, (0) No, NA, (0) No, (…
## $ crim_yn                <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ crim                   <dbl> 44, 66, 48, 24, 46, 55, 56, 62, 40, 80, 24, 200…
## $ crim_est               <fct> NA, (0) No, (1) Yes, (0) No, (1) Yes, (0) No, (…
## $ jjl_yn                 <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ jjl                    <dbl> 12, 8, 16, 8, 4, 5, 4, 10, 16, 4, 16, 7, 24, 4,…
## $ jjl_est                <fct> NA, (0) No, (1) Yes, (0) No, (1) Yes, (0) No, (…
## $ traf_law_yn            <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ traf_law               <dbl> 50, 48, 40, 8, 16, 20, 10, 30, 16, 20, 16, 35, …
## $ traf_law_est           <fct> NA, (0) No, (1) Yes, (0) No, (1) Yes, (0) No, (…
## $ study_yn               <fct> (1) Yes, (2) No, (2) No, (1) Yes, (2) No, (2) N…
## $ study                  <dbl> 2, NA, NA, 8, NA, NA, NA, NA, NA, 1, 8, NA, NA,…
## $ study_est              <fct> NA, NA, NA, (0) No, NA, NA, NA, NA, NA, (1) Yes…
## $ com_part_yn            <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (2…
## $ com_part               <dbl> 2, 4, 80, 8, 5, NA, 4, 5, 8, 4, 8, 18, NA, 15, …
## $ com_part_est           <fct> NA, (0) No, (1) Yes, (0) No, (0) No, NA, (0) No…
## $ cult_yn                <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ cult                   <dbl> 4, 17, 16, 8, 5, 5, 6, 40, 24, 7, 8, 27, 8, 15,…
## $ cult_est               <fct> NA, (0) No, (1) Yes, (0) No, (0) No, (0) No, (0…
## $ medi_yn                <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (2) No, (1)…
## $ medi                   <dbl> 8, 20, 8, 8, NA, 10, 2, 5, 24, 8, 8, NA, 40, 15…
## $ medi_est               <fct> NA, (0) No, (1) Yes, (0) No, NA, (0) No, (0) No…
## $ prob_solv_yn           <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (2) No, (1)…
## $ prob_solv              <dbl> 2, 4, 12, 8, NA, 10, 2, 5, 8, 2, 8, NA, NA, 15,…
## $ prob_solv_est          <fct> NA, (0) No, (1) Yes, (0) No, NA, (0) No, (0) No…
## $ map_yn                 <fct> (1) Yes, (2) No, (1) Yes, (1) Yes, (2) No, (2) …
## $ map                    <dbl> 4, NA, 8, 8, NA, NA, NA, NA, NA, 1, 8, NA, NA, …
## $ map_est                <fct> NA, NA, (1) Yes, (0) No, NA, NA, NA, NA, NA, (1…
## $ lang_yn                <fct> (2) No, (2) No, (2) No, (2) No, (2) No, (2) No,…
## $ lang                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 21,…
## $ lang_est               <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, (0)…
## $ comm_yn                <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ comm                   <dbl> 8, 2, 4, 8, 2, 15, 10, 20, 8, 8, 8, 20, 8, 20, …
## $ comm_est               <fct> NA, (0) No, (1) Yes, (0) No, (0) No, (0) No, (0…
## $ ethic_yn               <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ ethic                  <dbl> 4, 12, 40, 8, 16, 3, 8, 10, 16, 8, 8, 10, 12, 4…
## $ ethic_est              <fct> NA, (0) No, (1) Yes, (0) No, (0) No, (0) No, (0…
## $ health_yn              <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ health                 <dbl> 32, 72, 160, 40, 13, 8, 24, 60, 80, 81, 8, 97, …
## $ health_est             <fct> NA, (0) No, (1) Yes, (0) No, (0) No, (0) No, (0…
## $ prof_yn                <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ prof                   <dbl> 4, 8, 16, 8, 4, 6, 4, 2, 16, 4, 8, 10, 8, 10, 1…
## $ prof_est               <fct> NA, (0) No, (1) Yes, (0) No, (0) No, (0) No, (0…
## $ stress_yn              <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (2) No, (1)…
## $ stress                 <dbl> 4, 8, 8, 8, NA, 5, 4, 10, 8, 4, 8, 20, 4, 10, 2…
## $ stress_est             <fct> NA, (0) No, (1) Yes, (0) No, NA, (0) No, (0) No…
## $ clan_yn                <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (2…
## $ clan                   <dbl> 4, 4, 2, 2, 2, NA, NA, 1, 2, 2, 8, 2, NA, 1, NA…
## $ clan_est               <fct> (1) Yes, (0) No, (1) Yes, (0) No, (0) No, NA, N…
## $ child_yn               <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ child                  <dbl> 12, 4, 8, 2, 6, 5, 4, 5, 4, 6, 16, 9, 24, 6, 6,…
## $ child_est              <fct> NA, (0) No, (1) Yes, (0) No, (0) No, (0) No, (0…
## $ cyber_yn               <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (2…
## $ cyber                  <dbl> 4, 2, 8, 2, 4, NA, NA, 1, NA, 8, 16, NA, NA, 2,…
## $ cyber_est              <fct> NA, (0) No, (1) Yes, (0) No, (1) Yes, NA, NA, (…
## $ domv_yn                <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ domv                   <dbl> 12, 8, 16, 4, 10, 14, 8, 10, 24, 8, 24, 21, 24,…
## $ domv_est               <fct> (1) Yes, (0) No, (1) Yes, (0) No, (0) No, (0) N…
## $ dui_yn                 <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ dui                    <dbl> 24, 12, 40, 2, 27, 23, 24, 24, 8, 40, 40, 2, 48…
## $ dui_est                <fct> NA, (0) No, (1) Yes, (0) No, (0) No, (0) No, (0…
## $ elder_yn               <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ elder                  <dbl> 2, 4, 8, 2, 2, 4, 3, 2, 4, 1, 4, 1, 3, 2, 2, 8,…
## $ elder_est              <fct> (1) Yes, (0) No, (1) Yes, (0) No, (0) No, (0) N…
## $ emr_yn                 <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (2) No, (1)…
## $ emr                    <dbl> 8, 8, 8, 2, NA, 2, 8, 20, 4, 8, 4, 18, 16, NA, …
## $ emr_est                <fct> NA, (0) No, (1) Yes, (0) No, NA, (0) No, (0) No…
## $ gang_yn                <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ gang                   <dbl> 3, 8, 8, 4, 3, 5, 4, 2, 4, 4, 4, 10, 2, 3, 8, 4…
## $ gang_est               <fct> NA, (0) No, (1) Yes, (0) No, (0) No, (0) No, (0…
## $ hate_yn                <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ hate                   <dbl> 4, 2, 8, 4, 2, 1, 8, 2, 8, 4, 4, 5, 2, 2, 4, 4,…
## $ hate_est               <fct> NA, (0) No, (1) Yes, (0) No, (0) No, (0) No, (0…
## $ htraf_yn               <fct> NA, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes…
## $ htraf                  <dbl> NA, NA, 8, 2, 6, 5, 4, 1, 2, 4, 4, NA, 3, NA, 1…
## $ htraf_est              <fct> NA, (0) No, (1) Yes, (0) No, (0) No, (0) No, (0…
## $ mental_yn              <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ mental                 <dbl> 2, 16, 24, 4, 6, 4, 8, 2, 16, 3, 40, 8, 16, 5, …
## $ mental_est             <fct> NA, NA, (1) Yes, NA, NA, NA, NA, NA, (1) Yes, N…
## $ opioid_yn              <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ opioid                 <dbl> 2, 12, 4, 2, 2, 3, 2, 2, 4, 2, 4, 1, 2, 1, 1, 2…
## $ opioid_est             <fct> NA, (0) No, (1) Yes, (0) No, (0) No, (0) No, (0…
## $ acsh_yn                <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ acsh                   <dbl> 12, 22, 24, 16, 10, 12, 8, 4, 8, 16, 16, 8, 32,…
## $ acsh_est               <fct> NA, (0) No, (1) Yes, (0) No, (0) No, (0) No, (0…
## $ sass_yn                <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ sass                   <dbl> 8, 4, 40, 2, 6, 5, 8, 2, 8, 6, 4, 5, 10, 8, 4, …
## $ sass_est               <fct> NA, (0) No, (1) Yes, (0) No, (0) No, (0) No, (0…
## $ shar_yn                <fct> (1) Yes, (2) No, (1) Yes, (1) Yes, (2) No, (2) …
## $ shar                   <dbl> 2, NA, 8, 2, NA, NA, 2, 1, 8, 4, 4, 3, 2, NA, 2…
## $ shar_est               <fct> NA, NA, (1) Yes, (0) No, NA, NA, (0) No, (0) No…
## $ terror_yn              <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ terror                 <dbl> 6, 4, 8, 4, 4, 6, 2, 2, 4, 12, 4, 5, 8, 5, 4, 8…
## $ terror_est             <fct> (1) Yes, (0) No, (1) Yes, (0) No, (0) No, (0) N…
## $ victim_yn              <fct> (1) Yes, (2) No, (1) Yes, (1) Yes, (1) Yes, (1)…
## $ victim                 <dbl> 4, NA, 8, 2, 4, 5, 4, 1, 4, 4, 4, 4, NA, NA, 6,…
## $ victim_est             <fct> NA, NA, (1) Yes, (0) No, (0) No, (0) No, (0) No…
## $ real_arrest            <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ real_fire              <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ real_livef             <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ real_nonl              <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (2) No, (1)…
## $ real_sd                <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ real_thr               <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ real_force             <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ real_verbal            <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ rev                    <fct> (1) Yes, (2) No, (1) Yes, (2) No, (1) Yes, (1) …
## $ sap                    <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ sg                     <fct> (1) Yes, (1) Yes, (1) Yes, (2) No, (1) Yes, (1)…
## $ man                    <fct> (1) Yes, (2) No, (2) No, (2) No, (2) No, (2) No…
## $ sar                    <fct> (1) Yes, (1) Yes, (1) Yes, (2) No, (1) Yes, (2)…
## $ far                    <fct> (1) Yes, (2) No, (2) No, (2) No, (2) No, (2) No…
## $ bat                    <fct> (1) Yes, (2) No, (1) Yes, (2) No, (1) Yes, (1) …
## $ blunt                  <fct> (2) No, (2) No, (2) No, (1) Yes, (2) No, (2) No…
## $ chem                   <fct> (2) No, (2) No, (1) Yes, (1) Yes, (2) No, (2) N…
## $ ced                    <fct> (1) Yes, (2) No, (1) Yes, (1) Yes, (2) No, (2) …
## $ expl                   <fct> (2) No, (2) No, (1) Yes, (2) No, (2) No, (2) No…
## $ flash                  <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (2) No, (1)…
## $ kni                    <fct> (2) No, (1) Yes, (1) Yes, (1) Yes, (2) No, (1) …
## $ oc                     <fct> (1) Yes, (2) No, (1) Yes, (1) Yes, (1) Yes, (1)…
## $ weapon_other           <fct> NA, (2) No, (2) No, (2) No, (2) No, NA, (2) No,…
## $ weapon_other_spec      <fct> "                                              …
## $ fts                    <fct> (1) Yes, (2) No, (1) Yes, (2) No, (1) Yes, (1) …
## $ night                  <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ nonl_fire              <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ simstress              <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ odw                    <fct> (2) No, (2) No, (1) Yes, (1) Yes, (2) No, (2) N…
## $ closedhand             <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ fbdy                   <fct> (2) No, (1) Yes, (1) Yes, (1) Yes, (2) No, (2) …
## $ hold                   <fct> (1) Yes, (1) Yes, (2) No, (1) Yes, (2) No, (1) …
## $ knife_tech             <fct> (2) No, (1) Yes, (1) Yes, (1) Yes, (2) No, (1) …
## $ leg                    <fct> (2) No, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (2)…
## $ openhand               <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ ppc                    <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ cuff                   <fct> (1) Yes, (1) Yes, (2) No, (1) Yes, (2) No, (1) …
## $ tkdn                   <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ vcp                    <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ weap_ret               <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ tech_other             <fct> NA, (1) Yes, (2) No, (2) No, (2) No, NA, (2) No…
## $ tech_other_specify     <fct> "                                              …
## $ xsforce                <fct> NA, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (2) No,…
## $ submit                 <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ submissionmode         <fct> (2) Teleform, (1) Web, (1) Web, (1) Web, (1) We…
## $ inelig                 <fct> (0) No, (0) No, (0) No, (0) No, (0) No, (0) No,…
## $ refusal                <fct> (0) No, (0) No, (0) No, (0) No, (0) No, (0) No,…
## $ inelig_reason_1        <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ inelig_reason_2        <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ inelig_reason_3        <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ inelig_reason_4        <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ inelig_reason_5        <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ inelig_reason_6        <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ complete               <fct> (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1) Yes, (1…
## $ origsamptype           <fct> (07) 2-year college, (06) 4-year university, (0…
## $ respondentid           <dbl> NA, NA, 797, 790, 603, 848, NA, 161, NA, 90, 80…
## $ q25totstart            <dbl> NA, NA, 90, 133, NA, 2868, NA, NA, NA, 172, 69,…
## $ r_male_start           <dbl> 23, 14, 48, 34, 220, 1040, 30, 96, 21, 60, 23, …
## $ r_male_comp            <dbl> 22, 11, 43, 30, 210, 778, 30, 82, 19, 50, 23, 1…
## $ r_fem_start            <dbl> 12, 3, 13, 20, 101, 273, 9, 25, 4, 9, 8, 6, 7, …
## $ r_fem_comp             <dbl> 11, 2, 10, 16, 94, 182, 9, 21, 4, 8, 8, 3, 5, 8…
## $ r_sex_start_total      <dbl> 35, 17, 61, 54, 321, 1313, 39, 121, 25, 69, 31,…
## $ r_sex_comp_total       <dbl> 33, 13, 53, 46, 304, 960, 39, 103, 23, 58, 31, …
## $ r_white_start          <dbl> 20, 16, 31, 14, 246, 946, 32, 65, 17, 48, 27, 1…
## $ r_white_comp           <dbl> 18, 12, 30, 11, 236, 751, 32, 54, 15, 42, 27, 1…
## $ r_blk_start            <dbl> 3, 1, 25, 29, 37, 303, 0, 12, 2, 3, 3, 2, 6, 5,…
## $ r_blk_comp             <dbl> 3, 1, 22, 26, 25, 166, 0, 10, 2, 3, 3, 0, 5, 3,…
## $ r_hisp_start           <dbl> 11, 0, 4, 9, 12, 39, 3, 36, 5, 15, 0, 19, 7, 5,…
## $ r_hisp_comp            <dbl> 11, 0, 1, 7, 11, 27, 3, 32, 5, 12, 0, 7, 7, 4, …
## $ r_ami_start            <dbl> 0, 0, 0, 0, 3, 3, 0, 0, 0, 1, 0, 0, 0, 0, 4, 0,…
## $ r_ami_comp             <dbl> 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,…
## $ r_asian_start          <dbl> 0, 0, 1, 1, 4, 8, 1, 1, 1, 2, 1, 2, 1, 0, 19, 1…
## $ r_asian_comp           <dbl> 0, 0, 0, 1, 4, 8, 1, 1, 1, 1, 1, 2, 1, 0, 5, 1,…
## $ r_hapi_start           <dbl> 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ r_hapi_comp            <dbl> 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ r_two_start            <dbl> 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 3, 0, 2, 2, 0,…
## $ r_two_comp             <dbl> 0, 0, 0, 0, 1, 0, 0, 5, 0, 0, 0, 1, 0, 1, 1, 0,…
## $ r_dk_start             <dbl> 0, 0, 0, 1, 18, 14, 2, 1, 0, 0, 0, 0, 0, 0, 0, …
## $ r_dk_comp              <dbl> 0, 0, 0, 1, 17, 7, 2, 1, 0, 0, 0, 0, 0, 0, 0, 5…
## $ r_eth_start_total      <dbl> 35, 17, 61, 54, 321, 1313, 39, 121, 25, 69, 31,…
## $ r_eth_comp_total       <dbl> 33, 13, 53, 46, 297, 960, 39, 103, 23, 58, 31, …
## $ r_sex_start_total_flag <fct> (0) Not imputed, (0) Not imputed, (0) Not imput…
## $ final_weight           <dbl> 1.116162, 1.190476, 1.082645, 1.119403, 1.00000…

3. Standardize the program length.

The 2018 CLETA collected program lengths in hours, weeks, months, and semesters. You will want to standardize this into hours, in order to create accurate percent changes. To do so, view the following code chunk.

trainingdata %>%
   select (academyname, agencycletatype, judo, basic_lgth, basic_type, judo_yn, judo_est) %>%
  mutate ( std_hours = case_when ( str_detect(basic_type, "1") ~ basic_lgth * 1,
                                   str_detect(basic_type, "2") ~ basic_lgth * 40, 
                                   str_detect(basic_type, "3") ~ basic_lgth * 8 * 30,
                                   str_detect(basic_type, "4") ~ basic_lgth * 15 * 40)) %>%
  mutate(judo_pct = judo / std_hours * 100)

4. Decide how you want to filter and sort (select) the data.

To see how I did this, view my code chunks below, where I explain what my question is, the code chunk I used to answer it, and what I found.

Major Findings

De-escalation training is recommended by lawmakers, researchers, and advocates alike to lessen use of force incidents. Despite the large push for the training, the majority of U.S. law enforcement training academies spend less than 2% of their program’s length on de-escalation instruction. Some do not address the subject at all. As requirements vary by state, de-escalation training is inconsistent across training academies, as revealed by the recently released 2018 Census of Law Enforcement Training Academies.

Data Questions, Findings, and Replication

In this section, I am listing each of my data findings. I am detailing what question I asked, what code chunk I used to answer it, and what my findings were. If you follow the methodology section and use the code chunks below, you can fully replicate my findings, which are:

  1. “Despite the large push for the training, the majority of U.S. law enforcement training academies spend less than 2% of their program’s length on de-escalation instruction.”

  2. “The Georgia State Patrol training academy spends just a single hour on de-escalation training in their 32-week program — the lowest of any academy in the country that offers de-escalation instruction.”

  3. “Of the 769 academies that responded to the survey, 70% reported completing at least one hour of de-escalation training.”

  4. “The Indianapolis Metropolitan Police Department spends 232 hours on de-escalation instruction — the most of any academy in the country. The training makes up 22% of the agency’s 26-week training academy.”

  5. “72 out of 765 academies said they did not do any de-escalation training on the 2018 CLETA survey. Most of those academies are colleges or universities. However, there are some law enforcement agencies that reported no de-escalation training, including the Miami Police Department (FL), the El Paso Police Department (TX), the Durham Police Department (NC), and the Chapel Hill Police Department (NC).”

Finding One:

Question:

What portion of their programs do law enforcement training academies spent on de-escalation training? Program length can vary by academy, so I specifically want to look at the percentage of time each academy spends on de-escalation training.

Code Chunk:

trainingdata %>%
   select (academyname, agencycletatype, judo, basic_lgth, basic_type, judo_yn, judo_est) %>%
  mutate ( std_hours = case_when ( str_detect(basic_type, "1") ~ basic_lgth * 1,
                                   str_detect(basic_type, "2") ~ basic_lgth * 40, 
                                   str_detect(basic_type, "3") ~ basic_lgth * 8 * 30,
                                   str_detect(basic_type, "4") ~ basic_lgth * 15 * 40)) %>%
  mutate(judo_pct = judo / std_hours * 100) %>%
  select (academyname, agencycletatype, judo, std_hours, judo_pct, basic_lgth, basic_type, judo_yn, judo_est) %>%
 arrange(desc(judo_pct)) %>%
  filter(judo_yn == "(1) Yes" | judo_yn == "(2) No")

Finding:

“Despite the large push for the training, the majority of U.S. law enforcement training academies spend less than 2% of their program’s length on de-escalation instruction.”

Of the 769 academies, 616 reported answered the survey’s question about whether or not they completed de-escalation training. I used 616 as my basis for this statement, rather than 769, because those academies did not fill out how much time they spent on de-escalation training, so it would be unfair to include them in this calculation.

This code chunk shows that 442 out of 616 (71%) training academies spend less than 2% of their program’s length on de-escalation instruction.

Finding Two:

Question:

Of the academies that complete de-escalation training, which one spends the least amount of time on the topic?

Code Chunk:

trainingdata %>%
   select (academyname, agencycletatype, judo, basic_lgth, basic_type, judo_yn, judo_est) %>%
  mutate ( std_hours = case_when ( str_detect(basic_type, "1") ~ basic_lgth * 1,
                                   str_detect(basic_type, "2") ~ basic_lgth * 40, 
                                   str_detect(basic_type, "3") ~ basic_lgth * 8 * 30,
                                   str_detect(basic_type, "4") ~ basic_lgth * 15 * 40)) %>%
  mutate(judo_pct = judo / std_hours * 100) %>%
  select (academyname, agencycletatype, judo, std_hours, judo_pct, basic_lgth, basic_type, judo_yn, judo_est) %>%
  filter(judo_yn == "(1) Yes") %>%
   arrange(judo_pct)

Finding:

“The Georgia State Patrol training academy spends just a single hour on de-escalation training in their 32-week program — the lowest of any academy in the country that offers de-escalation instruction.”

In the code chunk, you can see that Santa Rosa Junior College said they completed de-escalation training, but then they answered that their program does 0 hours of it. I found this to be an error on the end on the academy and went with the next academy that properly answered the survey (which was the Georgia State Patrol).

Finding Three:

Question:

How many academies in the country spend at least an hour on de-escalation training?

Code Chunk:

trainingdata %>%
   select (academyname, agencycletatype, judo, basic_lgth, basic_type, judo_yn, judo_est) %>%
  mutate ( std_hours = case_when ( str_detect(basic_type, "1") ~ basic_lgth * 1,
                                   str_detect(basic_type, "2") ~ basic_lgth * 40, 
                                   str_detect(basic_type, "3") ~ basic_lgth * 8 * 30,
                                   str_detect(basic_type, "4") ~ basic_lgth * 15 * 40)) %>%
  mutate(judo_pct = judo / std_hours * 100) %>%
  select (academyname, agencycletatype, judo, std_hours, judo_pct, basic_lgth, basic_type, judo_yn, judo_est) %>%
 arrange(desc(judo))

Finding:

“Of the 769 academies that responded to the survey, 70% reported completing at least one hour of de-escalation training.”

I used all of the academies that responded to the survey to evaluate this question, since I wanted to know how many academies in the country spent at least an hour on de-escalation training.

In this code chunk, you can see that 537 out of 769 (69.8%, rounded up to 70%) academies spend an hour on de-escalation training.

Finding Four:

Question:

Which academy spends the most time on de-escalation training?

Code Chunk:

trainingdata %>%
   select (academyname, agencycletatype, judo, basic_lgth, basic_type, judo_yn, judo_est) %>%
  mutate ( std_hours = case_when ( str_detect(basic_type, "1") ~ basic_lgth * 1,
                                   str_detect(basic_type, "2") ~ basic_lgth * 40, 
                                   str_detect(basic_type, "3") ~ basic_lgth * 8 * 30,
                                   str_detect(basic_type, "4") ~ basic_lgth * 15 * 40)) %>%
  mutate(judo_pct = judo / std_hours * 100) %>%
  select (academyname, agencycletatype, judo, std_hours, judo_pct, basic_lgth, basic_type, judo_yn, judo_est) %>%
  arrange(desc(judo_pct))

Finding:

“The Indianapolis Metropolitan Police Department spends 232 hours on de-escalation instruction — the most of any academy in the country. The training makes up 22% of the agency’s 26-week training academy.”

Finding Five:

Question:

How many academies do not complete de-escalation training? What academy type is most common of those who do not complete de-escalation training?

Code Chunk:

trainingdata %>%
   select (academyname, agencycletatype, judo, basic_lgth, basic_type, judo_yn, judo_est) %>%
  mutate ( std_hours = case_when ( str_detect(basic_type, "1") ~ basic_lgth * 1,
                                   str_detect(basic_type, "2") ~ basic_lgth * 40, 
                                   str_detect(basic_type, "3") ~ basic_lgth * 8 * 30,
                                   str_detect(basic_type, "4") ~ basic_lgth * 15 * 40)) %>%
  mutate(judo_pct = judo / std_hours * 100) %>%
  select (academyname, agencycletatype, judo, std_hours, judo_pct, basic_lgth, basic_type, judo_yn, judo_est) %>%
  filter(judo_yn == "(2) No") %>%
   arrange(desc(judo_pct))

Finding:

“72 out of 765 academies said they did not do any de-escalation training on the 2018 CLETA survey. Most of those academies are colleges or universities.

However, there are some law enforcement agencies that reported no de-escalation training, including the Miami Police Department (FL), the El Paso Police Department (TX), the Durham Police Department (NC), and the Chapel Hill Police Department (NC).”

LS0tCnRpdGxlOiAiTmV3czIxOiBEZS1lc2NhbGF0aW9uIHRyYWluaW5nIGluY29uc2lzdGVudCBhY3Jvc3MgYWNhZGVtaWVzLCBuZXcgZGF0YSByZXZlYWxzIgphdXRob3I6ICJSZWFnYW4gQ3JlYW1lciIKZGF0ZTogIjQvMjcvMjAyMiIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgdGhlbWU6IGNvc21vCiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgZGZfcHJpbnQ6IHBhZ2VkIAogICAgY29kZV9kb3dubG9hZDogdHJ1ZQotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICBldmFsID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IFRSVUUpCgoKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoamFuaXRvcikKbGlicmFyeShsdWJyaWRhdGUpCmxpYnJhcnkocmVhY3RhYmxlKQoKYGBgCgojIyBJbnRyb2R1Y3Rpb24KCiMjIyMgRGF0YXNldCBTb3VyY2U6ClRoZSBkYXRhIHVzZWQgaW4gdGhpcyBSIE1hcmtkb3duIGNvbWVzIGZyb20gdGhlIENlbnN1cyBvZiBMYXcgRW5mb3JjZW1lbnQgVHJhaW5pbmcgQWNhZGVtaWVzIChDTEVUQSksIDIwMTggKElDUFNSIDM4MjUwKSByZWxlYXNlZCBvbiBOb3ZlbWJlciAzMCwgMjAyMS4gVGhpcyBkYXRhIHdhcyBjb2xsZWN0ZWQgYW5kIHB1Ymxpc2hlZCBieSB0aGUgSW50ZXItVW5pdmVyc2l0eSBDb25zb3J0aXVtIGZvciBQb2xpdGljYWwgYW5kIFNvY2lhbCBSZXNlYXJjaCwgdGhlIFUuUy4gRGVwYXJ0bWVudCBvZiBKdXN0aWNlJ3MgT2ZmaWNlIG9mIEp1c3RpY2UgUHJvZ3JhbXMsIGFuZCB0aGUgQnVyZWF1IG9mIEp1c3RpY2UgU3RhdGlzdGljcy4KClRoZSBkYXRhIGNhbiBiZSBhY2Nlc3NlZCBbaGVyZS5dKGh0dHBzOi8vd3d3LmljcHNyLnVtaWNoLmVkdS93ZWIvTkFDSkQvc3R1ZGllcy8zODI1MC9kYXRhZG9jdW1lbnRhdGlvbikgVGhlIGRhdGEgZGljdGlvbmFyeSBjYW4gYmUgZm91bmQgYXQgdGhlIHNhbWUgc2l0ZS4gVG8gZmluZCB0aGlzLCBzZWxlY3QgdGhlICJEb3dubG9hZCIgYnV0dG9uIGFuZCBjbGljayBvbiB0aGUgIkNvZGVib29rIChQREYpIiBvcHRpb24uIAoKIyMjIyBDaXRhdGlvbjoKVW5pdGVkIFN0YXRlcyBEZXBhcnRtZW50IG9mIEp1c3RpY2UuIE9mZmljZSBvZiBKdXN0aWNlIFByb2dyYW1zLiBCdXJlYXUgb2YgSnVzdGljZSBTdGF0aXN0aWNzLiBDZW5zdXMgb2YgTGF3IEVuZm9yY2VtZW50IFRyYWluaW5nIEFjYWRlbWllcywgMjAxOC4gSW50ZXItdW5pdmVyc2l0eSBDb25zb3J0aXVtIGZvciBQb2xpdGljYWwgYW5kIFNvY2lhbCBSZXNlYXJjaCBbZGlzdHJpYnV0b3JdLCAyMDIxLTExLTMwLiBodHRwczovL2RvaS5vcmcvMTAuMzg4Ni9JQ1BTUjM4MjUwLnYxCgojIyBNZXRob2RvbG9neSBhbmQgU2V0IFVwClRoaXMgc2VjdGlvbiB3aWxsIHdhbGsgeW91IHRocm91Z2ggaG93IHRvIGNvbXBsZXRlbHkgc3RhcnQgdGhpcyBkYXRhIHdvcmsgZnJvbSBzY3JhdGNoLiBJdCB3aWxsIHNob3cgeW91IGhvdyB0byBkb3dubG9hZCB0aGUgZGF0YSBhbmQgaG93IHRvIGNsZWFuIGFuZCBzdGFuZGFyZGl6ZSBpdC4gQWZ0ZXIgdGhhdCwgZm9sbG93IGFsb25nIHdpdGggdGhlIG5leHQgc2VjdGlvbnMgdG8gYW5hbHl6ZSB0aGUgZGF0YS4gSGVyZSBhcmUgdGhlIHNldCB1cCBzdGVwczoKCiMjIyMgMS4gTG9hZCB0aGUgZGF0YSBpbnRvIFIgYW5kIGdpdmUgaXQgYSBuYW1lOiBmb3IgZXhhbXBsZSwgInRyYWluaW5nZGF0YS4iCgpgYGB7cn0KCgp0cmFpbmluZ2RhdGEgPC0gbG9hZChmaWxlPSIzODI1MC0wMDAxLURhdGEucmRhIikKCgoKYGBgCgojIyMjIDIuIENsZWFuIHRoZSBuYW1lcyBhbmQgZ2xpbXBzZS4gCgpgYGB7cn0KCnRyYWluaW5nZGF0YSA8LSBkYTM4MjUwLjAwMDEgJT4lCiAgY2xlYW5fbmFtZXMoKSAlPiUKICBnbGltcHNlCgoKYGBgCiMjIyMgMy4gU3RhbmRhcmRpemUgdGhlIHByb2dyYW0gbGVuZ3RoLgpUaGUgMjAxOCBDTEVUQSBjb2xsZWN0ZWQgcHJvZ3JhbSBsZW5ndGhzIGluIGhvdXJzLCB3ZWVrcywgbW9udGhzLCBhbmQgc2VtZXN0ZXJzLiBZb3Ugd2lsbCB3YW50IHRvIHN0YW5kYXJkaXplIHRoaXMgaW50byBob3VycywgaW4gb3JkZXIgdG8gY3JlYXRlIGFjY3VyYXRlIHBlcmNlbnQgY2hhbmdlcy4gVG8gZG8gc28sIHZpZXcgdGhlIGZvbGxvd2luZyBjb2RlIGNodW5rLgoKYGBge3J9Cgp0cmFpbmluZ2RhdGEgJT4lCiAgIHNlbGVjdCAoYWNhZGVteW5hbWUsIGFnZW5jeWNsZXRhdHlwZSwganVkbywgYmFzaWNfbGd0aCwgYmFzaWNfdHlwZSwganVkb195biwganVkb19lc3QpICU+JQogIG11dGF0ZSAoIHN0ZF9ob3VycyA9IGNhc2Vfd2hlbiAoIHN0cl9kZXRlY3QoYmFzaWNfdHlwZSwgIjEiKSB+IGJhc2ljX2xndGggKiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9kZXRlY3QoYmFzaWNfdHlwZSwgIjIiKSB+IGJhc2ljX2xndGggKiA0MCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX2RldGVjdChiYXNpY190eXBlLCAiMyIpIH4gYmFzaWNfbGd0aCAqIDggKiAzMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfZGV0ZWN0KGJhc2ljX3R5cGUsICI0IikgfiBiYXNpY19sZ3RoICogMTUgKiA0MCkpICU+JQogIG11dGF0ZShqdWRvX3BjdCA9IGp1ZG8gLyBzdGRfaG91cnMgKiAxMDApCgoKCmBgYAoKIyMjIyA0LiBEZWNpZGUgaG93IHlvdSB3YW50IHRvIGZpbHRlciBhbmQgc29ydCAoc2VsZWN0KSB0aGUgZGF0YS4KVG8gc2VlIGhvdyBJIGRpZCB0aGlzLCB2aWV3IG15IGNvZGUgY2h1bmtzIGJlbG93LCB3aGVyZSBJIGV4cGxhaW4gd2hhdCBteSBxdWVzdGlvbiBpcywgdGhlIGNvZGUgY2h1bmsgSSB1c2VkIHRvIGFuc3dlciBpdCwgYW5kIHdoYXQgSSBmb3VuZC4gCgojIyBNYWpvciBGaW5kaW5ncwoKRGUtZXNjYWxhdGlvbiB0cmFpbmluZyBpcyByZWNvbW1lbmRlZCBieSBsYXdtYWtlcnMsIHJlc2VhcmNoZXJzLCBhbmQgYWR2b2NhdGVzIGFsaWtlIHRvIGxlc3NlbiB1c2Ugb2YgZm9yY2UgaW5jaWRlbnRzLiBEZXNwaXRlIHRoZSBsYXJnZSBwdXNoIGZvciB0aGUgdHJhaW5pbmcsIHRoZSBtYWpvcml0eSBvZiBVLlMuIGxhdyBlbmZvcmNlbWVudCB0cmFpbmluZyBhY2FkZW1pZXMgc3BlbmQgbGVzcyB0aGFuIDIlIG9mIHRoZWlyIHByb2dyYW3igJlzIGxlbmd0aCBvbiBkZS1lc2NhbGF0aW9uIGluc3RydWN0aW9uLiBTb21lIGRvIG5vdCBhZGRyZXNzIHRoZSBzdWJqZWN0IGF0IGFsbC4gQXMgcmVxdWlyZW1lbnRzIHZhcnkgYnkgc3RhdGUsIGRlLWVzY2FsYXRpb24gdHJhaW5pbmcgaXMgaW5jb25zaXN0ZW50IGFjcm9zcyB0cmFpbmluZyBhY2FkZW1pZXMsIGFzIHJldmVhbGVkIGJ5IHRoZSByZWNlbnRseSByZWxlYXNlZCAyMDE4IENlbnN1cyBvZiBMYXcgRW5mb3JjZW1lbnQgVHJhaW5pbmcgQWNhZGVtaWVzLgoKCiMjIyBEYXRhIFF1ZXN0aW9ucywgRmluZGluZ3MsIGFuZCBSZXBsaWNhdGlvbgoKSW4gdGhpcyBzZWN0aW9uLCBJIGFtIGxpc3RpbmcgZWFjaCBvZiBteSBkYXRhIGZpbmRpbmdzLiBJIGFtIGRldGFpbGluZyB3aGF0IHF1ZXN0aW9uIEkgYXNrZWQsIHdoYXQgY29kZSBjaHVuayBJIHVzZWQgdG8gYW5zd2VyIGl0LCBhbmQgd2hhdCBteSBmaW5kaW5ncyB3ZXJlLiBJZiB5b3UgZm9sbG93IHRoZSBtZXRob2RvbG9neSBzZWN0aW9uIGFuZCB1c2UgdGhlIGNvZGUgY2h1bmtzIGJlbG93LCB5b3UgY2FuIGZ1bGx5IHJlcGxpY2F0ZSBteSBmaW5kaW5ncywgd2hpY2ggYXJlOgoKMS4gIkRlc3BpdGUgdGhlIGxhcmdlIHB1c2ggZm9yIHRoZSB0cmFpbmluZywgdGhlIG1ham9yaXR5IG9mIFUuUy4gbGF3IGVuZm9yY2VtZW50IHRyYWluaW5nIGFjYWRlbWllcyBzcGVuZCBsZXNzIHRoYW4gMiUgb2YgdGhlaXIgcHJvZ3JhbeKAmXMgbGVuZ3RoIG9uIGRlLWVzY2FsYXRpb24gaW5zdHJ1Y3Rpb24uIgoKMi4gIlRoZSBHZW9yZ2lhIFN0YXRlIFBhdHJvbCB0cmFpbmluZyBhY2FkZW15IHNwZW5kcyBqdXN0IGEgc2luZ2xlIGhvdXIgb24gZGUtZXNjYWxhdGlvbiB0cmFpbmluZyBpbiB0aGVpciAzMi13ZWVrIHByb2dyYW0g4oCUIHRoZSBsb3dlc3Qgb2YgYW55IGFjYWRlbXkgaW4gdGhlIGNvdW50cnkgdGhhdCBvZmZlcnMgZGUtZXNjYWxhdGlvbiBpbnN0cnVjdGlvbi4iIAoKMy4gIk9mIHRoZSA3NjkgYWNhZGVtaWVzIHRoYXQgcmVzcG9uZGVkIHRvIHRoZSBzdXJ2ZXksIDcwJSByZXBvcnRlZCBjb21wbGV0aW5nIGF0IGxlYXN0IG9uZSBob3VyIG9mIGRlLWVzY2FsYXRpb24gdHJhaW5pbmcuIgoKNC4gIlRoZSBJbmRpYW5hcG9saXMgTWV0cm9wb2xpdGFuIFBvbGljZSBEZXBhcnRtZW50IHNwZW5kcyAyMzIgaG91cnMgb24gZGUtZXNjYWxhdGlvbiBpbnN0cnVjdGlvbiDigJQgdGhlIG1vc3Qgb2YgYW55IGFjYWRlbXkgaW4gdGhlIGNvdW50cnkuIFRoZSB0cmFpbmluZyBtYWtlcyB1cCAyMiUgb2YgdGhlIGFnZW5jeeKAmXMgMjYtd2VlayB0cmFpbmluZyBhY2FkZW15LiIKCjUuICI3MiBvdXQgb2YgNzY1IGFjYWRlbWllcyBzYWlkIHRoZXkgZGlkIG5vdCBkbyBhbnkgZGUtZXNjYWxhdGlvbiB0cmFpbmluZyBvbiB0aGUgMjAxOCBDTEVUQSBzdXJ2ZXkuIE1vc3Qgb2YgdGhvc2UgYWNhZGVtaWVzIGFyZSBjb2xsZWdlcyBvciB1bml2ZXJzaXRpZXMuIEhvd2V2ZXIsIHRoZXJlIGFyZSBzb21lIGxhdyBlbmZvcmNlbWVudCBhZ2VuY2llcyB0aGF0IHJlcG9ydGVkIG5vIGRlLWVzY2FsYXRpb24gdHJhaW5pbmcsIGluY2x1ZGluZyB0aGUgTWlhbWkgUG9saWNlIERlcGFydG1lbnQgKEZMKSwgdGhlIEVsIFBhc28gUG9saWNlIERlcGFydG1lbnQgKFRYKSwgdGhlIER1cmhhbSBQb2xpY2UgRGVwYXJ0bWVudCAoTkMpLCBhbmQgdGhlIENoYXBlbCBIaWxsIFBvbGljZSBEZXBhcnRtZW50IChOQykuIgoKIyMjIEZpbmRpbmcgT25lOgoKIyMjIyBRdWVzdGlvbjoKV2hhdCBwb3J0aW9uIG9mIHRoZWlyIHByb2dyYW1zIGRvIGxhdyBlbmZvcmNlbWVudCB0cmFpbmluZyBhY2FkZW1pZXMgc3BlbnQgb24gZGUtZXNjYWxhdGlvbiB0cmFpbmluZz8gUHJvZ3JhbSBsZW5ndGggY2FuIHZhcnkgYnkgYWNhZGVteSwgc28gSSBzcGVjaWZpY2FsbHkgd2FudCB0byBsb29rIGF0IHRoZSBwZXJjZW50YWdlIG9mIHRpbWUgZWFjaCBhY2FkZW15IHNwZW5kcyBvbiBkZS1lc2NhbGF0aW9uIHRyYWluaW5nLiAKCiMjIyMgQ29kZSBDaHVuazoKCmBgYHtyfQoKdHJhaW5pbmdkYXRhICU+JQogICBzZWxlY3QgKGFjYWRlbXluYW1lLCBhZ2VuY3ljbGV0YXR5cGUsIGp1ZG8sIGJhc2ljX2xndGgsIGJhc2ljX3R5cGUsIGp1ZG9feW4sIGp1ZG9fZXN0KSAlPiUKICBtdXRhdGUgKCBzdGRfaG91cnMgPSBjYXNlX3doZW4gKCBzdHJfZGV0ZWN0KGJhc2ljX3R5cGUsICIxIikgfiBiYXNpY19sZ3RoICogMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfZGV0ZWN0KGJhc2ljX3R5cGUsICIyIikgfiBiYXNpY19sZ3RoICogNDAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9kZXRlY3QoYmFzaWNfdHlwZSwgIjMiKSB+IGJhc2ljX2xndGggKiA4ICogMzAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX2RldGVjdChiYXNpY190eXBlLCAiNCIpIH4gYmFzaWNfbGd0aCAqIDE1ICogNDApKSAlPiUKICBtdXRhdGUoanVkb19wY3QgPSBqdWRvIC8gc3RkX2hvdXJzICogMTAwKSAlPiUKICBzZWxlY3QgKGFjYWRlbXluYW1lLCBhZ2VuY3ljbGV0YXR5cGUsIGp1ZG8sIHN0ZF9ob3VycywganVkb19wY3QsIGJhc2ljX2xndGgsIGJhc2ljX3R5cGUsIGp1ZG9feW4sIGp1ZG9fZXN0KSAlPiUKIGFycmFuZ2UoZGVzYyhqdWRvX3BjdCkpICU+JQogIGZpbHRlcihqdWRvX3luID09ICIoMSkgWWVzIiB8IGp1ZG9feW4gPT0gIigyKSBObyIpCgoKCgpgYGAKCiMjIyMgRmluZGluZzoKIkRlc3BpdGUgdGhlIGxhcmdlIHB1c2ggZm9yIHRoZSB0cmFpbmluZywgdGhlIG1ham9yaXR5IG9mIFUuUy4gbGF3IGVuZm9yY2VtZW50IHRyYWluaW5nIGFjYWRlbWllcyBzcGVuZCBsZXNzIHRoYW4gMiUgb2YgdGhlaXIgcHJvZ3JhbeKAmXMgbGVuZ3RoIG9uIGRlLWVzY2FsYXRpb24gaW5zdHJ1Y3Rpb24uIgoKT2YgdGhlIDc2OSBhY2FkZW1pZXMsIDYxNiByZXBvcnRlZCBhbnN3ZXJlZCB0aGUgc3VydmV5J3MgcXVlc3Rpb24gYWJvdXQgd2hldGhlciBvciBub3QgdGhleSBjb21wbGV0ZWQgZGUtZXNjYWxhdGlvbiB0cmFpbmluZy4gSSB1c2VkIDYxNiBhcyBteSBiYXNpcyBmb3IgdGhpcyBzdGF0ZW1lbnQsIHJhdGhlciB0aGFuIDc2OSwgYmVjYXVzZSB0aG9zZSBhY2FkZW1pZXMgZGlkIG5vdCBmaWxsIG91dCBob3cgbXVjaCB0aW1lIHRoZXkgc3BlbnQgb24gZGUtZXNjYWxhdGlvbiB0cmFpbmluZywgc28gaXQgd291bGQgYmUgdW5mYWlyIHRvIGluY2x1ZGUgdGhlbSBpbiB0aGlzIGNhbGN1bGF0aW9uLiAKClRoaXMgY29kZSBjaHVuayBzaG93cyB0aGF0IDQ0MiBvdXQgb2YgNjE2ICg3MSUpIHRyYWluaW5nIGFjYWRlbWllcyBzcGVuZCBsZXNzIHRoYW4gMiUgb2YgdGhlaXIgcHJvZ3JhbSdzIGxlbmd0aCBvbiBkZS1lc2NhbGF0aW9uIGluc3RydWN0aW9uLiAKCiMjIyBGaW5kaW5nIFR3bzoKCiMjIyMgUXVlc3Rpb246Ck9mIHRoZSBhY2FkZW1pZXMgdGhhdCBjb21wbGV0ZSBkZS1lc2NhbGF0aW9uIHRyYWluaW5nLCB3aGljaCBvbmUgc3BlbmRzIHRoZSBsZWFzdCBhbW91bnQgb2YgdGltZSBvbiB0aGUgdG9waWM/CgojIyMjIENvZGUgQ2h1bms6CgpgYGB7cn0KCgp0cmFpbmluZ2RhdGEgJT4lCiAgIHNlbGVjdCAoYWNhZGVteW5hbWUsIGFnZW5jeWNsZXRhdHlwZSwganVkbywgYmFzaWNfbGd0aCwgYmFzaWNfdHlwZSwganVkb195biwganVkb19lc3QpICU+JQogIG11dGF0ZSAoIHN0ZF9ob3VycyA9IGNhc2Vfd2hlbiAoIHN0cl9kZXRlY3QoYmFzaWNfdHlwZSwgIjEiKSB+IGJhc2ljX2xndGggKiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9kZXRlY3QoYmFzaWNfdHlwZSwgIjIiKSB+IGJhc2ljX2xndGggKiA0MCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX2RldGVjdChiYXNpY190eXBlLCAiMyIpIH4gYmFzaWNfbGd0aCAqIDggKiAzMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfZGV0ZWN0KGJhc2ljX3R5cGUsICI0IikgfiBiYXNpY19sZ3RoICogMTUgKiA0MCkpICU+JQogIG11dGF0ZShqdWRvX3BjdCA9IGp1ZG8gLyBzdGRfaG91cnMgKiAxMDApICU+JQogIHNlbGVjdCAoYWNhZGVteW5hbWUsIGFnZW5jeWNsZXRhdHlwZSwganVkbywgc3RkX2hvdXJzLCBqdWRvX3BjdCwgYmFzaWNfbGd0aCwgYmFzaWNfdHlwZSwganVkb195biwganVkb19lc3QpICU+JQogIGZpbHRlcihqdWRvX3luID09ICIoMSkgWWVzIikgJT4lCiAgIGFycmFuZ2UoanVkb19wY3QpCgpgYGAKCiMjIyMgRmluZGluZzoKIlRoZSBHZW9yZ2lhIFN0YXRlIFBhdHJvbCB0cmFpbmluZyBhY2FkZW15IHNwZW5kcyBqdXN0IGEgc2luZ2xlIGhvdXIgb24gZGUtZXNjYWxhdGlvbiB0cmFpbmluZyBpbiB0aGVpciAzMi13ZWVrIHByb2dyYW0g4oCUIHRoZSBsb3dlc3Qgb2YgYW55IGFjYWRlbXkgaW4gdGhlIGNvdW50cnkgdGhhdCBvZmZlcnMgZGUtZXNjYWxhdGlvbiBpbnN0cnVjdGlvbi4iIAoKSW4gdGhlIGNvZGUgY2h1bmssIHlvdSBjYW4gc2VlIHRoYXQgU2FudGEgUm9zYSBKdW5pb3IgQ29sbGVnZSBzYWlkIHRoZXkgY29tcGxldGVkIGRlLWVzY2FsYXRpb24gdHJhaW5pbmcsIGJ1dCB0aGVuIHRoZXkgYW5zd2VyZWQgdGhhdCB0aGVpciBwcm9ncmFtIGRvZXMgMCBob3VycyBvZiBpdC4gSSBmb3VuZCB0aGlzIHRvIGJlIGFuIGVycm9yIG9uIHRoZSBlbmQgb24gdGhlIGFjYWRlbXkgYW5kIHdlbnQgd2l0aCB0aGUgbmV4dCBhY2FkZW15IHRoYXQgcHJvcGVybHkgYW5zd2VyZWQgdGhlIHN1cnZleSAod2hpY2ggd2FzIHRoZSBHZW9yZ2lhIFN0YXRlIFBhdHJvbCkuCgojIyMgRmluZGluZyBUaHJlZToKCiMjIyMgUXVlc3Rpb246CkhvdyBtYW55IGFjYWRlbWllcyBpbiB0aGUgY291bnRyeSBzcGVuZCBhdCBsZWFzdCBhbiBob3VyIG9uIGRlLWVzY2FsYXRpb24gdHJhaW5pbmc/CgojIyMjIENvZGUgQ2h1bms6CgpgYGB7cn0KCnRyYWluaW5nZGF0YSAlPiUKICAgc2VsZWN0IChhY2FkZW15bmFtZSwgYWdlbmN5Y2xldGF0eXBlLCBqdWRvLCBiYXNpY19sZ3RoLCBiYXNpY190eXBlLCBqdWRvX3luLCBqdWRvX2VzdCkgJT4lCiAgbXV0YXRlICggc3RkX2hvdXJzID0gY2FzZV93aGVuICggc3RyX2RldGVjdChiYXNpY190eXBlLCAiMSIpIH4gYmFzaWNfbGd0aCAqIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX2RldGVjdChiYXNpY190eXBlLCAiMiIpIH4gYmFzaWNfbGd0aCAqIDQwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfZGV0ZWN0KGJhc2ljX3R5cGUsICIzIikgfiBiYXNpY19sZ3RoICogOCAqIDMwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9kZXRlY3QoYmFzaWNfdHlwZSwgIjQiKSB+IGJhc2ljX2xndGggKiAxNSAqIDQwKSkgJT4lCiAgbXV0YXRlKGp1ZG9fcGN0ID0ganVkbyAvIHN0ZF9ob3VycyAqIDEwMCkgJT4lCiAgc2VsZWN0IChhY2FkZW15bmFtZSwgYWdlbmN5Y2xldGF0eXBlLCBqdWRvLCBzdGRfaG91cnMsIGp1ZG9fcGN0LCBiYXNpY19sZ3RoLCBiYXNpY190eXBlLCBqdWRvX3luLCBqdWRvX2VzdCkgJT4lCiBhcnJhbmdlKGRlc2MoanVkbykpCgoKYGBgCiMjIyMgRmluZGluZzoKIk9mIHRoZSA3NjkgYWNhZGVtaWVzIHRoYXQgcmVzcG9uZGVkIHRvIHRoZSBzdXJ2ZXksIDcwJSByZXBvcnRlZCBjb21wbGV0aW5nIGF0IGxlYXN0IG9uZSBob3VyIG9mIGRlLWVzY2FsYXRpb24gdHJhaW5pbmcuIgoKSSB1c2VkIGFsbCBvZiB0aGUgYWNhZGVtaWVzIHRoYXQgcmVzcG9uZGVkIHRvIHRoZSBzdXJ2ZXkgdG8gZXZhbHVhdGUgdGhpcyBxdWVzdGlvbiwgc2luY2UgSSB3YW50ZWQgdG8ga25vdyBob3cgbWFueSBhY2FkZW1pZXMgaW4gdGhlIGNvdW50cnkgc3BlbnQgYXQgbGVhc3QgYW4gaG91ciBvbiBkZS1lc2NhbGF0aW9uIHRyYWluaW5nLiAKCkluIHRoaXMgY29kZSBjaHVuaywgeW91IGNhbiBzZWUgdGhhdCA1Mzcgb3V0IG9mIDc2OSAoNjkuOCUsIHJvdW5kZWQgdXAgdG8gNzAlKSBhY2FkZW1pZXMgc3BlbmQgYW4gaG91ciBvbiBkZS1lc2NhbGF0aW9uIHRyYWluaW5nLiAKCiMjIyBGaW5kaW5nIEZvdXI6CgojIyMjIFF1ZXN0aW9uOgpXaGljaCBhY2FkZW15IHNwZW5kcyB0aGUgbW9zdCB0aW1lIG9uIGRlLWVzY2FsYXRpb24gdHJhaW5pbmc/IAoKIyMjIyBDb2RlIENodW5rOgoKYGBge3J9CgoKCnRyYWluaW5nZGF0YSAlPiUKICAgc2VsZWN0IChhY2FkZW15bmFtZSwgYWdlbmN5Y2xldGF0eXBlLCBqdWRvLCBiYXNpY19sZ3RoLCBiYXNpY190eXBlLCBqdWRvX3luLCBqdWRvX2VzdCkgJT4lCiAgbXV0YXRlICggc3RkX2hvdXJzID0gY2FzZV93aGVuICggc3RyX2RldGVjdChiYXNpY190eXBlLCAiMSIpIH4gYmFzaWNfbGd0aCAqIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX2RldGVjdChiYXNpY190eXBlLCAiMiIpIH4gYmFzaWNfbGd0aCAqIDQwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfZGV0ZWN0KGJhc2ljX3R5cGUsICIzIikgfiBiYXNpY19sZ3RoICogOCAqIDMwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9kZXRlY3QoYmFzaWNfdHlwZSwgIjQiKSB+IGJhc2ljX2xndGggKiAxNSAqIDQwKSkgJT4lCiAgbXV0YXRlKGp1ZG9fcGN0ID0ganVkbyAvIHN0ZF9ob3VycyAqIDEwMCkgJT4lCiAgc2VsZWN0IChhY2FkZW15bmFtZSwgYWdlbmN5Y2xldGF0eXBlLCBqdWRvLCBzdGRfaG91cnMsIGp1ZG9fcGN0LCBiYXNpY19sZ3RoLCBiYXNpY190eXBlLCBqdWRvX3luLCBqdWRvX2VzdCkgJT4lCiAgYXJyYW5nZShkZXNjKGp1ZG9fcGN0KSkKCmBgYAoKIyMjIyBGaW5kaW5nOgoKIlRoZSBJbmRpYW5hcG9saXMgTWV0cm9wb2xpdGFuIFBvbGljZSBEZXBhcnRtZW50IHNwZW5kcyAyMzIgaG91cnMgb24gZGUtZXNjYWxhdGlvbiBpbnN0cnVjdGlvbiDigJQgdGhlIG1vc3Qgb2YgYW55IGFjYWRlbXkgaW4gdGhlIGNvdW50cnkuIFRoZSB0cmFpbmluZyBtYWtlcyB1cCAyMiUgb2YgdGhlIGFnZW5jeeKAmXMgMjYtd2VlayB0cmFpbmluZyBhY2FkZW15LiIKCiMjIyBGaW5kaW5nIEZpdmU6CgojIyMjIFF1ZXN0aW9uOgpIb3cgbWFueSBhY2FkZW1pZXMgZG8gbm90IGNvbXBsZXRlIGRlLWVzY2FsYXRpb24gdHJhaW5pbmc/IFdoYXQgYWNhZGVteSB0eXBlIGlzIG1vc3QgY29tbW9uIG9mIHRob3NlIHdobyBkbyBub3QgY29tcGxldGUgZGUtZXNjYWxhdGlvbiB0cmFpbmluZz8KCiMjIyMgQ29kZSBDaHVuazoKCmBgYHtyfQoKCnRyYWluaW5nZGF0YSAlPiUKICAgc2VsZWN0IChhY2FkZW15bmFtZSwgYWdlbmN5Y2xldGF0eXBlLCBqdWRvLCBiYXNpY19sZ3RoLCBiYXNpY190eXBlLCBqdWRvX3luLCBqdWRvX2VzdCkgJT4lCiAgbXV0YXRlICggc3RkX2hvdXJzID0gY2FzZV93aGVuICggc3RyX2RldGVjdChiYXNpY190eXBlLCAiMSIpIH4gYmFzaWNfbGd0aCAqIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX2RldGVjdChiYXNpY190eXBlLCAiMiIpIH4gYmFzaWNfbGd0aCAqIDQwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfZGV0ZWN0KGJhc2ljX3R5cGUsICIzIikgfiBiYXNpY19sZ3RoICogOCAqIDMwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9kZXRlY3QoYmFzaWNfdHlwZSwgIjQiKSB+IGJhc2ljX2xndGggKiAxNSAqIDQwKSkgJT4lCiAgbXV0YXRlKGp1ZG9fcGN0ID0ganVkbyAvIHN0ZF9ob3VycyAqIDEwMCkgJT4lCiAgc2VsZWN0IChhY2FkZW15bmFtZSwgYWdlbmN5Y2xldGF0eXBlLCBqdWRvLCBzdGRfaG91cnMsIGp1ZG9fcGN0LCBiYXNpY19sZ3RoLCBiYXNpY190eXBlLCBqdWRvX3luLCBqdWRvX2VzdCkgJT4lCiAgZmlsdGVyKGp1ZG9feW4gPT0gIigyKSBObyIpICU+JQogICBhcnJhbmdlKGRlc2MoanVkb19wY3QpKQoKCgpgYGAKCiMjIyMgRmluZGluZzoKIjcyIG91dCBvZiA3NjUgYWNhZGVtaWVzIHNhaWQgdGhleSBkaWQgbm90IGRvIGFueSBkZS1lc2NhbGF0aW9uIHRyYWluaW5nIG9uIHRoZSAyMDE4IENMRVRBIHN1cnZleS4gTW9zdCBvZiB0aG9zZSBhY2FkZW1pZXMgYXJlIGNvbGxlZ2VzIG9yIHVuaXZlcnNpdGllcy4KCkhvd2V2ZXIsIHRoZXJlIGFyZSBzb21lIGxhdyBlbmZvcmNlbWVudCBhZ2VuY2llcyB0aGF0IHJlcG9ydGVkIG5vIGRlLWVzY2FsYXRpb24gdHJhaW5pbmcsIGluY2x1ZGluZyB0aGUgTWlhbWkgUG9saWNlIERlcGFydG1lbnQgKEZMKSwgdGhlIEVsIFBhc28gUG9saWNlIERlcGFydG1lbnQgKFRYKSwgdGhlIER1cmhhbSBQb2xpY2UgRGVwYXJ0bWVudCAoTkMpLCBhbmQgdGhlIENoYXBlbCBIaWxsIFBvbGljZSBEZXBhcnRtZW50IChOQykuIg==