FEMA has several Hazard Mitigation Assistance (HMA) programs that
provide grants for planning, resilient infrastructure, household
mitigation, and buyouts:
- Hazard Mitigation Grant Program (HMGP)
- provides funding to local governments so they can develop hazard
mitigation plans and rebuild in a way that reduces, or mitigates, future
disaster losses in their communities.
- Availability: after a presidentially declared disaster.
- Activities: Planning (code enforcements, buyouts); Flood Protection
(levees, floodwalls, elevations, drainage); Retrofitting
- Flood Mitigation Assistance (FMA)
- provides funding to local governments for projects that reduce risk
of repetitive flood damage to NFIP insured buildings
- Subsumed two defunct programs: Repetitive Flood Claims grant program
(RFC) & Severe Repetitive Loss grant program (SRL)
- Availability:
- Activities:
- Building Resilient Communities (BRIC)
- Subsumed Pre-disaster Mitigation Program (PDM), which ended out of
2018
- Availability:
- Activities: “Capability and capacity building”
- Legislative Pre-disaster Mitigation grant program
(LPDM)
- Also known as “Pre-disaster Mitigation congressional community
projects”
- As far as I can tell, this is competitive PDM funding that is just
extra and for some reason not branded as BRIC?
The full extent of how FEMA and other agencies will use the new CDRZ
designations is still unknown, but FEMA has announced that CDRZ census
tracts will receive priority in selection and increased federal cost
share support under BRIC. We explore whether that
represents a significant shift in where historical BRIC funding has been
directed.
Datasets:
- Hazard
Mitigation Assistance Projects (V3)
- funded projects under HMA grant programs, including HMGP, FMA, PDM,
and BRIC
- FY2002 - FY2023 (FY2019 for BRIC)
- HMA
Subapplications
- subapplications / subgrants for FEMA HMA grants, with data collected
under FEMA Grants Outcome (FEMA GO) grant system. Contains fields not
included in prior project data, due to improved grant management
system.
- Includes BRIC & FMA; will include BRIC in CY 2023
- FY2020 - FY2022
- Hazard
Mitigation Assistance Mitigated Properties
- data on the individual properties that were mitigated under HMA
grant programs, representing a subset of the HMA Projects (V3)
funds
- FY1989 - FY2023
History of all HMA funding

History of PDM / BRIC Funding
PDM / BRIC FUNDING:
BRIC is one of the programs that CDRZs designations will affect funding
for.
- Prior to 2020: HMA Projects
- Pre-2019: BRIC was called the “pre-disaster mitigation” (PDM)
program
- 2019: renamed as “BRIC”
- 2020 onward: HMA Subapplications

Comparing previous funding vs. CDRZ designations
- Estimations at county level
- BRIC funding post FY2020 attributed to all “benefitting counties”.
When multiple are listed, total obligated funds are equally
distributed
- Per County Funding summed across all fiscal years (FY2000 -
FY2021)
- CDRZ summed as a count within the county
- Some historical records pre FY2020 do not have a “benefitting
county” designated. I’ve omitted those for now.


LS0tDQp0aXRsZTogIkZFTUEncyBIYXphcmQgTWl0aWdhdGlvbiBGdW5kaW5nICYgQ0RSWiINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSkNCnNldHdkKCJ+L0FuYWx5c2lzL0ZFTUFfZnVuZGluZyIpDQpQYWNrYWdlcyA8LSBjKCJkcGx5ciIsICJnZ3Bsb3QyIiwgInRpZHl2ZXJzZSIsICJodHRyIiwgImpzb25saXRlIiwgInJlYWR4bCIsICJ0aWR5Y2Vuc3VzIiwgInRpZHlyIikNCmxhcHBseShQYWNrYWdlcywgbGlicmFyeSwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKQ0Kc291cmNlKCJmdW5jdGlvbnMvYW5hbHlzaXNfZnVuY3Rpb25zLlIiKQ0KYGBgDQoNCkZFTUEgaGFzIHNldmVyYWwgSGF6YXJkIE1pdGlnYXRpb24gQXNzaXN0YW5jZSAoSE1BKSBwcm9ncmFtcyB0aGF0IHByb3ZpZGUgZ3JhbnRzIGZvciBwbGFubmluZywgcmVzaWxpZW50IGluZnJhc3RydWN0dXJlLCBob3VzZWhvbGQgbWl0aWdhdGlvbiwgYW5kIGJ1eW91dHM6ICANCg0KMS4gKipIYXphcmQgTWl0aWdhdGlvbiBHcmFudCBQcm9ncmFtIChITUdQKSoqICANCiAgICArIHByb3ZpZGVzIGZ1bmRpbmcgdG8gbG9jYWwgZ292ZXJubWVudHMgc28gdGhleSBjYW4gZGV2ZWxvcCBoYXphcmQgbWl0aWdhdGlvbiBwbGFucyBhbmQgcmVidWlsZCBpbiBhIHdheSB0aGF0IHJlZHVjZXMsIG9yIG1pdGlnYXRlcywgZnV0dXJlIGRpc2FzdGVyIGxvc3NlcyBpbiB0aGVpciBjb21tdW5pdGllcy4gICANCiAgICArIEF2YWlsYWJpbGl0eTogYWZ0ZXIgYSBwcmVzaWRlbnRpYWxseSBkZWNsYXJlZCBkaXNhc3Rlci4gIA0KICAgICsgQWN0aXZpdGllczogUGxhbm5pbmcgKGNvZGUgZW5mb3JjZW1lbnRzLCBidXlvdXRzKTsgRmxvb2QgUHJvdGVjdGlvbiAobGV2ZWVzLCBmbG9vZHdhbGxzLCBlbGV2YXRpb25zLCBkcmFpbmFnZSk7IFJldHJvZml0dGluZyAgICAgDQoyLiAqKkZsb29kIE1pdGlnYXRpb24gQXNzaXN0YW5jZSAoRk1BKSoqICANCiAgICArIHByb3ZpZGVzIGZ1bmRpbmcgdG8gbG9jYWwgZ292ZXJubWVudHMgZm9yIHByb2plY3RzIHRoYXQgcmVkdWNlIHJpc2sgb2YgcmVwZXRpdGl2ZSBmbG9vZCBkYW1hZ2UgdG8gTkZJUCBpbnN1cmVkIGJ1aWxkaW5ncw0KICAgICsgU3Vic3VtZWQgdHdvIGRlZnVuY3QgcHJvZ3JhbXM6IFJlcGV0aXRpdmUgRmxvb2QgQ2xhaW1zIGdyYW50IHByb2dyYW0gKFJGQykgJiBTZXZlcmUgUmVwZXRpdGl2ZSBMb3NzIGdyYW50IHByb2dyYW0gKFNSTCkgIA0KICAgICsgQXZhaWxhYmlsaXR5OiAgDQogICAgKyBBY3Rpdml0aWVzOiAgDQozLiAqKkJ1aWxkaW5nIFJlc2lsaWVudCBDb21tdW5pdGllcyAoQlJJQykqKiAgDQogICAgKyBTdWJzdW1lZCBQcmUtZGlzYXN0ZXIgTWl0aWdhdGlvbiBQcm9ncmFtIChQRE0pLCB3aGljaCBlbmRlZCBvdXQgb2YgMjAxOCANCiAgICArIEF2YWlsYWJpbGl0eToNCiAgICArIEFjdGl2aXRpZXM6ICJDYXBhYmlsaXR5IGFuZCBjYXBhY2l0eSBidWlsZGluZyIgDQo0LiAqKkxlZ2lzbGF0aXZlIFByZS1kaXNhc3RlciBNaXRpZ2F0aW9uIGdyYW50IHByb2dyYW0gKExQRE0pKiogIA0KICAgICsgQWxzbyBrbm93biBhcyAiUHJlLWRpc2FzdGVyIE1pdGlnYXRpb24gY29uZ3Jlc3Npb25hbCBjb21tdW5pdHkgcHJvamVjdHMiICANCiAgICArIEFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGlzIGlzIGNvbXBldGl0aXZlIFBETSBmdW5kaW5nIHRoYXQgaXMganVzdCBleHRyYSBhbmQgZm9yIHNvbWUgcmVhc29uIG5vdCBicmFuZGVkIGFzIEJSSUM/ICAgDQoNClRoZSBmdWxsIGV4dGVudCBvZiBob3cgRkVNQSBhbmQgb3RoZXIgYWdlbmNpZXMgd2lsbCB1c2UgdGhlIG5ldyBDRFJaIGRlc2lnbmF0aW9ucyBpcyBzdGlsbCB1bmtub3duLCBidXQgRkVNQSBoYXMgYW5ub3VuY2VkIHRoYXQgQ0RSWiBjZW5zdXMgdHJhY3RzIHdpbGwgcmVjZWl2ZSBwcmlvcml0eSBpbiBzZWxlY3Rpb24gYW5kIGluY3JlYXNlZCBmZWRlcmFsIGNvc3Qgc2hhcmUgc3VwcG9ydCB1bmRlciAqKkJSSUMqKi4gV2UgZXhwbG9yZSB3aGV0aGVyIHRoYXQgcmVwcmVzZW50cyBhIHNpZ25pZmljYW50IHNoaWZ0IGluIHdoZXJlIGhpc3RvcmljYWwgQlJJQyBmdW5kaW5nIGhhcyBiZWVuIGRpcmVjdGVkLiAgIA0KDQojIyMjIyBEYXRhc2V0czogIA0KKiBbKkhhemFyZCBNaXRpZ2F0aW9uIEFzc2lzdGFuY2UgUHJvamVjdHMgKFYzKSpdKGh0dHBzOi8vd3d3LmZlbWEuZ292L29wZW5mZW1hLWRhdGEtcGFnZS9oYXphcmQtbWl0aWdhdGlvbi1hc3Npc3RhbmNlLXByb2plY3RzLXYzKQ0KICArIGZ1bmRlZCBwcm9qZWN0cyB1bmRlciBITUEgZ3JhbnQgcHJvZ3JhbXMsIGluY2x1ZGluZyBITUdQLCBGTUEsIFBETSwgYW5kIEJSSUMgDQogICsgRlkyMDAyIC0gRlkyMDIzIChGWTIwMTkgZm9yIEJSSUMpDQoqIFsqSE1BIFN1YmFwcGxpY2F0aW9ucypdKGh0dHBzOi8vd3d3LmZlbWEuZ292L29wZW5mZW1hLWRhdGEtcGFnZS9obWEtc3ViYXBwbGljYXRpb25zLXYxKQ0KICArIHN1YmFwcGxpY2F0aW9ucyAvIHN1YmdyYW50cyBmb3IgRkVNQSBITUEgZ3JhbnRzLCB3aXRoIGRhdGEgY29sbGVjdGVkIHVuZGVyIEZFTUEgR3JhbnRzIE91dGNvbWUgKEZFTUEgR08pIGdyYW50IHN5c3RlbS4gQ29udGFpbnMgZmllbGRzIG5vdCBpbmNsdWRlZCBpbiBwcmlvciBwcm9qZWN0IGRhdGEsIGR1ZSB0byBpbXByb3ZlZCBncmFudCBtYW5hZ2VtZW50IHN5c3RlbS4gDQogICsgSW5jbHVkZXMgQlJJQyAmIEZNQTsgd2lsbCBpbmNsdWRlIEJSSUMgaW4gQ1kgMjAyMyAgIA0KICArIEZZMjAyMCAtIEZZMjAyMiAgDQoqIFsqSGF6YXJkIE1pdGlnYXRpb24gQXNzaXN0YW5jZSBNaXRpZ2F0ZWQgUHJvcGVydGllcypdKGh0dHBzOi8vd3d3LmZlbWEuZ292L29wZW5mZW1hLWRhdGEtcGFnZS9oYXphcmQtbWl0aWdhdGlvbi1hc3Npc3RhbmNlLW1pdGlnYXRlZC1wcm9wZXJ0aWVzLXYzKSAgDQogICsgZGF0YSBvbiB0aGUgaW5kaXZpZHVhbCBwcm9wZXJ0aWVzIHRoYXQgd2VyZSBtaXRpZ2F0ZWQgdW5kZXIgSE1BIGdyYW50IHByb2dyYW1zLCByZXByZXNlbnRpbmcgYSBzdWJzZXQgb2YgdGhlIEhNQSBQcm9qZWN0cyAoVjMpIGZ1bmRzDQogICsgRlkxOTg5IC0gRlkyMDIzDQoNCmBgYHtyfQ0KI0hNQSBkYXRhDQpobWFfcHJvaiA8LSByZWFkLmNzdigiZGF0YV9yYXcvSGF6YXJkTWl0aWdhdGlvbkFzc2lzdGFuY2VQcm9qZWN0cy5jc3YiKQ0KaG1hX3Byb3BzIDwtIHJlYWQuY3N2KCJkYXRhX3Jhdy9IYXphcmRNaXRpZ2F0aW9uQXNzaXN0YW5jZU1pdGlnYXRlZFByb3BlcnRpZXMuY3N2IikNCmhtYV9zdWJhcHBzIDwtIHJlYWQuY3N2KCJkYXRhX3Jhdy9IbWFTdWJhcHBsaWNhdGlvbnMuY3N2IikNCmBgYA0KDQpgYGB7cn0NCiNvdGhlciBkYXRhc2V0cw0KY2RyeiA8LSByZWFkLmNzdigiZGF0YV9yYXcvRkVNQV9Db21tdW5pdHlEaXNhc3RlclJlc2lsaWVuY2Vab25lc18wLmNzdiIpICU+JSANCiAgbXV0YXRlKEdFT0lEMjAgPSBhcy5jaGFyYWN0ZXIoR0VPSUQyMCksIA0KICAgICAgICAgR0VPSUQyMCA9IHN0cl9wYWQoR0VPSUQyMCwgd2lkdGg9MTEsIHNpZGU9ImxlZnQiLCBwYWQ9IjAiKSkNCnh3YWxrIDwtIHJlYWRfZXhjZWwoImRhdGFfcmF3L1RSQUNUX1pJUF8wMzIwMjMueGxzeCIpDQpgYGANCg0KYGBge3J9DQojRGF0YSBrZXlzDQpzdGF0ZXMgPC0gcmVhZC5jc3YoImtleXMvc3RhdGVfZmlwcy5jc3YiLCBjb2xDbGFzc2VzPSJjaGFyYWN0ZXIiKQ0Kc3RhdGVfRklQUyA8LSBkcGx5cjo6cHVsbChzdGF0ZXMsIEZJUFMpDQpicmljX2ZpZWxkcyA8LSByZWFkLmNzdigia2V5cy9icmljX2RhdGFmaWVsZHMuY3N2IikNCmBgYA0KICANCiAgDQojIyMgSGlzdG9yeSBvZiBhbGwgSE1BIGZ1bmRpbmcgIA0KDQpgYGB7cn0NCiNHYXRoZXIgUERNICsgQlJJQyBmdW5kaW5nIGZyb20gdHdvIGRhdGFzZXRzDQpuZXduYW1lcyA8LSBkcGx5cjo6cHVsbChicmljX2ZpZWxkcywgbmV3KQ0Kb2xkbmFtZXMgPC0gZHBseXI6OnB1bGwoYnJpY19maWVsZHMsIG9sZCkNCg0KcHJlMjAyMCA8LSBobWFfcHJvaiAlPiUgDQogIHJlbmFtZV93aXRoKH4gbmV3bmFtZXNbd2hpY2gob2xkbmFtZXMgPT0gLngpXSwgLmNvbHMgPSBvbGRuYW1lcykNCg0KcG9zdDIwMjAgPC0gaG1hX3N1YmFwcHMgJT4lIA0KICBmaWx0ZXIoc3RhdHVzID09ICJzdWJBd2FyZEFjY2VwdGVkIikgJT4lIA0KICBtdXRhdGUoc3ViYXBwbGljYW50WmlwQ29kZSA9IGFzLmNoYXJhY3RlcihzdWJhcHBsaWNhbnRaaXBDb2RlKSkgJT4lIA0KICBtdXRhdGUoc3ViYXBwbGljYW50WmlwQ29kZSA9IHN0cl9wYWQoc3ViYXBwbGljYW50WmlwQ29kZSwgd2lkdGg9NSwgc2lkZT0ibGVmdCIsIHBhZD0iMCIpKQ0KYGBgDQoNCmBgYHtyfQ0KI2NvbWJpbmUgcHJvamVjdCAmIEZFTUEgR08gZGF0YXNldA0KZnVsbF9ITUEgPC0gcG9zdDIwMjAgJT4lIGJpbmRfcm93cyhwcmUyMDIwKSAlPiUgDQogIHNlbGVjdChzdWJhcHBsaWNhdGlvbklkZW50aWZpZXIsIGlkLCBwcm9ncmFtLCBmaXNjYWxZZWFyLCANCiAgICAgICAgIHN1YmFwcGxpY2FudFN0YXRlLCBiZW5lZml0aW5nQ291bnRpZXMsIGFwcGxpY2FudE5hbWUsDQogICAgICAgICBzdGF0dXMsIHRvdGFsU3ViYXBwbGljYXRpb25BbW91bnQsIHRvdGFsT2JsaWdhdGVkQW1vdW50LCBmZWRlcmFsU2hhcmVQZXJjZW50YWdlLCANCiAgICAgICAgIGJlbmVmaXRDb3N0UmF0aW8sIGZ1bmRpbmdDYXRlZ29yeSwgcHJpbWFyeUFjdGl2aXR5LCBwcm9qZWN0VHlwZSkgJT4lIA0KICBtdXRhdGUocHJvZ3JhbSA9IHN0cl9yZXBsYWNlX2FsbChwcm9ncmFtLCBjKCJCdWlsZGluZyBSZXNpbGllbnQgSW5mcmFzdHJ1Y3R1cmUgYW5kIENvbW11bml0aWVzIiA9ICJCUklDIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZsb29kIE1pdGlnYXRpb24gQXNzaXN0YW5jZSIgPSAiRk1BIikpKSAlPiUgDQogICMgcmVsYWJlbGluZyBkZWZ1bmN0IHByb2dyYW1zDQogIG11dGF0ZShwcm9ncmFtID0gc3RyX3JlcGxhY2VfYWxsKHByb2dyYW0sIGMoIlJGQyIgPSAiRk1BIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNSTCIgPSAiRk1BIikpKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIlBETSIgPSAiQlJJQyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyJMQlJJQyIgPSAiTFBETSIpKSkNCmBgYA0KDQpgYGB7cn0NCiNDUEkgY29udmVyc2lvbg0KbW9uZXl2YXJzIDwtIGMoInRvdGFsT2JsaWdhdGVkQW1vdW50IiwgInRvdGFsU3ViYXBwbGljYXRpb25BbW91bnQiKQ0KDQpmdWxsX0hNQSA8LSBhcHBseV9jcGkoYmFzZV95ZWFyPSIyMDIyIiwgZGY9ZnVsbF9ITUEsIA0KICAgICAgICAgICAgICAgICAgbW9uZXlfZmllbGRzPW1vbmV5dmFycywgeWVhcl9jb25jYXQ9YygiZmlzY2FsWWVhciIgPSAiWWVhciIpKQ0KDQpgYGANCg0KYGBge3J9DQojZ3JhcGggZGF0YSBmcmFtZQ0KZ2RmIDwtIGZ1bGxfSE1BICU+JSBncm91cF9ieShwcm9ncmFtLCBmaXNjYWxZZWFyKSAlPiUgc3VtbWFyaXplKG9ibGlnYXRlZCA9IHN1bSh0b3RhbE9ibGlnYXRlZEFtb3VudCksIGFwcF90b3RhbHMgPSBzdW0odG90YWxTdWJhcHBsaWNhdGlvbkFtb3VudCwgbmEucm09VFJVRSkpICU+JSANCiAgI2NvbnZlcnQgdG8gQklMTElPTlMNCiAgbXV0YXRlKG9ibGlnYXRlZCA9IG9ibGlnYXRlZCAvIDEwMDAwMDAwMDApDQpgYGANCg0KYGBge3J9DQpwIDwtIGdkZiAlPiUNCiAgZ2dwbG90KCBhZXMoeD1maXNjYWxZZWFyLCB5PW9ibGlnYXRlZCwgZmlsbD1mYWN0b3IocHJvZ3JhbSwgbGV2ZWxzPWMoIkhNR1AiLCAiRk1BIiwiUERNIiwiQlJJQyIsICJMUERNIikpKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDE5ODksIDIwMjMsIDMpKSArDQogICNnZW9tX3BvaW50KCkgKw0KICBnZ3RpdGxlKCJBbGwgRkVNQSBITUEgZnVuZGVkIHByb2plY3RzIGJ5IEZpc2NhbCBZZWFyIikgKw0KICB5bGFiKCIkQmlsbGlvbnMgKCQyMDIyKSIpICsNCiAgeGxhYigiRmlzY2FsIFllYXIiKSArDQogIGxhYnMoY2FwdGlvbj0iTm90ZTogRk1BIGluY2x1ZGVzIFJGQyAmIFNSTDsgQlJJQyBpbmNsdWRlcyBQRE0iLA0KICAgICAgIGZpbGw9InByb2dyYW0iKSArIA0KICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDIiKQ0KcA0KYGBgDQoNCiMjIyBIaXN0b3J5IG9mIFBETSAvIEJSSUMgRnVuZGluZyAgDQogIA0KKioqUERNIC8gQlJJQyBGVU5ESU5HOioqKiAgDQpCUklDIGlzIG9uZSBvZiB0aGUgcHJvZ3JhbXMgdGhhdCBDRFJacyBkZXNpZ25hdGlvbnMgd2lsbCBhZmZlY3QgZnVuZGluZyBmb3IuICANCiAgDQoqIFByaW9yIHRvIDIwMjA6ICpITUEgUHJvamVjdHMqICANCiAgKyBQcmUtMjAxOTogQlJJQyB3YXMgY2FsbGVkIHRoZSAicHJlLWRpc2FzdGVyIG1pdGlnYXRpb24iIChQRE0pIHByb2dyYW0gIA0KICArIDIwMTk6IHJlbmFtZWQgYXMgIkJSSUMiICAgIA0KKiAyMDIwIG9ud2FyZDogKkhNQSBTdWJhcHBsaWNhdGlvbnMqICANCg0KYGBge3J9DQpmdWxsX0JSSUMgPC0gZnVsbF9ITUEgJT4lIA0KICBmaWx0ZXIocHJvZ3JhbSA9PSAiUERNIiB8IHByb2dyYW0gPT0gIkxQRE0iIHwgcHJvZ3JhbSA9PSAiQlJJQyIpDQpgYGANCg0KDQpgYGB7cn0NCiMgZ3JhcGggZGF0YSBmcmFtZQ0KZ2RmIDwtIGZ1bGxfQlJJQyAlPiUgZ3JvdXBfYnkocHJvZ3JhbSwgZmlzY2FsWWVhcikgJT4lIHN1bW1hcml6ZShvYmxpZ2F0ZWQgPSBzdW0odG90YWxPYmxpZ2F0ZWRBbW91bnQpLCBhcHBfdG90YWxzID0gc3VtKHRvdGFsU3ViYXBwbGljYXRpb25BbW91bnQsIG5hLnJtPVRSVUUpKSAlPiUgDQogICMgY29udmVydCB0byBNSUxMSU9OUw0KICBtdXRhdGUob2JsaWdhdGVkID0gb2JsaWdhdGVkIC8gMTAwMDAwMCkNCmBgYA0KDQpgYGB7cn0NCnAgPC0gZ2RmICU+JQ0KICBnZ3Bsb3QoIGFlcyh4PWZpc2NhbFllYXIsIHk9b2JsaWdhdGVkLCBmaWxsPXByb2dyYW0pKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwMCwgMjAyMywgMikpICsNCiAgI2dlb21fcG9pbnQoKSArDQogIGdndGl0bGUoIlByZS1EaXNhc3RlciBNaXRpZ2F0aW9uICsgQnVpbGRpbmcgUmVzaWxpZW50IENvbW11bml0aWVzIGZ1bmRpbmcgYnkgRmlzY2FsIFllYXIiKSArDQogIHlsYWIoIiRNaWxsaW9ucyAobm9taW5hbCkiKSArDQogIHhsYWIoIkZpc2NhbCBZZWFyIikgKyANCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoIiNFNzhBQzMiLCAiI0E2RDg1NCIsICIjOERBMENCIikpDQogICNzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDIiKQ0KcA0KYGBgDQoNCg0KYGBge3J9DQojIEJSSUMgKyBDRFJaIG92ZXJsYXANCiMgZXN0aW1hdGUgcGVyIGNvdW50eSBiZW5lZml0cyBvZiBCUklDIGZ1bmRpbmcgKGZ1bmRpbmcgaXMgZXF1YWxseSBkaXN0cmlidXRlZCBhY3Jvc3MgImJlbmVmaXRpbmcgY291bnRpZXMiKQ0KIyBmIDwtIEJSSUNfcG9zdDIwMjAgJT4lIA0KIyAgIHNlbGVjdChzdWJhcHBsaWNhdGlvbklkZW50aWZpZXIsIHN1YmFwcGxpY2FudFN0YXRlLCBiZW5lZml0aW5nQ291bnRpZXMsIHRvdGFsT2JsaWdhdGVkQW1vdW50LCBmZWRlcmFsU2hhcmVQZXJjZW50YWdlKSAlPiUgDQojICAgc2VwYXJhdGVfbG9uZ2VyX2RlbGltKGJlbmVmaXRpbmdDb3VudGllcywgZGVsaW0gPSAiOyAiKSAlPiUgDQojICAgZ3JvdXBfYnkoc3ViYXBwbGljYXRpb25JZGVudGlmaWVyKSAlPiUgDQojICAgbXV0YXRlKGRpc3RyaWJ1dGVkX2Ftb3VudCA9IHRvdGFsT2JsaWdhdGVkQW1vdW50IC8gbigpKSAlPiUgDQojICAgdW5ncm91cCgpICU+JSANCiMgICBtdXRhdGUoc3ViYXBwbGljYW50U3RhdGUgPSBzdHJfdG9fdGl0bGUoc3ViYXBwbGljYW50U3RhdGUpLA0KIyAgICAgICAgICBiZW5lZml0aW5nQ291bnRpZXMgPSBzdHJfdG9fdGl0bGUoYmVuZWZpdGluZ0NvdW50aWVzKSkgJT4lIA0KIyAgIG11dGF0ZShiZW5lZml0aW5nQ291bnRpZXMgPSBzdHJfcmVtb3ZlX2FsbChiZW5lZml0aW5nQ291bnRpZXMsICIgQ291bnR5IikpICU+JSANCiMgICBncm91cF9ieShzdWJhcHBsaWNhbnRTdGF0ZSwgYmVuZWZpdGluZ0NvdW50aWVzKSAlPiUgDQojICAgc3VtbWFyaXplKHN1bV9kaXN0cmlidXRlZF9hbW91bnQgPSBzdW0oZGlzdHJpYnV0ZWRfYW1vdW50KSkNCiMgDQojICNzdW1tYXJpemUgIyBvZiBjZHJ6IHRyYWN0cyBpbiBjb3VudHkNCiMgYyA8LSBjZHJ6ICU+JSBncm91cF9ieShTdGF0ZSwgQ291bnR5KSAlPiUgc3VtbWFyaXplKG5fdHJhY3RzID0gbigpKQ0KIyANCiMgIyBqb2luIGNkcnogdHJhY3QgY291bnQgKyBmdW5kaW5nIGVzdGltYXRlcw0KIyBjZiA8LSBmICU+JSBmdWxsX2pvaW4oYywgYnk9Yygic3ViYXBwbGljYW50U3RhdGUiID0gIlN0YXRlIiwgImJlbmVmaXRpbmdDb3VudGllcyIgPSAiQ291bnR5IikpDQpgYGANCg0KDQpgYGB7cn0NCiMgQlJJQyArIENEUlogb3ZlcmxhcA0KIyBlc3RpbWF0ZSBwZXIgY291bnR5IGJlbmVmaXRzIG9mIEJSSUMgZnVuZGluZyAoZnVuZGluZyBpcyBlcXVhbGx5IGRpc3RyaWJ1dGVkIGFjcm9zcyAiYmVuZWZpdGluZyBjb3VudGllcyIpDQpmIDwtIGZ1bGxfQlJJQyAlPiUgDQogIHNlbGVjdChzdWJhcHBsaWNhdGlvbklkZW50aWZpZXIsIHN1YmFwcGxpY2FudFN0YXRlLCBiZW5lZml0aW5nQ291bnRpZXMsIHRvdGFsT2JsaWdhdGVkQW1vdW50LCBmZWRlcmFsU2hhcmVQZXJjZW50YWdlKSAlPiUgDQogIHNlcGFyYXRlX2xvbmdlcl9kZWxpbShiZW5lZml0aW5nQ291bnRpZXMsIGRlbGltID0gIjsgIikgJT4lIA0KICBncm91cF9ieShzdWJhcHBsaWNhdGlvbklkZW50aWZpZXIpICU+JSANCiAgbXV0YXRlKGRpc3RyaWJ1dGVkX2Ftb3VudCA9IHRvdGFsT2JsaWdhdGVkQW1vdW50IC8gbigpKSAlPiUgDQogIHVuZ3JvdXAoKSAlPiUgDQogIG11dGF0ZShzdWJhcHBsaWNhbnRTdGF0ZSA9IHN0cl90b190aXRsZShzdWJhcHBsaWNhbnRTdGF0ZSksDQogICAgICAgICBiZW5lZml0aW5nQ291bnRpZXMgPSBzdHJfdG9fdGl0bGUoYmVuZWZpdGluZ0NvdW50aWVzKSkgJT4lIA0KICBtdXRhdGUoYmVuZWZpdGluZ0NvdW50aWVzID0gc3RyX3JlbW92ZV9hbGwoYmVuZWZpdGluZ0NvdW50aWVzLCAiIENvdW50eSIpKSAlPiUgDQogIGdyb3VwX2J5KHN1YmFwcGxpY2FudFN0YXRlLCBiZW5lZml0aW5nQ291bnRpZXMpICU+JSANCiAgc3VtbWFyaXplKHN1bV9kaXN0cmlidXRlZF9hbW91bnQgPSBzdW0oZGlzdHJpYnV0ZWRfYW1vdW50KSkNCg0KI3N1bW1hcml6ZSAjIG9mIGNkcnogdHJhY3RzIGluIGNvdW50eQ0KYyA8LSBjZHJ6ICU+JSBncm91cF9ieShTdGF0ZSwgQ291bnR5KSAlPiUgc3VtbWFyaXplKG5fdHJhY3RzID0gbigpKQ0KDQojIGpvaW4gY2RyeiB0cmFjdCBjb3VudCArIGZ1bmRpbmcgZXN0aW1hdGVzDQpjZiA8LSBmICU+JSBmdWxsX2pvaW4oYywgYnk9Yygic3ViYXBwbGljYW50U3RhdGUiID0gIlN0YXRlIiwgImJlbmVmaXRpbmdDb3VudGllcyIgPSAiQ291bnR5IikpDQpgYGANCg0KDQpgYGB7cn0NCiMgSk9JTiB0byBhbGwgY291bnRpZXMNCiNwdWxsIGZ1bGwgbGlzdCBvZiBjb3VudGllcw0KYWxsX2NvdW50aWVzIDwtIHRpZ3Jpczo6Y291bnRpZXMoc3RhdGU9c3RhdGVfRklQUywgY2I9VFJVRSkgJT4lDQogIHRpZ3Jpczo6c2hpZnRfZ2VvbWV0cnkoKQ0KDQpjb3VudGllc19jZiA8LSBhbGxfY291bnRpZXMgJT4lIA0KICBsZWZ0X2pvaW4oY2YsIGJ5PWMoIlNUQVRFX05BTUUiID0gInN1YmFwcGxpY2FudFN0YXRlIiwgIk5BTUUiID0gImJlbmVmaXRpbmdDb3VudGllcyIpKSAlPiUgDQogIG11dGF0ZShzdW1fYnVja2V0cyA9IG50aWxlKHN1bV9kaXN0cmlidXRlZF9hbW91bnQsIDEwKSkgJT4lIA0KICBtdXRhdGUoc3VtX21pbGwgPSBzdW1fZGlzdHJpYnV0ZWRfYW1vdW50LzEwMDAwMDApDQoNCmBgYA0KDQoNCiMjIyBDb21wYXJpbmcgcHJldmlvdXMgZnVuZGluZyB2cy4gQ0RSWiBkZXNpZ25hdGlvbnMgIA0KKiBFc3RpbWF0aW9ucyBhdCBjb3VudHkgbGV2ZWwgIA0KKiBCUklDIGZ1bmRpbmcgcG9zdCBGWTIwMjAgYXR0cmlidXRlZCB0byBhbGwgImJlbmVmaXR0aW5nIGNvdW50aWVzIi4gV2hlbiBtdWx0aXBsZSBhcmUgbGlzdGVkLCB0b3RhbCBvYmxpZ2F0ZWQgZnVuZHMgYXJlIGVxdWFsbHkgZGlzdHJpYnV0ZWQgIA0KKiBQZXIgQ291bnR5IEZ1bmRpbmcgc3VtbWVkIGFjcm9zcyBhbGwgZmlzY2FsIHllYXJzIChGWTIwMDAgLSBGWTIwMjEpICANCiogQ0RSWiBzdW1tZWQgYXMgYSBjb3VudCB3aXRoaW4gdGhlIGNvdW50eSAgDQoqIFNvbWUgaGlzdG9yaWNhbCByZWNvcmRzIHByZSBGWTIwMjAgZG8gbm90IGhhdmUgYSAiYmVuZWZpdHRpbmcgY291bnR5IiBkZXNpZ25hdGVkLiBJJ3ZlIG9taXR0ZWQgdGhvc2UgZm9yIG5vdy4gDQoNCmBgYHtyfQ0KIyBjb3VudGllc19jZiAlPiUNCiMgICBnZ3Bsb3QoIGFlcyh4PXN1bV9taWxsKSkgKw0KIyAgICAgZ2VvbV9oaXN0b2dyYW0oYmlucz00MCwgZmlsbD0nc2t5Ymx1ZScsIGNvbG9yPScjNjliM2EyJykNCmBgYA0KDQpgYGB7ciwgZmlnLndpZHRoPTEwLGZpZy5oZWlnaHQ9MTF9DQpsaWJyYXJ5KHZpcmlkaXMsIGNvd3Bsb3QpDQojY29sLnJhbXAgPC0gdmlyaWRpcyhuID0gMTApDQojY291bnRpZXNfY2YgPC0gY291bnRpZXNfY2YgJT4lIG11dGF0ZShzdW1fbWlsbCA9IHJlcGxhY2VfbmEoc3VtX21pbGwsMCkpDQoNCnFhIDwtIHF1YW50aWxlKGNvdW50aWVzX2NmJHN1bV9taWxsLCBjKDAsIDAuMSwgMC4yLCAwLjMsIDAuNCwgMC41LCAwLjYsIDAuNywgMC44LCAwLjksMS4wKSwgbmEucm09VFJVRSkNCmNvdW50aWVzX2NmJHN1bV9taWxsX3EgPC0gY3V0KGNvdW50aWVzX2NmJHN1bV9taWxsLCBxYSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIjAtMTAlIiwgIjIwJSIsICIzMCUiLCAiNDAlIiwgIjUwJSIsICI2MCUiLCAiNzAlIiwgIjgwJSIsICI5MCUiLCAiPjkwJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZS5sb3dlc3QgPSBUUlVFKQ0KY29sLnBhbCA8LSBjb2xvclJhbXBQYWxldHRlKGMoIiM1NTk5OTkiLCAiZ3JleTgwIiwgIiNCQjY1MEIiKSkoMTApDQoNCg0KcDEgPC0gZ2dwbG90KGRhdGE9Y291bnRpZXNfY2YsIGFlcyhmaWxsPXN1bV9taWxsX3EpKSArIA0KICBnZW9tX3NmKGNvbG9yPU5BKSArDQogIHRoZW1lX3ZvaWQoKSArIA0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb2wucGFsLCBuYS52YWx1ZSA9ICJncmV5NTAiKSArDQogICNzY2FsZV9maWxsX3ZpcmlkaXMoKSArDQogIGxhYnMoZmlsbD0iQmVuZWZpdHNcblBlcmNlbnRpbGUiKSArIA0KICB0aGVtZShsZWdlbmQua2V5LnNpemUgPSB1bml0KDAuNSwgdW5pdHM9ImNtIiksIA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSkNCg0KcDIgPC0gZ2dwbG90KGRhdGE9Y291bnRpZXNfY2YsIGFlcyhmaWxsPXN1bV9taWxsKSkgKyANCiAgZ2VvbV9zZihjb2xvcj1OQSkgKw0KICB0aGVtZV92b2lkKCkgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzKGxpbWl0cyA9IGMoMCwgMTApLCBvb2IgPSBzY2FsZXM6OnNxdWlzaCkgKyANCiAgbGFicyhmaWxsPSJCZW5lZml0c1xuTWlsbGlvbnMgKCQyMDIyKSIpICsgDQogIHRoZW1lKGxlZ2VuZC5rZXkuc2l6ZSA9IHVuaXQoMC41LCB1bml0cz0iY20iKSwgDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApKQ0KDQojIHRpdGxlX2dnIDwtIGdncGxvdCgpICsgDQojICAgbGFicyh0aXRsZSA9ICJUb3RhbCBGRU1BIFBETStCUklDIEZlZGVyYWwgRnVuZGluZyBCZW5lZml0cywgYnkgQ291bnR5IiwgDQojICAgICAgICBzdWJ0aXRsZSA9ICJPYmxpZ2F0ZWQgcHJvamVjdCBmdW5kaW5nIGZyb20gRlkyMDAwIC0gRlkyMDIxIikNCg0KcHRpdGxlIDwtIGNvd3Bsb3Q6OmdnZHJhdygpICsgDQogIGNvd3Bsb3Q6OmRyYXdfbGFiZWwoIlRvdGFsIEZFTUEgUERNK0JSSUMgRmVkZXJhbCBGdW5kaW5nIEJlbmVmaXRzLCBieSBDb3VudHkiKSArDQogICNjb3dwbG90OjpkcmF3X2xhYmVsKCJPYmxpZ2F0ZWQgcHJvamVjdCBmdW5kaW5nIGZyb20gRlkyMDAwIC0gRlkyMDIxIikgKyANCiAgdGhlbWUocGxvdC5tYXJnaW4gPSBtYXJnaW4oMCwgMCwgMCwgNykpDQoNCmNvd3Bsb3Q6OnBsb3RfZ3JpZChwdGl0bGUsIHAxLCBwMiwgbmNvbD0xLCByZWxfaGVpZ2h0cyA9IGMoMC4xLCAxLCAxKSkNCg0KYGBgDQoNCg0KDQpgYGB7ciwgZmlnLndpZHRoPTEwLCBmaWcuaGVpZ2h0PTExfQ0KcDEgPC0gZ2dwbG90KGRhdGE9Y291bnRpZXNfY2YsIGFlcyhmaWxsPWZhY3RvcihuX3RyYWN0cykpKSArIA0KICBnZW9tX3NmKGNvbG9yPU5BKSArDQogIHRoZW1lX3ZvaWQoKSArIA0KICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIllsT3JSZCIsIG5hLnZhbHVlID0gImdyZXk1MCIpICsNCiAgICAjc2NhbGVfZmlsbF9ncmFkaWVudDIoKSArIA0KICBsYWJzKGZpbGw9IiMgQ0RSWnMgVHJhY3RzIikgKyANCiAgdGhlbWUobGVnZW5kLmtleS5zaXplID0gdW5pdCgwLjUsIHVuaXRzPSJjbSIpLCANCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCkpDQoNCiMgdGl0bGVfZ2cgPC0gZ2dwbG90KCkgKyANCiMgICBsYWJzKHRpdGxlID0gIlRvdGFsIEZFTUEgUERNK0JSSUMgRmVkZXJhbCBGdW5kaW5nIEJlbmVmaXRzLCBieSBDb3VudHkiLCANCiMgICAgICAgIHN1YnRpdGxlID0gIk9ibGlnYXRlZCBwcm9qZWN0IGZ1bmRpbmcgZnJvbSBGWTIwMDAgLSBGWTIwMjEiKQ0KDQpwdGl0bGUgPC0gY293cGxvdDo6Z2dkcmF3KCkgKyANCiAgY293cGxvdDo6ZHJhd19sYWJlbCgiQ291bnQgb2YgQ0RSWi1kZXNpZ25hdGVkIFRyYWN0cywgYnkgQ291bnR5IikgKw0KICAjY293cGxvdDo6ZHJhd19sYWJlbCgiT2JsaWdhdGVkIHByb2plY3QgZnVuZGluZyBmcm9tIEZZMjAwMCAtIEZZMjAyMSIpICsgDQogIHRoZW1lKHBsb3QubWFyZ2luID0gbWFyZ2luKDAsIDAsIDAsIDcpKQ0KDQpjb3dwbG90OjpwbG90X2dyaWQocHRpdGxlLCBwMSwgbmNvbD0xLCByZWxfaGVpZ2h0cyA9IGMoMC4xLCAxKSkNCg0KYGBgDQoNCg0K