Where is India’s population located?
India’s population is still in villages. All the next gen application and policies that we hear are available, visible and utilized by only 30%.
With constant droughts and floods impacting India especially the villages its about time for policy makers to review and heed the needs of Rural.
Religion wise population.
- India is a Hindu majority country. Its rather interesting that Jain’s have been moved to almost <1%.
Population by Rural/Urban locations.
Majority religion in each state(in millions)
Where Hindu is majority , what is the trend of the majority %, is it close to 50% or >85%?
Now lets analyze all Indian states and their religion based population and see the distribution of each religion and when in majority as well.
Lets get the religious population from each district of each state.
Lets see the age groups in India within each of the religions.






Now lets see the age percentages with their respective religion population.

Within males, Sikh’s have the most senior citizens as they live for 80+ years. From 40+ , Jain’s are also seen consistently having high trends within their population.

Within females, Sikh’s and Jain’s have the 80+ senior citizens. We also see Buddhist & Christians also showing high trends from 40+ years.
LS0tCnRpdGxlOiAiQW5hbHlzaXMgb24gSW5kaWEgQ2Vuc3VzIERhdGEgMjAxMSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3IgZ2xvYmFsX29wdGlvbnMsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChmaWcud2lkdGg9Ni4yLCBmaWcuYXNwPTAuNjE4LGZpZy5hbGlnbiA9ImNlbnRlciIsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgcm93cy5wcmludD0zMCxjb2xzLnByaW50PTEwLGluY2x1ZGU9RkFMU0UpIAoKYGBgCgoKYGBge3IgbG9hZF9saWJzfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShyZWFkeGwpCmxpYnJhcnkoZ2dyZXBlbCkKbGlicmFyeSh0cmVlbWFwKQpsaWJyYXJ5KGdndGhlbWVzKQp0aGVtZV9zZXQodGhlbWVfZml2ZXRoaXJ0eWVpZ2h0KDEyKSArICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIpKSkKCiMgYWRkX2VsIDwtIHRoZW1lX2dyYXkoMTIpICt0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJUaW1lcyIpKQojIHRoZW1lX3NldChhZGRfZWwpCgpzb3VyY2UoIi9Vc2Vycy92aW5heWNodXJpL1ZJTkFZL1ZJTkFZX1IvdmluYXlfZnVuY3Rpb25zL3ZpbmF5X2Z1bmMuUiIpCmBgYAoKYGBge3IgZXZhbD1GQUxTRX0KCiMgU3VuIEp1biAgMiAwMzo1Njo0MSAyMDE5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tTWVyZ2UgdGhlIGZpbGVzIGludG8gc2luZ2xlIGNzdi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmFsbF94bHM8LSBsaXN0LmZpbGVzKCIvVXNlcnMvdmluYXljaHVyaS9Eb3dubG9hZHMvMjAxMSBDRU5TVVMvUmVsaWdpb24gUENBIixwYXR0ZXJuID0gIlJMLSIsZnVsbC5uYW1lcz1UKQpkZj1kYXRhLmZyYW1lKCkKZm9yKGYgaW4gYWxsX3hscyl7CiAgdG1wX2RmPC1yZWFkX2V4Y2VsKGYpCiAgdG1wX2RmJGZpbGVfbmFtZTwtZgogIGRmPC0gYmluZF9yb3dzKGRmLHRtcF9kZikKfQpuYW1lcyhkZik8LSB2aW5fc2V0ZGZuYW1lcyhuYW1lcyhkZikpCgpkZjwtIGRmJT4lCiAgbXV0YXRlKHJlbGlnaW9uPWlmZWxzZShyZWxpZ2lvbj09J090aGVyIHJlbGlnaW9ucyBhbmQgcGVyc3Vhc2lvbnMnLCdPdGhlcnMnLHJlbGlnaW9uKSkKCnN0YXRlX2Rpc3RyaWN0X3Rvd25fbWFzdGVyPC0gZGYlPiUKICBzZWxlY3QoMTo2LC01KSU+JQogIGRpc3RpbmN0KCklPiUKICBhcnJhbmdlKHN0YXRlLGRpc3RyaWN0LHN1YmRpc3R0LHRvd25fdmlsbGFnZSxuYW1lKQoKIyB3cml0ZV9leGNlbF9jc3YoZGYsIi9Vc2Vycy92aW5heWNodXJpL0Rvd25sb2Fkcy8yMDExIENFTlNVUy9SZWxpZ2lvbiBQQ0EvbWVyZ2VkLmNzdiIpCiMgZGY8LSByZWFkX2NzdigiL1VzZXJzL3ZpbmF5Y2h1cmkvRG93bmxvYWRzLzIwMTEgQ0VOU1VTL1JlbGlnaW9uIFBDQS9tZXJnZWQuY3N2IikKYGBgCgpgYGB7cn0KZGY8LSByZWFkX2NzdigiL1VzZXJzL3ZpbmF5Y2h1cmkvVklOQVkvZGF0YXNldC8yMDExIENFTlNVUy9SZWxpZ2lvbiBQQ0EvbWVyZ2VkLmNzdiIpCmBgYAoKCiMjIyBXaGVyZSBpcyBJbmRpYSdzIHBvcHVsYXRpb24gbG9jYXRlZD8KYGBge3J9CmRmJT4lCiAgZmlsdGVyKHN0YXRlPT0nMDAnICYgcmVsaWdpb249PSdUb3RhbCcgJiB0cnUgIT0nVG90YWwnICklPiUKICBtdXRhdGUocGVyYz1yb3VuZChwcm9wLnRhYmxlKHRvdF9wKSwyKSoxMDApJT4lCiAgZ2dwbG90KGFlcyh0cnUscGVyYykpKwogIGdlb21fY29sKCkrCiAgbGFicyh0aXRsZT0iSW5kaWEncyBwb3B1bGF0aW9uIixzdWJ0aXRsZT0iUnVyYWwvVXJiYW4iLHg9IiIseT0iJSIpKwogIGdlb21fbGFiZWwoYWVzKGxhYmVsPXBhc3RlMChwZXJjLCIlIikpKQoKCgpgYGAKKiBJbmRpYSdzIHBvcHVsYXRpb24gaXMgc3RpbGwgaW4gdmlsbGFnZXMuIEFsbCB0aGUgbmV4dCBnZW4gYXBwbGljYXRpb24gYW5kIHBvbGljaWVzIHRoYXQgd2UgaGVhciBhcmUgYXZhaWxhYmxlLCB2aXNpYmxlIGFuZCB1dGlsaXplZCBieSBvbmx5IDMwJS4KCiogV2l0aCBjb25zdGFudCBkcm91Z2h0cyBhbmQgZmxvb2RzIGltcGFjdGluZyBJbmRpYSBlc3BlY2lhbGx5IHRoZSB2aWxsYWdlcyBpdHMgYWJvdXQgdGltZSBmb3IgcG9saWN5IG1ha2VycyB0byByZXZpZXcgYW5kIGhlZWQgdGhlIG5lZWRzIG9mIFJ1cmFsLgoKIyMjIFJlbGlnaW9uIHdpc2UgcG9wdWxhdGlvbi4KCmBgYHtyIGluY2x1ZGU9RkFMU0V9CmRmICU+JQogIGZpbHRlcihzdGF0ZSA9PSAnMDAnICYgdHJ1ID09ICdUb3RhbCcgJiByZWxpZ2lvbiAhPSAnVG90YWwnKSAlPiUKICBtdXRhdGUocGVyYyA9IHJvdW5kKHByb3AudGFibGUodG90X3ApLCAyKSAqIDEwMCkgJT4lCiAgZ2dwbG90KGFlcyhyZW9yZGVyKHJlbGlnaW9uLCBwZXJjKSwgcGVyYykpICsKICBjb29yZF9mbGlwKCkgKwogIGdlb21fY29sKCkgKwogIGxhYnMoCiAgICB0aXRsZSA9ICJQb3B1bGF0aW9uIGJ5IHJlbGlnaW9uIiwKICAgIHN1YnRpdGxlID0gIiIsCiAgICB4ID0gIiIsCiAgICB5ID0gIiUiCiAgKSArCiAgZ2VvbV9sYWJlbChhZXMobGFiZWwgPSBwYXN0ZTAocGVyYywgIiUiKSkpCgoKYGBgCgoKYGBge3J9CmRmICU+JQogIGZpbHRlcihzdGF0ZSA9PSAnMDAnICYgdHJ1ID09ICdUb3RhbCcgJiByZWxpZ2lvbiAhPSAnVG90YWwnKSAlPiUKICBtdXRhdGUocGVyYyA9IHJvdW5kKHByb3AudGFibGUodG90X3ApLCAyKSAqIDEwMCkgJT4lCiAgc2VsZWN0KHJlbGlnaW9uLHRvdF9wLHBlcmMpJT4lCiAgbXV0YXRlKHRvdF9wPXRvdF9wLzEwMDAwMDApJT4lCiAgdW5pdGUoY29sPSJyZWxpZ2lvbiIsYygicmVsaWdpb24iLCJwZXJjIikpJT4lCiAgbXV0YXRlKHJlbGlnaW9uPXBhc3RlMChyZWxpZ2lvbiwiJSIpKSU+JQogIHRyZWVtYXAoCiAgICBpbmRleCA9ICJyZWxpZ2lvbiIsCiAgICB2U2l6ZSA9ICJ0b3RfcCIsdHlwZSA9ICJ2YWx1ZSIsCiAgICB0aXRsZSA9ICJQb3B1bGF0aW9uIGJ5IHJlbGlnaW9uIiwKICAgIHBhbGV0dGUgPSAiU2V0MSIsCiAgICB2Q29sb3IgPSAidG90X3AiLAogICAgdGl0bGUubGVnZW5kPSJQb3B1bGF0aW9uIGluIG1pbGxpb25zIgogICAgIyBwYWxldHRlID0gIlJkQnUiCiAgKQoKYGBgCiogSW5kaWEgaXMgYSBIaW5kdSBtYWpvcml0eSBjb3VudHJ5LiBJdHMgcmF0aGVyIGludGVyZXN0aW5nIHRoYXQgSmFpbidzIGhhdmUgYmVlbiBtb3ZlZCB0byBhbG1vc3QgPDElLgoKCiMjIyBQb3B1bGF0aW9uIGJ5IFJ1cmFsL1VyYmFuIGxvY2F0aW9ucy4KCmBgYHtyLCBmaWcud2lkdGg9Ni4zLGZpZy5oZWlnaHQ9M30KCmRmJT4lCiAgZmlsdGVyKHN0YXRlPT0nMDAnICYgcmVsaWdpb24hPSdUb3RhbCcgICYgdHJ1ICE9J1RvdGFsJyApJT4lCiAgIyBncm91cF9ieSh0cnUpJT4lCiAgbXV0YXRlKHBlcmM9cm91bmQocHJvcC50YWJsZSh0b3RfcCksMikqMTAwKSU+JQogIGdncGxvdChhZXMocmVvcmRlcihyZWxpZ2lvbixwZXJjKSxwZXJjLGZpbGw9dHJ1KSkrCiAgY29vcmRfZmxpcCgpKwogIGdlb21fY29sKCkrCiAgbGFicygKICAgIHRpdGxlID0gIlBvcHVsYXRpb24gYnkgcmVsaWdpb24iLAogICAgc3VidGl0bGUgPSAiIiwKICAgIHggPSAiIiwKICAgIHkgPSAiJSIsIAogICAgZmlsbD0iTG9jYXRpb24iCiAgKSArCiAgZ2VvbV9sYWJlbChhZXMobGFiZWw9cGFzdGUwKHBlcmMsIiUiKSkscG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSkpKwogIHRoZW1lX2dyYXkoMTUpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKQoKYGBgCgpgYGB7ciBpbmNsdWRlPUZBTFNFfQpkZiAlPiUKICBmaWx0ZXIoc3RhdGU9PScwMCcgJiByZWxpZ2lvbiE9J1RvdGFsJyAgJiB0cnUgIT0nVG90YWwnICklPiUKICBtdXRhdGUocGVyYz1yb3VuZChwcm9wLnRhYmxlKHRvdF9wKSwyKSoxMDApJT4lCiAgc2VsZWN0KHJlbGlnaW9uLHBlcmMsdHJ1LHRvdF9wKSU+JQogIG11dGF0ZSh0b3RfcD10b3RfcC8xMDAwMDAwKSU+JQogIHVuaXRlKGNvbD0icmVsaWdpb24iLGMoInJlbGlnaW9uIiwicGVyYyIpKSU+JQogIG11dGF0ZShyZWxpZ2lvbj1wYXN0ZTAocmVsaWdpb24sIiUiKSklPiUKICB0cmVlbWFwKAogICAgaW5kZXggPSBjKCJ0cnUiLCJyZWxpZ2lvbiIpLCAgCiAgICB2U2l6ZSA9ICJ0b3RfcCIsCiAgICB0eXBlID0gInZhbHVlIiwKICAgIHRpdGxlID0gIlBvcHVsYXRpb24gYnkgcmVsaWdpb24iLAogICAgcGFsZXR0ZSA9ICJTZXQxIiwKICAgIHZDb2xvciA9ICJ0b3RfcCIKICAgICMgcGFsZXR0ZSA9ICJSZEJ1IgogICkKYGBgCgoKIyMjIE1ham9yaXR5IHJlbGlnaW9uIGluIGVhY2ggc3RhdGUoaW4gbWlsbGlvbnMpCgpgYGB7ciByb3dzLnByaW50PTMwfQoKZGYlPiUKICBmaWx0ZXIoZ3JlcGwoJ1JMLTAwMDAnLGZpbGVfbmFtZSkpJT4lCiAgZmlsdGVyKHN0YXRlIT0nMDAnICYgZGlzdHJpY3Q9PScwMDAnICYgc3ViZGlzdHQ9PScwMDAwMCcgJiB0b3duX3ZpbGxhZ2U9PScwMDAwMDAnICYgdHJ1PT0nVG90YWwnICYgcmVsaWdpb24hPSdUb3RhbCcpJT4lCiAgZ3JvdXBfYnkobmFtZSxyZWxpZ2lvbiklPiUKICBzdW1tYXJpc2UodG90X3A9c3VtKHRvdF9wKSklPiUKICBtdXRhdGUocGVyYz1wYXN0ZTAocm91bmQodG90X3Avc3VtKHRvdF9wKSoxMDAsMiksIiUiKSklPiUKICBhcnJhbmdlKC10b3RfcCklPiUKICB0b3BfbigxLHd0PXRvdF9wKSU+JQogIGFycmFuZ2UobmFtZSklPiUKICB1bmdyb3VwKCklPiUKICBtdXRhdGUobmFtZT1nc3ViKCJTdGF0ZSAtICIsIiIsbmFtZSksIHRvdF9wPXJvdW5kKHRvdF9wLzEwMDAwMDAsMikpJT4lCiAgdW5pdGUoY29sPSJ0b3RfcDIiLHNlcD0iIEAgIixjKHRvdF9wLHBlcmMpKSU+JQogIHJlc2hhcGUyOjpkY2FzdChuYW1lfnJlbGlnaW9uLHZhbHVlLnZhciA9ICJ0b3RfcDIiLGZpbGw9Ii0iKQoKCmBgYAoKCmBgYHtyfQpkZiU+JQogIGZpbHRlcihncmVwbCgnUkwtMDAwMCcsZmlsZV9uYW1lKSklPiUKICBmaWx0ZXIoc3RhdGUhPScwMCcgJiBkaXN0cmljdD09JzAwMCcgJiBzdWJkaXN0dD09JzAwMDAwJyAmIHRvd25fdmlsbGFnZT09JzAwMDAwMCcgJiB0cnU9PSdUb3RhbCcgJiByZWxpZ2lvbiE9J1RvdGFsJyklPiUKICBncm91cF9ieShuYW1lLHJlbGlnaW9uKSU+JQogIHN1bW1hcmlzZSh0b3RfcD1zdW0odG90X3ApKSU+JQogIG11dGF0ZShwZXJjPXBhc3RlMChyb3VuZCh0b3RfcC9zdW0odG90X3ApKjEwMCwyKSwiJSIpKSU+JQogIGFycmFuZ2UoLXRvdF9wKSU+JQogIHRvcF9uKDEsd3Q9dG90X3ApJT4lCiAgYXJyYW5nZShuYW1lKSU+JQogIHVuZ3JvdXAoKSU+JQogIG11dGF0ZShuYW1lPWdzdWIoIlN0YXRlIC0gIiwiIixuYW1lKSwgdG90X3A9cm91bmQodG90X3AvMTAwMDAwMCwyKSklPiUKICBmaWx0ZXIocmVsaWdpb249PSdIaW5kdScpJT4lCiAgdHJlZW1hcCgKICAgIGluZGV4ID0gYygibmFtZSIpLCAgCiAgICB2U2l6ZSA9ICJ0b3RfcCIsCiAgICB0eXBlID0gInZhbHVlIiwKICAgIHRpdGxlID0gIlBvcHVsYXRpb24gYnkgSGluZHUgcmVsaWdpb24iLAogICAgcGFsZXR0ZSA9ICJTZXQxIiwKICAgIHZDb2xvciA9ICJ0b3RfcCIKICAgICMgcGFsZXR0ZSA9ICJSZEJ1IgogICkKICAKCmBgYAoKYGBge3J9CmRmJT4lCiAgZmlsdGVyKGdyZXBsKCdSTC0wMDAwJyxmaWxlX25hbWUpKSU+JQogIGZpbHRlcihzdGF0ZSE9JzAwJyAmIGRpc3RyaWN0PT0nMDAwJyAmIHN1YmRpc3R0PT0nMDAwMDAnICYgdG93bl92aWxsYWdlPT0nMDAwMDAwJyAmIHRydT09J1RvdGFsJyAmIHJlbGlnaW9uIT0nVG90YWwnKSU+JQogIGdyb3VwX2J5KG5hbWUscmVsaWdpb24pJT4lCiAgc3VtbWFyaXNlKHRvdF9wPXN1bSh0b3RfcCkpJT4lCiAgbXV0YXRlKHBlcmM9cGFzdGUwKHJvdW5kKHRvdF9wL3N1bSh0b3RfcCkqMTAwLDIpLCIlIikpJT4lCiAgYXJyYW5nZSgtdG90X3ApJT4lCiAgdG9wX24oMSx3dD10b3RfcCklPiUKICBhcnJhbmdlKG5hbWUpJT4lCiAgdW5ncm91cCgpJT4lCiAgbXV0YXRlKG5hbWU9Z3N1YigiU3RhdGUgLSAiLCIiLG5hbWUpLCB0b3RfcD1yb3VuZCh0b3RfcC8xMDAwMDAwLDIpKSU+JQogIGZpbHRlcihyZWxpZ2lvbj09J011c2xpbScpJT4lCiAgdHJlZW1hcCgKICAgIGluZGV4ID0gYygibmFtZSIpLCAgCiAgICB2U2l6ZSA9ICJ0b3RfcCIsCiAgICB0eXBlID0gInZhbHVlIiwKICAgIHRpdGxlID0gIlBvcHVsYXRpb24gYnkgTXVzbGltIHJlbGlnaW9uIiwKICAgIHBhbGV0dGUgPSAiU2V0MSIsCiAgICB2Q29sb3IgPSAidG90X3AiCiAgICAjIHBhbGV0dGUgPSAiUmRCdSIKICApCiAgCmBgYAoKCmBgYHtyfQojIGxpYnJhcnkodHJlZW1hcGlmeSkKIyBkZiU+JQojICAgZmlsdGVyKGdyZXBsKCdSTC0wMDAwJyxmaWxlX25hbWUpKSU+JQojICAgZmlsdGVyKHN0YXRlIT0nMDAnICYgZGlzdHJpY3Q9PScwMDAnICYgc3ViZGlzdHQ9PScwMDAwMCcgJiB0b3duX3ZpbGxhZ2U9PScwMDAwMDAnICYgdHJ1PT0nVG90YWwnICYgcmVsaWdpb24hPSdUb3RhbCcpJT4lCiMgICBncm91cF9ieShuYW1lLHJlbGlnaW9uKSU+JQojICAgc3VtbWFyaXNlKHRvdF9wPXN1bSh0b3RfcCkpJT4lCiMgICBtdXRhdGUocGVyYz1wYXN0ZTAocm91bmQodG90X3Avc3VtKHRvdF9wKSoxMDAsMiksIiUiKSklPiUKIyAgIGFycmFuZ2UoLXRvdF9wKSU+JQojICAgdG9wX24oMSx3dD10b3RfcCklPiUKIyAgIGFycmFuZ2UobmFtZSklPiUKIyAgIHVuZ3JvdXAoKSU+JQojICAgbXV0YXRlKG5hbWU9Z3N1YigiU3RhdGUgLSAiLCIiLG5hbWUpLCB0b3RfcD1yb3VuZCh0b3RfcC8xMDAwMDAwLDIpKSU+JQojICAgZmlsdGVyKHJlbGlnaW9uPT0nTXVzbGltJyktPnRtcF9kZgojIAojIAojIAojIGdncGxvdCh0bXBfZGYsYWVzKGFyZWEgPSB0b3RfcCwgZmlsbD1uYW1lLCBsYWJlbCA9IG5hbWUpKSArCiMgICBnZW9tX3RyZWVtYXAoc2hvdy5sZWdlbmQ9RikrCiMgICAjIGdlb21fdHJlZW1hcF90ZXh0KGNvbG91ciA9ICJibGFjayIsIHBsYWNlID0gInRvcGxlZnQiLCByZWZsb3cgPSBULHNpemU9MTQpCiMgICBnZW9tX3RyZWVtYXBfdGV4dChmb250ZmFjZSA9ICJpdGFsaWMiLCBjb2xvdXIgPSAid2hpdGUiLCBwbGFjZSA9ICJjZW50cmUiLGdyb3cgPSBUUlVFKQoKCmBgYAoKV2hlcmUgSGluZHUgaXMgbWFqb3JpdHkgLCB3aGF0IGlzIHRoZSB0cmVuZCBvZiB0aGUgbWFqb3JpdHkgJSwgaXMgaXQgY2xvc2UgdG8gNTAlIG9yID44NSU/CgpgYGB7ciBldmFsPUZBTFNFfQojIGRmJT4lCiMgICBmaWx0ZXIoZ3JlcGwoJ1JMLTAwMDAnLGZpbGVfbmFtZSkpJT4lCiMgICBmaWx0ZXIoc3RhdGUhPScwMCcgJiBkaXN0cmljdD09JzAwMCcgJiBzdWJkaXN0dD09JzAwMDAwJyAmIHRvd25fdmlsbGFnZT09JzAwMDAwMCcgJiB0cnU9PSdUb3RhbCcgJiByZWxpZ2lvbiE9J1RvdGFsJyklPiUKIyAgIGdyb3VwX2J5KG5hbWUscmVsaWdpb24pJT4lCiMgICBzdW1tYXJpc2UodG90X3A9c3VtKHRvdF9wKSklPiUKIyAgIG11dGF0ZShwZXJjPXRvdF9wL3N1bSh0b3RfcCkpJT4lCiMgICBhcnJhbmdlKC10b3RfcCklPiUKIyAgIHRvcF9uKDEsd3Q9dG90X3ApJT4lCiMgICBhcnJhbmdlKG5hbWUpJT4lCiMgICB1bmdyb3VwKCklPiUKIyAgIG11dGF0ZShuYW1lPWdzdWIoIlN0YXRlIC0gIiwiIixuYW1lKSwgdG90X3A9cm91bmQodG90X3AvMTAwMDAwMCwyKSklPiUKIyAgIGZpbHRlcihyZWxpZ2lvbj09J0hpbmR1JyklPiUKIyAgIGdncGxvdChhZXMoeT1wZXJjLHg9c2VxX2Fsb25nKHBlcmMpLGxhYmVsPW5hbWUpKSsKIyAgIGdlb21faml0dGVyKCkrCiMgICBsYWJzKHRpdGxlPSJIaW5kdSBtYWpvcml0eSB0cmVuZHMiLHg9IiIseT0iTWFqb3JpdHkgJSIsdGFnPSIiKSsKIyAgIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChhZXMobGFiZWw9bmFtZSksc2l6ZSA9IDIpCmBgYAoKCgpOb3cgbGV0cyBhbmFseXplIGFsbCBJbmRpYW4gc3RhdGVzIGFuZCB0aGVpciByZWxpZ2lvbiBiYXNlZCBwb3B1bGF0aW9uIGFuZCBzZWUgdGhlIGRpc3RyaWJ1dGlvbiBvZiBlYWNoIHJlbGlnaW9uIGFuZCB3aGVuIGluIG1ham9yaXR5IGFzIHdlbGwuCgpgYGB7cn0KZ2V0X3N0YXRlX3JlbGlnaW9uX3Bsb3QgPC0gZnVuY3Rpb24oaW5fc3RyLHRvcF9vbmx5PUZBTFNFKSB7CiAgc3VidGl0bGUyPWlmZWxzZSh0b3Bfb25seT09RkFMU0UsIiUgcG9wdWxhdGlvbiBhY3Jvc3MgSW5kaWEiLCIlIHBvcHVsYXRpb24gd2hlbiBpbiBtYWpvcml0eSIpCiAgZGYgJT4lCiAgICBmaWx0ZXIoZ3JlcGwoJ1JMLTAwMDAnLCBmaWxlX25hbWUpKSAlPiUKICAgIGZpbHRlcigKICAgICAgc3RhdGUgIT0gJzAwJyAmCiAgICAgICAgZGlzdHJpY3QgPT0gJzAwMCcgJgogICAgICAgIHN1YmRpc3R0ID09ICcwMDAwMCcgJgogICAgICAgIHRvd25fdmlsbGFnZSA9PSAnMDAwMDAwJyAmCiAgICAgICAgdHJ1ID09ICdUb3RhbCcgJiByZWxpZ2lvbiAhPSAnVG90YWwnCiAgICApICU+JQogICAgZ3JvdXBfYnkobmFtZSwgcmVsaWdpb24pICU+JQogICAgc3VtbWFyaXNlKHRvdF9wID0gc3VtKHRvdF9wKSkgJT4lCiAgICBtdXRhdGUocGVyYyA9IHJvdW5kKHRvdF9wIC8gc3VtKHRvdF9wKSwgMikpICU+JQogICAgYXJyYW5nZSgtdG90X3ApICU+JQogICAgIyB7IGlmZWxzZSh0b3Bfb25seT09VFJVRSAsdG9wX24oLiwxLHd0PXRvdF9wKSwgLiApIH0lPiUKICAgIHtpZih0b3Bfb25seT09VFJVRSkgdG9wX24oLiwxLHd0PXRvdF9wKSBlbHNlIC59JT4lCiAgICB1bmdyb3VwKCkgJT4lCiAgICBtdXRhdGUobmFtZSA9IGdzdWIoIlN0YXRlIC0gIiwgIiIsIG5hbWUpLAogICAgICAgICAgIHRvdF9wID0gcm91bmQodG90X3AgLyAxMDAwMDAwLCAyKSkgJT4lCiAgICBmaWx0ZXIocmVsaWdpb24gPT0gaW5fc3RyKSAlPiUKICAgIGdncGxvdChhZXMoCiAgICAgIHkgPSBwZXJjLAogICAgICB4ID0gc2VxX2Fsb25nKHBlcmMpLAogICAgICBsYWJlbCA9IG5hbWUKICAgICkpICsKICAgIGdlb21faml0dGVyKCkgKwogICAgbGFicygKICAgICAgdGl0bGUgPSBwYXN0ZTAoaW5fc3RyLCIgcmVsaWdpb24gdHJlbmRzIiksCiAgICAgIHN1YnRpdGxlPXN1YnRpdGxlMiwKICAgICAgeCA9ICIiLAogICAgICB5ID0gIk1ham9yaXR5ICUiLAogICAgICB0YWcgPSAiIgogICAgKSArCiAgICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoYWVzKGxhYmVsID0gbmFtZSksIHNpemUgPSAzKQp9CgpgYGAKCmBgYHtyICxmaWcuaGVpZ2h0PTMuMn0KZ2V0X3N0YXRlX3JlbGlnaW9uX3Bsb3QoIkhpbmR1Iix0b3Bfb25seSA9IEZBTFNFKQpnZXRfc3RhdGVfcmVsaWdpb25fcGxvdCgiSGluZHUiLHRvcF9vbmx5ID0gVFJVRSkKCmBgYAoKCgpgYGB7ciAsZmlnLmhlaWdodD0zLjJ9CmdldF9zdGF0ZV9yZWxpZ2lvbl9wbG90KCJNdXNsaW0iLHRvcF9vbmx5ID0gRkFMU0UpCmdldF9zdGF0ZV9yZWxpZ2lvbl9wbG90KCJNdXNsaW0iLHRvcF9vbmx5ID0gVFJVRSkKCgpgYGAKCgpgYGB7ciAsZmlnLmhlaWdodD0zLjJ9CgpnZXRfc3RhdGVfcmVsaWdpb25fcGxvdCgiQ2hyaXN0aWFuIix0b3Bfb25seSA9IEZBTFNFKQpnZXRfc3RhdGVfcmVsaWdpb25fcGxvdCgiQ2hyaXN0aWFuIix0b3Bfb25seSA9IFRSVUUpCgoKCmBgYAoKYGBge3IgLGZpZy5oZWlnaHQ9My4yfQoKZ2V0X3N0YXRlX3JlbGlnaW9uX3Bsb3QoIlNpa2giLHRvcF9vbmx5ID0gRkFMU0UpCmdldF9zdGF0ZV9yZWxpZ2lvbl9wbG90KCJTaWtoIix0b3Bfb25seSA9IFRSVUUpCgoKYGBgCgpgYGB7ciAsZmlnLmhlaWdodD0zLjJ9CgpnZXRfc3RhdGVfcmVsaWdpb25fcGxvdCgiQnVkZGhpc3QiLHRvcF9vbmx5ID0gRkFMU0UpCmdldF9zdGF0ZV9yZWxpZ2lvbl9wbG90KCJCdWRkaGlzdCIsdG9wX29ubHkgPSBUUlVFKQoKCmBgYAoKYGBge3IgLGZpZy5oZWlnaHQ9My4yfQoKZ2V0X3N0YXRlX3JlbGlnaW9uX3Bsb3QoIkphaW4iLHRvcF9vbmx5ID0gRkFMU0UpCmdldF9zdGF0ZV9yZWxpZ2lvbl9wbG90KCJKYWluIix0b3Bfb25seSA9IFRSVUUpCgpgYGAKCgpMZXRzIGdldCB0aGUgcmVsaWdpb3VzIHBvcHVsYXRpb24gZnJvbSBlYWNoIGRpc3RyaWN0IG9mIGVhY2ggc3RhdGUuCmBgYHtyfQoKZ2V0X2Rpc3RyaWN0X3JlbGlnaW9uX3Bsb3QgPC0gZnVuY3Rpb24oaW5fc3RyLHRvcF9vbmx5PUZBTFNFKSB7CiAgc3VidGl0bGUyPWlmZWxzZSh0b3Bfb25seT09RkFMU0UsIiUgcG9wdWxhdGlvbiBhY3Jvc3MgSW5kaWEiLCIlIHBvcHVsYXRpb24gd2hlbiBpbiBtYWpvcml0eSIpCiAgZGYgJT4lCiAgICBmaWx0ZXIoIWdyZXBsKCdSTC0wMDAwJywgZmlsZV9uYW1lKSkgJT4lCiAgICBmaWx0ZXIoCiAgICAgIHN0YXRlICE9ICcwMCcgJgogICAgICAgIGRpc3RyaWN0ICE9ICcwMDAnICYKICAgICAgICBzdWJkaXN0dCA9PSAnMDAwMDAnICYKICAgICAgICB0b3duX3ZpbGxhZ2UgPT0gJzAwMDAwMCcgJgogICAgICAgIHRydSA9PSAnVG90YWwnICYgcmVsaWdpb24gIT0gJ1RvdGFsJwogICAgKSAlPiUKICAgIGdyb3VwX2J5KG5hbWUsIHJlbGlnaW9uKSAlPiUKICAgIHN1bW1hcmlzZSh0b3RfcCA9IHN1bSh0b3RfcCkpICU+JQogICAgbXV0YXRlKHBlcmMgPSByb3VuZCh0b3RfcCAvIHN1bSh0b3RfcCksIDIpKSAlPiUKICAgIGZpbHRlcihyZWxpZ2lvbiA9PSBpbl9zdHIpICU+JQogICAgYXJyYW5nZSgtcGVyYykgJT4lCiAgICBoZWFkKDIwKSU+JQogICAgdW5ncm91cCgpICU+JQogICAgbXV0YXRlKHRvdF9wID0gcm91bmQodG90X3AgLyAxMDAwMDAwLCAyKSkgJT4lCiAgICBnZ3Bsb3QoYWVzKAogICAgICB5ID0gcGVyYywKICAgICAgeCA9IHNlcV9hbG9uZyhwZXJjKSwKICAgICAgbGFiZWwgPSBuYW1lCiAgICApKSArCiAgICBnZW9tX2ppdHRlcigpICsKICAgIGxhYnMoCiAgICAgIHRpdGxlID0gcGFzdGUwKGluX3N0ciwiIHJlbGlnaW9uIHRyZW5kcyIpLAogICAgICBzdWJ0aXRsZT1zdWJ0aXRsZTIsCiAgICAgIHggPSAiIiwKICAgICAgeSA9ICJNYWpvcml0eSAlIiwKICAgICAgdGFnID0gIiIKICAgICkgKwogICAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKGFlcyhsYWJlbCA9IG5hbWUpLCBzaXplID0gMykKfQpgYGAKCmBgYHtyfQpnZXRfZGlzdHJpY3RfcmVsaWdpb25fcGxvdCgiTXVzbGltIix0b3Bfb25seSA9IEZBTFNFKQpnZXRfZGlzdHJpY3RfcmVsaWdpb25fcGxvdCgiSGluZHUiLHRvcF9vbmx5ID0gVFJVRSkKYGBgCgoKTGV0cyBzZWUgdGhlIGFnZSBncm91cHMgaW4gSW5kaWEgd2l0aGluIGVhY2ggb2YgdGhlIHJlbGlnaW9ucy4KCmBgYHtyfQphZ2VfZGY8LSByZWFkX2V4Y2VsKCIvVXNlcnMvdmluYXljaHVyaS9WSU5BWS9kYXRhc2V0LzIwMTEgQ0VOU1VTL0MtMTUgUmVsaWdpb3VzIENvbW11bml0eSBCeSBBZ2UtR3JvdXAgQW5kIFNleCAtIDIwMTEvRERXLTAwMDBDLTE1LlhMU1giKQoKbmFtZXMoYWdlX2RmKTwtIHZpbl9zZXRkZm5hbWVzKG5hbWVzKGFnZV9kZikpCgphZ2VfZGYlPiUKICBmaWx0ZXIoc3RhdGVfY29kZT09JzAwJyAmIHRvdF91cmJhbl9ydXJhbD09J1RvdGFsJyklPiUKICByZXNoYXBlMjo6bWVsdChjKCJ0YWJsZV9uYW1lIiwic3RhdGVfY29kZSIsImRpc3R0X2NvZGUiLCJ0b3RfdXJiYW5fcnVyYWwiLCJhcmVhX25hbWUiLCJhZ2VfZ3JvdXAiKSklPiUKICBzZWxlY3QoLWMoYXJlYV9uYW1lLHRvdF91cmJhbl9ydXJhbCxkaXN0dF9jb2RlLHN0YXRlX2NvZGUsdGFibGVfbmFtZSkpJT4lCiAgZmlsdGVyKCFncmVwbCgndG90XycsdmFyaWFibGUpICYgIWdyZXBsKCdfcCcsdmFyaWFibGUpKSU+JQogIGZpbHRlcihhZ2VfZ3JvdXAhPSdBbGwgYWdlcycpLT5zdW1tYXJ5X2FnZQoKCmBgYAoKYGBge3IgLGluY2x1ZGU9VFJVRX0Kc3VtbWFyeV9hZ2UlPiUKICBmaWx0ZXIoZ3JlcGwoJ2hpbmR1Jyx2YXJpYWJsZSkpJT4lCiAgZ3JvdXBfYnkodmFyaWFibGUpJT4lCiAgbXV0YXRlKHBlcmM9cm91bmQocHJvcC50YWJsZSh2YWx1ZSksMikqMTAwKSU+JQogIHVuZ3JvdXAoKSU+JQogIGdncGxvdChhZXMoYWdlX2dyb3VwLHZhbHVlLzEwMDAwMDAsZmlsbD12YXJpYWJsZSkpKwogIGdlb21fY29sKCkrCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbD1wYXN0ZTAocGVyYywiJSIpKSxzaXplPTMscG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSkpKwogIGNvb3JkX2ZsaXAoKSsKICBsYWJzKHRpdGxlPSJIaW5kdSBhZ2UgZ3JvdXBzIixzdWJ0aXRsZT0iaW4gbWlsbGlvbnMiLHg9IiIseT0iUG9wdWxhdGlvbiBpbiBtaWxsaW9ucyIpCmBgYAoKCmBgYHtyLCAsaW5jbHVkZT1UUlVFfQpzdW1tYXJ5X2FnZSU+JQogIGZpbHRlcihncmVwbCgnbXVzbGltJyx2YXJpYWJsZSkpJT4lCiAgZ3JvdXBfYnkodmFyaWFibGUpJT4lCiAgbXV0YXRlKHBlcmM9cm91bmQocHJvcC50YWJsZSh2YWx1ZSksMikqMTAwKSU+JQogIHVuZ3JvdXAoKSU+JQogIGdncGxvdChhZXMoYWdlX2dyb3VwLHZhbHVlLzEwMDAwMDAsZmlsbD12YXJpYWJsZSkpKwogIGdlb21fY29sKCkrCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbD1wYXN0ZTAocGVyYywiJSIpKSxzaXplPTMscG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSkpKwogIGNvb3JkX2ZsaXAoKSsKICBsYWJzKHRpdGxlPSJNdXNsaW0gYWdlIGdyb3VwcyIsc3VidGl0bGU9ImluIG1pbGxpb25zIix4PSIiLHk9IlBvcHVsYXRpb24gaW4gbWlsbGlvbnMiKQpgYGAKCmBgYHtyLCAsaW5jbHVkZT1UUlVFfQpzdW1tYXJ5X2FnZSU+JQogIGZpbHRlcihncmVwbCgnY2hyaXN0aWFuJyx2YXJpYWJsZSkpJT4lCiAgZ3JvdXBfYnkodmFyaWFibGUpJT4lCiAgbXV0YXRlKHBlcmM9cm91bmQocHJvcC50YWJsZSh2YWx1ZSksMikqMTAwKSU+JQogIHVuZ3JvdXAoKSU+JQogIGdncGxvdChhZXMoYWdlX2dyb3VwLHZhbHVlLzEwMDAwMDAsZmlsbD12YXJpYWJsZSkpKwogIGdlb21fY29sKCkrCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbD1wYXN0ZTAocGVyYywiJSIpKSxzaXplPTMscG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSkpKwogIGNvb3JkX2ZsaXAoKSsKICBsYWJzKHRpdGxlPSJDaHJpc3RpYW4gYWdlIGdyb3VwcyIsc3VidGl0bGU9ImluIG1pbGxpb25zIix4PSIiLHk9IlBvcHVsYXRpb24gaW4gbWlsbGlvbnMiKQpgYGAKCmBgYHtyICxpbmNsdWRlPVRSVUV9CnN1bW1hcnlfYWdlJT4lCiAgZmlsdGVyKGdyZXBsKCdzaWtoJyx2YXJpYWJsZSkpJT4lCiAgZ3JvdXBfYnkodmFyaWFibGUpJT4lCiAgbXV0YXRlKHBlcmM9cm91bmQocHJvcC50YWJsZSh2YWx1ZSksMikqMTAwKSU+JQogIHVuZ3JvdXAoKSU+JQogIGdncGxvdChhZXMoYWdlX2dyb3VwLHZhbHVlLzEwMDAwMDAsZmlsbD12YXJpYWJsZSkpKwogIGdlb21fY29sKCkrCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbD1wYXN0ZTAocGVyYywiJSIpKSxzaXplPTMscG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSkpKwogIGNvb3JkX2ZsaXAoKSsKICBsYWJzKHRpdGxlPSJTaWtoIGFnZSBncm91cHMiLHN1YnRpdGxlPSJpbiBtaWxsaW9ucyIseD0iIix5PSJQb3B1bGF0aW9uIGluIG1pbGxpb25zIikKYGBgCgoKCmBgYHtyICxpbmNsdWRlPVRSVUV9CnN1bW1hcnlfYWdlJT4lCiAgZmlsdGVyKGdyZXBsKCdidWRkaGlzdCcsdmFyaWFibGUpKSU+JQogIGdyb3VwX2J5KHZhcmlhYmxlKSU+JQogIG11dGF0ZShwZXJjPXJvdW5kKHByb3AudGFibGUodmFsdWUpLDIpKjEwMCklPiUKICB1bmdyb3VwKCklPiUKICBnZ3Bsb3QoYWVzKGFnZV9ncm91cCx2YWx1ZS8xMDAwMDAwLGZpbGw9dmFyaWFibGUpKSsKICBnZW9tX2NvbCgpKwogIGdlb21fdGV4dChhZXMobGFiZWw9cGFzdGUwKHBlcmMsIiUiKSksc2l6ZT0zLHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpKSsKICBjb29yZF9mbGlwKCkrCiAgbGFicyh0aXRsZT0iQnVkZGhpc3QgYWdlIGdyb3VwcyIsc3VidGl0bGU9ImluIG1pbGxpb25zIix4PSIiLHk9IlBvcHVsYXRpb24gaW4gbWlsbGlvbnMiKQpgYGAKCgpgYGB7ciAsaW5jbHVkZT1UUlVFfQpzdW1tYXJ5X2FnZSU+JQogIGZpbHRlcihncmVwbCgnamFpbicsdmFyaWFibGUpKSU+JQogIGdyb3VwX2J5KHZhcmlhYmxlKSU+JQogIG11dGF0ZShwZXJjPXJvdW5kKHByb3AudGFibGUodmFsdWUpLDIpKjEwMCklPiUKICB1bmdyb3VwKCklPiUKICBnZ3Bsb3QoYWVzKGFnZV9ncm91cCx2YWx1ZS8xMDAwMDAwLGZpbGw9dmFyaWFibGUpKSsKICBnZW9tX2NvbCgpKwogIGdlb21fdGV4dChhZXMobGFiZWw9cGFzdGUwKHBlcmMsIiUiKSksc2l6ZT0zLHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpKSsKICBjb29yZF9mbGlwKCkrCiAgbGFicyh0aXRsZT0iSmFpbiBhZ2UgZ3JvdXBzIixzdWJ0aXRsZT0iaW4gbWlsbGlvbnMiLHg9IiIseT0iUG9wdWxhdGlvbiBpbiBtaWxsaW9ucyIpCmBgYAoKCgpOb3cgbGV0cyBzZWUgdGhlIGFnZSBwZXJjZW50YWdlcyB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgcmVsaWdpb24gcG9wdWxhdGlvbi4KCmBgYHtyLCBmaWcud2lkdGg9Ni41LGZpZy5oZWlnaHQ9My41LGluY2x1ZGU9VFJVRX0KCnN1bW1hcnlfYWdlJT4lCiAgZmlsdGVyKGdyZXBsKCdfbScsdmFyaWFibGUpKSU+JQogIGdyb3VwX2J5KHZhcmlhYmxlKSU+JQogIG11dGF0ZShwZXJjPXJvdW5kKHByb3AudGFibGUodmFsdWUpLDIpKjEwMCklPiUKICB1bmdyb3VwKCklPiUKICBnZ3Bsb3QoYWVzKHZhcmlhYmxlLHBlcmMsZmlsbD12YXJpYWJsZSkpKwogIGdlb21fY29sKCkrCiAgY29vcmRfZmxpcCgpKwogIGxhYnModGl0bGU9IlJlbGlnaW9uIGJ5IGFnZSBncm91cHMobWFsZXMpIixzdWJ0aXRsZT0iaW4gbWlsbGlvbnMiLHg9IiIseT0iJSBvZiBpdHMgcmVzcGVjdGl2ZSBwb3B1bGF0aW9uIikrCiAgZmFjZXRfd3JhcCh+YWdlX2dyb3VwLHNjYWxlcyA9ICJmcmVlX3giKSsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCiAgCmBgYAoKV2l0aGluIG1hbGVzLCBTaWtoJ3MgaGF2ZSB0aGUgbW9zdCBzZW5pb3IgY2l0aXplbnMgYXMgdGhleSBsaXZlIGZvciA4MCsgeWVhcnMuIEZyb20gNDArICwgSmFpbidzIGFyZSBhbHNvIHNlZW4gY29uc2lzdGVudGx5IGhhdmluZyBoaWdoIHRyZW5kcyB3aXRoaW4gdGhlaXIgcG9wdWxhdGlvbi4KCmBgYHtyLCBmaWcud2lkdGg9Ni41LGZpZy5oZWlnaHQ9My41LGluY2x1ZGU9VFJVRX0KCnN1bW1hcnlfYWdlJT4lCiAgZmlsdGVyKGdyZXBsKCdfZicsdmFyaWFibGUpKSU+JQogIGdyb3VwX2J5KHZhcmlhYmxlKSU+JQogIG11dGF0ZShwZXJjPXJvdW5kKHByb3AudGFibGUodmFsdWUpLDIpKjEwMCklPiUKICB1bmdyb3VwKCklPiUKICBnZ3Bsb3QoYWVzKHZhcmlhYmxlLHBlcmMsZmlsbD12YXJpYWJsZSkpKwogIGdlb21fY29sKCkrCiAgY29vcmRfZmxpcCgpKwogIGxhYnModGl0bGU9IlJlbGlnaW9uIGJ5IGFnZSBncm91cHMoZmVtYWxlcykiLHN1YnRpdGxlPSJpbiBtaWxsaW9ucyIseD0iIix5PSIlIG9mIGl0cyByZXNwZWN0aXZlIHBvcHVsYXRpb24iKSsKICBmYWNldF93cmFwKH5hZ2VfZ3JvdXAsc2NhbGVzID0gImZyZWVfeCIpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKYGBgCgoKV2l0aGluIGZlbWFsZXMsIFNpa2gncyBhbmQgSmFpbidzIGhhdmUgdGhlIDgwKyBzZW5pb3IgY2l0aXplbnMuIFdlIGFsc28gc2VlIEJ1ZGRoaXN0ICYgQ2hyaXN0aWFucyBhbHNvIHNob3dpbmcgaGlnaCB0cmVuZHMgZnJvbSA0MCsgeWVhcnMuCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg==