Good afternoon all! First let us find out what our working directory
is.
getwd()
[1] "C:/Users/raulr/Downloads"
Today we are going to query the table quiz2 by using Transact-SQL
inside the R chunks. First, we are going to need to install the package
sqldf.
install.packages("sqldf")
WARNING: Rtools is required to build R packages but is not currently installed. Please download and install the appropriate version of Rtools before proceeding:
https://cran.rstudio.com/bin/windows/Rtools/
Installing package into ‘C:/Users/raulr/AppData/Local/R/win-library/4.2’
(as ‘lib’ is unspecified)
trying URL 'https://cran.rstudio.com/bin/windows/contrib/4.2/sqldf_0.4-11.zip'
Content type 'application/zip' length 78523 bytes (76 KB)
downloaded 76 KB
package ‘sqldf’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\raulr\AppData\Local\Temp\RtmpIlbpCL\downloaded_packages
install.packages("sqldf")
WARNING: Rtools is required to build R packages but is not currently installed. Please download and install the appropriate version of Rtools before proceeding:
https://cran.rstudio.com/bin/windows/Rtools/
Installing package into ‘C:/Users/raulr/AppData/Local/R/win-library/4.2’
(as ‘lib’ is unspecified)
trying URL 'https://cran.rstudio.com/bin/windows/contrib/4.2/sqldf_0.4-11.zip'
Content type 'application/zip' length 78523 bytes (76 KB)
downloaded 76 KB
package ‘sqldf’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\raulr\AppData\Local\Temp\RtmpIlbpCL\downloaded_packages
library(sqldf)
Warning: package ‘sqldf’ was built under R version 4.2.2Loading required package: gsubfn
Warning: package ‘gsubfn’ was built under R version 4.2.2Loading required package: proto
Warning: package ‘proto’ was built under R version 4.2.2Loading required package: RSQLite
Warning: package ‘RSQLite’ was built under R version 4.2.2
Upload data frame quiz2, since it has header to have a proper
visualization would be necessary to write header=TRUE and since values
are separated by commas sep=‘,’
Let us run a query that returns every single record from the table
data1. Function sqldf allows you to select what do you want to show, in
this exapmle it is plottted the whole data frmae but in the next one
will be selected some parts.
Now I would like you to create a query that returns every single
record (row) for the fields region and population.
Let us now create a query that returns the first 10 records of the
data1 table.
In this example sqldf function returns the first 10 rows of the
dataframe which in this case is the whole dataframe.
In this example sqldf function returns the first 5 rows ordered by
the number of infections, from the one with highest number to the oone
with the lowest, of the dataframe
Interpret the output of the query ran above and run a similar query
(limit 7) including the attributes ipadddr , ufo2010 ,and
infections.
This example returns region and infection variables with more than
1000 infections, and it is ordered from the city with more infections to
the one with less.
Now I would like you to inspect (create a query) income,region and
population when the condition is income>=50,000. Make comments There
is not location with 50000 or more infections.
Returns the rows with more than 50000 income and more than 2000
infections or rows with a bigger population than 100000.
Interpret the query ran above and create a query that recreates a
similar case scenario (one that is critical for the success of this
mini-project).
Let us run a query that returns every region and population with a
number of infections between 1000 and 7000.
Interpret the query below and list a hypothetical case scenario in
which this query would be useful. Query below would be useful since we
would like to know if could be a relationship between subregions which
name starts with “a” and number of infections. Reason to search this
relationship could be that have more tourists because their names are
appears first in the lists.
Last,let us find the average number of infections in our table.
Let us inspect the new table defined below data2.
Let us apply summary to data2 and examine the output. This summary is
saying that the number of regions examined is 29, that its populations
goes from 2311 to 1554720 people, income goes from 26784 to 70821, in
some of the subregions have zero unadentified flying objects
visualizations since maximum number of visualization (169) is so much
higher than the value of the 3rd quarter (9), and since value of the
mean is not very big aswell, most of the subregions do not have so much
visualizations and that there are a small number of subregions that have
a lot of ufo visualizations, this values works as outliers. From the
data could be seen too that the average of infections between all the
regions is 1117.
summary(data2)
region pop income ipaddr ufo2010 infections
Length:29 Min. : 2311 Min. :26784 Min. : 637 Min. : 0.00 Min. : 39
Class :character 1st Qu.: 19005 1st Qu.:37970 1st Qu.: 12294 1st Qu.: 0.00 1st Qu.: 123
Mode :character Median : 32122 Median :41595 Median : 30418 Median : 2.00 Median : 245
Mean : 135940 Mean :43858 Mean : 440130 Mean : 16.66 Mean :1117
3rd Qu.: 101482 3rd Qu.:47469 3rd Qu.: 102104 3rd Qu.: 9.00 3rd Qu.: 672
Max. :1554720 Max. :70821 Max. :5394949 Max. :169.00 Max. :6781
Next, I would like you to complete the following steps:
1-Run a query that returns full details for every record from the
west region. Since west is the only word in regions that starts with
w.
2-Run a query that returns full details for every record from the
east region where the number of infections is greater than 1500.
3-Run a few queries that can potentially help us to make the point
that: a.Region affects the number of infections Could be said that
region affects the number of infections because the average of each
location is very different.
b.Population affects the number of infections I would say that since
regions with more population has higher value of average infections, yes
population affects infections.
c.Income affects the number of infections The maximun number of
infections is for the max income. However, I do not see a clear relation
between these 2 variables.
sqldf('SELECT income,infections FROM data2 order by income desc')
NA
d.ufo2010 affects the number of infections Since biggest number of
infections happened in regions where more unidentified flying objects
are founded, I think could exits a relationship between variable ufo2010
and infections.
- The different interactions of region and income, and income and
population affects the number of infections.
The average of infections of each region depends on the number on
income the region has.
with the data that could be seen inthe table, I think the income does
not depend on the population number but xist a realtionship between
income and infections.
LS0tDQp0aXRsZTogIlIgU1FMIg0KYXV0aG9yOiAiUmF1bCBSb2NlcyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCkdvb2QgYWZ0ZXJub29uIGFsbCEgRmlyc3QgbGV0IHVzIGZpbmQgb3V0IHdoYXQgb3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzLg0KDQpgYGB7cn0NCmdldHdkKCkNCmBgYA0KDQpUb2RheSB3ZSBhcmUgZ29pbmcgdG8gcXVlcnkgdGhlIHRhYmxlIHF1aXoyIGJ5IHVzaW5nIFRyYW5zYWN0LVNRTCBpbnNpZGUgdGhlIFIgY2h1bmtzLiBGaXJzdCwgd2UgYXJlIGdvaW5nIHRvIG5lZWQgdG8gaW5zdGFsbCB0aGUgcGFja2FnZSBzcWxkZi4NCmBgYHtyfQ0KaW5zdGFsbC5wYWNrYWdlcygic3FsZGYiKQ0KbGlicmFyeShzcWxkZikNCmBgYA0KVXBsb2FkIGRhdGEgZnJhbWUgcXVpejIsIHNpbmNlIGl0IGhhcyBoZWFkZXIgdG8gaGF2ZSBhIHByb3BlciB2aXN1YWxpemF0aW9uIHdvdWxkIGJlIG5lY2Vzc2FyeSB0byB3cml0ZSBoZWFkZXI9VFJVRSBhbmQgc2luY2UgdmFsdWVzIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzIHNlcD0nLCcNCmBgYHtyfQ0KZGF0YTE8LXJlYWQuY3N2KCJDOi9Vc2Vycy9yYXVsci9PbmVEcml2ZS9Fc2NyaXRvcmlvL1NUVS9QcmdyYW0gRm9yIERhdGEgQW5hbHl0aWNzL0FyY2hpdm9zL3F1aXoyLmNzdiIsaGVhZGVyID0gVFJVRSxzZXAgPSAiLCIpDQpzaG93KGRhdGExKQ0KYGBgDQoNCg0KTGV0IHVzIHJ1biBhIHF1ZXJ5IHRoYXQgcmV0dXJucyBldmVyeSBzaW5nbGUgcmVjb3JkIGZyb20gdGhlIHRhYmxlIGRhdGExLg0KRnVuY3Rpb24gc3FsZGYgYWxsb3dzIHlvdSB0byBzZWxlY3Qgd2hhdCBkbyB5b3Ugd2FudCB0byBzaG93LCBpbiB0aGlzIGV4YXBtbGUgaXQgaXMgcGxvdHR0ZWQgdGhlIHdob2xlIGRhdGEgZnJtYWUgYnV0IGluIHRoZSBuZXh0IG9uZSB3aWxsIGJlIHNlbGVjdGVkIHNvbWUgcGFydHMuDQpgYGB7cn0NCnNxbGRmKCJTRUxFQ1QgKiBGUk9NIGRhdGExIikNCmBgYA0KDQoNCg0KTm93IEkgd291bGQgbGlrZSB5b3UgdG8gY3JlYXRlIGEgcXVlcnkgdGhhdCByZXR1cm5zIGV2ZXJ5IHNpbmdsZSByZWNvcmQgKHJvdykgZm9yIHRoZSBmaWVsZHMgcmVnaW9uIGFuZCBwb3B1bGF0aW9uLg0KDQpMZXQgdXMgbm93IGNyZWF0ZSBhIHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZmlyc3QgMTAgcmVjb3JkcyBvZiB0aGUgZGF0YTEgdGFibGUuDQoNCkluIHRoaXMgZXhhbXBsZSBzcWxkZiBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaXJzdCAxMCByb3dzIG9mIHRoZSBkYXRhZnJhbWUgd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZSB3aG9sZSBkYXRhZnJhbWUuDQpgYGB7cn0NCnNxbGRmKCdTRUxFQ1QgKiBGUk9NIGRhdGExIExJTUlUIDEwJykNCmBgYA0KDQpJbiB0aGlzIGV4YW1wbGUgc3FsZGYgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3QgNSByb3dzIG9yZGVyZWQgYnkgdGhlIG51bWJlciBvZiBpbmZlY3Rpb25zLCBmcm9tIHRoZSBvbmUgd2l0aCBoaWdoZXN0IG51bWJlciB0byB0aGUgb29uZSB3aXRoIHRoZSBsb3dlc3QsIG9mIHRoZSBkYXRhZnJhbWUNCmBgYHtyfQ0Kc3FsZGYoIlNFTEVDVCAqIEZST00gZGF0YTEgT1JERVIgQlkgaW5mZWN0aW9ucyBERVNDICBMSU1JVCA1IikNCmBgYA0KDQpJbnRlcnByZXQgdGhlIG91dHB1dCBvZiB0aGUgcXVlcnkgcmFuIGFib3ZlIGFuZCBydW4gYSBzaW1pbGFyIHF1ZXJ5IChsaW1pdCA3KSBpbmNsdWRpbmcgdGhlIGF0dHJpYnV0ZXMgaXBhZGRkciAsIHVmbzIwMTAgLGFuZCBpbmZlY3Rpb25zLg0KDQpgYGB7cn0NCnNxbGRmKCdTRUxFQ1QgaXBhZGRyICwgdWZvMjAxMCAsIGluZmVjdGlvbnMgRlJPTSBkYXRhMSBMSU1JVCA3JykNCmBgYA0KDQoNCg0KDQpUaGlzIGV4YW1wbGUgcmV0dXJucyByZWdpb24gYW5kIGluZmVjdGlvbiB2YXJpYWJsZXMgd2l0aCBtb3JlIHRoYW4gMTAwMCBpbmZlY3Rpb25zLCBhbmQgaXQgaXMgb3JkZXJlZCBmcm9tIHRoZSBjaXR5IHdpdGggbW9yZSBpbmZlY3Rpb25zIHRvIHRoZSBvbmUgd2l0aCBsZXNzLg0KYGBge3J9DQpzcWxkZignU0VMRUNUIHJlZ2lvbixpbmZlY3Rpb25zIEZST00gZGF0YTEgV0hFUkUgaW5mZWN0aW9ucyA+IDEwMDAgb3JkZXIgYnkgMiBkZXNjJykNCmBgYA0KDQoNCk5vdyBJIHdvdWxkIGxpa2UgeW91IHRvIGluc3BlY3QgKGNyZWF0ZSBhIHF1ZXJ5KSBpbmNvbWUscmVnaW9uIGFuZCBwb3B1bGF0aW9uIHdoZW4gdGhlIGNvbmRpdGlvbiBpcyBpbmNvbWU+PTUwLDAwMC4gTWFrZSBjb21tZW50cw0KVGhlcmUgaXMgbm90IGxvY2F0aW9uIHdpdGggNTAwMDAgb3IgbW9yZSBpbmZlY3Rpb25zLg0KYGBge3J9DQpzcWxkZignU0VMRUNUIGluY29tZSxyZWdpb24scG9wIEZST00gZGF0YTEgV0hFUkUgaW5mZWN0aW9ucyA+PSA1MDAwMCcpDQpgYGANCg0KDQoNCg0KUmV0dXJucyB0aGUgcm93cyB3aXRoIG1vcmUgdGhhbiA1MDAwMCBpbmNvbWUgYW5kIG1vcmUgdGhhbiAyMDAwIGluZmVjdGlvbnMgb3Igcm93cyB3aXRoIGEgYmlnZ2VyIHBvcHVsYXRpb24gdGhhbiAxMDAwMDAuDQpgYGB7cn0NCnNxbGRmKCdTRUxFQ1QgKiBGUk9NIGRhdGExIFdIRVJFIChpbmNvbWUgPiA1MDAwMCBBTkQgaW5mZWN0aW9ucyA+IDIwMDApIE9SIHBvcCA+IDEwMDAwMCcpDQpgYGANCg0KDQpJbnRlcnByZXQgdGhlIHF1ZXJ5IHJhbiBhYm92ZSBhbmQgY3JlYXRlIGEgcXVlcnkgdGhhdCByZWNyZWF0ZXMgYSBzaW1pbGFyIGNhc2Ugc2NlbmFyaW8gKG9uZSB0aGF0IGlzIGNyaXRpY2FsIGZvciB0aGUgc3VjY2VzcyBvZiB0aGlzIG1pbmktcHJvamVjdCkuDQoNCmBgYHtyfQ0Kc3FsZGYoJ1NFTEVDVCByZWdpb24scG9wLHVmbzIwMTAsaW5mZWN0aW9ucyBGUk9NIGRhdGExIFdIRVJFIGluZmVjdGlvbnMgPiAxMDAwJykNCmBgYA0KDQoNCkxldCB1cyBydW4gYSBxdWVyeSB0aGF0IHJldHVybnMgZXZlcnkgcmVnaW9uIGFuZCBwb3B1bGF0aW9uIHdpdGggYSBudW1iZXIgb2YgaW5mZWN0aW9ucyBiZXR3ZWVuIDEwMDAgYW5kIDcwMDAuDQoNCmBgYHtyfQ0Kc3FsZGYoJ1NFTEVDVCByZWdpb24scG9wIEZST00gZGF0YTEgV0hFUkUgaW5mZWN0aW9ucyBiZXR3ZWVuICAxMDAwIGFuZCA3MDAwJykNCmBgYA0KDQoNCg0KSW50ZXJwcmV0IHRoZSBxdWVyeSBiZWxvdyBhbmQgbGlzdCBhIGh5cG90aGV0aWNhbCBjYXNlIHNjZW5hcmlvIGluIHdoaWNoIHRoaXMgcXVlcnkgd291bGQgYmUgdXNlZnVsLg0KUXVlcnkgYmVsb3cgd291bGQgYmUgdXNlZnVsIHNpbmNlIHdlIHdvdWxkIGxpa2UgdG8ga25vdyBpZiBjb3VsZCBiZSBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHN1YnJlZ2lvbnMgd2hpY2ggbmFtZSBzdGFydHMgd2l0aCAiYSIgYW5kIG51bWJlciBvZiBpbmZlY3Rpb25zLiBSZWFzb24gdG8gc2VhcmNoIHRoaXMgcmVsYXRpb25zaGlwIGNvdWxkIGJlIHRoYXQgaGF2ZSBtb3JlIHRvdXJpc3RzIGJlY2F1c2UgdGhlaXIgbmFtZXMgYXJlIGFwcGVhcnMgZmlyc3QgaW4gdGhlIGxpc3RzLg0KYGBge3J9DQpzcWxkZignU0VMRUNUICogRlJPTSBkYXRhMSBXSEVSRSBzdWJyZWdpb24gTElLRSAiQSUiJykNCmBgYA0KDQpMYXN0LGxldCB1cyBmaW5kIHRoZSBhdmVyYWdlIG51bWJlciBvZiBpbmZlY3Rpb25zIGluIG91ciB0YWJsZS4NCg0KYGBge3J9DQpzcWxkZigiU0VMRUNUIEFWRyhpbmZlY3Rpb25zKSBGUk9NIGRhdGExIikNCmBgYA0KDQpMZXQgdXMgaW5zcGVjdCB0aGUgbmV3IHRhYmxlIGRlZmluZWQgYmVsb3cgZGF0YTIuDQoNCmBgYHtyfQ0KZGF0YTI8LXJlYWQuY3N2KCJDOi9Vc2Vycy9yYXVsci9PbmVEcml2ZS9Fc2NyaXRvcmlvL1NUVS9QcmdyYW0gRm9yIERhdGEgQW5hbHl0aWNzL0FyY2hpdm9zL2ZpbmFsZXhhbS5jc3YiLGhlYWRlciA9IFRSVUUsc2VwID0gIiwiKQ0KZGF0YTINCmBgYA0KDQpMZXQgdXMgYXBwbHkgc3VtbWFyeSB0byBkYXRhMiBhbmQgZXhhbWluZSB0aGUgb3V0cHV0Lg0KVGhpcyBzdW1tYXJ5IGlzIHNheWluZyB0aGF0IHRoZSBudW1iZXIgb2YgcmVnaW9ucyBleGFtaW5lZCBpcyAyOSwgdGhhdCBpdHMgcG9wdWxhdGlvbnMgZ29lcyBmcm9tIDIzMTEgdG8gMTU1NDcyMCBwZW9wbGUsIGluY29tZSBnb2VzIGZyb20gMjY3ODQgdG8gNzA4MjEsIGluIHNvbWUgb2YgdGhlIHN1YnJlZ2lvbnMgaGF2ZSB6ZXJvIHVuYWRlbnRpZmllZCBmbHlpbmcgb2JqZWN0cyB2aXN1YWxpemF0aW9ucyBzaW5jZSBtYXhpbXVtIG51bWJlciBvZiB2aXN1YWxpemF0aW9uICgxNjkpIGlzIHNvIG11Y2ggaGlnaGVyIHRoYW4gdGhlIHZhbHVlIG9mIHRoZSAzcmQgcXVhcnRlciAoOSksIGFuZCBzaW5jZSB2YWx1ZSBvZiB0aGUgbWVhbiBpcyBub3QgdmVyeSBiaWcgYXN3ZWxsLCBtb3N0IG9mIHRoZSBzdWJyZWdpb25zIGRvIG5vdCBoYXZlIHNvIG11Y2ggdmlzdWFsaXphdGlvbnMgYW5kIHRoYXQgdGhlcmUgYXJlIGEgc21hbGwgbnVtYmVyIG9mIHN1YnJlZ2lvbnMgdGhhdCBoYXZlIGEgbG90IG9mIHVmbyB2aXN1YWxpemF0aW9ucywgdGhpcyB2YWx1ZXMgd29ya3MgYXMgb3V0bGllcnMuIEZyb20gdGhlIGRhdGEgY291bGQgYmUgc2VlbiB0b28gdGhhdCB0aGUgYXZlcmFnZSBvZiBpbmZlY3Rpb25zIGJldHdlZW4gYWxsIHRoZSByZWdpb25zIGlzIDExMTcuDQpgYGB7cn0NCnN1bW1hcnkoZGF0YTIpDQpgYGANCg0KTmV4dCwgSSB3b3VsZCBsaWtlIHlvdSB0byBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOg0KDQoxLVJ1biBhIHF1ZXJ5IHRoYXQgcmV0dXJucyBmdWxsIGRldGFpbHMgZm9yIGV2ZXJ5IHJlY29yZCBmcm9tIHRoZSB3ZXN0IHJlZ2lvbi4NClNpbmNlIHdlc3QgaXMgdGhlIG9ubHkgd29yZCBpbiByZWdpb25zIHRoYXQgc3RhcnRzIHdpdGggdy4NCmBgYHtyfQ0Kc3FsZGYoJ1NFTEVDVCAqIEZST00gZGF0YTIgV0hFUkUgcmVnaW9uIExJS0UgIlclIicpDQpgYGANCg0KDQoyLVJ1biBhIHF1ZXJ5IHRoYXQgcmV0dXJucyBmdWxsIGRldGFpbHMgZm9yIGV2ZXJ5IHJlY29yZCBmcm9tIHRoZSBlYXN0IHJlZ2lvbiB3aGVyZSB0aGUgbnVtYmVyIG9mIGluZmVjdGlvbnMgaXMgZ3JlYXRlciB0aGFuIDE1MDAuDQpgYGB7cn0NCnNxbGRmKCdTRUxFQ1QgKiBGUk9NIGRhdGEyIFdIRVJFIGluZmVjdGlvbnMgPiAxNTAwIGFuZCByZWdpb249PSJFYXN0IicpDQpgYGANCg0KDQozLVJ1biBhIGZldyBxdWVyaWVzIHRoYXQgY2FuIHBvdGVudGlhbGx5IGhlbHAgdXMgdG8gbWFrZSB0aGUgcG9pbnQgdGhhdDoNCiAgIGEuUmVnaW9uIGFmZmVjdHMgdGhlIG51bWJlciBvZiBpbmZlY3Rpb25zDQogICBDb3VsZCBiZSBzYWlkIHRoYXQgcmVnaW9uIGFmZmVjdHMgdGhlIG51bWJlciBvZiBpbmZlY3Rpb25zIGJlY2F1c2UgdGhlIGF2ZXJhZ2Ugb2YgZWFjaCBsb2NhdGlvbiBpcyB2ZXJ5IGRpZmZlcmVudC4NCmBgYHtyfQ0Kc3FsZGYoJ1NFTEVDVCByZWdpb24scm91bmQoQXZnKGluZmVjdGlvbnMpKSBGUk9NIGRhdGEyIGdyb3VwIGJ5IHJlZ2lvbiBvcmRlciBieSAyIGRlc2MgJykNCmBgYA0KICAgDQogICBiLlBvcHVsYXRpb24gYWZmZWN0cyB0aGUgbnVtYmVyIG9mIGluZmVjdGlvbnMNCiAgIEkgd291bGQgc2F5IHRoYXQgc2luY2UgcmVnaW9ucyB3aXRoIG1vcmUgcG9wdWxhdGlvbiBoYXMgaGlnaGVyIHZhbHVlIG9mIGF2ZXJhZ2UgaW5mZWN0aW9ucywgeWVzIHBvcHVsYXRpb24gYWZmZWN0cyBpbmZlY3Rpb25zLg0KYGBge3J9DQpzcWxkZignU0VMRUNUIHJlZ2lvbiwgcG9wLCByb3VuZChBdmcoaW5mZWN0aW9ucykpIEZST00gZGF0YTIgZ3JvdXAgYnkgcmVnaW9uIG9yZGVyIGJ5IDIgZGVzYyAnKQ0KYGBgDQogICANCiAgIA0KICAgYy5JbmNvbWUgYWZmZWN0cyB0aGUgbnVtYmVyIG9mIGluZmVjdGlvbnMNCiAgVGhlIG1heGltdW4gbnVtYmVyIG9mIGluZmVjdGlvbnMgaXMgZm9yIHRoZSBtYXggaW5jb21lLiBIb3dldmVyLCBJIGRvIG5vdCBzZWUgYSBjbGVhciByZWxhdGlvbiBiZXR3ZWVuIHRoZXNlIDIgdmFyaWFibGVzLg0KIA0KYGBge3J9DQpzcWxkZignU0VMRUNUIGluY29tZSxpbmZlY3Rpb25zIEZST00gZGF0YTIgb3JkZXIgYnkgaW5jb21lIGRlc2MnKQ0KDQpgYGANCiANCiANCiAgIGQudWZvMjAxMCBhZmZlY3RzIHRoZSBudW1iZXIgb2YgaW5mZWN0aW9ucw0KICAgU2luY2UgYmlnZ2VzdCBudW1iZXIgb2YgaW5mZWN0aW9ucyBoYXBwZW5lZCBpbiByZWdpb25zIHdoZXJlIG1vcmUgdW5pZGVudGlmaWVkIGZseWluZyBvYmplY3RzIGFyZSBmb3VuZGVkLCBJIHRoaW5rIGNvdWxkIGV4aXRzIGEgcmVsYXRpb25zaGlwIGJldHdlZW4gdmFyaWFibGUgdWZvMjAxMCBhbmQgaW5mZWN0aW9ucy4NCiAgIA0KYGBge3J9DQpzcWxkZignU0VMRUNUIHVmbzIwMTAsaW5mZWN0aW9ucyBGUk9NIGRhdGEyIG9yZGVyIGJ5IHVmbzIwMTAgZGVzYycpDQpgYGANCg0KICAgDQogICBlLiBUaGUgZGlmZmVyZW50IGludGVyYWN0aW9ucyBvZiByZWdpb24gYW5kIGluY29tZSwgYW5kIGluY29tZSBhbmQgcG9wdWxhdGlvbiBhZmZlY3RzIHRoZSBudW1iZXIgb2YgaW5mZWN0aW9ucy4NCiAgIA0KICAgVGhlIGF2ZXJhZ2Ugb2YgaW5mZWN0aW9ucyBvZiBlYWNoIHJlZ2lvbiBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb24gaW5jb21lIHRoZSByZWdpb24gaGFzLiANCmBgYHtyfQ0Kc3FsZGYoJ1NFTEVDVCByZWdpb24saW5jb21lLCByb3VuZChBdmcoaW5mZWN0aW9ucykpIEZST00gZGF0YTIgZ3JvdXAgYnkgcmVnaW9uIG9yZGVyIGJ5IGluY29tZSBkZXNjJykNCmBgYA0Kd2l0aCB0aGUgZGF0YSB0aGF0IGNvdWxkIGJlIHNlZW4gaW50aGUgdGFibGUsIEkgdGhpbmsgdGhlIGluY29tZSBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIHBvcHVsYXRpb24gbnVtYmVyIGJ1dCB4aXN0IGEgcmVhbHRpb25zaGlwIGJldHdlZW4gaW5jb21lIGFuZCBpbmZlY3Rpb25zLg0KYGBge3J9DQpzcWxkZignU0VMRUNUIGluY29tZSwgcG9wLCByb3VuZChBdmcoaW5mZWN0aW9ucykpIEZST00gZGF0YTIgZ3JvdXAgYnkgcmVnaW9uIG9yZGVyIGJ5IGluY29tZSBkZXNjJykNCmBgYA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K