Introduction

2019 and 2020 were tumultuous years for Hong Kong. The city, which is a special administrative region of China, saw massive protests following the proposal of a bill that would have allowed for extraditions to mainland China.

This markdown shows how the number of protests and riots in Hong Kong following the extradition bill has changed since the protests started on March 31, 2019. It also shows how the trend of violence against civilians — sometimes, but not always, committed by state actors— has changed since that date.

About the data

The data is from the Armed Conflict Location & Event Data Project (ACLED). ACLED has several regional datasets — I used the East Asia Pacific one, which can be downloaded from ACLED’s website.

Here are the data dictionary and event definitions, as provided by ACLED.

Extradition Protests and Riots

There have been 464 protests and riots in Hong Kong over the extradition bill since March 31, 2019. Take a look:

Declination in protests and riots

In 2019 and 2020, the city saw roughly 200 protests and riots related to the extradition bill. But since then, the unrest has settled, with far fewer protests in 2021 and none yet in 2022.

Case Study: The Civil Human Rights Front

The Civil Human Rights Front, or CHRF, was one of the most prominent pro-democracy protest groups in Hong Kong. It organized the first major protest following the Extradition Bill, on March 31, 2019, with between 5,200 and 12,000 people in attendance, according to the ACLED data. And in June 2019, the group organized several marches that drew between a quarter of a million and two million people.

But CHRF disbanded in August 2021 less than an year after the implementation of China’s National Security Law. Several of the group’s leaders had been arrested based on charges related to 2019 protests and the National Security Law, and the group as a whole was being investigated by the police, according to The Wall Street Journal, promoting the dissolution of the group. CHRF went from being involved in dozens of protests in 2019 to none in 2022.

It’s unclear why there were far fewer protests in 2020, but it’s likely because that was following the arrest of several CHRF leaders under the National Security Law as well as the government’s rejection of CHRF’s applications to hold legal demonstrations in public spaces.

Violence Against Civilians

There have been 33 acts of violence against civilians in Hong Kong since March 31, 2019. Many of the events have a clear tie to the pro-democracy movement or pro-China support, such as the July 23, 2020 attack on a pro-democracy cafe owner with a screwdriver, which led the victim to be hospitalized for his injuries.

For those that don’t explicitly state such a connection, it’s impossible to tell whether they were connected or not, as the information may have just been omitted.For example, on May 11, 2021, a reporter from the Epoch Times was attacked. The data does not say why; However, The Epoch Times is a far-right publication associated with a religious group that is banned in mainland China, so it’s possible that the attacker was motivated by pro-China ideology.

Declination in acts of violence

Acts of violence against civilians peaked in 2019 and have steadily declined each year since, with no such acts yet in 2022.

Methodology

As a first step, I filtered the ACLED East Asia dataset to only include entries from China, which includes Hong Kong.

For the protest and riot data, I filtered that dataset for entries that were listed as event type “Protests” or “Riots.” Then, to make sure the data only included protests and riots related to the Extradition Bill, I filtered the data to include only events where the notes included the words “democracy,” “extradition,” “independence” or “pro-democracy.” This got rid of all unrelated protests and riots.

As for the violence against civilians data, because there were only 33 rows of data, instead of filtering for keywords, I just read each of the rows. Most of the 33 entry had explicit ties to the pro-democracy movement. Of the few that didn’t, they still had some type of political connection, making it impossible to know if they were tied to the movement or not. To be on the safe side, and because there were so few of this type of entry, I kept them in the data.

In order to study the CHRF protests, I created the searchable table of protests and riots, above, to search for the keyword “CHRF”. This enabled me to read the descriptions of each of the protests relavant to the group.

To make the bar chart of the CHRF protests, I used the same code as the bar chart for all of the protests and riots related to the Extradition Bill, but filtered for the keywords “CHRF” and “Civil Human Rights Front.”

LS0tCnRpdGxlOiAiQW5hbHl6aW5nIHRoZSBIb25nIEtvbmcgcHJvdGVzdHMgdXNpbmcgQUNMRUQgZGF0YSIKYXV0aG9yOiAiSnVsaWV0dGUgUmlobCIKZGF0ZTogIjQvMjQvMjAyMiIKb3V0cHV0OiAKICAgaHRtbF9kb2N1bWVudDoKICAgICAgdGhlbWU6IGNlcnVsZWFuCiAgICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgICAgY29kZV9mb2xkaW5nOiBzaG93CiAgICAgIHRvYzogdHJ1ZQogICAgICB0b2NfZmxvYXQ6IHRydWUKLS0tCgojIEludHJvZHVjdGlvbgoKMjAxOSBhbmQgMjAyMCB3ZXJlIHR1bXVsdHVvdXMgeWVhcnMgZm9yIEhvbmcgS29uZy4gVGhlIGNpdHksIHdoaWNoIGlzIGEgc3BlY2lhbCBhZG1pbmlzdHJhdGl2ZSByZWdpb24gb2YgQ2hpbmEsIHNhdyBbbWFzc2l2ZSBwcm90ZXN0c10oaHR0cHM6Ly93d3cucmV1dGVycy5jb20vYXJ0aWNsZS91cy1ob25na29uZy1wcm90ZXN0cy10aW1lbGluZS90aW1lbGluZS1rZXktZGF0ZXMtaW4taG9uZy1rb25ncy1hbnRpLWdvdmVybm1lbnQtcHJvdGVzdHMtaWRVU0tCTjIzNjA4TykgZm9sbG93aW5nIHRoZSBwcm9wb3NhbCBvZiBhIGJpbGwgdGhhdCB3b3VsZCBoYXZlIGFsbG93ZWQgZm9yIGV4dHJhZGl0aW9ucyB0byBtYWlubGFuZCBDaGluYS4KClRoaXMgbWFya2Rvd24gc2hvd3MgaG93IHRoZSBudW1iZXIgb2YgcHJvdGVzdHMgYW5kIHJpb3RzIGluIEhvbmcgS29uZyBmb2xsb3dpbmcgdGhlIGV4dHJhZGl0aW9uIGJpbGwgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByb3Rlc3RzIHN0YXJ0ZWQgb24gTWFyY2ggMzEsIDIwMTkuIEl0IGFsc28gc2hvd3MgaG93IHRoZSB0cmVuZCBvZiB2aW9sZW5jZSBhZ2FpbnN0IGNpdmlsaWFucyAtLS0gc29tZXRpbWVzLCBidXQgbm90IGFsd2F5cywgY29tbWl0dGVkIGJ5IHN0YXRlIGFjdG9ycy0tLSBoYXMgY2hhbmdlZCBzaW5jZSB0aGF0IGRhdGUuCgojIyMgQWJvdXQgdGhlIGRhdGEKClRoZSBkYXRhIGlzIGZyb20gdGhlIFtBcm1lZCBDb25mbGljdCBMb2NhdGlvbiAmIEV2ZW50IERhdGEgUHJvamVjdCAoQUNMRUQpXShodHRwczovL2FjbGVkZGF0YS5jb20vIy9kYXNoYm9hcmQpLiBBQ0xFRCBoYXMgc2V2ZXJhbCByZWdpb25hbCBkYXRhc2V0cyAtLS0gSSB1c2VkIHRoZSBFYXN0IEFzaWEgUGFjaWZpYyBvbmUsIHdoaWNoIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gQUNMRUQncyB3ZWJzaXRlLgoKSGVyZSBhcmUgdGhlIFtkYXRhIGRpY3Rpb25hcnldKGh0dHBzOi8vYWNsZWRkYXRhLmNvbS9hY2xlZGRhdGFuZXcvL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIxLzExL0FDTEVEX0NvZGVib29rX3YxX0phbnVhcnktMjAyMS5wZGYpIGFuZCBbZXZlbnQgZGVmaW5pdGlvbnNdKGh0dHBzOi8vYWNsZWRkYXRhLmNvbS9kb3dubG9hZC8zNTEzNC8pLCBhcyBwcm92aWRlZCBieSBBQ0xFRC4KCmBgYHtyIGluY2x1ZGU9RkFMU0V9CkFDTEVEX0FzaWEgPC0KcmVhZC5jc3YoIjE5MDAtMDEtMDEtMjAyMi0wNC0wNi1FYXN0X0FzaWEuY3N2IikKYGBgCgpgYGB7ciBpbmNsdWRlPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShqYW5pdG9yKQpsaWJyYXJ5KGx1YnJpZGF0ZSkKbGlicmFyeShkcGx5cikKbGlicmFyeShyZWFjdGFibGUpCmBgYAoKYGBge3IgaW5jbHVkZT1GQUxTRX0KQUNMRURfQ2hpbmFfSEsgPC0KQUNMRURfQXNpYSAlPiUKICBmaWx0ZXIgKGNvdW50cnkgPT0gIkNoaW5hIikgJT4lIAogIG11dGF0ZSAoaG9uZ19rb25nID0gCiAgICAgICAgICAgIGlmX2Vsc2UgKCBhZG1pbjEgJWluJQogICAgICAgICAgICAgICAgICAgICAgIGMoIkhvbmcgS29uZyIpLAogICAgICAgICAgICAgICAgICAgICAieWVzIiwibm8iKSwKICAgICAgICAgIG5ld19kYXRlID0gYXNfZGF0ZShldmVudF9kYXRlLCBmb3JtYXQ9IiVkICVCICVZIikKICAgICAgICAgICkgJT4lIAogIGZpbHRlciAobmV3X2RhdGUgPj0gIjIwMTktMDMtMzEiKQogIApgYGAKCiMgRXh0cmFkaXRpb24gUHJvdGVzdHMgYW5kIFJpb3RzCgpUaGVyZSBoYXZlIGJlZW4gNDY0IHByb3Rlc3RzIGFuZCByaW90cyBpbiBIb25nIEtvbmcgb3ZlciB0aGUgZXh0cmFkaXRpb24gYmlsbCBzaW5jZSBNYXJjaCAzMSwgMjAxOS4gVGFrZSBhIGxvb2s6CgpgYGB7ciBlY2hvPUZBTFNFfQpBQ0xFRF9DaGluYV9IS19Qcm90ZXN0cyA8LQogIEFDTEVEX0NoaW5hX0hLICU+JSAKICBmaWx0ZXIgKGhvbmdfa29uZyA9PSAieWVzIikgJT4lIAogIGZpbHRlciAoZXZlbnRfdHlwZSA9PSAiUHJvdGVzdHMiIHwgZXZlbnRfdHlwZSA9PSAiUmlvdHMiKSAlPiUgCiAgZmlsdGVyIChzdHJfZGV0ZWN0IAogICAgICAgICAgKG5vdGVzLCAiZGVtb2NyYWN5fGV4dHJhZGl0aW9ufGluZGVwZW5kZW5jZXxwcm8tZGVtb2NyYWN5IikpICU+JSAKICBzZWxlY3QgKGV2ZW50X3R5cGUsIGV2ZW50X2RhdGUsIG5vdGVzKQoKcmVhY3RhYmxlIChBQ0xFRF9DaGluYV9IS19Qcm90ZXN0cywKICAgICAgICAgICBzZWFyY2hhYmxlID0gVFJVRSwKICAgICAgICAgICBkZWZhdWx0UGFnZVNpemUgPSA1LAogICAgICAgICAgIGNvbHVtbnMgPSBsaXN0KAogICAgICAgICAgICAgZXZlbnRfdHlwZSA9IGNvbERlZihuYW1lID0gIkV2ZW50IFR5cGUiKSwKICAgICAgICAgICAgIGV2ZW50X2RhdGUgPSBjb2xEZWYobmFtZSA9ICJEYXRlIiksCiAgICAgICAgICAgICBub3RlcyA9IGNvbERlZihuYW1lPSJEZXNjcmlwdGlvbiIsIG1pbldpZHRoID0gNTAwKQogICAgICAgICAgICApCiAgICAgICAgICAgKQoKYGBgCgojIyBEZWNsaW5hdGlvbiBpbiBwcm90ZXN0cyBhbmQgcmlvdHMKCkluIDIwMTkgYW5kIDIwMjAsIHRoZSBjaXR5IHNhdyByb3VnaGx5IDIwMCBwcm90ZXN0cyBhbmQgcmlvdHMgcmVsYXRlZCB0byB0aGUgZXh0cmFkaXRpb24gYmlsbC4gQnV0IHNpbmNlIHRoZW4sIHRoZSB1bnJlc3QgaGFzIHNldHRsZWQsIHdpdGggZmFyIGZld2VyIHByb3Rlc3RzIGluIDIwMjEgYW5kIG5vbmUgeWV0IGluIDIwMjIuCgpgYGB7ciBlY2hvPUZBTFNFfQpwcm90ZXN0c19ieV95ZWFyIDwtCkFDTEVEX0NoaW5hX0hLICU+JSAKICBmaWx0ZXIoaG9uZ19rb25nID09ICJ5ZXMiKSAlPiUgCiAgZmlsdGVyKGV2ZW50X3R5cGUgPT0gIlByb3Rlc3RzIiB8IGV2ZW50X3R5cGUgPT0gIlJpb3RzIikgJT4lIAogIGZpbHRlciAoc3RyX2RldGVjdCAKICAgICAgICAgIChub3RlcywgImRlbW9jcmFjeXxleHRyYWRpdGlvbnxpbmRlcGVuZGVuY2V8cHJvLWRlbW9jcmFjeSIpKQogIApgYGAKCmBgYHtyIGVjaG89RkFMU0V9CmxpYnJhcnkoZ2dwbG90MikKCmdncGxvdChwcm90ZXN0c19ieV95ZWFyLAogICAgICAgIGFlcygKICAgICAgICAgIHg9eWVhcgogICAgICAgICkpICsKICBnZW9tX2JhcihmaWxsID0gImRhcmt0dXJxdW9pc2UiLCBjb2xvciA9ICJibGFjayIpICsKICBnZ3RpdGxlKCJIb25nIEtvbmcgZXh0cmFkaXRpb24gcHJvdGVzdHMgYnkgeWVhciIpICsgCiAgbGFicyh5PSAiTnVtYmVyIG9mIFByb3Rlc3RzIiwgeCA9ICJZZWFyIikKICAKYGBgCgojIyBDYXNlIFN0dWR5OiBUaGUgQ2l2aWwgSHVtYW4gUmlnaHRzIEZyb250CgpUaGUgQ2l2aWwgSHVtYW4gUmlnaHRzIEZyb250LCBvciBDSFJGLCB3YXMgb25lIG9mIHRoZSBtb3N0IHByb21pbmVudCBwcm8tZGVtb2NyYWN5IHByb3Rlc3QgZ3JvdXBzIGluIEhvbmcgS29uZy4gSXQgb3JnYW5pemVkIHRoZSBmaXJzdCBtYWpvciBwcm90ZXN0IGZvbGxvd2luZyB0aGUgRXh0cmFkaXRpb24gQmlsbCwgb24gTWFyY2ggMzEsIDIwMTksIHdpdGggYmV0d2VlbiA1LDIwMCBhbmQgMTIsMDAwIHBlb3BsZSBpbiBhdHRlbmRhbmNlLCBhY2NvcmRpbmcgdG8gdGhlIEFDTEVEIGRhdGEuIEFuZCBpbiBKdW5lIDIwMTksIHRoZSBncm91cCBvcmdhbml6ZWQgc2V2ZXJhbCBtYXJjaGVzIHRoYXQgZHJldyBiZXR3ZWVuIGEgcXVhcnRlciBvZiBhIG1pbGxpb24gYW5kIHR3byBtaWxsaW9uIHBlb3BsZS4gCgpCdXQgQ0hSRiBbZGlzYmFuZGVkIGluIEF1Z3VzdCAyMDIxXShodHRwczovL3d3dy53c2ouY29tL2FydGljbGVzL2dyb3VwLWJlaGluZC1zb21lLW9mLWhvbmcta29uZ3MtYmlnZ2VzdC1wcm90ZXN0cy10by1kaXNiYW5kLTExNjI5MDE3MDQ5KSBsZXNzIHRoYW4gYW4geWVhciBhZnRlciB0aGUgaW1wbGVtZW50YXRpb24gb2YgQ2hpbmEncyBOYXRpb25hbCBTZWN1cml0eSBMYXcuIFNldmVyYWwgb2YgdGhlIGdyb3VwJ3MgbGVhZGVycyBoYWQgYmVlbiBhcnJlc3RlZCBiYXNlZCBvbiBjaGFyZ2VzIHJlbGF0ZWQgdG8gMjAxOSBwcm90ZXN0cyBhbmQgdGhlIE5hdGlvbmFsIFNlY3VyaXR5IExhdywgYW5kIHRoZSBncm91cCBhcyBhIHdob2xlIHdhcyBiZWluZyBpbnZlc3RpZ2F0ZWQgYnkgdGhlIHBvbGljZSwgYWNjb3JkaW5nIHRvIFRoZSBXYWxsIFN0cmVldCBKb3VybmFsLCBwcm9tb3RpbmcgdGhlIGRpc3NvbHV0aW9uIG9mIHRoZSBncm91cC4gQ0hSRiB3ZW50IGZyb20gYmVpbmcgaW52b2x2ZWQgaW4gZG96ZW5zIG9mIHByb3Rlc3RzIGluIDIwMTkgdG8gbm9uZSBpbiAyMDIyLiAKCkl0J3MgdW5jbGVhciB3aHkgdGhlcmUgd2VyZSBmYXIgZmV3ZXIgcHJvdGVzdHMgaW4gMjAyMCwgYnV0IGl0J3MgbGlrZWx5IGJlY2F1c2UgdGhhdCB3YXMgZm9sbG93aW5nIHRoZSBhcnJlc3Qgb2Ygc2V2ZXJhbCBDSFJGIGxlYWRlcnMgdW5kZXIgdGhlIE5hdGlvbmFsIFNlY3VyaXR5IExhdyBhcyB3ZWxsIGFzIHRoZSBbZ292ZXJubWVudCdzIHJlamVjdGlvbiBvZiBDSFJGJ3MgYXBwbGljYXRpb25zXShodHRwczovL3d3dy5jbm4uY29tLzIwMjEvMDgvMTUvYXNpYS9ob25nLWtvbmctY2hyZi1kaXNiYW5kcy1pbnRsLWhuay9pbmRleC5odG1sKSB0byBob2xkIGxlZ2FsIGRlbW9uc3RyYXRpb25zIGluIHB1YmxpYyBzcGFjZXMuCgpgYGB7ciBlY2hvPUZBTFNFfQpDSFJGX2RhdGEgPC0KICBBQ0xFRF9DaGluYV9ISyAlPiUgCiAgZmlsdGVyIChob25nX2tvbmcgPT0gInllcyIpICU+JSAKICBmaWx0ZXIgKGV2ZW50X3R5cGUgPT0gIlByb3Rlc3RzIiB8IGV2ZW50X3R5cGUgPT0gIlJpb3RzIikgJT4lIAogIGZpbHRlciAoc3RyX2RldGVjdCAKICAgICAgICAgIChub3RlcywgIkNIUkZ8Q2l2aWwgSHVtYW4gUmlnaHRzIEZyb250IikpICU+JSAKICBzZWxlY3QgKGV2ZW50X3R5cGUsIHllYXIsIG5vdGVzKQoKZ2dwbG90KENIUkZfZGF0YSwKICAgICAgICBhZXMoCiAgICAgICAgICB4PXllYXIKICAgICAgICApKSArCiAgZ2VvbV9iYXIoZmlsbCA9ICJjb3JhbCIsIGNvbG9yID0gImJsYWNrIikgKwogIGdndGl0bGUoIlByb3Rlc3RzIGFuZCBSaW90cyBpbnZvbHZpbmcgQ0hSRiBieSB5ZWFyIikgKyAKICBsYWJzKHk9ICJQcm90ZXN0cyBhbmQgUmlvdHMiLCB4ID0gIlllYXIiKQoKYGBgCgoKIyBWaW9sZW5jZSBBZ2FpbnN0IENpdmlsaWFucwoKVGhlcmUgaGF2ZSBiZWVuIDMzIGFjdHMgb2YgdmlvbGVuY2UgYWdhaW5zdCBjaXZpbGlhbnMgaW4gSG9uZyBLb25nIHNpbmNlIE1hcmNoIDMxLCAyMDE5LiBNYW55IG9mIHRoZSBldmVudHMgaGF2ZSBhIGNsZWFyIHRpZSB0byB0aGUgcHJvLWRlbW9jcmFjeSBtb3ZlbWVudCBvciBwcm8tQ2hpbmEgc3VwcG9ydCwgc3VjaCBhcyB0aGUgSnVseSAyMywgMjAyMCBhdHRhY2sgb24gYSBwcm8tZGVtb2NyYWN5IGNhZmUgb3duZXIgd2l0aCBhIHNjcmV3ZHJpdmVyLCB3aGljaCBsZWQgdGhlIHZpY3RpbSB0byBiZSBob3NwaXRhbGl6ZWQgZm9yIGhpcyBpbmp1cmllcy4KCkZvciB0aG9zZSB0aGF0IGRvbid0IGV4cGxpY2l0bHkgc3RhdGUgc3VjaCBhIGNvbm5lY3Rpb24sIGl0J3MgaW1wb3NzaWJsZSB0byB0ZWxsIHdoZXRoZXIgdGhleSB3ZXJlIGNvbm5lY3RlZCBvciBub3QsIGFzIHRoZSBpbmZvcm1hdGlvbiBtYXkgaGF2ZSBqdXN0IGJlZW4gb21pdHRlZC5Gb3IgZXhhbXBsZSwgb24gTWF5IDExLCAyMDIxLCBhIHJlcG9ydGVyIGZyb20gdGhlIEVwb2NoIFRpbWVzIHdhcyBhdHRhY2tlZC4gVGhlIGRhdGEgZG9lcyBub3Qgc2F5IHdoeTsgSG93ZXZlciwgVGhlIEVwb2NoIFRpbWVzIGlzIGEgZmFyLXJpZ2h0IHB1YmxpY2F0aW9uIGFzc29jaWF0ZWQgd2l0aCBhIHJlbGlnaW91cyBncm91cCB0aGF0IGlzIGJhbm5lZCBpbiBtYWlubGFuZCBDaGluYSwgc28gaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBhdHRhY2tlciB3YXMgbW90aXZhdGVkIGJ5IHByby1DaGluYSBpZGVvbG9neS4KCmBgYHtyIGVjaG89RkFMU0V9CnZpb2xlbmNlX2FnYWluc3RfY2l2aWxpYW5zIDwtCiAgQUNMRURfQ2hpbmFfSEsgJT4lIAogIGZpbHRlcihob25nX2tvbmcgPT0gInllcyIpICU+JSAKICBmaWx0ZXIoZXZlbnRfdHlwZSA9PSAiVmlvbGVuY2UgYWdhaW5zdCBjaXZpbGlhbnMiKSAlPiUgCiAgc2VsZWN0KGV2ZW50X3R5cGUsZXZlbnRfZGF0ZSxub3RlcykKCnJlYWN0YWJsZSAodmlvbGVuY2VfYWdhaW5zdF9jaXZpbGlhbnMsCiAgICAgICAgICAgc2VhcmNoYWJsZSA9IFRSVUUsCiAgICAgICAgICAgZGVmYXVsdFBhZ2VTaXplID0gNSwKICAgICAgICAgICBjb2x1bW5zID0gbGlzdCgKICAgICAgICAgICAgIGV2ZW50X3R5cGUgPSBjb2xEZWYobmFtZSA9ICJFdmVudCBUeXBlIiksCiAgICAgICAgICAgICBldmVudF9kYXRlID0gY29sRGVmKG5hbWUgPSAiRGF0ZSIpLAogICAgICAgICAgICAgbm90ZXMgPSBjb2xEZWYobmFtZT0iRGVzY3JpcHRpb24iLCBtaW5XaWR0aCA9IDUwMCkKICAgICAgICAgICAgKQogICAgICAgICAgICkKCmBgYAoKIyMgRGVjbGluYXRpb24gaW4gYWN0cyBvZiB2aW9sZW5jZQoKQWN0cyBvZiB2aW9sZW5jZSBhZ2FpbnN0IGNpdmlsaWFucyBwZWFrZWQgaW4gMjAxOSBhbmQgaGF2ZSBzdGVhZGlseSBkZWNsaW5lZCBlYWNoIHllYXIgc2luY2UsIHdpdGggbm8gc3VjaCBhY3RzIHlldCBpbiAyMDIyLgoKYGBge3IgZWNobz1GQUxTRX0KdmlvbGVuY2VfYnlfeWVhciA8LQogIEFDTEVEX0NoaW5hX0hLICU+JSAKICBmaWx0ZXIoaG9uZ19rb25nID09ICJ5ZXMiKSAlPiUgCiAgZmlsdGVyKGV2ZW50X3R5cGUgPT0gIlZpb2xlbmNlIGFnYWluc3QgY2l2aWxpYW5zIikKCmdncGxvdCh2aW9sZW5jZV9ieV95ZWFyLAogICAgICAgIGFlcygKICAgICAgICAgIHg9eWVhcgogICAgICAgICkpICsKICBnZW9tX2JhcihmaWxsID0gIm9saXZlZHJhYjMiLCBjb2xvciA9ICJibGFjayIpICsKICBnZ3RpdGxlKCJWaW9sZW5jZSBBZ2FpbnN0IENpdmlsaWFucyBieSBZZWFyIikgKyAKICBsYWJzKHk9ICJBY3RzIG9mIFZpb2xlbmNlIiwgeCA9ICJZZWFyIikKCmBgYAoKIyBNZXRob2RvbG9neQoKQXMgYSBmaXJzdCBzdGVwLCBJIGZpbHRlcmVkIHRoZSBBQ0xFRCBFYXN0IEFzaWEgZGF0YXNldCB0byBvbmx5IGluY2x1ZGUgZW50cmllcyBmcm9tIENoaW5hLCB3aGljaCBpbmNsdWRlcyBIb25nIEtvbmcuCgpGb3IgdGhlIHByb3Rlc3QgYW5kIHJpb3QgZGF0YSwgSSBmaWx0ZXJlZCB0aGF0IGRhdGFzZXQgZm9yIGVudHJpZXMgdGhhdCB3ZXJlIGxpc3RlZCBhcyBldmVudCB0eXBlICJQcm90ZXN0cyIgb3IgIlJpb3RzLiIgVGhlbiwgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIG9ubHkgaW5jbHVkZWQgcHJvdGVzdHMgYW5kIHJpb3RzIHJlbGF0ZWQgdG8gdGhlIEV4dHJhZGl0aW9uIEJpbGwsIEkgZmlsdGVyZWQgdGhlIGRhdGEgdG8gaW5jbHVkZSBvbmx5IGV2ZW50cyB3aGVyZSB0aGUgbm90ZXMgaW5jbHVkZWQgdGhlIHdvcmRzICJkZW1vY3JhY3ksIiAiZXh0cmFkaXRpb24sIiAiaW5kZXBlbmRlbmNlIiBvciAicHJvLWRlbW9jcmFjeS4iIFRoaXMgZ290IHJpZCBvZiBhbGwgdW5yZWxhdGVkIHByb3Rlc3RzIGFuZCByaW90cy4KCkFzIGZvciB0aGUgdmlvbGVuY2UgYWdhaW5zdCBjaXZpbGlhbnMgZGF0YSwgYmVjYXVzZSB0aGVyZSB3ZXJlIG9ubHkgMzMgcm93cyBvZiBkYXRhLCBpbnN0ZWFkIG9mIGZpbHRlcmluZyBmb3Iga2V5d29yZHMsIEkganVzdCByZWFkIGVhY2ggb2YgdGhlIHJvd3MuIE1vc3Qgb2YgdGhlIDMzIGVudHJ5IGhhZCBleHBsaWNpdCB0aWVzIHRvIHRoZSBwcm8tZGVtb2NyYWN5IG1vdmVtZW50LiBPZiB0aGUgZmV3IHRoYXQgZGlkbid0LCB0aGV5IHN0aWxsIGhhZCBzb21lIHR5cGUgb2YgcG9saXRpY2FsIGNvbm5lY3Rpb24sIG1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIGtub3cgaWYgdGhleSB3ZXJlIHRpZWQgdG8gdGhlIG1vdmVtZW50IG9yIG5vdC4gVG8gYmUgb24gdGhlIHNhZmUgc2lkZSwgYW5kIGJlY2F1c2UgdGhlcmUgd2VyZSBzbyBmZXcgb2YgdGhpcyB0eXBlIG9mIGVudHJ5LCBJIGtlcHQgdGhlbSBpbiB0aGUgZGF0YS4KCkluIG9yZGVyIHRvIHN0dWR5IHRoZSBDSFJGIHByb3Rlc3RzLCBJIGNyZWF0ZWQgdGhlIHNlYXJjaGFibGUgdGFibGUgb2YgcHJvdGVzdHMgYW5kIHJpb3RzLCBhYm92ZSwgdG8gc2VhcmNoIGZvciB0aGUga2V5d29yZCAiQ0hSRiIuIFRoaXMgZW5hYmxlZCBtZSB0byByZWFkIHRoZSBkZXNjcmlwdGlvbnMgb2YgZWFjaCBvZiB0aGUgcHJvdGVzdHMgcmVsYXZhbnQgdG8gdGhlIGdyb3VwLgoKVG8gbWFrZSB0aGUgYmFyIGNoYXJ0IG9mIHRoZSBDSFJGIHByb3Rlc3RzLCBJIHVzZWQgdGhlIHNhbWUgY29kZSBhcyB0aGUgYmFyIGNoYXJ0IGZvciBhbGwgb2YgdGhlIHByb3Rlc3RzIGFuZCByaW90cyByZWxhdGVkIHRvIHRoZSBFeHRyYWRpdGlvbiBCaWxsLCBidXQgZmlsdGVyZWQgZm9yIHRoZSBrZXl3b3JkcyAiQ0hSRiIgYW5kICJDaXZpbCBIdW1hbiBSaWdodHMgRnJvbnQuIg==