diff --git a/cloudbuild/Dockerfile b/cloudbuild/Dockerfile index b18f29c333..13537c14a1 100644 --- a/cloudbuild/Dockerfile +++ b/cloudbuild/Dockerfile @@ -10,6 +10,7 @@ RUN apt-get update && apt-get install -y build-essential # install yapf RUN pip install yapf RUN pip3 install yapf +RUN pip3 install flake8 # install golang (+gofmt) RUN apt-get install -y golang diff --git a/examples/alert-absence-dedup/policy_doc.md b/examples/alert-absence-dedup/policy_doc.md index cee7f050df..6f5b92fdba 100644 --- a/examples/alert-absence-dedup/policy_doc.md +++ b/examples/alert-absence-dedup/policy_doc.md @@ -18,6 +18,6 @@ sources are monitored by this alert. data ingestion. ### Case 2: At least 1 time-series absent -1. The time series that has gone absent should be able to be identified with +1. The time series that has gone absent should be able to be identified with by the chart for metric: ${metric.display_name}. 2. Investigate the specific data sources. The resource type is: ${resource.type} \ No newline at end of file diff --git a/examples/bigquery-audit-log/README.md b/examples/bigquery-audit-log/README.md index e063f19742..2e25c6bacc 100644 --- a/examples/bigquery-audit-log/README.md +++ b/examples/bigquery-audit-log/README.md @@ -23,14 +23,14 @@ A short description relevant to our use case is presented below - 1. In the GCP Cloud Console select the project you want to export the logs to. Go to Stackdriver --> Logging --> Exports. 2. Click on Create Export. Select the following in the drop down menu: "BigQuery", "All logs", "Any log level", "No limit" and "Jump to now" respectively. 3. In the configuration windows on the right side of the screen, enter a Sink Name of your choice. Select BigQuery as Sink Service. Select the "BigQuery Audit" (refer to Prerequisites) dataset as the Sink Destination. -4. Click on Create Sink. +4. Click on Create Sink. 5. A message box pops up to notify you of successful creation. Click on Close. 6. Click on the Play button located on the top bar to start the export. ### 2. Scheduling a BigQuery job -Use the SQL script in the file bigquery_audit_log.sql (located in this GitHub folder) to create a scheduled query in BigQuery. Click [here](https://cloud.google.com/bigquery/docs/scheduling-queries) for instructions on how to create scheduled queries. +Use the SQL script in the file bigquery_audit_log.sql (located in this GitHub folder) to create a scheduled query in BigQuery. Click [here](https://cloud.google.com/bigquery/docs/scheduling-queries) for instructions on how to create scheduled queries. -Create a materialized table that stores data from the scheduled query. +Create a materialized table that stores data from the scheduled query. You can give it a custom name, we will be referring to it as **bigquery_audit_log**. ### 3. Copying the data source in Data Studio diff --git a/examples/bigquery-audit-log/bigquery_audit_log.sql b/examples/bigquery-audit-log/bigquery_audit_log.sql index 8fd1051f84..eb6b9f7b2d 100644 --- a/examples/bigquery-audit-log/bigquery_audit_log.sql +++ b/examples/bigquery-audit-log/bigquery_audit_log.sql @@ -42,7 +42,7 @@ WITH BQAudit AS ( protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.startTime, SECOND)) / 60) AS INT64) AS executionMinuteBuckets, IF(COALESCE(protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.totalProcessedBytes, - protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.totalSlotMs, + protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.totalSlotMs, protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatus.error.code) IS NULL, TRUE, FALSE ) AS isCached, protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.totalSlotMs, @@ -60,8 +60,8 @@ WITH BQAudit AS ( WHERE protopayload_auditlog.serviceName = 'bigquery.googleapis.com' AND protopayload_auditlog.methodName = 'jobservice.jobcompleted' - AND protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.eventName IN - ( + AND protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.eventName IN + ( 'table_copy_job_completed', 'query_job_completed', 'extract_job_completed', diff --git a/examples/bigquery-audit-log/docs/query_jobs.md b/examples/bigquery-audit-log/docs/query_jobs.md index d597d36b67..3e5306be40 100644 --- a/examples/bigquery-audit-log/docs/query_jobs.md +++ b/examples/bigquery-audit-log/docs/query_jobs.md @@ -10,7 +10,7 @@ The Selection Bar allows the user to filter the data in the report to a specific ![Selection Bar](../images/query_jobs/Image1.png) ### No. of Queries (this week vs. last week) - per day of the week -The graph displays the total number of queries run per day of the week for the current week, also displaying a contrast with the same data for the previous week. +The graph displays the total number of queries run per day of the week for the current week, also displaying a contrast with the same data for the previous week. ![No. of Queries (this week vs. last week) - per day of the week](../images/query_jobs/Image2.png) diff --git a/examples/bigquery-billing-dashboard/bigquery_billing_export.sql b/examples/bigquery-billing-dashboard/bigquery_billing_export.sql index 8f7a4174f0..7d75f42970 100644 --- a/examples/bigquery-billing-dashboard/bigquery_billing_export.sql +++ b/examples/bigquery-billing-dashboard/bigquery_billing_export.sql @@ -4,11 +4,11 @@ * Description: * This SQL script transforms the billing export table to anonymize user data * and included a linear projection for daily running cost. The output table - * powers the Cloud Billing Dashboard + * powers the Cloud Billing Dashboard * (https://cloud.google.com/billing/docs/how-to/visualize-data). */ -WITH +WITH -- Generate dates in the current month. current_month_dates AS ( SELECT gen_date @@ -17,8 +17,8 @@ current_month_dates AS ( GENERATE_DATE_ARRAY( DATE_TRUNC(CURRENT_DATE(), MONTH), DATE_SUB(DATE_TRUNC( - DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH), MONTH), - INTERVAL 1 DAY), + DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH), MONTH), + INTERVAL 1 DAY), INTERVAL 1 DAY) ) AS gen_date), @@ -41,11 +41,11 @@ avg_daily_cost AS ( -- Calculate projected_running_cost projected_cost AS ( -SELECT +SELECT daily_cost.gen_date AS date, daily_cost.cost AS daily_cost, avg_daily_cost.cost AS avg_daily_cost, - (DATE_DIFF(daily_cost.gen_date, DATE_TRUNC(CURRENT_DATE, MONTH), DAY) + 1) * + (DATE_DIFF(daily_cost.gen_date, DATE_TRUNC(CURRENT_DATE, MONTH), DAY) + 1) * avg_daily_cost.cost AS projected_running_cost FROM daily_cost CROSS JOIN avg_daily_cost) diff --git a/examples/bigquery-cross-project-slot-monitoring/tests/main_test.py b/examples/bigquery-cross-project-slot-monitoring/tests/main_test.py index 9e4d4c91a5..770b3ac450 100644 --- a/examples/bigquery-cross-project-slot-monitoring/tests/main_test.py +++ b/examples/bigquery-cross-project-slot-monitoring/tests/main_test.py @@ -124,7 +124,7 @@ def testCopyMetrics_NotCalledByCloudTasks(self): def testCopyMetrics_MissingParameters(self): self.app.get( - '/CopyMetrics', + '/CopyMetrics', headers={'X-AppEngine-QueueName': 'SomeQueue'}, status=400) diff --git a/examples/bigquery-row-access-groups/auth_util.py b/examples/bigquery-row-access-groups/auth_util.py index a7b3dc3791..b69f4b4e52 100644 --- a/examples/bigquery-row-access-groups/auth_util.py +++ b/examples/bigquery-row-access-groups/auth_util.py @@ -29,8 +29,8 @@ def get_credentials(admin_email, scopes): request = google.auth.transport.requests.Request() - # This retrieves the default credentials from the environment - in this - # case, for the Service Account attached to the VM. The unused _ variable + # This retrieves the default credentials from the environment - in this + # case, for the Service Account attached to the VM. The unused _ variable # is just the GCP project ID - we're dropping it because we don't care. default_credentials, _ = google.auth.default() # The credentials object won't include the service account e-mail address diff --git a/examples/bigtable-change-key/README.md b/examples/bigtable-change-key/README.md index e01f91469d..78cb175b6b 100644 --- a/examples/bigtable-change-key/README.md +++ b/examples/bigtable-change-key/README.md @@ -1,10 +1,10 @@ ## Dataflow pipeline to change the key of a Bigtable For an optimal performance of our requests to a Bigtable instance, [it is crucial to choose -a good key for our records](https://cloud.google.com/bigtable/docs/schema-design), -so that both read and writes are evenly distributed across the keys space. Although we have tools -such as [Key Visualizer](https://cloud.google.com/bigtable/docs/keyvis-overview), to diagnose how -our key is performing, it is not obvious how to change or update a key for all the records in a table. +a good key for our records](https://cloud.google.com/bigtable/docs/schema-design), +so that both read and writes are evenly distributed across the keys space. Although we have tools +such as [Key Visualizer](https://cloud.google.com/bigtable/docs/keyvis-overview), to diagnose how +our key is performing, it is not obvious how to change or update a key for all the records in a table. This example contains a Dataflow pipeline to read data from a table in a Bigtable instance, and to write the same records to another table with the same @@ -20,7 +20,7 @@ The build process is managed using Maven. To compile, just run To create a package for the pipeline, run -`mvn package` +`mvn package` ### Setup `cbt` @@ -144,7 +144,7 @@ You should see a job with a simple graph, similar to this one: You can now check that the destination table has the same records as the input table, and that the key has changed. You can use `cbt count` and `cbt read` for -that purpose, by comparing with the results of the original table. +that purpose, by comparing with the results of the original table. ### Change the update key function @@ -176,11 +176,11 @@ It is only provided as an example so it is easier to write your own function. ``` The function has two input parameters: - + * `key`: the current key of the record * `record`: the full record, with all the column families, columns, values/cells, versions of cells, etc. - + The `record` is of type [com.google.bigtable.v2.Row](http://googleapis.github.io/googleapis/java/all/latest/apidocs/com/google/bigtable/v2/Row.html). You can traverse the record to recover all the elements. See [an example of how diff --git a/examples/bigtable-change-key/scripts/copy_schema_to_new_table.sh b/examples/bigtable-change-key/scripts/copy_schema_to_new_table.sh index 662ae8f6e0..0ac7e97e6a 100755 --- a/examples/bigtable-change-key/scripts/copy_schema_to_new_table.sh +++ b/examples/bigtable-change-key/scripts/copy_schema_to_new_table.sh @@ -13,7 +13,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - + usage() { echo "Usage $0 INPUT_TABLE_NAME OUTPUT_TABLE_NAME" echo @@ -25,7 +25,7 @@ then usage exit 0 fi - + if [ $# -lt 2 ] then diff --git a/examples/bq_benchmarks/README.md b/examples/bq_benchmarks/README.md index dd8809b803..836db3a223 100644 --- a/examples/bq_benchmarks/README.md +++ b/examples/bq_benchmarks/README.md @@ -1,15 +1,15 @@ -# BigQuery Benchmark Repos -Customers new to BigQuery often have questions on how to best utilize the platform with regards to performance. -For example, a common question which has routinely resurfaced in this area is the performance of file loads -into BigQuery, specifically the optimal file parameters (file type, # columns, column types, file size, etc) -for efficient load times. As a second example, when informing customers that queries run on external data -sources are less efficient than those run on BigQuery managed tables, customers have followed up, asking -exactly how much less efficient queries on external sources are. - -While Google provides some high-level guidelines on BigQuery performance in these -scenarios, we don’t provide consistent metrics on how the above factors can impact -performance. This repository seeks to create benchmarks to address questions with -quantitative data and a higher level of confidence, allowing more definitive answers +# BigQuery Benchmark Repos +Customers new to BigQuery often have questions on how to best utilize the platform with regards to performance. +For example, a common question which has routinely resurfaced in this area is the performance of file loads +into BigQuery, specifically the optimal file parameters (file type, # columns, column types, file size, etc) +for efficient load times. As a second example, when informing customers that queries run on external data +sources are less efficient than those run on BigQuery managed tables, customers have followed up, asking +exactly how much less efficient queries on external sources are. + +While Google provides some high-level guidelines on BigQuery performance in these +scenarios, we don’t provide consistent metrics on how the above factors can impact +performance. This repository seeks to create benchmarks to address questions with +quantitative data and a higher level of confidence, allowing more definitive answers when interacting with customers. While this repository is intended to continue growing, it currently includes the following @@ -17,22 +17,22 @@ benchmarks: ### File Loader Benchmark The File Loader benchmark measures the affect of file properties on performance when loading files into BigQuery tables. Files are created using a combination of properties such as file type, compression type, -number of columns, column types (such as 100% STRING vs 50% STRING/ 50% NUMERIC), number of files, -and the size of files. Once the files are created, they are loaded into BigQuery tables. +number of columns, column types (such as 100% STRING vs 50% STRING/ 50% NUMERIC), number of files, +and the size of files. Once the files are created, they are loaded into BigQuery tables. #### Benchmark Parameters -Specifc file parameters are used in this project for performance testing. While +Specifc file parameters are used in this project for performance testing. While the list of parameters is growing, the current list of paramters and values is as follows: -**File Type**: +**File Type**: * Avro * CSV * JSON * Parquet -**Compression**: +**Compression**: * gzip (for CSV and JSON) * snappy (for AVRO) @@ -42,43 +42,43 @@ is as follows: * 100 * 1000 -**Column Types**: +**Column Types**: * String-only * 50% String / 50% NUMERIC * 10% String / 90% NUMERIC -**Number of files**: +**Number of files**: * 1 * 100 * 1000 * 10000 -**Target Data Size (Size of the BigQuery staging table used to generate each file)**: +**Target Data Size (Size of the BigQuery staging table used to generate each file)**: * 10MB * 100MB * 1GB * 2GB -These parameters are used to create combinations of file types stored on in a -bucket on GCS. An example of a file prefix generated from the above list of file parameters is: +These parameters are used to create combinations of file types stored on in a +bucket on GCS. An example of a file prefix generated from the above list of file parameters is: `fileType=csv/compression=none/numColumns=10/columnTypes=100_STRING/numFiles=100/tableSize=10MB/* `. This prefix holds 100 uncompressed CSV files, each generated from a 10 MB BigQuery -staging table with 10 string columns. The tool loads the 100 CSV files with this prefix -to a BigQuery table and records the performance to create a benchmark. +staging table with 10 string columns. The tool loads the 100 CSV files with this prefix +to a BigQuery table and records the performance to create a benchmark. In the future, a parameter for slot type will be added with values for communal and reserved. In addition, ORC will be added as a value for file type, and struct/ -array types will be added to the values for column types. +array types will be added to the values for column types. ### Federated Query Benchmark -The federated query benchmark quantifies the difference in performance between -queries on federated (external) and managed BigQuery tables. A variety of queries -ranging in complexity will be created. These queries will be run on managed BigQuery -tables and federated Google Cloud Storage files (including AVRO, CSV, JSON, and PARQUET) of +The federated query benchmark quantifies the difference in performance between +queries on federated (external) and managed BigQuery tables. A variety of queries +ranging in complexity will be created. These queries will be run on managed BigQuery +tables and federated Google Cloud Storage files (including AVRO, CSV, JSON, and PARQUET) of identical schemas and sizes. The files created for the File Loader Benchmark will be reused -here to run external queries on and to create BQ Managed tables with. +here to run external queries on and to create BQ Managed tables with. -#### Benchmark Parameters +#### Benchmark Parameters Parameters for this benchmark will include the type of table, type of query, and the table properties. @@ -86,31 +86,31 @@ and the table properties. * `BQ_MANAGED`: Tables located within and managed by BigQuery. * `EXTERNAL`: Data located in GCS files, which are used to create a temporary -external table for querying. +external table for querying. **Query Type**: * `SIMPLE_SELECT_*`: Select all columns and all rows. * `SELECT_ONE_STRING`: Select the first string field in the schema. All schemas used in the -benchmark contain at least one string field. -* `SELECT_50_PERCENT`: Select the first 50% of the table's fields. +benchmark contain at least one string field. +* `SELECT_50_PERCENT`: Select the first 50% of the table's fields. Future iterations of this benchmark will include more complex queries, such as those -that utilize joins, subqueries, window functions, etc. +that utilize joins, subqueries, window functions, etc. -Since the files created for the File Loader Benchmark will be reused for this +Since the files created for the File Loader Benchmark will be reused for this benchmark, both the BQ Managed tables and GCS files will share the File Loader Benchmark parameters, with the only difference being that the snappy compression type is not -supported for federated queries and therefore will not be included for comparison. +supported for federated queries and therefore will not be included for comparison. -**File Type**: +**File Type**: * Avro * CSV * JSON * Parquet -**Compression**: +**Compression**: * gzip (for CSV and JSON) @@ -141,30 +141,30 @@ supported for federated queries and therefore will not be included for compariso #### BigQuery -The results of the benchmarks will be saved in a separate BigQuery table for +The results of the benchmarks will be saved in a separate BigQuery table for ad hoc analysis. The results table will use the following schema: [results_table_schema.json](json_schemas/results_table_schema.json) #### DataStudio Once the results table is populated with data, DataStudio can be used to visualize results. See [this article](https://support.google.com/datastudio/answer/6283323?hl=en) to get started -with DataStudio. +with DataStudio. ## Usage -This project contains the tools to create the resources needed to run the benchmarks. -The main method for the project is located in +This project contains the tools to create the resources needed to run the benchmarks. +The main method for the project is located in [`bq_benchmark.py`](bq_benchmark.py). ### Prepping the Benchmarks Resources from Scratch -The following steps are needed to create the resources needed for the benchmarks. +The following steps are needed to create the resources needed for the benchmarks. Some steps will only be needed for certain benchmarks, so feel free to skip them if you -are only focused on a certain set of benchmarks. +are only focused on a certain set of benchmarks. #### 1. Create the Results Table (Needed for all benchmarks) If running the whole project from scratch, the first step is to create a table -in BigQuery to store the results of the benchmark loads. A json file has been -provided in the json_schemas directory ([results_table_schema.json](json_schemas/results_table_schema.json)) -with the above schema. The schema can be used to create the results +in BigQuery to store the results of the benchmark loads. A json file has been +provided in the json_schemas directory ([results_table_schema.json](json_schemas/results_table_schema.json)) +with the above schema. The schema can be used to create the results table by running the using the following command: ``` python bq_benchmark.py \ @@ -175,47 +175,47 @@ python bq_benchmark.py \ ``` Parameters: -`--create_results_table`: Flag to indicate that a results table should be created. It has a value of -`store_true`, so this flag will be set to False, unless it is provided in the +`--create_results_table`: Flag to indicate that a results table should be created. It has a value of +`store_true`, so this flag will be set to False, unless it is provided in the command. -`--results_table_schema_path`: Optional argument. It defaults to `json_schemas/results_table_schema.json`. -If using a json schema in a different location, provide the path to that -schema. +`--results_table_schema_path`: Optional argument. It defaults to `json_schemas/results_table_schema.json`. +If using a json schema in a different location, provide the path to that +schema. `--results_table_name`: String representing the name of the results table. Note that just the table name -is needed, not the full project_id.dataset_id.table_name indicator. +is needed, not the full project_id.dataset_id.table_name indicator. -`--dataset_id`: ID of the dataset to hold the results table. +`--dataset_id`: ID of the dataset to hold the results table. #### 2. Select File Parameters (Needed for File Loader and Federated Query Benchmarks) -File parameters are used to help create the files needed for both the File Loader Benchmark and - the Federated Query Benchmark. They can be configured in the `FILE_PARAMETERS` dictionary in -[`generic_benchmark_tools/file_parameters.py`](generic_benchmark_tools/file_parameters.py). Currently, +File parameters are used to help create the files needed for both the File Loader Benchmark and + the Federated Query Benchmark. They can be configured in the `FILE_PARAMETERS` dictionary in +[`generic_benchmark_tools/file_parameters.py`](generic_benchmark_tools/file_parameters.py). Currently, no file parameters can be added to the dictionary, as this will cause errors. However, parameters can be removed -from the dictionary if you are looking for a smaller set of file combinations. -Note that the parameter `numFiles` has to include at least the number 1 to -ensure that the subsequent number of files are properly created. This is -because the program uses this first file to make copies to create subsequent +from the dictionary if you are looking for a smaller set of file combinations. +Note that the parameter `numFiles` has to include at least the number 1 to +ensure that the subsequent number of files are properly created. This is +because the program uses this first file to make copies to create subsequent files. This is a much faster alternative than recreating identical files. -For example, if you don't want the 1000 or 10000 as `numFile` parameters, +For example, if you don't want the 1000 or 10000 as `numFile` parameters, you can take them out, but you must leave 1 (e.g. [1, 100]). That way the first -file can be copied to create the 100 files. +file can be copied to create the 100 files. #### 3. Create Schemas for the Benchmark Staging Tables (Needed for File Loader and Federated Query Benchmarks) In order to create the files with the above parameters, the [Dataflow Data Generator -tool](https://github.com/GoogleCloudPlatform/professional-services/tree/master/examples/dataflow-data-generator) +tool](https://github.com/GoogleCloudPlatform/professional-services/tree/master/examples/dataflow-data-generator) from the Professional Services Examples library needs to be leveraged to create staging tables containing combinations of `columnTypes` and `numColumns` from the list of file parameters in [`generic_benchmark_tools/file_parameters.py`](generic_benchmark_tools/file_parameters.py). The staging tables will later be resized to match the sizes in `targetDataSize` file parameter, and then -they will be extracted to files in GCS. However, before any of this can be done, JSON schemas for -the staging tables must be created. To do this run the following command: +they will be extracted to files in GCS. However, before any of this can be done, JSON schemas for +the staging tables must be created. To do this run the following command: ``` python bq_benchmark.py \ @@ -225,38 +225,38 @@ python bq_benchmark.py \ Parameters: -`--create_benchmark_schemas`: Flag to indicate that benchmark schemas should be created. It has a value of -`store_true`, so this flag will be set to False, unless it is provided in the +`--create_benchmark_schemas`: Flag to indicate that benchmark schemas should be created. It has a value of +`store_true`, so this flag will be set to False, unless it is provided in the command. `--benchmark_table_schemas_directory`: Optional argument for the directory where -the schemas for the staging tables are to be stored. It defaults to `json_schemas/benchmark_table_schemas`. -If you would prefer that the schemas are written to a different directory, provide that directory. +the schemas for the staging tables are to be stored. It defaults to `json_schemas/benchmark_table_schemas`. +If you would prefer that the schemas are written to a different directory, provide that directory. #### 4. Create Staging Tables (Needed for File Loader and Federated Query Benchmarks) -Once the schemas are created for the staging tables, the staging tables themselves can be -created. This is a two step process. +Once the schemas are created for the staging tables, the staging tables themselves can be +created. This is a two step process. -First, a set of staging tables are created using the data_generator_pipeline +First, a set of staging tables are created using the data_generator_pipeline module in the [Dataflow Data Generator tool](https://github.com/GoogleCloudPlatform/professional-services/tree/master/examples/dataflow-data-generator) using the schemas created in step 3. One staging table is created for each combination of columnTypes and -numColumns file parameters. A small number of rows are created in each staging table (500 rows) to +numColumns file parameters. A small number of rows are created in each staging table (500 rows) to get the process started. Once the tables are created, they are saved in a staging dataset. The names of -staging tables are generated using their respective columnTypes and numColumms parameters. +staging tables are generated using their respective columnTypes and numColumms parameters. For example, a staging table created using the 100_STRING `columnTypes` param and 10 `numColumns` would be named `100_STRING_10`. Second, each staging table is used to create resized staging tables to match the sizes in the `targetDataSizes` parameter. This is accomplished using the [bq_table_resizer module](https://github.com/GoogleCloudPlatform/professional-services/blob/master/examples/dataflow-data-generator/bigquery-scripts/bq_table_resizer.py) of the [Dataflow Data Generator -tool](https://github.com/GoogleCloudPlatform/professional-services/tree/master/examples/dataflow-data-generator). +tool](https://github.com/GoogleCloudPlatform/professional-services/tree/master/examples/dataflow-data-generator). The resized staging tables are saved in a second staging dataset ws). The names of -resized staging tables are generated using the name of the staging table they were -resized from, plus the `targetDataSizes` param. For example, the `100_STRING_10` staging table +resized staging tables are generated using the name of the staging table they were +resized from, plus the `targetDataSizes` param. For example, the `100_STRING_10` staging table from above will be used to create the following four tables in the resized staging dataset: `100_STRING_10_10MB`, `100_STRING_10_100MB`, `100_STRING_10_1GB`, -`100_STRING_10_2GB`. +`100_STRING_10_2GB`. To run the process of creating staging and resized staging tables, run the following command: @@ -274,28 +274,28 @@ python bq_benchmark.py \ Parameters: `--create_staging_tables`: Flag to indicate that staging and resized staging -tables should be created. It has a value of `store_true`, so this flag will be -set to False, unless it is provided in the +tables should be created. It has a value of `store_true`, so this flag will be +set to False, unless it is provided in the command. `--bq_project_id`: The ID of the project that will hold the BigQuery resources for -the benchmark, including all datasets, results tables, staging tables, and +the benchmark, including all datasets, results tables, staging tables, and benchmark tables. `--staging_dataset_id`: The ID of the dataset that will hold the first set of staging tables. For the tool to work correctly, the `staging_dataset_id` must only contain -staging tables, and it must be different than the `--resized_staging_dataset_id`. -Do not store tables for any other purposes in this dataset. +staging tables, and it must be different than the `--resized_staging_dataset_id`. +Do not store tables for any other purposes in this dataset. `--resized_staging_dataset_id`: The ID of the dataset that will hold the resized staging tables. For the tool to work correctly, the `resized_staging_dataset_id` must only contain -resized staging tables, and it must be different than the `--staging_dataset_id`. +resized staging tables, and it must be different than the `--staging_dataset_id`. Do not store tables for any other purposes in this dataset. `--benchmark_table_schemas_directory`: Optional argument for the directory where -the schemas for the staging tables are stored. It defaults to +the schemas for the staging tables are stored. It defaults to `json_schemas/benchmark_table_schemas`. If your schemas are elsehwere, provide -that directory. +that directory. `--dataflow_staging_location`: Staging location for Dataflow on GCS. Include the 'gs://' prefix, the name of the bucket you want to use, and any prefix. For example @@ -312,9 +312,9 @@ provided in the --bucket_name parameter used below with the `--create_files` and #### 5. Create Files (Needed for File Loader and Federated Query Benchmarks) Once the resized staging tables are created, the next step is to use the resized staging tables to create the files on GCS. The resized staging tables already contain -combinations of the `columnTypes`, `numColumns`, and `targetDataSize` parameters. Now -each of the resized staging tables must be extracted to combinations of files -generated from the fileType and compression parameters. In each combination, +combinations of the `columnTypes`, `numColumns`, and `targetDataSize` parameters. Now +each of the resized staging tables must be extracted to combinations of files +generated from the fileType and compression parameters. In each combination, the extraction is only done for the first file (`numFiles`=1). For example, the resized staging table `100_STRING_10_10MB` must be use to create the following files on GCS: @@ -328,19 +328,19 @@ files on GCS: * fileType=parquet/compression=none/numColumns=10/columnTypes=100_STRING/numFiles=1/tableSize=10MB/file1.parquet -The method of extracting the resized staging table depends on the combination of parameters. +The method of extracting the resized staging table depends on the combination of parameters. BigQuery extract jobs are used if the `fileType` is csv or json, or if the `fileType` is avro and the resized staging table size is <= 1 GB. If the `fileType` is avro and the `targetDataSize` is > 1 GB, DataFlow is used to generate the file, since attempting to extract a staging table -of this size to avro causes errors. If the `fileType` is parquet, DataFlow is used as well, -since BigQuery extract jobs don't support the parquet file type. +of this size to avro causes errors. If the `fileType` is parquet, DataFlow is used as well, +since BigQuery extract jobs don't support the parquet file type. Once the first file for each combination is generated (`numFiles`=1), it is copied to create the same combination of files, but where numFiles > 1. More specifically, it is copied 100 times for `numFiles`=100, 1000 times for `numFiles`=1000, and -10000 times for `numFiles`=10000. Copying is much faster than extracting each -table tens of thousands of times. As an example, the files listed above are -copied to create the following 77,700 files: +10000 times for `numFiles`=10000. Copying is much faster than extracting each +table tens of thousands of times. As an example, the files listed above are +copied to create the following 77,700 files: * fileType=avro/compression=none/numColumns=10/columnTypes=100_STRING/numFiles=100/tableSize=10MB/* (contains file1.avro- file100.avro) * fileType=avro/compression=none/numColumns=10/columnTypes=100_STRING/numFiles=1000/tableSize=10MB/* (contains file1.avro - file1000.avro) @@ -380,19 +380,19 @@ python bq_benchmark.py \ Parameters: `--create_files`: Flag to indicate that files should be created and stored on GCS. -It has a value of `store_true`, so this flag will be -set to False, unless it is provided in the +It has a value of `store_true`, so this flag will be +set to False, unless it is provided in the command. `--gcs_project_id`: The ID of the project that will hold the GCS resources for -the benchmark, including all files and the bucket that holds them. +the benchmark, including all files and the bucket that holds them. `--resized_staging_dataset_id`: The ID of the dataset that holds the resized -staging tables generated using the `--create_staging_tables` command. +staging tables generated using the `--create_staging_tables` command. `--bucket_name`: Name of the bucket that will hold the created files. Note that the only purpose of this bucket should be to hold the created files, and that files -used for any other reason should be stored in a different bucket. +used for any other reason should be stored in a different bucket. `--dataflow_staging_location`: Staging location for Dataflow on GCS. Include the 'gs://' prefix, the name of the bucket you want to use, and any prefix. For example @@ -406,12 +406,12 @@ provided in the `--bucket_name parameter`. `--restart_file`: Optional file name to start the file creation process with. Creating each file combination can take hours, and often a backend error or a timeout will -occur, preventing all the files from being created. If this happens, copy the last file +occur, preventing all the files from being created. If this happens, copy the last file that was successfully created from the logs and use it here. It should start with `fileType=` -and end with the file extension. For example, +and end with the file extension. For example, `fileType=csv/compression=none/numColumns=10/columnTypes=100_STRING/numFiles=1000/tableSize=10MB/file324.csv` -### Running the benchmarks +### Running the benchmarks #### File Loader Benchmark Once the files are created, the File Loader Benchmark can be run. As a prerequisite for this step, a log sink in BigQuery that captures logs @@ -421,12 +421,12 @@ tables. If a BigQuery log sink is not already set up, follow [these steps](https Note that this benchmark will delete tables after recording information on load time. Before the tables are deleted, the tables and their respective files can be used to run the Federated Query Benchmark. If running the two benchmarks independently, each file will be used to create a BigQuery table two different times. Running the two benchmarks -at the same time can save time if results for both benchmarks are desired. In this case, the `--include_federated_query_benchmark` flag can +at the same time can save time if results for both benchmarks are desired. In this case, the `--include_federated_query_benchmark` flag can be added to the below command. Be aware that running the queries will add significant time to the benchmark run, so leave the -flag out of the command if the primary goal is to obtain results for the File Loader Benchmark. +flag out of the command if the primary goal is to obtain results for the File Loader Benchmark. -To run the benchmark, use the following command: +To run the benchmark, use the following command: ``` @@ -441,64 +441,64 @@ python bq_benchmark.py \ --results_table_name= \ --results_dataset_id= \ --duplicate_benchmark_tables \ ---bq_logs_dataset= +--bq_logs_dataset= --include_federated_query_benchmark ``` Parameters: `--run_file_loader_benchmark`: Flag to initiate process of running the File Loader Benchmark by creating tables from files and storing results for comparison. -It has a value of `store_true`, so this flag will be -set to False, unless it is provided in the +It has a value of `store_true`, so this flag will be +set to False, unless it is provided in the command. `--gcs_project_id`: The ID of the project that will hold the GCS resources for -the benchmark, including all files and the bucket that holds them. +the benchmark, including all files and the bucket that holds them. `--bq_project_id`: The ID of the project that will hold the BigQuery resources for -the benchmark, including all datasets, results tables, staging tables, and +the benchmark, including all datasets, results tables, staging tables, and benchmark tables. `--staging_project_id`: The ID of the project that holds the first set of staging tables. While this will be the same as the `--bq_project_id` if running the project from scratch, it will differ from `--bq_project_id` if you are using file combinations -that have already been created and running benchmarks/saving results in your own project. +that have already been created and running benchmarks/saving results in your own project. `--staging_dataset_id`: The ID of the dataset that will hold the first set of staging tables. For the tool to work correctly, the `staging_dataset_id` must only contain -staging tables, and it must be different than the `--resized_staging_dataset_id`. -Do not store tables for any other purposes in this dataset. +staging tables, and it must be different than the `--resized_staging_dataset_id`. +Do not store tables for any other purposes in this dataset. -`--dataset_id`: The ID of the dataset that will hold the benchmark tables. +`--dataset_id`: The ID of the dataset that will hold the benchmark tables. `--bucket_name`: Name of the bucket that will hold the file combinations to be -loaded into benchmark tables. Note that the only purpose of this bucket should -be to hold the file combinations, and that files used for any other reason -should be stored in a different bucket. +loaded into benchmark tables. Note that the only purpose of this bucket should +be to hold the file combinations, and that files used for any other reason +should be stored in a different bucket. `--results_table_name`: Name of the results table to hold relevant information -about the benchmark loads. +about the benchmark loads. `--results_dataset_id`: Name of the dataset that holds the results table. `--duplicate_benchmark_tables`: Flag to indicate that a benchmark table should be -created for a given file combination, even if that file combination has a benchmark -table already. Creating multiple benchmark tables for each file combination can -increase the accuracy of the average runtimes calculated from the results. If +created for a given file combination, even if that file combination has a benchmark +table already. Creating multiple benchmark tables for each file combination can +increase the accuracy of the average runtimes calculated from the results. If this behavior is desired, include the flag. However, if you want to ensure that you first have at least one benchmark table for each file combination, then leave the -flag off. In that case, the benchmark creation process will skip a file combination -if it already has a benchmark table. +flag off. In that case, the benchmark creation process will skip a file combination +if it already has a benchmark table. `--bq_logs_dataset`: Name of dataset hold BQ logs table. This dataset must be -in project used for `--bq_project_id`. +in project used for `--bq_project_id`. `--include_federated_query_benchmark`: Flag to indicate that the Federated Query Benchmark should -be run on the created tables and the files the tables were loaded from before +be run on the created tables and the files the tables were loaded from before the tables are deleted. If results for both benchmarks are desired, this will save time when compared to running each benchmark independently, since the same tables needed for the -File Loader Benchmark are needed for the Federated Query Benchmark. It has a value of `store_true`, -so this flag will be set to False, unless it is provided in the +File Loader Benchmark are needed for the Federated Query Benchmark. It has a value of `store_true`, +so this flag will be set to False, unless it is provided in the command. @@ -508,17 +508,17 @@ about BigQuery must be set up in the same project that holds the benchmark tables. If a BigQuery log sink is not already set up, follow [these steps](https://github.com/GoogleCloudPlatform/professional-services/tree/master/examples/bigquery-audit-log#1-getting-the-bigquery-log-data). As mentioned above, the Federated Query Benchmark can be run while running the File Loader Benchmark in addition to using -the command below. Note, though , that running federated queries on +the command below. Note, though , that running federated queries on snappy compressed files is not supported. When the File Loader Benchmark encounters a snappy compressed file, it still loads the file into a BigQuery table to capture load results, but it will skip the Federated Query portion. When the Federated Query Benchmark encounters a snappy compressed file, it will skip the load all together. Therefore, if obtaining Federated -Query Benchmark results is the primary goal, use the command below. +Query Benchmark results is the primary goal, use the command below. -It should also be noted that since the Federated Query Benchmark loads files into tables, the load results for the File +It should also be noted that since the Federated Query Benchmark loads files into tables, the load results for the File Loader Benchmark will also be captured. This will not add significant time to the benchmark run since the tables have to -be loaded regardless. +be loaded regardless. -To run the benchmark, use the following command: +To run the benchmark, use the following command: ``` python bq_benchmark.py \ @@ -531,54 +531,54 @@ python bq_benchmark.py \ --bucket_name= \ --results_table_name= \ --results_dataset_id= \ ---bq_logs_dataset= +--bq_logs_dataset= ``` Parameters: -`--run_federated_query_benchmark`: Flag to initiate the process running the Federated Query -Benchmark by creating tables from files, running queries on both -the table and the files, and storing performance results. -It has a value of `store_true`, so this flag will be -set to False, unless it is provided in the +`--run_federated_query_benchmark`: Flag to initiate the process running the Federated Query +Benchmark by creating tables from files, running queries on both +the table and the files, and storing performance results. +It has a value of `store_true`, so this flag will be +set to False, unless it is provided in the command. `--gcs_project_id`: The ID of the project that will hold the GCS resources for -the benchmark, including all files and the bucket that holds them. +the benchmark, including all files and the bucket that holds them. `--bq_project_id`: The ID of the project that will hold the BigQuery resources for -the benchmark, including all datasets, results tables, staging tables, and +the benchmark, including all datasets, results tables, staging tables, and benchmark tables. `--staging_project_id`: The ID of the project that holds the first set of staging tables. While this will be the same as the `--bq_project_id` if running the project from scratch, it will differ from `--bq_project_id` if you are using file combinations -that have already been created and running benchmarks/saving results in your own project. +that have already been created and running benchmarks/saving results in your own project. `--staging_dataset_id`: The ID of the dataset that will hold the first set of staging tables. For the tool to work correctly, the `staging_dataset_id` must only contain -staging tables, and it must be different than the `--resized_staging_dataset_id`. -Do not store tables for any other purposes in this dataset. +staging tables, and it must be different than the `--resized_staging_dataset_id`. +Do not store tables for any other purposes in this dataset. -`--dataset_id`: The ID of the dataset that will hold the benchmark tables. +`--dataset_id`: The ID of the dataset that will hold the benchmark tables. `--bucket_name`: Name of the bucket that will hold the file combinations to be -loaded into benchmark tables. Note that the only purpose of this bucket should -be to hold the file combinations, and that files used for any other reason -should be stored in a different bucket. +loaded into benchmark tables. Note that the only purpose of this bucket should +be to hold the file combinations, and that files used for any other reason +should be stored in a different bucket. `--results_table_name`: Name of the results table to hold relevant information -about the benchmark loads. +about the benchmark loads. `--results_dataset_id`: Name of the dataset that holds the results table. `--bq_logs_dataset`: Name of dataset hold BQ logs table. This dataset must be -in project used for `--bq_project_id`. +in project used for `--bq_project_id`. ## Testing -Tests can be run by running the following command in the bq_file_load_benchmark +Tests can be run by running the following command in the bq_file_load_benchmark directory: ``` @@ -587,4 +587,4 @@ python -m pytest --project_id= ``` Note that the tests will create and destroy resources in the project denoted -by `--project_id`. +by `--project_id`. diff --git a/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/100_STRING_10.json b/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/100_STRING_10.json index d3c4c30c79..3c2e93f0bb 100644 --- a/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/100_STRING_10.json +++ b/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/100_STRING_10.json @@ -1,53 +1,53 @@ { "fields": [ { - "type": "STRING", - "name": "string1", + "type": "STRING", + "name": "string1", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string2", + "type": "STRING", + "name": "string2", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string3", + "type": "STRING", + "name": "string3", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string4", + "type": "STRING", + "name": "string4", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string5", + "type": "STRING", + "name": "string5", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string6", + "type": "STRING", + "name": "string6", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string7", + "type": "STRING", + "name": "string7", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string8", + "type": "STRING", + "name": "string8", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string9", + "type": "STRING", + "name": "string9", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string10", + "type": "STRING", + "name": "string10", "mode": "REQUIRED" } ] diff --git a/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/100_STRING_100.json b/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/100_STRING_100.json index f2038202ee..7cc88587da 100644 --- a/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/100_STRING_100.json +++ b/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/100_STRING_100.json @@ -1,503 +1,503 @@ { "fields": [ { - "type": "STRING", - "name": "string1", + "type": "STRING", + "name": "string1", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string2", + "type": "STRING", + "name": "string2", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string3", + "type": "STRING", + "name": "string3", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string4", + "type": "STRING", + "name": "string4", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string5", + "type": "STRING", + "name": "string5", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string6", + "type": "STRING", + "name": "string6", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string7", + "type": "STRING", + "name": "string7", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string8", + "type": "STRING", + "name": "string8", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string9", + "type": "STRING", + "name": "string9", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string10", + "type": "STRING", + "name": "string10", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string11", + "type": "STRING", + "name": "string11", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string12", + "type": "STRING", + "name": "string12", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string13", + "type": "STRING", + "name": "string13", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string14", + "type": "STRING", + "name": "string14", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string15", + "type": "STRING", + "name": "string15", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string16", + "type": "STRING", + "name": "string16", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string17", + "type": "STRING", + "name": "string17", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string18", + "type": "STRING", + "name": "string18", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string19", + "type": "STRING", + "name": "string19", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string20", + "type": "STRING", + "name": "string20", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string21", + "type": "STRING", + "name": "string21", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string22", + "type": "STRING", + "name": "string22", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string23", + "type": "STRING", + "name": "string23", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string24", + "type": "STRING", + "name": "string24", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string25", + "type": "STRING", + "name": "string25", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string26", + "type": "STRING", + "name": "string26", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string27", + "type": "STRING", + "name": "string27", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string28", + "type": "STRING", + "name": "string28", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string29", + "type": "STRING", + "name": "string29", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string30", + "type": "STRING", + "name": "string30", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string31", + "type": "STRING", + "name": "string31", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string32", + "type": "STRING", + "name": "string32", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string33", + "type": "STRING", + "name": "string33", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string34", + "type": "STRING", + "name": "string34", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string35", + "type": "STRING", + "name": "string35", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string36", + "type": "STRING", + "name": "string36", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string37", + "type": "STRING", + "name": "string37", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string38", + "type": "STRING", + "name": "string38", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string39", + "type": "STRING", + "name": "string39", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string40", + "type": "STRING", + "name": "string40", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string41", + "type": "STRING", + "name": "string41", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string42", + "type": "STRING", + "name": "string42", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string43", + "type": "STRING", + "name": "string43", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string44", + "type": "STRING", + "name": "string44", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string45", + "type": "STRING", + "name": "string45", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string46", + "type": "STRING", + "name": "string46", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string47", + "type": "STRING", + "name": "string47", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string48", + "type": "STRING", + "name": "string48", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string49", + "type": "STRING", + "name": "string49", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string50", + "type": "STRING", + "name": "string50", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string51", + "type": "STRING", + "name": "string51", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string52", + "type": "STRING", + "name": "string52", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string53", + "type": "STRING", + "name": "string53", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string54", + "type": "STRING", + "name": "string54", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string55", + "type": "STRING", + "name": "string55", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string56", + "type": "STRING", + "name": "string56", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string57", + "type": "STRING", + "name": "string57", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string58", + "type": "STRING", + "name": "string58", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string59", + "type": "STRING", + "name": "string59", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string60", + "type": "STRING", + "name": "string60", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string61", + "type": "STRING", + "name": "string61", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string62", + "type": "STRING", + "name": "string62", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string63", + "type": "STRING", + "name": "string63", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string64", + "type": "STRING", + "name": "string64", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string65", + "type": "STRING", + "name": "string65", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string66", + "type": "STRING", + "name": "string66", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string67", + "type": "STRING", + "name": "string67", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string68", + "type": "STRING", + "name": "string68", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string69", + "type": "STRING", + "name": "string69", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string70", + "type": "STRING", + "name": "string70", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string71", + "type": "STRING", + "name": "string71", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string72", + "type": "STRING", + "name": "string72", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string73", + "type": "STRING", + "name": "string73", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string74", + "type": "STRING", + "name": "string74", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string75", + "type": "STRING", + "name": "string75", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string76", + "type": "STRING", + "name": "string76", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string77", + "type": "STRING", + "name": "string77", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string78", + "type": "STRING", + "name": "string78", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string79", + "type": "STRING", + "name": "string79", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string80", + "type": "STRING", + "name": "string80", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string81", + "type": "STRING", + "name": "string81", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string82", + "type": "STRING", + "name": "string82", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string83", + "type": "STRING", + "name": "string83", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string84", + "type": "STRING", + "name": "string84", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string85", + "type": "STRING", + "name": "string85", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string86", + "type": "STRING", + "name": "string86", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string87", + "type": "STRING", + "name": "string87", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string88", + "type": "STRING", + "name": "string88", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string89", + "type": "STRING", + "name": "string89", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string90", + "type": "STRING", + "name": "string90", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string91", + "type": "STRING", + "name": "string91", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string92", + "type": "STRING", + "name": "string92", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string93", + "type": "STRING", + "name": "string93", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string94", + "type": "STRING", + "name": "string94", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string95", + "type": "STRING", + "name": "string95", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string96", + "type": "STRING", + "name": "string96", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string97", + "type": "STRING", + "name": "string97", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string98", + "type": "STRING", + "name": "string98", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string99", + "type": "STRING", + "name": "string99", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string100", + "type": "STRING", + "name": "string100", "mode": "REQUIRED" } ] diff --git a/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/100_STRING_1000.json b/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/100_STRING_1000.json index d9c3721696..4ccdcbb7b8 100644 --- a/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/100_STRING_1000.json +++ b/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/100_STRING_1000.json @@ -1,5003 +1,5003 @@ { "fields": [ { - "type": "STRING", - "name": "string1", + "type": "STRING", + "name": "string1", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string2", + "type": "STRING", + "name": "string2", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string3", + "type": "STRING", + "name": "string3", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string4", + "type": "STRING", + "name": "string4", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string5", + "type": "STRING", + "name": "string5", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string6", + "type": "STRING", + "name": "string6", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string7", + "type": "STRING", + "name": "string7", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string8", + "type": "STRING", + "name": "string8", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string9", + "type": "STRING", + "name": "string9", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string10", + "type": "STRING", + "name": "string10", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string11", + "type": "STRING", + "name": "string11", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string12", + "type": "STRING", + "name": "string12", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string13", + "type": "STRING", + "name": "string13", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string14", + "type": "STRING", + "name": "string14", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string15", + "type": "STRING", + "name": "string15", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string16", + "type": "STRING", + "name": "string16", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string17", + "type": "STRING", + "name": "string17", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string18", + "type": "STRING", + "name": "string18", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string19", + "type": "STRING", + "name": "string19", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string20", + "type": "STRING", + "name": "string20", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string21", + "type": "STRING", + "name": "string21", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string22", + "type": "STRING", + "name": "string22", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string23", + "type": "STRING", + "name": "string23", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string24", + "type": "STRING", + "name": "string24", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string25", + "type": "STRING", + "name": "string25", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string26", + "type": "STRING", + "name": "string26", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string27", + "type": "STRING", + "name": "string27", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string28", + "type": "STRING", + "name": "string28", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string29", + "type": "STRING", + "name": "string29", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string30", + "type": "STRING", + "name": "string30", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string31", + "type": "STRING", + "name": "string31", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string32", + "type": "STRING", + "name": "string32", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string33", + "type": "STRING", + "name": "string33", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string34", + "type": "STRING", + "name": "string34", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string35", + "type": "STRING", + "name": "string35", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string36", + "type": "STRING", + "name": "string36", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string37", + "type": "STRING", + "name": "string37", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string38", + "type": "STRING", + "name": "string38", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string39", + "type": "STRING", + "name": "string39", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string40", + "type": "STRING", + "name": "string40", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string41", + "type": "STRING", + "name": "string41", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string42", + "type": "STRING", + "name": "string42", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string43", + "type": "STRING", + "name": "string43", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string44", + "type": "STRING", + "name": "string44", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string45", + "type": "STRING", + "name": "string45", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string46", + "type": "STRING", + "name": "string46", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string47", + "type": "STRING", + "name": "string47", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string48", + "type": "STRING", + "name": "string48", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string49", + "type": "STRING", + "name": "string49", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string50", + "type": "STRING", + "name": "string50", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string51", + "type": "STRING", + "name": "string51", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string52", + "type": "STRING", + "name": "string52", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string53", + "type": "STRING", + "name": "string53", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string54", + "type": "STRING", + "name": "string54", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string55", + "type": "STRING", + "name": "string55", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string56", + "type": "STRING", + "name": "string56", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string57", + "type": "STRING", + "name": "string57", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string58", + "type": "STRING", + "name": "string58", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string59", + "type": "STRING", + "name": "string59", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string60", + "type": "STRING", + "name": "string60", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string61", + "type": "STRING", + "name": "string61", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string62", + "type": "STRING", + "name": "string62", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string63", + "type": "STRING", + "name": "string63", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string64", + "type": "STRING", + "name": "string64", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string65", + "type": "STRING", + "name": "string65", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string66", + "type": "STRING", + "name": "string66", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string67", + "type": "STRING", + "name": "string67", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string68", + "type": "STRING", + "name": "string68", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string69", + "type": "STRING", + "name": "string69", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string70", + "type": "STRING", + "name": "string70", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string71", + "type": "STRING", + "name": "string71", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string72", + "type": "STRING", + "name": "string72", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string73", + "type": "STRING", + "name": "string73", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string74", + "type": "STRING", + "name": "string74", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string75", + "type": "STRING", + "name": "string75", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string76", + "type": "STRING", + "name": "string76", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string77", + "type": "STRING", + "name": "string77", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string78", + "type": "STRING", + "name": "string78", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string79", + "type": "STRING", + "name": "string79", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string80", + "type": "STRING", + "name": "string80", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string81", + "type": "STRING", + "name": "string81", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string82", + "type": "STRING", + "name": "string82", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string83", + "type": "STRING", + "name": "string83", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string84", + "type": "STRING", + "name": "string84", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string85", + "type": "STRING", + "name": "string85", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string86", + "type": "STRING", + "name": "string86", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string87", + "type": "STRING", + "name": "string87", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string88", + "type": "STRING", + "name": "string88", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string89", + "type": "STRING", + "name": "string89", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string90", + "type": "STRING", + "name": "string90", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string91", + "type": "STRING", + "name": "string91", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string92", + "type": "STRING", + "name": "string92", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string93", + "type": "STRING", + "name": "string93", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string94", + "type": "STRING", + "name": "string94", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string95", + "type": "STRING", + "name": "string95", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string96", + "type": "STRING", + "name": "string96", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string97", + "type": "STRING", + "name": "string97", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string98", + "type": "STRING", + "name": "string98", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string99", + "type": "STRING", + "name": "string99", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string100", + "type": "STRING", + "name": "string100", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string101", + "type": "STRING", + "name": "string101", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string102", + "type": "STRING", + "name": "string102", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string103", + "type": "STRING", + "name": "string103", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string104", + "type": "STRING", + "name": "string104", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string105", + "type": "STRING", + "name": "string105", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string106", + "type": "STRING", + "name": "string106", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string107", + "type": "STRING", + "name": "string107", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string108", + "type": "STRING", + "name": "string108", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string109", + "type": "STRING", + "name": "string109", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string110", + "type": "STRING", + "name": "string110", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string111", + "type": "STRING", + "name": "string111", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string112", + "type": "STRING", + "name": "string112", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string113", + "type": "STRING", + "name": "string113", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string114", + "type": "STRING", + "name": "string114", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string115", + "type": "STRING", + "name": "string115", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string116", + "type": "STRING", + "name": "string116", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string117", + "type": "STRING", + "name": "string117", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string118", + "type": "STRING", + "name": "string118", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string119", + "type": "STRING", + "name": "string119", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string120", + "type": "STRING", + "name": "string120", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string121", + "type": "STRING", + "name": "string121", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string122", + "type": "STRING", + "name": "string122", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string123", + "type": "STRING", + "name": "string123", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string124", + "type": "STRING", + "name": "string124", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string125", + "type": "STRING", + "name": "string125", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string126", + "type": "STRING", + "name": "string126", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string127", + "type": "STRING", + "name": "string127", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string128", + "type": "STRING", + "name": "string128", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string129", + "type": "STRING", + "name": "string129", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string130", + "type": "STRING", + "name": "string130", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string131", + "type": "STRING", + "name": "string131", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string132", + "type": "STRING", + "name": "string132", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string133", + "type": "STRING", + "name": "string133", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string134", + "type": "STRING", + "name": "string134", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string135", + "type": "STRING", + "name": "string135", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string136", + "type": "STRING", + "name": "string136", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string137", + "type": "STRING", + "name": "string137", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string138", + "type": "STRING", + "name": "string138", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string139", + "type": "STRING", + "name": "string139", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string140", + "type": "STRING", + "name": "string140", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string141", + "type": "STRING", + "name": "string141", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string142", + "type": "STRING", + "name": "string142", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string143", + "type": "STRING", + "name": "string143", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string144", + "type": "STRING", + "name": "string144", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string145", + "type": "STRING", + "name": "string145", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string146", + "type": "STRING", + "name": "string146", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string147", + "type": "STRING", + "name": "string147", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string148", + "type": "STRING", + "name": "string148", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string149", + "type": "STRING", + "name": "string149", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string150", + "type": "STRING", + "name": "string150", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string151", + "type": "STRING", + "name": "string151", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string152", + "type": "STRING", + "name": "string152", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string153", + "type": "STRING", + "name": "string153", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string154", + "type": "STRING", + "name": "string154", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string155", + "type": "STRING", + "name": "string155", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string156", + "type": "STRING", + "name": "string156", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string157", + "type": "STRING", + "name": "string157", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string158", + "type": "STRING", + "name": "string158", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string159", + "type": "STRING", + "name": "string159", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string160", + "type": "STRING", + "name": "string160", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string161", + "type": "STRING", + "name": "string161", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string162", + "type": "STRING", + "name": "string162", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string163", + "type": "STRING", + "name": "string163", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string164", + "type": "STRING", + "name": "string164", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string165", + "type": "STRING", + "name": "string165", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string166", + "type": "STRING", + "name": "string166", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string167", + "type": "STRING", + "name": "string167", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string168", + "type": "STRING", + "name": "string168", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string169", + "type": "STRING", + "name": "string169", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string170", + "type": "STRING", + "name": "string170", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string171", + "type": "STRING", + "name": "string171", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string172", + "type": "STRING", + "name": "string172", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string173", + "type": "STRING", + "name": "string173", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string174", + "type": "STRING", + "name": "string174", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string175", + "type": "STRING", + "name": "string175", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string176", + "type": "STRING", + "name": "string176", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string177", + "type": "STRING", + "name": "string177", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string178", + "type": "STRING", + "name": "string178", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string179", + "type": "STRING", + "name": "string179", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string180", + "type": "STRING", + "name": "string180", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string181", + "type": "STRING", + "name": "string181", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string182", + "type": "STRING", + "name": "string182", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string183", + "type": "STRING", + "name": "string183", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string184", + "type": "STRING", + "name": "string184", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string185", + "type": "STRING", + "name": "string185", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string186", + "type": "STRING", + "name": "string186", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string187", + "type": "STRING", + "name": "string187", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string188", + "type": "STRING", + "name": "string188", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string189", + "type": "STRING", + "name": "string189", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string190", + "type": "STRING", + "name": "string190", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string191", + "type": "STRING", + "name": "string191", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string192", + "type": "STRING", + "name": "string192", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string193", + "type": "STRING", + "name": "string193", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string194", + "type": "STRING", + "name": "string194", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string195", + "type": "STRING", + "name": "string195", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string196", + "type": "STRING", + "name": "string196", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string197", + "type": "STRING", + "name": "string197", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string198", + "type": "STRING", + "name": "string198", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string199", + "type": "STRING", + "name": "string199", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string200", + "type": "STRING", + "name": "string200", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string201", + "type": "STRING", + "name": "string201", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string202", + "type": "STRING", + "name": "string202", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string203", + "type": "STRING", + "name": "string203", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string204", + "type": "STRING", + "name": "string204", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string205", + "type": "STRING", + "name": "string205", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string206", + "type": "STRING", + "name": "string206", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string207", + "type": "STRING", + "name": "string207", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string208", + "type": "STRING", + "name": "string208", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string209", + "type": "STRING", + "name": "string209", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string210", + "type": "STRING", + "name": "string210", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string211", + "type": "STRING", + "name": "string211", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string212", + "type": "STRING", + "name": "string212", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string213", + "type": "STRING", + "name": "string213", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string214", + "type": "STRING", + "name": "string214", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string215", + "type": "STRING", + "name": "string215", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string216", + "type": "STRING", + "name": "string216", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string217", + "type": "STRING", + "name": "string217", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string218", + "type": "STRING", + "name": "string218", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string219", + "type": "STRING", + "name": "string219", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string220", + "type": "STRING", + "name": "string220", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string221", + "type": "STRING", + "name": "string221", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string222", + "type": "STRING", + "name": "string222", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string223", + "type": "STRING", + "name": "string223", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string224", + "type": "STRING", + "name": "string224", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string225", + "type": "STRING", + "name": "string225", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string226", + "type": "STRING", + "name": "string226", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string227", + "type": "STRING", + "name": "string227", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string228", + "type": "STRING", + "name": "string228", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string229", + "type": "STRING", + "name": "string229", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string230", + "type": "STRING", + "name": "string230", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string231", + "type": "STRING", + "name": "string231", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string232", + "type": "STRING", + "name": "string232", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string233", + "type": "STRING", + "name": "string233", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string234", + "type": "STRING", + "name": "string234", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string235", + "type": "STRING", + "name": "string235", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string236", + "type": "STRING", + "name": "string236", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string237", + "type": "STRING", + "name": "string237", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string238", + "type": "STRING", + "name": "string238", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string239", + "type": "STRING", + "name": "string239", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string240", + "type": "STRING", + "name": "string240", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string241", + "type": "STRING", + "name": "string241", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string242", + "type": "STRING", + "name": "string242", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string243", + "type": "STRING", + "name": "string243", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string244", + "type": "STRING", + "name": "string244", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string245", + "type": "STRING", + "name": "string245", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string246", + "type": "STRING", + "name": "string246", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string247", + "type": "STRING", + "name": "string247", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string248", + "type": "STRING", + "name": "string248", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string249", + "type": "STRING", + "name": "string249", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string250", + "type": "STRING", + "name": "string250", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string251", + "type": "STRING", + "name": "string251", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string252", + "type": "STRING", + "name": "string252", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string253", + "type": "STRING", + "name": "string253", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string254", + "type": "STRING", + "name": "string254", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string255", + "type": "STRING", + "name": "string255", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string256", + "type": "STRING", + "name": "string256", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string257", + "type": "STRING", + "name": "string257", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string258", + "type": "STRING", + "name": "string258", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string259", + "type": "STRING", + "name": "string259", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string260", + "type": "STRING", + "name": "string260", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string261", + "type": "STRING", + "name": "string261", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string262", + "type": "STRING", + "name": "string262", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string263", + "type": "STRING", + "name": "string263", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string264", + "type": "STRING", + "name": "string264", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string265", + "type": "STRING", + "name": "string265", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string266", + "type": "STRING", + "name": "string266", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string267", + "type": "STRING", + "name": "string267", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string268", + "type": "STRING", + "name": "string268", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string269", + "type": "STRING", + "name": "string269", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string270", + "type": "STRING", + "name": "string270", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string271", + "type": "STRING", + "name": "string271", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string272", + "type": "STRING", + "name": "string272", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string273", + "type": "STRING", + "name": "string273", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string274", + "type": "STRING", + "name": "string274", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string275", + "type": "STRING", + "name": "string275", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string276", + "type": "STRING", + "name": "string276", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string277", + "type": "STRING", + "name": "string277", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string278", + "type": "STRING", + "name": "string278", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string279", + "type": "STRING", + "name": "string279", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string280", + "type": "STRING", + "name": "string280", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string281", + "type": "STRING", + "name": "string281", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string282", + "type": "STRING", + "name": "string282", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string283", + "type": "STRING", + "name": "string283", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string284", + "type": "STRING", + "name": "string284", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string285", + "type": "STRING", + "name": "string285", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string286", + "type": "STRING", + "name": "string286", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string287", + "type": "STRING", + "name": "string287", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string288", + "type": "STRING", + "name": "string288", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string289", + "type": "STRING", + "name": "string289", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string290", + "type": "STRING", + "name": "string290", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string291", + "type": "STRING", + "name": "string291", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string292", + "type": "STRING", + "name": "string292", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string293", + "type": "STRING", + "name": "string293", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string294", + "type": "STRING", + "name": "string294", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string295", + "type": "STRING", + "name": "string295", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string296", + "type": "STRING", + "name": "string296", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string297", + "type": "STRING", + "name": "string297", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string298", + "type": "STRING", + "name": "string298", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string299", + "type": "STRING", + "name": "string299", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string300", + "type": "STRING", + "name": "string300", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string301", + "type": "STRING", + "name": "string301", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string302", + "type": "STRING", + "name": "string302", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string303", + "type": "STRING", + "name": "string303", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string304", + "type": "STRING", + "name": "string304", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string305", + "type": "STRING", + "name": "string305", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string306", + "type": "STRING", + "name": "string306", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string307", + "type": "STRING", + "name": "string307", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string308", + "type": "STRING", + "name": "string308", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string309", + "type": "STRING", + "name": "string309", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string310", + "type": "STRING", + "name": "string310", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string311", + "type": "STRING", + "name": "string311", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string312", + "type": "STRING", + "name": "string312", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string313", + "type": "STRING", + "name": "string313", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string314", + "type": "STRING", + "name": "string314", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string315", + "type": "STRING", + "name": "string315", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string316", + "type": "STRING", + "name": "string316", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string317", + "type": "STRING", + "name": "string317", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string318", + "type": "STRING", + "name": "string318", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string319", + "type": "STRING", + "name": "string319", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string320", + "type": "STRING", + "name": "string320", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string321", + "type": "STRING", + "name": "string321", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string322", + "type": "STRING", + "name": "string322", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string323", + "type": "STRING", + "name": "string323", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string324", + "type": "STRING", + "name": "string324", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string325", + "type": "STRING", + "name": "string325", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string326", + "type": "STRING", + "name": "string326", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string327", + "type": "STRING", + "name": "string327", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string328", + "type": "STRING", + "name": "string328", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string329", + "type": "STRING", + "name": "string329", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string330", + "type": "STRING", + "name": "string330", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string331", + "type": "STRING", + "name": "string331", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string332", + "type": "STRING", + "name": "string332", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string333", + "type": "STRING", + "name": "string333", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string334", + "type": "STRING", + "name": "string334", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string335", + "type": "STRING", + "name": "string335", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string336", + "type": "STRING", + "name": "string336", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string337", + "type": "STRING", + "name": "string337", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string338", + "type": "STRING", + "name": "string338", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string339", + "type": "STRING", + "name": "string339", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string340", + "type": "STRING", + "name": "string340", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string341", + "type": "STRING", + "name": "string341", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string342", + "type": "STRING", + "name": "string342", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string343", + "type": "STRING", + "name": "string343", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string344", + "type": "STRING", + "name": "string344", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string345", + "type": "STRING", + "name": "string345", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string346", + "type": "STRING", + "name": "string346", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string347", + "type": "STRING", + "name": "string347", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string348", + "type": "STRING", + "name": "string348", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string349", + "type": "STRING", + "name": "string349", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string350", + "type": "STRING", + "name": "string350", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string351", + "type": "STRING", + "name": "string351", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string352", + "type": "STRING", + "name": "string352", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string353", + "type": "STRING", + "name": "string353", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string354", + "type": "STRING", + "name": "string354", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string355", + "type": "STRING", + "name": "string355", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string356", + "type": "STRING", + "name": "string356", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string357", + "type": "STRING", + "name": "string357", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string358", + "type": "STRING", + "name": "string358", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string359", + "type": "STRING", + "name": "string359", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string360", + "type": "STRING", + "name": "string360", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string361", + "type": "STRING", + "name": "string361", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string362", + "type": "STRING", + "name": "string362", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string363", + "type": "STRING", + "name": "string363", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string364", + "type": "STRING", + "name": "string364", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string365", + "type": "STRING", + "name": "string365", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string366", + "type": "STRING", + "name": "string366", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string367", + "type": "STRING", + "name": "string367", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string368", + "type": "STRING", + "name": "string368", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string369", + "type": "STRING", + "name": "string369", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string370", + "type": "STRING", + "name": "string370", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string371", + "type": "STRING", + "name": "string371", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string372", + "type": "STRING", + "name": "string372", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string373", + "type": "STRING", + "name": "string373", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string374", + "type": "STRING", + "name": "string374", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string375", + "type": "STRING", + "name": "string375", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string376", + "type": "STRING", + "name": "string376", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string377", + "type": "STRING", + "name": "string377", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string378", + "type": "STRING", + "name": "string378", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string379", + "type": "STRING", + "name": "string379", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string380", + "type": "STRING", + "name": "string380", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string381", + "type": "STRING", + "name": "string381", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string382", + "type": "STRING", + "name": "string382", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string383", + "type": "STRING", + "name": "string383", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string384", + "type": "STRING", + "name": "string384", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string385", + "type": "STRING", + "name": "string385", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string386", + "type": "STRING", + "name": "string386", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string387", + "type": "STRING", + "name": "string387", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string388", + "type": "STRING", + "name": "string388", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string389", + "type": "STRING", + "name": "string389", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string390", + "type": "STRING", + "name": "string390", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string391", + "type": "STRING", + "name": "string391", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string392", + "type": "STRING", + "name": "string392", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string393", + "type": "STRING", + "name": "string393", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string394", + "type": "STRING", + "name": "string394", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string395", + "type": "STRING", + "name": "string395", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string396", + "type": "STRING", + "name": "string396", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string397", + "type": "STRING", + "name": "string397", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string398", + "type": "STRING", + "name": "string398", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string399", + "type": "STRING", + "name": "string399", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string400", + "type": "STRING", + "name": "string400", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string401", + "type": "STRING", + "name": "string401", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string402", + "type": "STRING", + "name": "string402", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string403", + "type": "STRING", + "name": "string403", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string404", + "type": "STRING", + "name": "string404", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string405", + "type": "STRING", + "name": "string405", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string406", + "type": "STRING", + "name": "string406", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string407", + "type": "STRING", + "name": "string407", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string408", + "type": "STRING", + "name": "string408", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string409", + "type": "STRING", + "name": "string409", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string410", + "type": "STRING", + "name": "string410", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string411", + "type": "STRING", + "name": "string411", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string412", + "type": "STRING", + "name": "string412", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string413", + "type": "STRING", + "name": "string413", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string414", + "type": "STRING", + "name": "string414", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string415", + "type": "STRING", + "name": "string415", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string416", + "type": "STRING", + "name": "string416", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string417", + "type": "STRING", + "name": "string417", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string418", + "type": "STRING", + "name": "string418", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string419", + "type": "STRING", + "name": "string419", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string420", + "type": "STRING", + "name": "string420", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string421", + "type": "STRING", + "name": "string421", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string422", + "type": "STRING", + "name": "string422", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string423", + "type": "STRING", + "name": "string423", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string424", + "type": "STRING", + "name": "string424", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string425", + "type": "STRING", + "name": "string425", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string426", + "type": "STRING", + "name": "string426", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string427", + "type": "STRING", + "name": "string427", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string428", + "type": "STRING", + "name": "string428", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string429", + "type": "STRING", + "name": "string429", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string430", + "type": "STRING", + "name": "string430", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string431", + "type": "STRING", + "name": "string431", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string432", + "type": "STRING", + "name": "string432", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string433", + "type": "STRING", + "name": "string433", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string434", + "type": "STRING", + "name": "string434", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string435", + "type": "STRING", + "name": "string435", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string436", + "type": "STRING", + "name": "string436", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string437", + "type": "STRING", + "name": "string437", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string438", + "type": "STRING", + "name": "string438", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string439", + "type": "STRING", + "name": "string439", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string440", + "type": "STRING", + "name": "string440", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string441", + "type": "STRING", + "name": "string441", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string442", + "type": "STRING", + "name": "string442", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string443", + "type": "STRING", + "name": "string443", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string444", + "type": "STRING", + "name": "string444", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string445", + "type": "STRING", + "name": "string445", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string446", + "type": "STRING", + "name": "string446", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string447", + "type": "STRING", + "name": "string447", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string448", + "type": "STRING", + "name": "string448", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string449", + "type": "STRING", + "name": "string449", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string450", + "type": "STRING", + "name": "string450", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string451", + "type": "STRING", + "name": "string451", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string452", + "type": "STRING", + "name": "string452", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string453", + "type": "STRING", + "name": "string453", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string454", + "type": "STRING", + "name": "string454", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string455", + "type": "STRING", + "name": "string455", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string456", + "type": "STRING", + "name": "string456", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string457", + "type": "STRING", + "name": "string457", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string458", + "type": "STRING", + "name": "string458", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string459", + "type": "STRING", + "name": "string459", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string460", + "type": "STRING", + "name": "string460", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string461", + "type": "STRING", + "name": "string461", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string462", + "type": "STRING", + "name": "string462", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string463", + "type": "STRING", + "name": "string463", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string464", + "type": "STRING", + "name": "string464", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string465", + "type": "STRING", + "name": "string465", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string466", + "type": "STRING", + "name": "string466", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string467", + "type": "STRING", + "name": "string467", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string468", + "type": "STRING", + "name": "string468", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string469", + "type": "STRING", + "name": "string469", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string470", + "type": "STRING", + "name": "string470", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string471", + "type": "STRING", + "name": "string471", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string472", + "type": "STRING", + "name": "string472", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string473", + "type": "STRING", + "name": "string473", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string474", + "type": "STRING", + "name": "string474", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string475", + "type": "STRING", + "name": "string475", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string476", + "type": "STRING", + "name": "string476", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string477", + "type": "STRING", + "name": "string477", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string478", + "type": "STRING", + "name": "string478", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string479", + "type": "STRING", + "name": "string479", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string480", + "type": "STRING", + "name": "string480", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string481", + "type": "STRING", + "name": "string481", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string482", + "type": "STRING", + "name": "string482", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string483", + "type": "STRING", + "name": "string483", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string484", + "type": "STRING", + "name": "string484", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string485", + "type": "STRING", + "name": "string485", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string486", + "type": "STRING", + "name": "string486", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string487", + "type": "STRING", + "name": "string487", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string488", + "type": "STRING", + "name": "string488", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string489", + "type": "STRING", + "name": "string489", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string490", + "type": "STRING", + "name": "string490", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string491", + "type": "STRING", + "name": "string491", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string492", + "type": "STRING", + "name": "string492", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string493", + "type": "STRING", + "name": "string493", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string494", + "type": "STRING", + "name": "string494", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string495", + "type": "STRING", + "name": "string495", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string496", + "type": "STRING", + "name": "string496", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string497", + "type": "STRING", + "name": "string497", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string498", + "type": "STRING", + "name": "string498", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string499", + "type": "STRING", + "name": "string499", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string500", + "type": "STRING", + "name": "string500", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string501", + "type": "STRING", + "name": "string501", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string502", + "type": "STRING", + "name": "string502", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string503", + "type": "STRING", + "name": "string503", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string504", + "type": "STRING", + "name": "string504", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string505", + "type": "STRING", + "name": "string505", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string506", + "type": "STRING", + "name": "string506", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string507", + "type": "STRING", + "name": "string507", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string508", + "type": "STRING", + "name": "string508", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string509", + "type": "STRING", + "name": "string509", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string510", + "type": "STRING", + "name": "string510", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string511", + "type": "STRING", + "name": "string511", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string512", + "type": "STRING", + "name": "string512", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string513", + "type": "STRING", + "name": "string513", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string514", + "type": "STRING", + "name": "string514", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string515", + "type": "STRING", + "name": "string515", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string516", + "type": "STRING", + "name": "string516", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string517", + "type": "STRING", + "name": "string517", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string518", + "type": "STRING", + "name": "string518", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string519", + "type": "STRING", + "name": "string519", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string520", + "type": "STRING", + "name": "string520", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string521", + "type": "STRING", + "name": "string521", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string522", + "type": "STRING", + "name": "string522", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string523", + "type": "STRING", + "name": "string523", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string524", + "type": "STRING", + "name": "string524", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string525", + "type": "STRING", + "name": "string525", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string526", + "type": "STRING", + "name": "string526", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string527", + "type": "STRING", + "name": "string527", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string528", + "type": "STRING", + "name": "string528", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string529", + "type": "STRING", + "name": "string529", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string530", + "type": "STRING", + "name": "string530", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string531", + "type": "STRING", + "name": "string531", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string532", + "type": "STRING", + "name": "string532", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string533", + "type": "STRING", + "name": "string533", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string534", + "type": "STRING", + "name": "string534", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string535", + "type": "STRING", + "name": "string535", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string536", + "type": "STRING", + "name": "string536", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string537", + "type": "STRING", + "name": "string537", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string538", + "type": "STRING", + "name": "string538", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string539", + "type": "STRING", + "name": "string539", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string540", + "type": "STRING", + "name": "string540", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string541", + "type": "STRING", + "name": "string541", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string542", + "type": "STRING", + "name": "string542", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string543", + "type": "STRING", + "name": "string543", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string544", + "type": "STRING", + "name": "string544", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string545", + "type": "STRING", + "name": "string545", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string546", + "type": "STRING", + "name": "string546", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string547", + "type": "STRING", + "name": "string547", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string548", + "type": "STRING", + "name": "string548", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string549", + "type": "STRING", + "name": "string549", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string550", + "type": "STRING", + "name": "string550", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string551", + "type": "STRING", + "name": "string551", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string552", + "type": "STRING", + "name": "string552", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string553", + "type": "STRING", + "name": "string553", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string554", + "type": "STRING", + "name": "string554", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string555", + "type": "STRING", + "name": "string555", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string556", + "type": "STRING", + "name": "string556", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string557", + "type": "STRING", + "name": "string557", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string558", + "type": "STRING", + "name": "string558", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string559", + "type": "STRING", + "name": "string559", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string560", + "type": "STRING", + "name": "string560", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string561", + "type": "STRING", + "name": "string561", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string562", + "type": "STRING", + "name": "string562", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string563", + "type": "STRING", + "name": "string563", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string564", + "type": "STRING", + "name": "string564", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string565", + "type": "STRING", + "name": "string565", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string566", + "type": "STRING", + "name": "string566", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string567", + "type": "STRING", + "name": "string567", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string568", + "type": "STRING", + "name": "string568", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string569", + "type": "STRING", + "name": "string569", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string570", + "type": "STRING", + "name": "string570", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string571", + "type": "STRING", + "name": "string571", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string572", + "type": "STRING", + "name": "string572", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string573", + "type": "STRING", + "name": "string573", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string574", + "type": "STRING", + "name": "string574", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string575", + "type": "STRING", + "name": "string575", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string576", + "type": "STRING", + "name": "string576", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string577", + "type": "STRING", + "name": "string577", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string578", + "type": "STRING", + "name": "string578", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string579", + "type": "STRING", + "name": "string579", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string580", + "type": "STRING", + "name": "string580", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string581", + "type": "STRING", + "name": "string581", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string582", + "type": "STRING", + "name": "string582", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string583", + "type": "STRING", + "name": "string583", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string584", + "type": "STRING", + "name": "string584", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string585", + "type": "STRING", + "name": "string585", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string586", + "type": "STRING", + "name": "string586", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string587", + "type": "STRING", + "name": "string587", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string588", + "type": "STRING", + "name": "string588", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string589", + "type": "STRING", + "name": "string589", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string590", + "type": "STRING", + "name": "string590", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string591", + "type": "STRING", + "name": "string591", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string592", + "type": "STRING", + "name": "string592", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string593", + "type": "STRING", + "name": "string593", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string594", + "type": "STRING", + "name": "string594", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string595", + "type": "STRING", + "name": "string595", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string596", + "type": "STRING", + "name": "string596", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string597", + "type": "STRING", + "name": "string597", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string598", + "type": "STRING", + "name": "string598", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string599", + "type": "STRING", + "name": "string599", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string600", + "type": "STRING", + "name": "string600", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string601", + "type": "STRING", + "name": "string601", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string602", + "type": "STRING", + "name": "string602", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string603", + "type": "STRING", + "name": "string603", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string604", + "type": "STRING", + "name": "string604", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string605", + "type": "STRING", + "name": "string605", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string606", + "type": "STRING", + "name": "string606", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string607", + "type": "STRING", + "name": "string607", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string608", + "type": "STRING", + "name": "string608", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string609", + "type": "STRING", + "name": "string609", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string610", + "type": "STRING", + "name": "string610", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string611", + "type": "STRING", + "name": "string611", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string612", + "type": "STRING", + "name": "string612", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string613", + "type": "STRING", + "name": "string613", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string614", + "type": "STRING", + "name": "string614", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string615", + "type": "STRING", + "name": "string615", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string616", + "type": "STRING", + "name": "string616", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string617", + "type": "STRING", + "name": "string617", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string618", + "type": "STRING", + "name": "string618", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string619", + "type": "STRING", + "name": "string619", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string620", + "type": "STRING", + "name": "string620", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string621", + "type": "STRING", + "name": "string621", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string622", + "type": "STRING", + "name": "string622", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string623", + "type": "STRING", + "name": "string623", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string624", + "type": "STRING", + "name": "string624", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string625", + "type": "STRING", + "name": "string625", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string626", + "type": "STRING", + "name": "string626", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string627", + "type": "STRING", + "name": "string627", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string628", + "type": "STRING", + "name": "string628", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string629", + "type": "STRING", + "name": "string629", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string630", + "type": "STRING", + "name": "string630", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string631", + "type": "STRING", + "name": "string631", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string632", + "type": "STRING", + "name": "string632", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string633", + "type": "STRING", + "name": "string633", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string634", + "type": "STRING", + "name": "string634", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string635", + "type": "STRING", + "name": "string635", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string636", + "type": "STRING", + "name": "string636", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string637", + "type": "STRING", + "name": "string637", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string638", + "type": "STRING", + "name": "string638", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string639", + "type": "STRING", + "name": "string639", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string640", + "type": "STRING", + "name": "string640", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string641", + "type": "STRING", + "name": "string641", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string642", + "type": "STRING", + "name": "string642", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string643", + "type": "STRING", + "name": "string643", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string644", + "type": "STRING", + "name": "string644", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string645", + "type": "STRING", + "name": "string645", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string646", + "type": "STRING", + "name": "string646", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string647", + "type": "STRING", + "name": "string647", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string648", + "type": "STRING", + "name": "string648", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string649", + "type": "STRING", + "name": "string649", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string650", + "type": "STRING", + "name": "string650", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string651", + "type": "STRING", + "name": "string651", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string652", + "type": "STRING", + "name": "string652", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string653", + "type": "STRING", + "name": "string653", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string654", + "type": "STRING", + "name": "string654", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string655", + "type": "STRING", + "name": "string655", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string656", + "type": "STRING", + "name": "string656", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string657", + "type": "STRING", + "name": "string657", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string658", + "type": "STRING", + "name": "string658", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string659", + "type": "STRING", + "name": "string659", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string660", + "type": "STRING", + "name": "string660", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string661", + "type": "STRING", + "name": "string661", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string662", + "type": "STRING", + "name": "string662", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string663", + "type": "STRING", + "name": "string663", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string664", + "type": "STRING", + "name": "string664", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string665", + "type": "STRING", + "name": "string665", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string666", + "type": "STRING", + "name": "string666", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string667", + "type": "STRING", + "name": "string667", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string668", + "type": "STRING", + "name": "string668", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string669", + "type": "STRING", + "name": "string669", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string670", + "type": "STRING", + "name": "string670", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string671", + "type": "STRING", + "name": "string671", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string672", + "type": "STRING", + "name": "string672", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string673", + "type": "STRING", + "name": "string673", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string674", + "type": "STRING", + "name": "string674", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string675", + "type": "STRING", + "name": "string675", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string676", + "type": "STRING", + "name": "string676", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string677", + "type": "STRING", + "name": "string677", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string678", + "type": "STRING", + "name": "string678", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string679", + "type": "STRING", + "name": "string679", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string680", + "type": "STRING", + "name": "string680", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string681", + "type": "STRING", + "name": "string681", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string682", + "type": "STRING", + "name": "string682", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string683", + "type": "STRING", + "name": "string683", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string684", + "type": "STRING", + "name": "string684", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string685", + "type": "STRING", + "name": "string685", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string686", + "type": "STRING", + "name": "string686", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string687", + "type": "STRING", + "name": "string687", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string688", + "type": "STRING", + "name": "string688", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string689", + "type": "STRING", + "name": "string689", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string690", + "type": "STRING", + "name": "string690", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string691", + "type": "STRING", + "name": "string691", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string692", + "type": "STRING", + "name": "string692", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string693", + "type": "STRING", + "name": "string693", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string694", + "type": "STRING", + "name": "string694", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string695", + "type": "STRING", + "name": "string695", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string696", + "type": "STRING", + "name": "string696", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string697", + "type": "STRING", + "name": "string697", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string698", + "type": "STRING", + "name": "string698", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string699", + "type": "STRING", + "name": "string699", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string700", + "type": "STRING", + "name": "string700", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string701", + "type": "STRING", + "name": "string701", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string702", + "type": "STRING", + "name": "string702", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string703", + "type": "STRING", + "name": "string703", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string704", + "type": "STRING", + "name": "string704", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string705", + "type": "STRING", + "name": "string705", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string706", + "type": "STRING", + "name": "string706", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string707", + "type": "STRING", + "name": "string707", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string708", + "type": "STRING", + "name": "string708", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string709", + "type": "STRING", + "name": "string709", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string710", + "type": "STRING", + "name": "string710", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string711", + "type": "STRING", + "name": "string711", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string712", + "type": "STRING", + "name": "string712", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string713", + "type": "STRING", + "name": "string713", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string714", + "type": "STRING", + "name": "string714", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string715", + "type": "STRING", + "name": "string715", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string716", + "type": "STRING", + "name": "string716", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string717", + "type": "STRING", + "name": "string717", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string718", + "type": "STRING", + "name": "string718", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string719", + "type": "STRING", + "name": "string719", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string720", + "type": "STRING", + "name": "string720", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string721", + "type": "STRING", + "name": "string721", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string722", + "type": "STRING", + "name": "string722", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string723", + "type": "STRING", + "name": "string723", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string724", + "type": "STRING", + "name": "string724", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string725", + "type": "STRING", + "name": "string725", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string726", + "type": "STRING", + "name": "string726", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string727", + "type": "STRING", + "name": "string727", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string728", + "type": "STRING", + "name": "string728", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string729", + "type": "STRING", + "name": "string729", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string730", + "type": "STRING", + "name": "string730", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string731", + "type": "STRING", + "name": "string731", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string732", + "type": "STRING", + "name": "string732", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string733", + "type": "STRING", + "name": "string733", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string734", + "type": "STRING", + "name": "string734", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string735", + "type": "STRING", + "name": "string735", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string736", + "type": "STRING", + "name": "string736", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string737", + "type": "STRING", + "name": "string737", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string738", + "type": "STRING", + "name": "string738", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string739", + "type": "STRING", + "name": "string739", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string740", + "type": "STRING", + "name": "string740", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string741", + "type": "STRING", + "name": "string741", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string742", + "type": "STRING", + "name": "string742", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string743", + "type": "STRING", + "name": "string743", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string744", + "type": "STRING", + "name": "string744", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string745", + "type": "STRING", + "name": "string745", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string746", + "type": "STRING", + "name": "string746", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string747", + "type": "STRING", + "name": "string747", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string748", + "type": "STRING", + "name": "string748", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string749", + "type": "STRING", + "name": "string749", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string750", + "type": "STRING", + "name": "string750", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string751", + "type": "STRING", + "name": "string751", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string752", + "type": "STRING", + "name": "string752", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string753", + "type": "STRING", + "name": "string753", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string754", + "type": "STRING", + "name": "string754", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string755", + "type": "STRING", + "name": "string755", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string756", + "type": "STRING", + "name": "string756", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string757", + "type": "STRING", + "name": "string757", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string758", + "type": "STRING", + "name": "string758", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string759", + "type": "STRING", + "name": "string759", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string760", + "type": "STRING", + "name": "string760", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string761", + "type": "STRING", + "name": "string761", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string762", + "type": "STRING", + "name": "string762", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string763", + "type": "STRING", + "name": "string763", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string764", + "type": "STRING", + "name": "string764", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string765", + "type": "STRING", + "name": "string765", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string766", + "type": "STRING", + "name": "string766", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string767", + "type": "STRING", + "name": "string767", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string768", + "type": "STRING", + "name": "string768", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string769", + "type": "STRING", + "name": "string769", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string770", + "type": "STRING", + "name": "string770", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string771", + "type": "STRING", + "name": "string771", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string772", + "type": "STRING", + "name": "string772", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string773", + "type": "STRING", + "name": "string773", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string774", + "type": "STRING", + "name": "string774", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string775", + "type": "STRING", + "name": "string775", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string776", + "type": "STRING", + "name": "string776", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string777", + "type": "STRING", + "name": "string777", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string778", + "type": "STRING", + "name": "string778", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string779", + "type": "STRING", + "name": "string779", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string780", + "type": "STRING", + "name": "string780", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string781", + "type": "STRING", + "name": "string781", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string782", + "type": "STRING", + "name": "string782", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string783", + "type": "STRING", + "name": "string783", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string784", + "type": "STRING", + "name": "string784", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string785", + "type": "STRING", + "name": "string785", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string786", + "type": "STRING", + "name": "string786", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string787", + "type": "STRING", + "name": "string787", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string788", + "type": "STRING", + "name": "string788", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string789", + "type": "STRING", + "name": "string789", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string790", + "type": "STRING", + "name": "string790", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string791", + "type": "STRING", + "name": "string791", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string792", + "type": "STRING", + "name": "string792", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string793", + "type": "STRING", + "name": "string793", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string794", + "type": "STRING", + "name": "string794", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string795", + "type": "STRING", + "name": "string795", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string796", + "type": "STRING", + "name": "string796", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string797", + "type": "STRING", + "name": "string797", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string798", + "type": "STRING", + "name": "string798", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string799", + "type": "STRING", + "name": "string799", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string800", + "type": "STRING", + "name": "string800", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string801", + "type": "STRING", + "name": "string801", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string802", + "type": "STRING", + "name": "string802", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string803", + "type": "STRING", + "name": "string803", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string804", + "type": "STRING", + "name": "string804", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string805", + "type": "STRING", + "name": "string805", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string806", + "type": "STRING", + "name": "string806", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string807", + "type": "STRING", + "name": "string807", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string808", + "type": "STRING", + "name": "string808", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string809", + "type": "STRING", + "name": "string809", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string810", + "type": "STRING", + "name": "string810", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string811", + "type": "STRING", + "name": "string811", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string812", + "type": "STRING", + "name": "string812", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string813", + "type": "STRING", + "name": "string813", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string814", + "type": "STRING", + "name": "string814", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string815", + "type": "STRING", + "name": "string815", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string816", + "type": "STRING", + "name": "string816", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string817", + "type": "STRING", + "name": "string817", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string818", + "type": "STRING", + "name": "string818", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string819", + "type": "STRING", + "name": "string819", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string820", + "type": "STRING", + "name": "string820", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string821", + "type": "STRING", + "name": "string821", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string822", + "type": "STRING", + "name": "string822", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string823", + "type": "STRING", + "name": "string823", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string824", + "type": "STRING", + "name": "string824", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string825", + "type": "STRING", + "name": "string825", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string826", + "type": "STRING", + "name": "string826", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string827", + "type": "STRING", + "name": "string827", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string828", + "type": "STRING", + "name": "string828", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string829", + "type": "STRING", + "name": "string829", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string830", + "type": "STRING", + "name": "string830", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string831", + "type": "STRING", + "name": "string831", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string832", + "type": "STRING", + "name": "string832", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string833", + "type": "STRING", + "name": "string833", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string834", + "type": "STRING", + "name": "string834", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string835", + "type": "STRING", + "name": "string835", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string836", + "type": "STRING", + "name": "string836", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string837", + "type": "STRING", + "name": "string837", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string838", + "type": "STRING", + "name": "string838", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string839", + "type": "STRING", + "name": "string839", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string840", + "type": "STRING", + "name": "string840", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string841", + "type": "STRING", + "name": "string841", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string842", + "type": "STRING", + "name": "string842", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string843", + "type": "STRING", + "name": "string843", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string844", + "type": "STRING", + "name": "string844", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string845", + "type": "STRING", + "name": "string845", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string846", + "type": "STRING", + "name": "string846", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string847", + "type": "STRING", + "name": "string847", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string848", + "type": "STRING", + "name": "string848", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string849", + "type": "STRING", + "name": "string849", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string850", + "type": "STRING", + "name": "string850", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string851", + "type": "STRING", + "name": "string851", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string852", + "type": "STRING", + "name": "string852", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string853", + "type": "STRING", + "name": "string853", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string854", + "type": "STRING", + "name": "string854", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string855", + "type": "STRING", + "name": "string855", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string856", + "type": "STRING", + "name": "string856", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string857", + "type": "STRING", + "name": "string857", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string858", + "type": "STRING", + "name": "string858", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string859", + "type": "STRING", + "name": "string859", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string860", + "type": "STRING", + "name": "string860", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string861", + "type": "STRING", + "name": "string861", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string862", + "type": "STRING", + "name": "string862", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string863", + "type": "STRING", + "name": "string863", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string864", + "type": "STRING", + "name": "string864", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string865", + "type": "STRING", + "name": "string865", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string866", + "type": "STRING", + "name": "string866", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string867", + "type": "STRING", + "name": "string867", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string868", + "type": "STRING", + "name": "string868", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string869", + "type": "STRING", + "name": "string869", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string870", + "type": "STRING", + "name": "string870", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string871", + "type": "STRING", + "name": "string871", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string872", + "type": "STRING", + "name": "string872", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string873", + "type": "STRING", + "name": "string873", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string874", + "type": "STRING", + "name": "string874", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string875", + "type": "STRING", + "name": "string875", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string876", + "type": "STRING", + "name": "string876", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string877", + "type": "STRING", + "name": "string877", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string878", + "type": "STRING", + "name": "string878", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string879", + "type": "STRING", + "name": "string879", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string880", + "type": "STRING", + "name": "string880", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string881", + "type": "STRING", + "name": "string881", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string882", + "type": "STRING", + "name": "string882", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string883", + "type": "STRING", + "name": "string883", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string884", + "type": "STRING", + "name": "string884", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string885", + "type": "STRING", + "name": "string885", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string886", + "type": "STRING", + "name": "string886", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string887", + "type": "STRING", + "name": "string887", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string888", + "type": "STRING", + "name": "string888", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string889", + "type": "STRING", + "name": "string889", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string890", + "type": "STRING", + "name": "string890", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string891", + "type": "STRING", + "name": "string891", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string892", + "type": "STRING", + "name": "string892", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string893", + "type": "STRING", + "name": "string893", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string894", + "type": "STRING", + "name": "string894", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string895", + "type": "STRING", + "name": "string895", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string896", + "type": "STRING", + "name": "string896", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string897", + "type": "STRING", + "name": "string897", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string898", + "type": "STRING", + "name": "string898", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string899", + "type": "STRING", + "name": "string899", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string900", + "type": "STRING", + "name": "string900", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string901", + "type": "STRING", + "name": "string901", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string902", + "type": "STRING", + "name": "string902", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string903", + "type": "STRING", + "name": "string903", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string904", + "type": "STRING", + "name": "string904", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string905", + "type": "STRING", + "name": "string905", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string906", + "type": "STRING", + "name": "string906", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string907", + "type": "STRING", + "name": "string907", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string908", + "type": "STRING", + "name": "string908", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string909", + "type": "STRING", + "name": "string909", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string910", + "type": "STRING", + "name": "string910", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string911", + "type": "STRING", + "name": "string911", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string912", + "type": "STRING", + "name": "string912", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string913", + "type": "STRING", + "name": "string913", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string914", + "type": "STRING", + "name": "string914", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string915", + "type": "STRING", + "name": "string915", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string916", + "type": "STRING", + "name": "string916", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string917", + "type": "STRING", + "name": "string917", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string918", + "type": "STRING", + "name": "string918", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string919", + "type": "STRING", + "name": "string919", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string920", + "type": "STRING", + "name": "string920", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string921", + "type": "STRING", + "name": "string921", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string922", + "type": "STRING", + "name": "string922", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string923", + "type": "STRING", + "name": "string923", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string924", + "type": "STRING", + "name": "string924", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string925", + "type": "STRING", + "name": "string925", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string926", + "type": "STRING", + "name": "string926", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string927", + "type": "STRING", + "name": "string927", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string928", + "type": "STRING", + "name": "string928", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string929", + "type": "STRING", + "name": "string929", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string930", + "type": "STRING", + "name": "string930", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string931", + "type": "STRING", + "name": "string931", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string932", + "type": "STRING", + "name": "string932", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string933", + "type": "STRING", + "name": "string933", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string934", + "type": "STRING", + "name": "string934", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string935", + "type": "STRING", + "name": "string935", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string936", + "type": "STRING", + "name": "string936", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string937", + "type": "STRING", + "name": "string937", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string938", + "type": "STRING", + "name": "string938", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string939", + "type": "STRING", + "name": "string939", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string940", + "type": "STRING", + "name": "string940", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string941", + "type": "STRING", + "name": "string941", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string942", + "type": "STRING", + "name": "string942", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string943", + "type": "STRING", + "name": "string943", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string944", + "type": "STRING", + "name": "string944", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string945", + "type": "STRING", + "name": "string945", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string946", + "type": "STRING", + "name": "string946", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string947", + "type": "STRING", + "name": "string947", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string948", + "type": "STRING", + "name": "string948", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string949", + "type": "STRING", + "name": "string949", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string950", + "type": "STRING", + "name": "string950", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string951", + "type": "STRING", + "name": "string951", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string952", + "type": "STRING", + "name": "string952", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string953", + "type": "STRING", + "name": "string953", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string954", + "type": "STRING", + "name": "string954", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string955", + "type": "STRING", + "name": "string955", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string956", + "type": "STRING", + "name": "string956", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string957", + "type": "STRING", + "name": "string957", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string958", + "type": "STRING", + "name": "string958", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string959", + "type": "STRING", + "name": "string959", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string960", + "type": "STRING", + "name": "string960", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string961", + "type": "STRING", + "name": "string961", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string962", + "type": "STRING", + "name": "string962", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string963", + "type": "STRING", + "name": "string963", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string964", + "type": "STRING", + "name": "string964", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string965", + "type": "STRING", + "name": "string965", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string966", + "type": "STRING", + "name": "string966", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string967", + "type": "STRING", + "name": "string967", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string968", + "type": "STRING", + "name": "string968", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string969", + "type": "STRING", + "name": "string969", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string970", + "type": "STRING", + "name": "string970", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string971", + "type": "STRING", + "name": "string971", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string972", + "type": "STRING", + "name": "string972", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string973", + "type": "STRING", + "name": "string973", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string974", + "type": "STRING", + "name": "string974", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string975", + "type": "STRING", + "name": "string975", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string976", + "type": "STRING", + "name": "string976", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string977", + "type": "STRING", + "name": "string977", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string978", + "type": "STRING", + "name": "string978", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string979", + "type": "STRING", + "name": "string979", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string980", + "type": "STRING", + "name": "string980", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string981", + "type": "STRING", + "name": "string981", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string982", + "type": "STRING", + "name": "string982", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string983", + "type": "STRING", + "name": "string983", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string984", + "type": "STRING", + "name": "string984", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string985", + "type": "STRING", + "name": "string985", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string986", + "type": "STRING", + "name": "string986", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string987", + "type": "STRING", + "name": "string987", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string988", + "type": "STRING", + "name": "string988", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string989", + "type": "STRING", + "name": "string989", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string990", + "type": "STRING", + "name": "string990", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string991", + "type": "STRING", + "name": "string991", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string992", + "type": "STRING", + "name": "string992", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string993", + "type": "STRING", + "name": "string993", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string994", + "type": "STRING", + "name": "string994", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string995", + "type": "STRING", + "name": "string995", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string996", + "type": "STRING", + "name": "string996", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string997", + "type": "STRING", + "name": "string997", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string998", + "type": "STRING", + "name": "string998", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string999", + "type": "STRING", + "name": "string999", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string1000", + "type": "STRING", + "name": "string1000", "mode": "REQUIRED" } ] diff --git a/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/10_STRING_90_NUMERIC_10.json b/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/10_STRING_90_NUMERIC_10.json index ce1641a8a1..00dcb0c058 100644 --- a/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/10_STRING_90_NUMERIC_10.json +++ b/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/10_STRING_90_NUMERIC_10.json @@ -1,53 +1,53 @@ { "fields": [ { - "type": "STRING", - "name": "string1", + "type": "STRING", + "name": "string1", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric1", + "type": "NUMERIC", + "name": "numeric1", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric2", + "type": "NUMERIC", + "name": "numeric2", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric3", + "type": "NUMERIC", + "name": "numeric3", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric4", + "type": "NUMERIC", + "name": "numeric4", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric5", + "type": "NUMERIC", + "name": "numeric5", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric6", + "type": "NUMERIC", + "name": "numeric6", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric7", + "type": "NUMERIC", + "name": "numeric7", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric8", + "type": "NUMERIC", + "name": "numeric8", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric9", + "type": "NUMERIC", + "name": "numeric9", "mode": "REQUIRED" } ] diff --git a/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/10_STRING_90_NUMERIC_100.json b/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/10_STRING_90_NUMERIC_100.json index 5638a9dbfb..93f15b9860 100644 --- a/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/10_STRING_90_NUMERIC_100.json +++ b/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/10_STRING_90_NUMERIC_100.json @@ -1,503 +1,503 @@ { "fields": [ { - "type": "STRING", - "name": "string1", + "type": "STRING", + "name": "string1", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string2", + "type": "STRING", + "name": "string2", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string3", + "type": "STRING", + "name": "string3", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string4", + "type": "STRING", + "name": "string4", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string5", + "type": "STRING", + "name": "string5", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string6", + "type": "STRING", + "name": "string6", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string7", + "type": "STRING", + "name": "string7", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string8", + "type": "STRING", + "name": "string8", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string9", + "type": "STRING", + "name": "string9", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string10", + "type": "STRING", + "name": "string10", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric1", + "type": "NUMERIC", + "name": "numeric1", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric2", + "type": "NUMERIC", + "name": "numeric2", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric3", + "type": "NUMERIC", + "name": "numeric3", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric4", + "type": "NUMERIC", + "name": "numeric4", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric5", + "type": "NUMERIC", + "name": "numeric5", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric6", + "type": "NUMERIC", + "name": "numeric6", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric7", + "type": "NUMERIC", + "name": "numeric7", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric8", + "type": "NUMERIC", + "name": "numeric8", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric9", + "type": "NUMERIC", + "name": "numeric9", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric10", + "type": "NUMERIC", + "name": "numeric10", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric11", + "type": "NUMERIC", + "name": "numeric11", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric12", + "type": "NUMERIC", + "name": "numeric12", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric13", + "type": "NUMERIC", + "name": "numeric13", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric14", + "type": "NUMERIC", + "name": "numeric14", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric15", + "type": "NUMERIC", + "name": "numeric15", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric16", + "type": "NUMERIC", + "name": "numeric16", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric17", + "type": "NUMERIC", + "name": "numeric17", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric18", + "type": "NUMERIC", + "name": "numeric18", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric19", + "type": "NUMERIC", + "name": "numeric19", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric20", + "type": "NUMERIC", + "name": "numeric20", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric21", + "type": "NUMERIC", + "name": "numeric21", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric22", + "type": "NUMERIC", + "name": "numeric22", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric23", + "type": "NUMERIC", + "name": "numeric23", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric24", + "type": "NUMERIC", + "name": "numeric24", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric25", + "type": "NUMERIC", + "name": "numeric25", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric26", + "type": "NUMERIC", + "name": "numeric26", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric27", + "type": "NUMERIC", + "name": "numeric27", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric28", + "type": "NUMERIC", + "name": "numeric28", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric29", + "type": "NUMERIC", + "name": "numeric29", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric30", + "type": "NUMERIC", + "name": "numeric30", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric31", + "type": "NUMERIC", + "name": "numeric31", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric32", + "type": "NUMERIC", + "name": "numeric32", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric33", + "type": "NUMERIC", + "name": "numeric33", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric34", + "type": "NUMERIC", + "name": "numeric34", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric35", + "type": "NUMERIC", + "name": "numeric35", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric36", + "type": "NUMERIC", + "name": "numeric36", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric37", + "type": "NUMERIC", + "name": "numeric37", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric38", + "type": "NUMERIC", + "name": "numeric38", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric39", + "type": "NUMERIC", + "name": "numeric39", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric40", + "type": "NUMERIC", + "name": "numeric40", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric41", + "type": "NUMERIC", + "name": "numeric41", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric42", + "type": "NUMERIC", + "name": "numeric42", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric43", + "type": "NUMERIC", + "name": "numeric43", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric44", + "type": "NUMERIC", + "name": "numeric44", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric45", + "type": "NUMERIC", + "name": "numeric45", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric46", + "type": "NUMERIC", + "name": "numeric46", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric47", + "type": "NUMERIC", + "name": "numeric47", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric48", + "type": "NUMERIC", + "name": "numeric48", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric49", + "type": "NUMERIC", + "name": "numeric49", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric50", + "type": "NUMERIC", + "name": "numeric50", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric51", + "type": "NUMERIC", + "name": "numeric51", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric52", + "type": "NUMERIC", + "name": "numeric52", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric53", + "type": "NUMERIC", + "name": "numeric53", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric54", + "type": "NUMERIC", + "name": "numeric54", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric55", + "type": "NUMERIC", + "name": "numeric55", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric56", + "type": "NUMERIC", + "name": "numeric56", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric57", + "type": "NUMERIC", + "name": "numeric57", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric58", + "type": "NUMERIC", + "name": "numeric58", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric59", + "type": "NUMERIC", + "name": "numeric59", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric60", + "type": "NUMERIC", + "name": "numeric60", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric61", + "type": "NUMERIC", + "name": "numeric61", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric62", + "type": "NUMERIC", + "name": "numeric62", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric63", + "type": "NUMERIC", + "name": "numeric63", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric64", + "type": "NUMERIC", + "name": "numeric64", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric65", + "type": "NUMERIC", + "name": "numeric65", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric66", + "type": "NUMERIC", + "name": "numeric66", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric67", + "type": "NUMERIC", + "name": "numeric67", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric68", + "type": "NUMERIC", + "name": "numeric68", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric69", + "type": "NUMERIC", + "name": "numeric69", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric70", + "type": "NUMERIC", + "name": "numeric70", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric71", + "type": "NUMERIC", + "name": "numeric71", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric72", + "type": "NUMERIC", + "name": "numeric72", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric73", + "type": "NUMERIC", + "name": "numeric73", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric74", + "type": "NUMERIC", + "name": "numeric74", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric75", + "type": "NUMERIC", + "name": "numeric75", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric76", + "type": "NUMERIC", + "name": "numeric76", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric77", + "type": "NUMERIC", + "name": "numeric77", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric78", + "type": "NUMERIC", + "name": "numeric78", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric79", + "type": "NUMERIC", + "name": "numeric79", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric80", + "type": "NUMERIC", + "name": "numeric80", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric81", + "type": "NUMERIC", + "name": "numeric81", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric82", + "type": "NUMERIC", + "name": "numeric82", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric83", + "type": "NUMERIC", + "name": "numeric83", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric84", + "type": "NUMERIC", + "name": "numeric84", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric85", + "type": "NUMERIC", + "name": "numeric85", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric86", + "type": "NUMERIC", + "name": "numeric86", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric87", + "type": "NUMERIC", + "name": "numeric87", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric88", + "type": "NUMERIC", + "name": "numeric88", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric89", + "type": "NUMERIC", + "name": "numeric89", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric90", + "type": "NUMERIC", + "name": "numeric90", "mode": "REQUIRED" } ] diff --git a/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/10_STRING_90_NUMERIC_1000.json b/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/10_STRING_90_NUMERIC_1000.json index 30252c0f0f..47d3adf90e 100644 --- a/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/10_STRING_90_NUMERIC_1000.json +++ b/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/10_STRING_90_NUMERIC_1000.json @@ -1,5003 +1,5003 @@ { "fields": [ { - "type": "STRING", - "name": "string1", + "type": "STRING", + "name": "string1", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string2", + "type": "STRING", + "name": "string2", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string3", + "type": "STRING", + "name": "string3", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string4", + "type": "STRING", + "name": "string4", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string5", + "type": "STRING", + "name": "string5", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string6", + "type": "STRING", + "name": "string6", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string7", + "type": "STRING", + "name": "string7", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string8", + "type": "STRING", + "name": "string8", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string9", + "type": "STRING", + "name": "string9", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string10", + "type": "STRING", + "name": "string10", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string11", + "type": "STRING", + "name": "string11", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string12", + "type": "STRING", + "name": "string12", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string13", + "type": "STRING", + "name": "string13", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string14", + "type": "STRING", + "name": "string14", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string15", + "type": "STRING", + "name": "string15", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string16", + "type": "STRING", + "name": "string16", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string17", + "type": "STRING", + "name": "string17", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string18", + "type": "STRING", + "name": "string18", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string19", + "type": "STRING", + "name": "string19", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string20", + "type": "STRING", + "name": "string20", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string21", + "type": "STRING", + "name": "string21", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string22", + "type": "STRING", + "name": "string22", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string23", + "type": "STRING", + "name": "string23", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string24", + "type": "STRING", + "name": "string24", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string25", + "type": "STRING", + "name": "string25", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string26", + "type": "STRING", + "name": "string26", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string27", + "type": "STRING", + "name": "string27", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string28", + "type": "STRING", + "name": "string28", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string29", + "type": "STRING", + "name": "string29", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string30", + "type": "STRING", + "name": "string30", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string31", + "type": "STRING", + "name": "string31", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string32", + "type": "STRING", + "name": "string32", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string33", + "type": "STRING", + "name": "string33", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string34", + "type": "STRING", + "name": "string34", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string35", + "type": "STRING", + "name": "string35", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string36", + "type": "STRING", + "name": "string36", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string37", + "type": "STRING", + "name": "string37", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string38", + "type": "STRING", + "name": "string38", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string39", + "type": "STRING", + "name": "string39", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string40", + "type": "STRING", + "name": "string40", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string41", + "type": "STRING", + "name": "string41", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string42", + "type": "STRING", + "name": "string42", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string43", + "type": "STRING", + "name": "string43", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string44", + "type": "STRING", + "name": "string44", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string45", + "type": "STRING", + "name": "string45", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string46", + "type": "STRING", + "name": "string46", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string47", + "type": "STRING", + "name": "string47", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string48", + "type": "STRING", + "name": "string48", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string49", + "type": "STRING", + "name": "string49", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string50", + "type": "STRING", + "name": "string50", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string51", + "type": "STRING", + "name": "string51", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string52", + "type": "STRING", + "name": "string52", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string53", + "type": "STRING", + "name": "string53", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string54", + "type": "STRING", + "name": "string54", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string55", + "type": "STRING", + "name": "string55", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string56", + "type": "STRING", + "name": "string56", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string57", + "type": "STRING", + "name": "string57", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string58", + "type": "STRING", + "name": "string58", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string59", + "type": "STRING", + "name": "string59", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string60", + "type": "STRING", + "name": "string60", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string61", + "type": "STRING", + "name": "string61", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string62", + "type": "STRING", + "name": "string62", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string63", + "type": "STRING", + "name": "string63", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string64", + "type": "STRING", + "name": "string64", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string65", + "type": "STRING", + "name": "string65", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string66", + "type": "STRING", + "name": "string66", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string67", + "type": "STRING", + "name": "string67", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string68", + "type": "STRING", + "name": "string68", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string69", + "type": "STRING", + "name": "string69", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string70", + "type": "STRING", + "name": "string70", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string71", + "type": "STRING", + "name": "string71", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string72", + "type": "STRING", + "name": "string72", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string73", + "type": "STRING", + "name": "string73", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string74", + "type": "STRING", + "name": "string74", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string75", + "type": "STRING", + "name": "string75", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string76", + "type": "STRING", + "name": "string76", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string77", + "type": "STRING", + "name": "string77", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string78", + "type": "STRING", + "name": "string78", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string79", + "type": "STRING", + "name": "string79", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string80", + "type": "STRING", + "name": "string80", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string81", + "type": "STRING", + "name": "string81", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string82", + "type": "STRING", + "name": "string82", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string83", + "type": "STRING", + "name": "string83", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string84", + "type": "STRING", + "name": "string84", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string85", + "type": "STRING", + "name": "string85", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string86", + "type": "STRING", + "name": "string86", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string87", + "type": "STRING", + "name": "string87", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string88", + "type": "STRING", + "name": "string88", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string89", + "type": "STRING", + "name": "string89", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string90", + "type": "STRING", + "name": "string90", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string91", + "type": "STRING", + "name": "string91", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string92", + "type": "STRING", + "name": "string92", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string93", + "type": "STRING", + "name": "string93", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string94", + "type": "STRING", + "name": "string94", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string95", + "type": "STRING", + "name": "string95", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string96", + "type": "STRING", + "name": "string96", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string97", + "type": "STRING", + "name": "string97", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string98", + "type": "STRING", + "name": "string98", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string99", + "type": "STRING", + "name": "string99", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string100", + "type": "STRING", + "name": "string100", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric1", + "type": "NUMERIC", + "name": "numeric1", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric2", + "type": "NUMERIC", + "name": "numeric2", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric3", + "type": "NUMERIC", + "name": "numeric3", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric4", + "type": "NUMERIC", + "name": "numeric4", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric5", + "type": "NUMERIC", + "name": "numeric5", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric6", + "type": "NUMERIC", + "name": "numeric6", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric7", + "type": "NUMERIC", + "name": "numeric7", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric8", + "type": "NUMERIC", + "name": "numeric8", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric9", + "type": "NUMERIC", + "name": "numeric9", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric10", + "type": "NUMERIC", + "name": "numeric10", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric11", + "type": "NUMERIC", + "name": "numeric11", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric12", + "type": "NUMERIC", + "name": "numeric12", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric13", + "type": "NUMERIC", + "name": "numeric13", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric14", + "type": "NUMERIC", + "name": "numeric14", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric15", + "type": "NUMERIC", + "name": "numeric15", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric16", + "type": "NUMERIC", + "name": "numeric16", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric17", + "type": "NUMERIC", + "name": "numeric17", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric18", + "type": "NUMERIC", + "name": "numeric18", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric19", + "type": "NUMERIC", + "name": "numeric19", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric20", + "type": "NUMERIC", + "name": "numeric20", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric21", + "type": "NUMERIC", + "name": "numeric21", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric22", + "type": "NUMERIC", + "name": "numeric22", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric23", + "type": "NUMERIC", + "name": "numeric23", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric24", + "type": "NUMERIC", + "name": "numeric24", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric25", + "type": "NUMERIC", + "name": "numeric25", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric26", + "type": "NUMERIC", + "name": "numeric26", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric27", + "type": "NUMERIC", + "name": "numeric27", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric28", + "type": "NUMERIC", + "name": "numeric28", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric29", + "type": "NUMERIC", + "name": "numeric29", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric30", + "type": "NUMERIC", + "name": "numeric30", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric31", + "type": "NUMERIC", + "name": "numeric31", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric32", + "type": "NUMERIC", + "name": "numeric32", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric33", + "type": "NUMERIC", + "name": "numeric33", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric34", + "type": "NUMERIC", + "name": "numeric34", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric35", + "type": "NUMERIC", + "name": "numeric35", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric36", + "type": "NUMERIC", + "name": "numeric36", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric37", + "type": "NUMERIC", + "name": "numeric37", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric38", + "type": "NUMERIC", + "name": "numeric38", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric39", + "type": "NUMERIC", + "name": "numeric39", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric40", + "type": "NUMERIC", + "name": "numeric40", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric41", + "type": "NUMERIC", + "name": "numeric41", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric42", + "type": "NUMERIC", + "name": "numeric42", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric43", + "type": "NUMERIC", + "name": "numeric43", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric44", + "type": "NUMERIC", + "name": "numeric44", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric45", + "type": "NUMERIC", + "name": "numeric45", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric46", + "type": "NUMERIC", + "name": "numeric46", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric47", + "type": "NUMERIC", + "name": "numeric47", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric48", + "type": "NUMERIC", + "name": "numeric48", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric49", + "type": "NUMERIC", + "name": "numeric49", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric50", + "type": "NUMERIC", + "name": "numeric50", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric51", + "type": "NUMERIC", + "name": "numeric51", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric52", + "type": "NUMERIC", + "name": "numeric52", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric53", + "type": "NUMERIC", + "name": "numeric53", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric54", + "type": "NUMERIC", + "name": "numeric54", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric55", + "type": "NUMERIC", + "name": "numeric55", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric56", + "type": "NUMERIC", + "name": "numeric56", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric57", + "type": "NUMERIC", + "name": "numeric57", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric58", + "type": "NUMERIC", + "name": "numeric58", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric59", + "type": "NUMERIC", + "name": "numeric59", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric60", + "type": "NUMERIC", + "name": "numeric60", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric61", + "type": "NUMERIC", + "name": "numeric61", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric62", + "type": "NUMERIC", + "name": "numeric62", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric63", + "type": "NUMERIC", + "name": "numeric63", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric64", + "type": "NUMERIC", + "name": "numeric64", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric65", + "type": "NUMERIC", + "name": "numeric65", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric66", + "type": "NUMERIC", + "name": "numeric66", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric67", + "type": "NUMERIC", + "name": "numeric67", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric68", + "type": "NUMERIC", + "name": "numeric68", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric69", + "type": "NUMERIC", + "name": "numeric69", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric70", + "type": "NUMERIC", + "name": "numeric70", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric71", + "type": "NUMERIC", + "name": "numeric71", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric72", + "type": "NUMERIC", + "name": "numeric72", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric73", + "type": "NUMERIC", + "name": "numeric73", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric74", + "type": "NUMERIC", + "name": "numeric74", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric75", + "type": "NUMERIC", + "name": "numeric75", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric76", + "type": "NUMERIC", + "name": "numeric76", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric77", + "type": "NUMERIC", + "name": "numeric77", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric78", + "type": "NUMERIC", + "name": "numeric78", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric79", + "type": "NUMERIC", + "name": "numeric79", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric80", + "type": "NUMERIC", + "name": "numeric80", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric81", + "type": "NUMERIC", + "name": "numeric81", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric82", + "type": "NUMERIC", + "name": "numeric82", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric83", + "type": "NUMERIC", + "name": "numeric83", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric84", + "type": "NUMERIC", + "name": "numeric84", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric85", + "type": "NUMERIC", + "name": "numeric85", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric86", + "type": "NUMERIC", + "name": "numeric86", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric87", + "type": "NUMERIC", + "name": "numeric87", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric88", + "type": "NUMERIC", + "name": "numeric88", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric89", + "type": "NUMERIC", + "name": "numeric89", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric90", + "type": "NUMERIC", + "name": "numeric90", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric91", + "type": "NUMERIC", + "name": "numeric91", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric92", + "type": "NUMERIC", + "name": "numeric92", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric93", + "type": "NUMERIC", + "name": "numeric93", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric94", + "type": "NUMERIC", + "name": "numeric94", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric95", + "type": "NUMERIC", + "name": "numeric95", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric96", + "type": "NUMERIC", + "name": "numeric96", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric97", + "type": "NUMERIC", + "name": "numeric97", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric98", + "type": "NUMERIC", + "name": "numeric98", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric99", + "type": "NUMERIC", + "name": "numeric99", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric100", + "type": "NUMERIC", + "name": "numeric100", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric101", + "type": "NUMERIC", + "name": "numeric101", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric102", + "type": "NUMERIC", + "name": "numeric102", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric103", + "type": "NUMERIC", + "name": "numeric103", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric104", + "type": "NUMERIC", + "name": "numeric104", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric105", + "type": "NUMERIC", + "name": "numeric105", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric106", + "type": "NUMERIC", + "name": "numeric106", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric107", + "type": "NUMERIC", + "name": "numeric107", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric108", + "type": "NUMERIC", + "name": "numeric108", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric109", + "type": "NUMERIC", + "name": "numeric109", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric110", + "type": "NUMERIC", + "name": "numeric110", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric111", + "type": "NUMERIC", + "name": "numeric111", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric112", + "type": "NUMERIC", + "name": "numeric112", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric113", + "type": "NUMERIC", + "name": "numeric113", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric114", + "type": "NUMERIC", + "name": "numeric114", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric115", + "type": "NUMERIC", + "name": "numeric115", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric116", + "type": "NUMERIC", + "name": "numeric116", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric117", + "type": "NUMERIC", + "name": "numeric117", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric118", + "type": "NUMERIC", + "name": "numeric118", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric119", + "type": "NUMERIC", + "name": "numeric119", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric120", + "type": "NUMERIC", + "name": "numeric120", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric121", + "type": "NUMERIC", + "name": "numeric121", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric122", + "type": "NUMERIC", + "name": "numeric122", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric123", + "type": "NUMERIC", + "name": "numeric123", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric124", + "type": "NUMERIC", + "name": "numeric124", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric125", + "type": "NUMERIC", + "name": "numeric125", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric126", + "type": "NUMERIC", + "name": "numeric126", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric127", + "type": "NUMERIC", + "name": "numeric127", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric128", + "type": "NUMERIC", + "name": "numeric128", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric129", + "type": "NUMERIC", + "name": "numeric129", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric130", + "type": "NUMERIC", + "name": "numeric130", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric131", + "type": "NUMERIC", + "name": "numeric131", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric132", + "type": "NUMERIC", + "name": "numeric132", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric133", + "type": "NUMERIC", + "name": "numeric133", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric134", + "type": "NUMERIC", + "name": "numeric134", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric135", + "type": "NUMERIC", + "name": "numeric135", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric136", + "type": "NUMERIC", + "name": "numeric136", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric137", + "type": "NUMERIC", + "name": "numeric137", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric138", + "type": "NUMERIC", + "name": "numeric138", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric139", + "type": "NUMERIC", + "name": "numeric139", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric140", + "type": "NUMERIC", + "name": "numeric140", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric141", + "type": "NUMERIC", + "name": "numeric141", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric142", + "type": "NUMERIC", + "name": "numeric142", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric143", + "type": "NUMERIC", + "name": "numeric143", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric144", + "type": "NUMERIC", + "name": "numeric144", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric145", + "type": "NUMERIC", + "name": "numeric145", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric146", + "type": "NUMERIC", + "name": "numeric146", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric147", + "type": "NUMERIC", + "name": "numeric147", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric148", + "type": "NUMERIC", + "name": "numeric148", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric149", + "type": "NUMERIC", + "name": "numeric149", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric150", + "type": "NUMERIC", + "name": "numeric150", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric151", + "type": "NUMERIC", + "name": "numeric151", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric152", + "type": "NUMERIC", + "name": "numeric152", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric153", + "type": "NUMERIC", + "name": "numeric153", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric154", + "type": "NUMERIC", + "name": "numeric154", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric155", + "type": "NUMERIC", + "name": "numeric155", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric156", + "type": "NUMERIC", + "name": "numeric156", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric157", + "type": "NUMERIC", + "name": "numeric157", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric158", + "type": "NUMERIC", + "name": "numeric158", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric159", + "type": "NUMERIC", + "name": "numeric159", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric160", + "type": "NUMERIC", + "name": "numeric160", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric161", + "type": "NUMERIC", + "name": "numeric161", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric162", + "type": "NUMERIC", + "name": "numeric162", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric163", + "type": "NUMERIC", + "name": "numeric163", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric164", + "type": "NUMERIC", + "name": "numeric164", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric165", + "type": "NUMERIC", + "name": "numeric165", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric166", + "type": "NUMERIC", + "name": "numeric166", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric167", + "type": "NUMERIC", + "name": "numeric167", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric168", + "type": "NUMERIC", + "name": "numeric168", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric169", + "type": "NUMERIC", + "name": "numeric169", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric170", + "type": "NUMERIC", + "name": "numeric170", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric171", + "type": "NUMERIC", + "name": "numeric171", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric172", + "type": "NUMERIC", + "name": "numeric172", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric173", + "type": "NUMERIC", + "name": "numeric173", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric174", + "type": "NUMERIC", + "name": "numeric174", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric175", + "type": "NUMERIC", + "name": "numeric175", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric176", + "type": "NUMERIC", + "name": "numeric176", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric177", + "type": "NUMERIC", + "name": "numeric177", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric178", + "type": "NUMERIC", + "name": "numeric178", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric179", + "type": "NUMERIC", + "name": "numeric179", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric180", + "type": "NUMERIC", + "name": "numeric180", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric181", + "type": "NUMERIC", + "name": "numeric181", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric182", + "type": "NUMERIC", + "name": "numeric182", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric183", + "type": "NUMERIC", + "name": "numeric183", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric184", + "type": "NUMERIC", + "name": "numeric184", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric185", + "type": "NUMERIC", + "name": "numeric185", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric186", + "type": "NUMERIC", + "name": "numeric186", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric187", + "type": "NUMERIC", + "name": "numeric187", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric188", + "type": "NUMERIC", + "name": "numeric188", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric189", + "type": "NUMERIC", + "name": "numeric189", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric190", + "type": "NUMERIC", + "name": "numeric190", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric191", + "type": "NUMERIC", + "name": "numeric191", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric192", + "type": "NUMERIC", + "name": "numeric192", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric193", + "type": "NUMERIC", + "name": "numeric193", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric194", + "type": "NUMERIC", + "name": "numeric194", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric195", + "type": "NUMERIC", + "name": "numeric195", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric196", + "type": "NUMERIC", + "name": "numeric196", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric197", + "type": "NUMERIC", + "name": "numeric197", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric198", + "type": "NUMERIC", + "name": "numeric198", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric199", + "type": "NUMERIC", + "name": "numeric199", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric200", + "type": "NUMERIC", + "name": "numeric200", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric201", + "type": "NUMERIC", + "name": "numeric201", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric202", + "type": "NUMERIC", + "name": "numeric202", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric203", + "type": "NUMERIC", + "name": "numeric203", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric204", + "type": "NUMERIC", + "name": "numeric204", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric205", + "type": "NUMERIC", + "name": "numeric205", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric206", + "type": "NUMERIC", + "name": "numeric206", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric207", + "type": "NUMERIC", + "name": "numeric207", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric208", + "type": "NUMERIC", + "name": "numeric208", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric209", + "type": "NUMERIC", + "name": "numeric209", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric210", + "type": "NUMERIC", + "name": "numeric210", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric211", + "type": "NUMERIC", + "name": "numeric211", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric212", + "type": "NUMERIC", + "name": "numeric212", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric213", + "type": "NUMERIC", + "name": "numeric213", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric214", + "type": "NUMERIC", + "name": "numeric214", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric215", + "type": "NUMERIC", + "name": "numeric215", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric216", + "type": "NUMERIC", + "name": "numeric216", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric217", + "type": "NUMERIC", + "name": "numeric217", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric218", + "type": "NUMERIC", + "name": "numeric218", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric219", + "type": "NUMERIC", + "name": "numeric219", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric220", + "type": "NUMERIC", + "name": "numeric220", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric221", + "type": "NUMERIC", + "name": "numeric221", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric222", + "type": "NUMERIC", + "name": "numeric222", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric223", + "type": "NUMERIC", + "name": "numeric223", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric224", + "type": "NUMERIC", + "name": "numeric224", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric225", + "type": "NUMERIC", + "name": "numeric225", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric226", + "type": "NUMERIC", + "name": "numeric226", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric227", + "type": "NUMERIC", + "name": "numeric227", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric228", + "type": "NUMERIC", + "name": "numeric228", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric229", + "type": "NUMERIC", + "name": "numeric229", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric230", + "type": "NUMERIC", + "name": "numeric230", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric231", + "type": "NUMERIC", + "name": "numeric231", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric232", + "type": "NUMERIC", + "name": "numeric232", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric233", + "type": "NUMERIC", + "name": "numeric233", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric234", + "type": "NUMERIC", + "name": "numeric234", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric235", + "type": "NUMERIC", + "name": "numeric235", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric236", + "type": "NUMERIC", + "name": "numeric236", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric237", + "type": "NUMERIC", + "name": "numeric237", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric238", + "type": "NUMERIC", + "name": "numeric238", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric239", + "type": "NUMERIC", + "name": "numeric239", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric240", + "type": "NUMERIC", + "name": "numeric240", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric241", + "type": "NUMERIC", + "name": "numeric241", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric242", + "type": "NUMERIC", + "name": "numeric242", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric243", + "type": "NUMERIC", + "name": "numeric243", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric244", + "type": "NUMERIC", + "name": "numeric244", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric245", + "type": "NUMERIC", + "name": "numeric245", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric246", + "type": "NUMERIC", + "name": "numeric246", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric247", + "type": "NUMERIC", + "name": "numeric247", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric248", + "type": "NUMERIC", + "name": "numeric248", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric249", + "type": "NUMERIC", + "name": "numeric249", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric250", + "type": "NUMERIC", + "name": "numeric250", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric251", + "type": "NUMERIC", + "name": "numeric251", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric252", + "type": "NUMERIC", + "name": "numeric252", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric253", + "type": "NUMERIC", + "name": "numeric253", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric254", + "type": "NUMERIC", + "name": "numeric254", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric255", + "type": "NUMERIC", + "name": "numeric255", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric256", + "type": "NUMERIC", + "name": "numeric256", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric257", + "type": "NUMERIC", + "name": "numeric257", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric258", + "type": "NUMERIC", + "name": "numeric258", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric259", + "type": "NUMERIC", + "name": "numeric259", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric260", + "type": "NUMERIC", + "name": "numeric260", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric261", + "type": "NUMERIC", + "name": "numeric261", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric262", + "type": "NUMERIC", + "name": "numeric262", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric263", + "type": "NUMERIC", + "name": "numeric263", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric264", + "type": "NUMERIC", + "name": "numeric264", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric265", + "type": "NUMERIC", + "name": "numeric265", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric266", + "type": "NUMERIC", + "name": "numeric266", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric267", + "type": "NUMERIC", + "name": "numeric267", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric268", + "type": "NUMERIC", + "name": "numeric268", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric269", + "type": "NUMERIC", + "name": "numeric269", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric270", + "type": "NUMERIC", + "name": "numeric270", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric271", + "type": "NUMERIC", + "name": "numeric271", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric272", + "type": "NUMERIC", + "name": "numeric272", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric273", + "type": "NUMERIC", + "name": "numeric273", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric274", + "type": "NUMERIC", + "name": "numeric274", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric275", + "type": "NUMERIC", + "name": "numeric275", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric276", + "type": "NUMERIC", + "name": "numeric276", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric277", + "type": "NUMERIC", + "name": "numeric277", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric278", + "type": "NUMERIC", + "name": "numeric278", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric279", + "type": "NUMERIC", + "name": "numeric279", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric280", + "type": "NUMERIC", + "name": "numeric280", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric281", + "type": "NUMERIC", + "name": "numeric281", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric282", + "type": "NUMERIC", + "name": "numeric282", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric283", + "type": "NUMERIC", + "name": "numeric283", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric284", + "type": "NUMERIC", + "name": "numeric284", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric285", + "type": "NUMERIC", + "name": "numeric285", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric286", + "type": "NUMERIC", + "name": "numeric286", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric287", + "type": "NUMERIC", + "name": "numeric287", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric288", + "type": "NUMERIC", + "name": "numeric288", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric289", + "type": "NUMERIC", + "name": "numeric289", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric290", + "type": "NUMERIC", + "name": "numeric290", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric291", + "type": "NUMERIC", + "name": "numeric291", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric292", + "type": "NUMERIC", + "name": "numeric292", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric293", + "type": "NUMERIC", + "name": "numeric293", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric294", + "type": "NUMERIC", + "name": "numeric294", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric295", + "type": "NUMERIC", + "name": "numeric295", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric296", + "type": "NUMERIC", + "name": "numeric296", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric297", + "type": "NUMERIC", + "name": "numeric297", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric298", + "type": "NUMERIC", + "name": "numeric298", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric299", + "type": "NUMERIC", + "name": "numeric299", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric300", + "type": "NUMERIC", + "name": "numeric300", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric301", + "type": "NUMERIC", + "name": "numeric301", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric302", + "type": "NUMERIC", + "name": "numeric302", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric303", + "type": "NUMERIC", + "name": "numeric303", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric304", + "type": "NUMERIC", + "name": "numeric304", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric305", + "type": "NUMERIC", + "name": "numeric305", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric306", + "type": "NUMERIC", + "name": "numeric306", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric307", + "type": "NUMERIC", + "name": "numeric307", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric308", + "type": "NUMERIC", + "name": "numeric308", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric309", + "type": "NUMERIC", + "name": "numeric309", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric310", + "type": "NUMERIC", + "name": "numeric310", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric311", + "type": "NUMERIC", + "name": "numeric311", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric312", + "type": "NUMERIC", + "name": "numeric312", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric313", + "type": "NUMERIC", + "name": "numeric313", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric314", + "type": "NUMERIC", + "name": "numeric314", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric315", + "type": "NUMERIC", + "name": "numeric315", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric316", + "type": "NUMERIC", + "name": "numeric316", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric317", + "type": "NUMERIC", + "name": "numeric317", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric318", + "type": "NUMERIC", + "name": "numeric318", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric319", + "type": "NUMERIC", + "name": "numeric319", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric320", + "type": "NUMERIC", + "name": "numeric320", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric321", + "type": "NUMERIC", + "name": "numeric321", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric322", + "type": "NUMERIC", + "name": "numeric322", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric323", + "type": "NUMERIC", + "name": "numeric323", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric324", + "type": "NUMERIC", + "name": "numeric324", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric325", + "type": "NUMERIC", + "name": "numeric325", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric326", + "type": "NUMERIC", + "name": "numeric326", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric327", + "type": "NUMERIC", + "name": "numeric327", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric328", + "type": "NUMERIC", + "name": "numeric328", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric329", + "type": "NUMERIC", + "name": "numeric329", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric330", + "type": "NUMERIC", + "name": "numeric330", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric331", + "type": "NUMERIC", + "name": "numeric331", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric332", + "type": "NUMERIC", + "name": "numeric332", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric333", + "type": "NUMERIC", + "name": "numeric333", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric334", + "type": "NUMERIC", + "name": "numeric334", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric335", + "type": "NUMERIC", + "name": "numeric335", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric336", + "type": "NUMERIC", + "name": "numeric336", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric337", + "type": "NUMERIC", + "name": "numeric337", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric338", + "type": "NUMERIC", + "name": "numeric338", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric339", + "type": "NUMERIC", + "name": "numeric339", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric340", + "type": "NUMERIC", + "name": "numeric340", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric341", + "type": "NUMERIC", + "name": "numeric341", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric342", + "type": "NUMERIC", + "name": "numeric342", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric343", + "type": "NUMERIC", + "name": "numeric343", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric344", + "type": "NUMERIC", + "name": "numeric344", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric345", + "type": "NUMERIC", + "name": "numeric345", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric346", + "type": "NUMERIC", + "name": "numeric346", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric347", + "type": "NUMERIC", + "name": "numeric347", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric348", + "type": "NUMERIC", + "name": "numeric348", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric349", + "type": "NUMERIC", + "name": "numeric349", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric350", + "type": "NUMERIC", + "name": "numeric350", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric351", + "type": "NUMERIC", + "name": "numeric351", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric352", + "type": "NUMERIC", + "name": "numeric352", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric353", + "type": "NUMERIC", + "name": "numeric353", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric354", + "type": "NUMERIC", + "name": "numeric354", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric355", + "type": "NUMERIC", + "name": "numeric355", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric356", + "type": "NUMERIC", + "name": "numeric356", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric357", + "type": "NUMERIC", + "name": "numeric357", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric358", + "type": "NUMERIC", + "name": "numeric358", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric359", + "type": "NUMERIC", + "name": "numeric359", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric360", + "type": "NUMERIC", + "name": "numeric360", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric361", + "type": "NUMERIC", + "name": "numeric361", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric362", + "type": "NUMERIC", + "name": "numeric362", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric363", + "type": "NUMERIC", + "name": "numeric363", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric364", + "type": "NUMERIC", + "name": "numeric364", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric365", + "type": "NUMERIC", + "name": "numeric365", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric366", + "type": "NUMERIC", + "name": "numeric366", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric367", + "type": "NUMERIC", + "name": "numeric367", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric368", + "type": "NUMERIC", + "name": "numeric368", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric369", + "type": "NUMERIC", + "name": "numeric369", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric370", + "type": "NUMERIC", + "name": "numeric370", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric371", + "type": "NUMERIC", + "name": "numeric371", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric372", + "type": "NUMERIC", + "name": "numeric372", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric373", + "type": "NUMERIC", + "name": "numeric373", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric374", + "type": "NUMERIC", + "name": "numeric374", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric375", + "type": "NUMERIC", + "name": "numeric375", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric376", + "type": "NUMERIC", + "name": "numeric376", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric377", + "type": "NUMERIC", + "name": "numeric377", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric378", + "type": "NUMERIC", + "name": "numeric378", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric379", + "type": "NUMERIC", + "name": "numeric379", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric380", + "type": "NUMERIC", + "name": "numeric380", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric381", + "type": "NUMERIC", + "name": "numeric381", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric382", + "type": "NUMERIC", + "name": "numeric382", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric383", + "type": "NUMERIC", + "name": "numeric383", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric384", + "type": "NUMERIC", + "name": "numeric384", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric385", + "type": "NUMERIC", + "name": "numeric385", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric386", + "type": "NUMERIC", + "name": "numeric386", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric387", + "type": "NUMERIC", + "name": "numeric387", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric388", + "type": "NUMERIC", + "name": "numeric388", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric389", + "type": "NUMERIC", + "name": "numeric389", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric390", + "type": "NUMERIC", + "name": "numeric390", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric391", + "type": "NUMERIC", + "name": "numeric391", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric392", + "type": "NUMERIC", + "name": "numeric392", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric393", + "type": "NUMERIC", + "name": "numeric393", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric394", + "type": "NUMERIC", + "name": "numeric394", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric395", + "type": "NUMERIC", + "name": "numeric395", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric396", + "type": "NUMERIC", + "name": "numeric396", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric397", + "type": "NUMERIC", + "name": "numeric397", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric398", + "type": "NUMERIC", + "name": "numeric398", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric399", + "type": "NUMERIC", + "name": "numeric399", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric400", + "type": "NUMERIC", + "name": "numeric400", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric401", + "type": "NUMERIC", + "name": "numeric401", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric402", + "type": "NUMERIC", + "name": "numeric402", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric403", + "type": "NUMERIC", + "name": "numeric403", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric404", + "type": "NUMERIC", + "name": "numeric404", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric405", + "type": "NUMERIC", + "name": "numeric405", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric406", + "type": "NUMERIC", + "name": "numeric406", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric407", + "type": "NUMERIC", + "name": "numeric407", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric408", + "type": "NUMERIC", + "name": "numeric408", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric409", + "type": "NUMERIC", + "name": "numeric409", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric410", + "type": "NUMERIC", + "name": "numeric410", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric411", + "type": "NUMERIC", + "name": "numeric411", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric412", + "type": "NUMERIC", + "name": "numeric412", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric413", + "type": "NUMERIC", + "name": "numeric413", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric414", + "type": "NUMERIC", + "name": "numeric414", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric415", + "type": "NUMERIC", + "name": "numeric415", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric416", + "type": "NUMERIC", + "name": "numeric416", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric417", + "type": "NUMERIC", + "name": "numeric417", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric418", + "type": "NUMERIC", + "name": "numeric418", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric419", + "type": "NUMERIC", + "name": "numeric419", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric420", + "type": "NUMERIC", + "name": "numeric420", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric421", + "type": "NUMERIC", + "name": "numeric421", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric422", + "type": "NUMERIC", + "name": "numeric422", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric423", + "type": "NUMERIC", + "name": "numeric423", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric424", + "type": "NUMERIC", + "name": "numeric424", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric425", + "type": "NUMERIC", + "name": "numeric425", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric426", + "type": "NUMERIC", + "name": "numeric426", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric427", + "type": "NUMERIC", + "name": "numeric427", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric428", + "type": "NUMERIC", + "name": "numeric428", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric429", + "type": "NUMERIC", + "name": "numeric429", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric430", + "type": "NUMERIC", + "name": "numeric430", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric431", + "type": "NUMERIC", + "name": "numeric431", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric432", + "type": "NUMERIC", + "name": "numeric432", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric433", + "type": "NUMERIC", + "name": "numeric433", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric434", + "type": "NUMERIC", + "name": "numeric434", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric435", + "type": "NUMERIC", + "name": "numeric435", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric436", + "type": "NUMERIC", + "name": "numeric436", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric437", + "type": "NUMERIC", + "name": "numeric437", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric438", + "type": "NUMERIC", + "name": "numeric438", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric439", + "type": "NUMERIC", + "name": "numeric439", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric440", + "type": "NUMERIC", + "name": "numeric440", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric441", + "type": "NUMERIC", + "name": "numeric441", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric442", + "type": "NUMERIC", + "name": "numeric442", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric443", + "type": "NUMERIC", + "name": "numeric443", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric444", + "type": "NUMERIC", + "name": "numeric444", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric445", + "type": "NUMERIC", + "name": "numeric445", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric446", + "type": "NUMERIC", + "name": "numeric446", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric447", + "type": "NUMERIC", + "name": "numeric447", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric448", + "type": "NUMERIC", + "name": "numeric448", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric449", + "type": "NUMERIC", + "name": "numeric449", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric450", + "type": "NUMERIC", + "name": "numeric450", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric451", + "type": "NUMERIC", + "name": "numeric451", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric452", + "type": "NUMERIC", + "name": "numeric452", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric453", + "type": "NUMERIC", + "name": "numeric453", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric454", + "type": "NUMERIC", + "name": "numeric454", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric455", + "type": "NUMERIC", + "name": "numeric455", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric456", + "type": "NUMERIC", + "name": "numeric456", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric457", + "type": "NUMERIC", + "name": "numeric457", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric458", + "type": "NUMERIC", + "name": "numeric458", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric459", + "type": "NUMERIC", + "name": "numeric459", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric460", + "type": "NUMERIC", + "name": "numeric460", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric461", + "type": "NUMERIC", + "name": "numeric461", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric462", + "type": "NUMERIC", + "name": "numeric462", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric463", + "type": "NUMERIC", + "name": "numeric463", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric464", + "type": "NUMERIC", + "name": "numeric464", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric465", + "type": "NUMERIC", + "name": "numeric465", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric466", + "type": "NUMERIC", + "name": "numeric466", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric467", + "type": "NUMERIC", + "name": "numeric467", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric468", + "type": "NUMERIC", + "name": "numeric468", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric469", + "type": "NUMERIC", + "name": "numeric469", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric470", + "type": "NUMERIC", + "name": "numeric470", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric471", + "type": "NUMERIC", + "name": "numeric471", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric472", + "type": "NUMERIC", + "name": "numeric472", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric473", + "type": "NUMERIC", + "name": "numeric473", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric474", + "type": "NUMERIC", + "name": "numeric474", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric475", + "type": "NUMERIC", + "name": "numeric475", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric476", + "type": "NUMERIC", + "name": "numeric476", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric477", + "type": "NUMERIC", + "name": "numeric477", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric478", + "type": "NUMERIC", + "name": "numeric478", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric479", + "type": "NUMERIC", + "name": "numeric479", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric480", + "type": "NUMERIC", + "name": "numeric480", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric481", + "type": "NUMERIC", + "name": "numeric481", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric482", + "type": "NUMERIC", + "name": "numeric482", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric483", + "type": "NUMERIC", + "name": "numeric483", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric484", + "type": "NUMERIC", + "name": "numeric484", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric485", + "type": "NUMERIC", + "name": "numeric485", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric486", + "type": "NUMERIC", + "name": "numeric486", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric487", + "type": "NUMERIC", + "name": "numeric487", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric488", + "type": "NUMERIC", + "name": "numeric488", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric489", + "type": "NUMERIC", + "name": "numeric489", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric490", + "type": "NUMERIC", + "name": "numeric490", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric491", + "type": "NUMERIC", + "name": "numeric491", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric492", + "type": "NUMERIC", + "name": "numeric492", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric493", + "type": "NUMERIC", + "name": "numeric493", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric494", + "type": "NUMERIC", + "name": "numeric494", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric495", + "type": "NUMERIC", + "name": "numeric495", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric496", + "type": "NUMERIC", + "name": "numeric496", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric497", + "type": "NUMERIC", + "name": "numeric497", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric498", + "type": "NUMERIC", + "name": "numeric498", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric499", + "type": "NUMERIC", + "name": "numeric499", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric500", + "type": "NUMERIC", + "name": "numeric500", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric501", + "type": "NUMERIC", + "name": "numeric501", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric502", + "type": "NUMERIC", + "name": "numeric502", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric503", + "type": "NUMERIC", + "name": "numeric503", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric504", + "type": "NUMERIC", + "name": "numeric504", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric505", + "type": "NUMERIC", + "name": "numeric505", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric506", + "type": "NUMERIC", + "name": "numeric506", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric507", + "type": "NUMERIC", + "name": "numeric507", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric508", + "type": "NUMERIC", + "name": "numeric508", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric509", + "type": "NUMERIC", + "name": "numeric509", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric510", + "type": "NUMERIC", + "name": "numeric510", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric511", + "type": "NUMERIC", + "name": "numeric511", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric512", + "type": "NUMERIC", + "name": "numeric512", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric513", + "type": "NUMERIC", + "name": "numeric513", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric514", + "type": "NUMERIC", + "name": "numeric514", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric515", + "type": "NUMERIC", + "name": "numeric515", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric516", + "type": "NUMERIC", + "name": "numeric516", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric517", + "type": "NUMERIC", + "name": "numeric517", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric518", + "type": "NUMERIC", + "name": "numeric518", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric519", + "type": "NUMERIC", + "name": "numeric519", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric520", + "type": "NUMERIC", + "name": "numeric520", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric521", + "type": "NUMERIC", + "name": "numeric521", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric522", + "type": "NUMERIC", + "name": "numeric522", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric523", + "type": "NUMERIC", + "name": "numeric523", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric524", + "type": "NUMERIC", + "name": "numeric524", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric525", + "type": "NUMERIC", + "name": "numeric525", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric526", + "type": "NUMERIC", + "name": "numeric526", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric527", + "type": "NUMERIC", + "name": "numeric527", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric528", + "type": "NUMERIC", + "name": "numeric528", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric529", + "type": "NUMERIC", + "name": "numeric529", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric530", + "type": "NUMERIC", + "name": "numeric530", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric531", + "type": "NUMERIC", + "name": "numeric531", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric532", + "type": "NUMERIC", + "name": "numeric532", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric533", + "type": "NUMERIC", + "name": "numeric533", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric534", + "type": "NUMERIC", + "name": "numeric534", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric535", + "type": "NUMERIC", + "name": "numeric535", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric536", + "type": "NUMERIC", + "name": "numeric536", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric537", + "type": "NUMERIC", + "name": "numeric537", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric538", + "type": "NUMERIC", + "name": "numeric538", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric539", + "type": "NUMERIC", + "name": "numeric539", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric540", + "type": "NUMERIC", + "name": "numeric540", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric541", + "type": "NUMERIC", + "name": "numeric541", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric542", + "type": "NUMERIC", + "name": "numeric542", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric543", + "type": "NUMERIC", + "name": "numeric543", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric544", + "type": "NUMERIC", + "name": "numeric544", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric545", + "type": "NUMERIC", + "name": "numeric545", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric546", + "type": "NUMERIC", + "name": "numeric546", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric547", + "type": "NUMERIC", + "name": "numeric547", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric548", + "type": "NUMERIC", + "name": "numeric548", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric549", + "type": "NUMERIC", + "name": "numeric549", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric550", + "type": "NUMERIC", + "name": "numeric550", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric551", + "type": "NUMERIC", + "name": "numeric551", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric552", + "type": "NUMERIC", + "name": "numeric552", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric553", + "type": "NUMERIC", + "name": "numeric553", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric554", + "type": "NUMERIC", + "name": "numeric554", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric555", + "type": "NUMERIC", + "name": "numeric555", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric556", + "type": "NUMERIC", + "name": "numeric556", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric557", + "type": "NUMERIC", + "name": "numeric557", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric558", + "type": "NUMERIC", + "name": "numeric558", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric559", + "type": "NUMERIC", + "name": "numeric559", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric560", + "type": "NUMERIC", + "name": "numeric560", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric561", + "type": "NUMERIC", + "name": "numeric561", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric562", + "type": "NUMERIC", + "name": "numeric562", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric563", + "type": "NUMERIC", + "name": "numeric563", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric564", + "type": "NUMERIC", + "name": "numeric564", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric565", + "type": "NUMERIC", + "name": "numeric565", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric566", + "type": "NUMERIC", + "name": "numeric566", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric567", + "type": "NUMERIC", + "name": "numeric567", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric568", + "type": "NUMERIC", + "name": "numeric568", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric569", + "type": "NUMERIC", + "name": "numeric569", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric570", + "type": "NUMERIC", + "name": "numeric570", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric571", + "type": "NUMERIC", + "name": "numeric571", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric572", + "type": "NUMERIC", + "name": "numeric572", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric573", + "type": "NUMERIC", + "name": "numeric573", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric574", + "type": "NUMERIC", + "name": "numeric574", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric575", + "type": "NUMERIC", + "name": "numeric575", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric576", + "type": "NUMERIC", + "name": "numeric576", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric577", + "type": "NUMERIC", + "name": "numeric577", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric578", + "type": "NUMERIC", + "name": "numeric578", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric579", + "type": "NUMERIC", + "name": "numeric579", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric580", + "type": "NUMERIC", + "name": "numeric580", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric581", + "type": "NUMERIC", + "name": "numeric581", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric582", + "type": "NUMERIC", + "name": "numeric582", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric583", + "type": "NUMERIC", + "name": "numeric583", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric584", + "type": "NUMERIC", + "name": "numeric584", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric585", + "type": "NUMERIC", + "name": "numeric585", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric586", + "type": "NUMERIC", + "name": "numeric586", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric587", + "type": "NUMERIC", + "name": "numeric587", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric588", + "type": "NUMERIC", + "name": "numeric588", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric589", + "type": "NUMERIC", + "name": "numeric589", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric590", + "type": "NUMERIC", + "name": "numeric590", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric591", + "type": "NUMERIC", + "name": "numeric591", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric592", + "type": "NUMERIC", + "name": "numeric592", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric593", + "type": "NUMERIC", + "name": "numeric593", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric594", + "type": "NUMERIC", + "name": "numeric594", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric595", + "type": "NUMERIC", + "name": "numeric595", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric596", + "type": "NUMERIC", + "name": "numeric596", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric597", + "type": "NUMERIC", + "name": "numeric597", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric598", + "type": "NUMERIC", + "name": "numeric598", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric599", + "type": "NUMERIC", + "name": "numeric599", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric600", + "type": "NUMERIC", + "name": "numeric600", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric601", + "type": "NUMERIC", + "name": "numeric601", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric602", + "type": "NUMERIC", + "name": "numeric602", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric603", + "type": "NUMERIC", + "name": "numeric603", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric604", + "type": "NUMERIC", + "name": "numeric604", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric605", + "type": "NUMERIC", + "name": "numeric605", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric606", + "type": "NUMERIC", + "name": "numeric606", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric607", + "type": "NUMERIC", + "name": "numeric607", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric608", + "type": "NUMERIC", + "name": "numeric608", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric609", + "type": "NUMERIC", + "name": "numeric609", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric610", + "type": "NUMERIC", + "name": "numeric610", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric611", + "type": "NUMERIC", + "name": "numeric611", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric612", + "type": "NUMERIC", + "name": "numeric612", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric613", + "type": "NUMERIC", + "name": "numeric613", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric614", + "type": "NUMERIC", + "name": "numeric614", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric615", + "type": "NUMERIC", + "name": "numeric615", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric616", + "type": "NUMERIC", + "name": "numeric616", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric617", + "type": "NUMERIC", + "name": "numeric617", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric618", + "type": "NUMERIC", + "name": "numeric618", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric619", + "type": "NUMERIC", + "name": "numeric619", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric620", + "type": "NUMERIC", + "name": "numeric620", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric621", + "type": "NUMERIC", + "name": "numeric621", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric622", + "type": "NUMERIC", + "name": "numeric622", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric623", + "type": "NUMERIC", + "name": "numeric623", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric624", + "type": "NUMERIC", + "name": "numeric624", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric625", + "type": "NUMERIC", + "name": "numeric625", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric626", + "type": "NUMERIC", + "name": "numeric626", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric627", + "type": "NUMERIC", + "name": "numeric627", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric628", + "type": "NUMERIC", + "name": "numeric628", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric629", + "type": "NUMERIC", + "name": "numeric629", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric630", + "type": "NUMERIC", + "name": "numeric630", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric631", + "type": "NUMERIC", + "name": "numeric631", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric632", + "type": "NUMERIC", + "name": "numeric632", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric633", + "type": "NUMERIC", + "name": "numeric633", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric634", + "type": "NUMERIC", + "name": "numeric634", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric635", + "type": "NUMERIC", + "name": "numeric635", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric636", + "type": "NUMERIC", + "name": "numeric636", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric637", + "type": "NUMERIC", + "name": "numeric637", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric638", + "type": "NUMERIC", + "name": "numeric638", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric639", + "type": "NUMERIC", + "name": "numeric639", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric640", + "type": "NUMERIC", + "name": "numeric640", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric641", + "type": "NUMERIC", + "name": "numeric641", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric642", + "type": "NUMERIC", + "name": "numeric642", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric643", + "type": "NUMERIC", + "name": "numeric643", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric644", + "type": "NUMERIC", + "name": "numeric644", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric645", + "type": "NUMERIC", + "name": "numeric645", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric646", + "type": "NUMERIC", + "name": "numeric646", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric647", + "type": "NUMERIC", + "name": "numeric647", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric648", + "type": "NUMERIC", + "name": "numeric648", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric649", + "type": "NUMERIC", + "name": "numeric649", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric650", + "type": "NUMERIC", + "name": "numeric650", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric651", + "type": "NUMERIC", + "name": "numeric651", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric652", + "type": "NUMERIC", + "name": "numeric652", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric653", + "type": "NUMERIC", + "name": "numeric653", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric654", + "type": "NUMERIC", + "name": "numeric654", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric655", + "type": "NUMERIC", + "name": "numeric655", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric656", + "type": "NUMERIC", + "name": "numeric656", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric657", + "type": "NUMERIC", + "name": "numeric657", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric658", + "type": "NUMERIC", + "name": "numeric658", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric659", + "type": "NUMERIC", + "name": "numeric659", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric660", + "type": "NUMERIC", + "name": "numeric660", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric661", + "type": "NUMERIC", + "name": "numeric661", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric662", + "type": "NUMERIC", + "name": "numeric662", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric663", + "type": "NUMERIC", + "name": "numeric663", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric664", + "type": "NUMERIC", + "name": "numeric664", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric665", + "type": "NUMERIC", + "name": "numeric665", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric666", + "type": "NUMERIC", + "name": "numeric666", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric667", + "type": "NUMERIC", + "name": "numeric667", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric668", + "type": "NUMERIC", + "name": "numeric668", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric669", + "type": "NUMERIC", + "name": "numeric669", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric670", + "type": "NUMERIC", + "name": "numeric670", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric671", + "type": "NUMERIC", + "name": "numeric671", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric672", + "type": "NUMERIC", + "name": "numeric672", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric673", + "type": "NUMERIC", + "name": "numeric673", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric674", + "type": "NUMERIC", + "name": "numeric674", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric675", + "type": "NUMERIC", + "name": "numeric675", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric676", + "type": "NUMERIC", + "name": "numeric676", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric677", + "type": "NUMERIC", + "name": "numeric677", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric678", + "type": "NUMERIC", + "name": "numeric678", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric679", + "type": "NUMERIC", + "name": "numeric679", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric680", + "type": "NUMERIC", + "name": "numeric680", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric681", + "type": "NUMERIC", + "name": "numeric681", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric682", + "type": "NUMERIC", + "name": "numeric682", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric683", + "type": "NUMERIC", + "name": "numeric683", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric684", + "type": "NUMERIC", + "name": "numeric684", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric685", + "type": "NUMERIC", + "name": "numeric685", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric686", + "type": "NUMERIC", + "name": "numeric686", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric687", + "type": "NUMERIC", + "name": "numeric687", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric688", + "type": "NUMERIC", + "name": "numeric688", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric689", + "type": "NUMERIC", + "name": "numeric689", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric690", + "type": "NUMERIC", + "name": "numeric690", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric691", + "type": "NUMERIC", + "name": "numeric691", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric692", + "type": "NUMERIC", + "name": "numeric692", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric693", + "type": "NUMERIC", + "name": "numeric693", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric694", + "type": "NUMERIC", + "name": "numeric694", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric695", + "type": "NUMERIC", + "name": "numeric695", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric696", + "type": "NUMERIC", + "name": "numeric696", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric697", + "type": "NUMERIC", + "name": "numeric697", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric698", + "type": "NUMERIC", + "name": "numeric698", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric699", + "type": "NUMERIC", + "name": "numeric699", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric700", + "type": "NUMERIC", + "name": "numeric700", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric701", + "type": "NUMERIC", + "name": "numeric701", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric702", + "type": "NUMERIC", + "name": "numeric702", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric703", + "type": "NUMERIC", + "name": "numeric703", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric704", + "type": "NUMERIC", + "name": "numeric704", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric705", + "type": "NUMERIC", + "name": "numeric705", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric706", + "type": "NUMERIC", + "name": "numeric706", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric707", + "type": "NUMERIC", + "name": "numeric707", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric708", + "type": "NUMERIC", + "name": "numeric708", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric709", + "type": "NUMERIC", + "name": "numeric709", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric710", + "type": "NUMERIC", + "name": "numeric710", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric711", + "type": "NUMERIC", + "name": "numeric711", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric712", + "type": "NUMERIC", + "name": "numeric712", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric713", + "type": "NUMERIC", + "name": "numeric713", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric714", + "type": "NUMERIC", + "name": "numeric714", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric715", + "type": "NUMERIC", + "name": "numeric715", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric716", + "type": "NUMERIC", + "name": "numeric716", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric717", + "type": "NUMERIC", + "name": "numeric717", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric718", + "type": "NUMERIC", + "name": "numeric718", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric719", + "type": "NUMERIC", + "name": "numeric719", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric720", + "type": "NUMERIC", + "name": "numeric720", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric721", + "type": "NUMERIC", + "name": "numeric721", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric722", + "type": "NUMERIC", + "name": "numeric722", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric723", + "type": "NUMERIC", + "name": "numeric723", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric724", + "type": "NUMERIC", + "name": "numeric724", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric725", + "type": "NUMERIC", + "name": "numeric725", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric726", + "type": "NUMERIC", + "name": "numeric726", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric727", + "type": "NUMERIC", + "name": "numeric727", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric728", + "type": "NUMERIC", + "name": "numeric728", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric729", + "type": "NUMERIC", + "name": "numeric729", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric730", + "type": "NUMERIC", + "name": "numeric730", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric731", + "type": "NUMERIC", + "name": "numeric731", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric732", + "type": "NUMERIC", + "name": "numeric732", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric733", + "type": "NUMERIC", + "name": "numeric733", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric734", + "type": "NUMERIC", + "name": "numeric734", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric735", + "type": "NUMERIC", + "name": "numeric735", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric736", + "type": "NUMERIC", + "name": "numeric736", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric737", + "type": "NUMERIC", + "name": "numeric737", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric738", + "type": "NUMERIC", + "name": "numeric738", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric739", + "type": "NUMERIC", + "name": "numeric739", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric740", + "type": "NUMERIC", + "name": "numeric740", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric741", + "type": "NUMERIC", + "name": "numeric741", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric742", + "type": "NUMERIC", + "name": "numeric742", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric743", + "type": "NUMERIC", + "name": "numeric743", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric744", + "type": "NUMERIC", + "name": "numeric744", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric745", + "type": "NUMERIC", + "name": "numeric745", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric746", + "type": "NUMERIC", + "name": "numeric746", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric747", + "type": "NUMERIC", + "name": "numeric747", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric748", + "type": "NUMERIC", + "name": "numeric748", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric749", + "type": "NUMERIC", + "name": "numeric749", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric750", + "type": "NUMERIC", + "name": "numeric750", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric751", + "type": "NUMERIC", + "name": "numeric751", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric752", + "type": "NUMERIC", + "name": "numeric752", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric753", + "type": "NUMERIC", + "name": "numeric753", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric754", + "type": "NUMERIC", + "name": "numeric754", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric755", + "type": "NUMERIC", + "name": "numeric755", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric756", + "type": "NUMERIC", + "name": "numeric756", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric757", + "type": "NUMERIC", + "name": "numeric757", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric758", + "type": "NUMERIC", + "name": "numeric758", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric759", + "type": "NUMERIC", + "name": "numeric759", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric760", + "type": "NUMERIC", + "name": "numeric760", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric761", + "type": "NUMERIC", + "name": "numeric761", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric762", + "type": "NUMERIC", + "name": "numeric762", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric763", + "type": "NUMERIC", + "name": "numeric763", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric764", + "type": "NUMERIC", + "name": "numeric764", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric765", + "type": "NUMERIC", + "name": "numeric765", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric766", + "type": "NUMERIC", + "name": "numeric766", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric767", + "type": "NUMERIC", + "name": "numeric767", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric768", + "type": "NUMERIC", + "name": "numeric768", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric769", + "type": "NUMERIC", + "name": "numeric769", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric770", + "type": "NUMERIC", + "name": "numeric770", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric771", + "type": "NUMERIC", + "name": "numeric771", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric772", + "type": "NUMERIC", + "name": "numeric772", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric773", + "type": "NUMERIC", + "name": "numeric773", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric774", + "type": "NUMERIC", + "name": "numeric774", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric775", + "type": "NUMERIC", + "name": "numeric775", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric776", + "type": "NUMERIC", + "name": "numeric776", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric777", + "type": "NUMERIC", + "name": "numeric777", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric778", + "type": "NUMERIC", + "name": "numeric778", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric779", + "type": "NUMERIC", + "name": "numeric779", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric780", + "type": "NUMERIC", + "name": "numeric780", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric781", + "type": "NUMERIC", + "name": "numeric781", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric782", + "type": "NUMERIC", + "name": "numeric782", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric783", + "type": "NUMERIC", + "name": "numeric783", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric784", + "type": "NUMERIC", + "name": "numeric784", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric785", + "type": "NUMERIC", + "name": "numeric785", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric786", + "type": "NUMERIC", + "name": "numeric786", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric787", + "type": "NUMERIC", + "name": "numeric787", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric788", + "type": "NUMERIC", + "name": "numeric788", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric789", + "type": "NUMERIC", + "name": "numeric789", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric790", + "type": "NUMERIC", + "name": "numeric790", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric791", + "type": "NUMERIC", + "name": "numeric791", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric792", + "type": "NUMERIC", + "name": "numeric792", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric793", + "type": "NUMERIC", + "name": "numeric793", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric794", + "type": "NUMERIC", + "name": "numeric794", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric795", + "type": "NUMERIC", + "name": "numeric795", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric796", + "type": "NUMERIC", + "name": "numeric796", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric797", + "type": "NUMERIC", + "name": "numeric797", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric798", + "type": "NUMERIC", + "name": "numeric798", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric799", + "type": "NUMERIC", + "name": "numeric799", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric800", + "type": "NUMERIC", + "name": "numeric800", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric801", + "type": "NUMERIC", + "name": "numeric801", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric802", + "type": "NUMERIC", + "name": "numeric802", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric803", + "type": "NUMERIC", + "name": "numeric803", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric804", + "type": "NUMERIC", + "name": "numeric804", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric805", + "type": "NUMERIC", + "name": "numeric805", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric806", + "type": "NUMERIC", + "name": "numeric806", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric807", + "type": "NUMERIC", + "name": "numeric807", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric808", + "type": "NUMERIC", + "name": "numeric808", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric809", + "type": "NUMERIC", + "name": "numeric809", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric810", + "type": "NUMERIC", + "name": "numeric810", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric811", + "type": "NUMERIC", + "name": "numeric811", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric812", + "type": "NUMERIC", + "name": "numeric812", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric813", + "type": "NUMERIC", + "name": "numeric813", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric814", + "type": "NUMERIC", + "name": "numeric814", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric815", + "type": "NUMERIC", + "name": "numeric815", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric816", + "type": "NUMERIC", + "name": "numeric816", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric817", + "type": "NUMERIC", + "name": "numeric817", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric818", + "type": "NUMERIC", + "name": "numeric818", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric819", + "type": "NUMERIC", + "name": "numeric819", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric820", + "type": "NUMERIC", + "name": "numeric820", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric821", + "type": "NUMERIC", + "name": "numeric821", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric822", + "type": "NUMERIC", + "name": "numeric822", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric823", + "type": "NUMERIC", + "name": "numeric823", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric824", + "type": "NUMERIC", + "name": "numeric824", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric825", + "type": "NUMERIC", + "name": "numeric825", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric826", + "type": "NUMERIC", + "name": "numeric826", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric827", + "type": "NUMERIC", + "name": "numeric827", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric828", + "type": "NUMERIC", + "name": "numeric828", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric829", + "type": "NUMERIC", + "name": "numeric829", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric830", + "type": "NUMERIC", + "name": "numeric830", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric831", + "type": "NUMERIC", + "name": "numeric831", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric832", + "type": "NUMERIC", + "name": "numeric832", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric833", + "type": "NUMERIC", + "name": "numeric833", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric834", + "type": "NUMERIC", + "name": "numeric834", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric835", + "type": "NUMERIC", + "name": "numeric835", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric836", + "type": "NUMERIC", + "name": "numeric836", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric837", + "type": "NUMERIC", + "name": "numeric837", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric838", + "type": "NUMERIC", + "name": "numeric838", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric839", + "type": "NUMERIC", + "name": "numeric839", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric840", + "type": "NUMERIC", + "name": "numeric840", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric841", + "type": "NUMERIC", + "name": "numeric841", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric842", + "type": "NUMERIC", + "name": "numeric842", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric843", + "type": "NUMERIC", + "name": "numeric843", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric844", + "type": "NUMERIC", + "name": "numeric844", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric845", + "type": "NUMERIC", + "name": "numeric845", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric846", + "type": "NUMERIC", + "name": "numeric846", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric847", + "type": "NUMERIC", + "name": "numeric847", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric848", + "type": "NUMERIC", + "name": "numeric848", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric849", + "type": "NUMERIC", + "name": "numeric849", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric850", + "type": "NUMERIC", + "name": "numeric850", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric851", + "type": "NUMERIC", + "name": "numeric851", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric852", + "type": "NUMERIC", + "name": "numeric852", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric853", + "type": "NUMERIC", + "name": "numeric853", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric854", + "type": "NUMERIC", + "name": "numeric854", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric855", + "type": "NUMERIC", + "name": "numeric855", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric856", + "type": "NUMERIC", + "name": "numeric856", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric857", + "type": "NUMERIC", + "name": "numeric857", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric858", + "type": "NUMERIC", + "name": "numeric858", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric859", + "type": "NUMERIC", + "name": "numeric859", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric860", + "type": "NUMERIC", + "name": "numeric860", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric861", + "type": "NUMERIC", + "name": "numeric861", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric862", + "type": "NUMERIC", + "name": "numeric862", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric863", + "type": "NUMERIC", + "name": "numeric863", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric864", + "type": "NUMERIC", + "name": "numeric864", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric865", + "type": "NUMERIC", + "name": "numeric865", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric866", + "type": "NUMERIC", + "name": "numeric866", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric867", + "type": "NUMERIC", + "name": "numeric867", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric868", + "type": "NUMERIC", + "name": "numeric868", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric869", + "type": "NUMERIC", + "name": "numeric869", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric870", + "type": "NUMERIC", + "name": "numeric870", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric871", + "type": "NUMERIC", + "name": "numeric871", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric872", + "type": "NUMERIC", + "name": "numeric872", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric873", + "type": "NUMERIC", + "name": "numeric873", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric874", + "type": "NUMERIC", + "name": "numeric874", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric875", + "type": "NUMERIC", + "name": "numeric875", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric876", + "type": "NUMERIC", + "name": "numeric876", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric877", + "type": "NUMERIC", + "name": "numeric877", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric878", + "type": "NUMERIC", + "name": "numeric878", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric879", + "type": "NUMERIC", + "name": "numeric879", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric880", + "type": "NUMERIC", + "name": "numeric880", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric881", + "type": "NUMERIC", + "name": "numeric881", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric882", + "type": "NUMERIC", + "name": "numeric882", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric883", + "type": "NUMERIC", + "name": "numeric883", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric884", + "type": "NUMERIC", + "name": "numeric884", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric885", + "type": "NUMERIC", + "name": "numeric885", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric886", + "type": "NUMERIC", + "name": "numeric886", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric887", + "type": "NUMERIC", + "name": "numeric887", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric888", + "type": "NUMERIC", + "name": "numeric888", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric889", + "type": "NUMERIC", + "name": "numeric889", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric890", + "type": "NUMERIC", + "name": "numeric890", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric891", + "type": "NUMERIC", + "name": "numeric891", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric892", + "type": "NUMERIC", + "name": "numeric892", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric893", + "type": "NUMERIC", + "name": "numeric893", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric894", + "type": "NUMERIC", + "name": "numeric894", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric895", + "type": "NUMERIC", + "name": "numeric895", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric896", + "type": "NUMERIC", + "name": "numeric896", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric897", + "type": "NUMERIC", + "name": "numeric897", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric898", + "type": "NUMERIC", + "name": "numeric898", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric899", + "type": "NUMERIC", + "name": "numeric899", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric900", + "type": "NUMERIC", + "name": "numeric900", "mode": "REQUIRED" } ] diff --git a/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/50_STRING_50_NUMERIC_10.json b/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/50_STRING_50_NUMERIC_10.json index 37f72b7b40..de73505f12 100644 --- a/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/50_STRING_50_NUMERIC_10.json +++ b/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/50_STRING_50_NUMERIC_10.json @@ -1,53 +1,53 @@ { "fields": [ { - "type": "STRING", - "name": "string1", + "type": "STRING", + "name": "string1", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string2", + "type": "STRING", + "name": "string2", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string3", + "type": "STRING", + "name": "string3", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string4", + "type": "STRING", + "name": "string4", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string5", + "type": "STRING", + "name": "string5", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric1", + "type": "NUMERIC", + "name": "numeric1", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric2", + "type": "NUMERIC", + "name": "numeric2", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric3", + "type": "NUMERIC", + "name": "numeric3", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric4", + "type": "NUMERIC", + "name": "numeric4", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric5", + "type": "NUMERIC", + "name": "numeric5", "mode": "REQUIRED" } ] diff --git a/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/50_STRING_50_NUMERIC_100.json b/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/50_STRING_50_NUMERIC_100.json index a3e089c6ab..ac7f2c1448 100644 --- a/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/50_STRING_50_NUMERIC_100.json +++ b/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/50_STRING_50_NUMERIC_100.json @@ -1,503 +1,503 @@ { "fields": [ { - "type": "STRING", - "name": "string1", + "type": "STRING", + "name": "string1", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string2", + "type": "STRING", + "name": "string2", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string3", + "type": "STRING", + "name": "string3", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string4", + "type": "STRING", + "name": "string4", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string5", + "type": "STRING", + "name": "string5", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string6", + "type": "STRING", + "name": "string6", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string7", + "type": "STRING", + "name": "string7", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string8", + "type": "STRING", + "name": "string8", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string9", + "type": "STRING", + "name": "string9", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string10", + "type": "STRING", + "name": "string10", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string11", + "type": "STRING", + "name": "string11", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string12", + "type": "STRING", + "name": "string12", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string13", + "type": "STRING", + "name": "string13", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string14", + "type": "STRING", + "name": "string14", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string15", + "type": "STRING", + "name": "string15", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string16", + "type": "STRING", + "name": "string16", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string17", + "type": "STRING", + "name": "string17", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string18", + "type": "STRING", + "name": "string18", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string19", + "type": "STRING", + "name": "string19", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string20", + "type": "STRING", + "name": "string20", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string21", + "type": "STRING", + "name": "string21", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string22", + "type": "STRING", + "name": "string22", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string23", + "type": "STRING", + "name": "string23", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string24", + "type": "STRING", + "name": "string24", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string25", + "type": "STRING", + "name": "string25", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string26", + "type": "STRING", + "name": "string26", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string27", + "type": "STRING", + "name": "string27", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string28", + "type": "STRING", + "name": "string28", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string29", + "type": "STRING", + "name": "string29", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string30", + "type": "STRING", + "name": "string30", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string31", + "type": "STRING", + "name": "string31", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string32", + "type": "STRING", + "name": "string32", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string33", + "type": "STRING", + "name": "string33", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string34", + "type": "STRING", + "name": "string34", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string35", + "type": "STRING", + "name": "string35", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string36", + "type": "STRING", + "name": "string36", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string37", + "type": "STRING", + "name": "string37", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string38", + "type": "STRING", + "name": "string38", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string39", + "type": "STRING", + "name": "string39", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string40", + "type": "STRING", + "name": "string40", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string41", + "type": "STRING", + "name": "string41", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string42", + "type": "STRING", + "name": "string42", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string43", + "type": "STRING", + "name": "string43", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string44", + "type": "STRING", + "name": "string44", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string45", + "type": "STRING", + "name": "string45", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string46", + "type": "STRING", + "name": "string46", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string47", + "type": "STRING", + "name": "string47", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string48", + "type": "STRING", + "name": "string48", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string49", + "type": "STRING", + "name": "string49", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string50", + "type": "STRING", + "name": "string50", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric1", + "type": "NUMERIC", + "name": "numeric1", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric2", + "type": "NUMERIC", + "name": "numeric2", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric3", + "type": "NUMERIC", + "name": "numeric3", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric4", + "type": "NUMERIC", + "name": "numeric4", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric5", + "type": "NUMERIC", + "name": "numeric5", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric6", + "type": "NUMERIC", + "name": "numeric6", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric7", + "type": "NUMERIC", + "name": "numeric7", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric8", + "type": "NUMERIC", + "name": "numeric8", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric9", + "type": "NUMERIC", + "name": "numeric9", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric10", + "type": "NUMERIC", + "name": "numeric10", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric11", + "type": "NUMERIC", + "name": "numeric11", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric12", + "type": "NUMERIC", + "name": "numeric12", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric13", + "type": "NUMERIC", + "name": "numeric13", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric14", + "type": "NUMERIC", + "name": "numeric14", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric15", + "type": "NUMERIC", + "name": "numeric15", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric16", + "type": "NUMERIC", + "name": "numeric16", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric17", + "type": "NUMERIC", + "name": "numeric17", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric18", + "type": "NUMERIC", + "name": "numeric18", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric19", + "type": "NUMERIC", + "name": "numeric19", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric20", + "type": "NUMERIC", + "name": "numeric20", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric21", + "type": "NUMERIC", + "name": "numeric21", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric22", + "type": "NUMERIC", + "name": "numeric22", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric23", + "type": "NUMERIC", + "name": "numeric23", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric24", + "type": "NUMERIC", + "name": "numeric24", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric25", + "type": "NUMERIC", + "name": "numeric25", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric26", + "type": "NUMERIC", + "name": "numeric26", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric27", + "type": "NUMERIC", + "name": "numeric27", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric28", + "type": "NUMERIC", + "name": "numeric28", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric29", + "type": "NUMERIC", + "name": "numeric29", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric30", + "type": "NUMERIC", + "name": "numeric30", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric31", + "type": "NUMERIC", + "name": "numeric31", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric32", + "type": "NUMERIC", + "name": "numeric32", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric33", + "type": "NUMERIC", + "name": "numeric33", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric34", + "type": "NUMERIC", + "name": "numeric34", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric35", + "type": "NUMERIC", + "name": "numeric35", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric36", + "type": "NUMERIC", + "name": "numeric36", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric37", + "type": "NUMERIC", + "name": "numeric37", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric38", + "type": "NUMERIC", + "name": "numeric38", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric39", + "type": "NUMERIC", + "name": "numeric39", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric40", + "type": "NUMERIC", + "name": "numeric40", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric41", + "type": "NUMERIC", + "name": "numeric41", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric42", + "type": "NUMERIC", + "name": "numeric42", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric43", + "type": "NUMERIC", + "name": "numeric43", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric44", + "type": "NUMERIC", + "name": "numeric44", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric45", + "type": "NUMERIC", + "name": "numeric45", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric46", + "type": "NUMERIC", + "name": "numeric46", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric47", + "type": "NUMERIC", + "name": "numeric47", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric48", + "type": "NUMERIC", + "name": "numeric48", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric49", + "type": "NUMERIC", + "name": "numeric49", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric50", + "type": "NUMERIC", + "name": "numeric50", "mode": "REQUIRED" } ] diff --git a/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/50_STRING_50_NUMERIC_1000.json b/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/50_STRING_50_NUMERIC_1000.json index 4574ed571e..5a15c031d7 100644 --- a/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/50_STRING_50_NUMERIC_1000.json +++ b/examples/bq_benchmarks/json_schemas/benchmark_table_schemas/50_STRING_50_NUMERIC_1000.json @@ -1,5003 +1,5003 @@ { "fields": [ { - "type": "STRING", - "name": "string1", + "type": "STRING", + "name": "string1", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string2", + "type": "STRING", + "name": "string2", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string3", + "type": "STRING", + "name": "string3", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string4", + "type": "STRING", + "name": "string4", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string5", + "type": "STRING", + "name": "string5", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string6", + "type": "STRING", + "name": "string6", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string7", + "type": "STRING", + "name": "string7", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string8", + "type": "STRING", + "name": "string8", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string9", + "type": "STRING", + "name": "string9", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string10", + "type": "STRING", + "name": "string10", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string11", + "type": "STRING", + "name": "string11", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string12", + "type": "STRING", + "name": "string12", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string13", + "type": "STRING", + "name": "string13", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string14", + "type": "STRING", + "name": "string14", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string15", + "type": "STRING", + "name": "string15", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string16", + "type": "STRING", + "name": "string16", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string17", + "type": "STRING", + "name": "string17", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string18", + "type": "STRING", + "name": "string18", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string19", + "type": "STRING", + "name": "string19", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string20", + "type": "STRING", + "name": "string20", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string21", + "type": "STRING", + "name": "string21", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string22", + "type": "STRING", + "name": "string22", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string23", + "type": "STRING", + "name": "string23", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string24", + "type": "STRING", + "name": "string24", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string25", + "type": "STRING", + "name": "string25", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string26", + "type": "STRING", + "name": "string26", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string27", + "type": "STRING", + "name": "string27", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string28", + "type": "STRING", + "name": "string28", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string29", + "type": "STRING", + "name": "string29", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string30", + "type": "STRING", + "name": "string30", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string31", + "type": "STRING", + "name": "string31", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string32", + "type": "STRING", + "name": "string32", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string33", + "type": "STRING", + "name": "string33", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string34", + "type": "STRING", + "name": "string34", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string35", + "type": "STRING", + "name": "string35", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string36", + "type": "STRING", + "name": "string36", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string37", + "type": "STRING", + "name": "string37", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string38", + "type": "STRING", + "name": "string38", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string39", + "type": "STRING", + "name": "string39", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string40", + "type": "STRING", + "name": "string40", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string41", + "type": "STRING", + "name": "string41", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string42", + "type": "STRING", + "name": "string42", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string43", + "type": "STRING", + "name": "string43", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string44", + "type": "STRING", + "name": "string44", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string45", + "type": "STRING", + "name": "string45", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string46", + "type": "STRING", + "name": "string46", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string47", + "type": "STRING", + "name": "string47", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string48", + "type": "STRING", + "name": "string48", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string49", + "type": "STRING", + "name": "string49", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string50", + "type": "STRING", + "name": "string50", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string51", + "type": "STRING", + "name": "string51", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string52", + "type": "STRING", + "name": "string52", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string53", + "type": "STRING", + "name": "string53", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string54", + "type": "STRING", + "name": "string54", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string55", + "type": "STRING", + "name": "string55", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string56", + "type": "STRING", + "name": "string56", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string57", + "type": "STRING", + "name": "string57", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string58", + "type": "STRING", + "name": "string58", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string59", + "type": "STRING", + "name": "string59", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string60", + "type": "STRING", + "name": "string60", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string61", + "type": "STRING", + "name": "string61", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string62", + "type": "STRING", + "name": "string62", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string63", + "type": "STRING", + "name": "string63", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string64", + "type": "STRING", + "name": "string64", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string65", + "type": "STRING", + "name": "string65", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string66", + "type": "STRING", + "name": "string66", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string67", + "type": "STRING", + "name": "string67", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string68", + "type": "STRING", + "name": "string68", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string69", + "type": "STRING", + "name": "string69", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string70", + "type": "STRING", + "name": "string70", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string71", + "type": "STRING", + "name": "string71", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string72", + "type": "STRING", + "name": "string72", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string73", + "type": "STRING", + "name": "string73", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string74", + "type": "STRING", + "name": "string74", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string75", + "type": "STRING", + "name": "string75", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string76", + "type": "STRING", + "name": "string76", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string77", + "type": "STRING", + "name": "string77", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string78", + "type": "STRING", + "name": "string78", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string79", + "type": "STRING", + "name": "string79", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string80", + "type": "STRING", + "name": "string80", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string81", + "type": "STRING", + "name": "string81", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string82", + "type": "STRING", + "name": "string82", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string83", + "type": "STRING", + "name": "string83", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string84", + "type": "STRING", + "name": "string84", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string85", + "type": "STRING", + "name": "string85", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string86", + "type": "STRING", + "name": "string86", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string87", + "type": "STRING", + "name": "string87", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string88", + "type": "STRING", + "name": "string88", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string89", + "type": "STRING", + "name": "string89", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string90", + "type": "STRING", + "name": "string90", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string91", + "type": "STRING", + "name": "string91", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string92", + "type": "STRING", + "name": "string92", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string93", + "type": "STRING", + "name": "string93", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string94", + "type": "STRING", + "name": "string94", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string95", + "type": "STRING", + "name": "string95", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string96", + "type": "STRING", + "name": "string96", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string97", + "type": "STRING", + "name": "string97", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string98", + "type": "STRING", + "name": "string98", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string99", + "type": "STRING", + "name": "string99", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string100", + "type": "STRING", + "name": "string100", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string101", + "type": "STRING", + "name": "string101", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string102", + "type": "STRING", + "name": "string102", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string103", + "type": "STRING", + "name": "string103", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string104", + "type": "STRING", + "name": "string104", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string105", + "type": "STRING", + "name": "string105", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string106", + "type": "STRING", + "name": "string106", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string107", + "type": "STRING", + "name": "string107", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string108", + "type": "STRING", + "name": "string108", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string109", + "type": "STRING", + "name": "string109", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string110", + "type": "STRING", + "name": "string110", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string111", + "type": "STRING", + "name": "string111", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string112", + "type": "STRING", + "name": "string112", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string113", + "type": "STRING", + "name": "string113", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string114", + "type": "STRING", + "name": "string114", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string115", + "type": "STRING", + "name": "string115", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string116", + "type": "STRING", + "name": "string116", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string117", + "type": "STRING", + "name": "string117", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string118", + "type": "STRING", + "name": "string118", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string119", + "type": "STRING", + "name": "string119", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string120", + "type": "STRING", + "name": "string120", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string121", + "type": "STRING", + "name": "string121", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string122", + "type": "STRING", + "name": "string122", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string123", + "type": "STRING", + "name": "string123", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string124", + "type": "STRING", + "name": "string124", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string125", + "type": "STRING", + "name": "string125", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string126", + "type": "STRING", + "name": "string126", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string127", + "type": "STRING", + "name": "string127", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string128", + "type": "STRING", + "name": "string128", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string129", + "type": "STRING", + "name": "string129", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string130", + "type": "STRING", + "name": "string130", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string131", + "type": "STRING", + "name": "string131", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string132", + "type": "STRING", + "name": "string132", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string133", + "type": "STRING", + "name": "string133", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string134", + "type": "STRING", + "name": "string134", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string135", + "type": "STRING", + "name": "string135", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string136", + "type": "STRING", + "name": "string136", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string137", + "type": "STRING", + "name": "string137", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string138", + "type": "STRING", + "name": "string138", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string139", + "type": "STRING", + "name": "string139", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string140", + "type": "STRING", + "name": "string140", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string141", + "type": "STRING", + "name": "string141", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string142", + "type": "STRING", + "name": "string142", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string143", + "type": "STRING", + "name": "string143", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string144", + "type": "STRING", + "name": "string144", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string145", + "type": "STRING", + "name": "string145", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string146", + "type": "STRING", + "name": "string146", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string147", + "type": "STRING", + "name": "string147", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string148", + "type": "STRING", + "name": "string148", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string149", + "type": "STRING", + "name": "string149", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string150", + "type": "STRING", + "name": "string150", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string151", + "type": "STRING", + "name": "string151", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string152", + "type": "STRING", + "name": "string152", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string153", + "type": "STRING", + "name": "string153", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string154", + "type": "STRING", + "name": "string154", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string155", + "type": "STRING", + "name": "string155", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string156", + "type": "STRING", + "name": "string156", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string157", + "type": "STRING", + "name": "string157", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string158", + "type": "STRING", + "name": "string158", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string159", + "type": "STRING", + "name": "string159", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string160", + "type": "STRING", + "name": "string160", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string161", + "type": "STRING", + "name": "string161", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string162", + "type": "STRING", + "name": "string162", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string163", + "type": "STRING", + "name": "string163", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string164", + "type": "STRING", + "name": "string164", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string165", + "type": "STRING", + "name": "string165", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string166", + "type": "STRING", + "name": "string166", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string167", + "type": "STRING", + "name": "string167", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string168", + "type": "STRING", + "name": "string168", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string169", + "type": "STRING", + "name": "string169", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string170", + "type": "STRING", + "name": "string170", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string171", + "type": "STRING", + "name": "string171", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string172", + "type": "STRING", + "name": "string172", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string173", + "type": "STRING", + "name": "string173", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string174", + "type": "STRING", + "name": "string174", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string175", + "type": "STRING", + "name": "string175", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string176", + "type": "STRING", + "name": "string176", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string177", + "type": "STRING", + "name": "string177", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string178", + "type": "STRING", + "name": "string178", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string179", + "type": "STRING", + "name": "string179", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string180", + "type": "STRING", + "name": "string180", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string181", + "type": "STRING", + "name": "string181", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string182", + "type": "STRING", + "name": "string182", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string183", + "type": "STRING", + "name": "string183", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string184", + "type": "STRING", + "name": "string184", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string185", + "type": "STRING", + "name": "string185", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string186", + "type": "STRING", + "name": "string186", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string187", + "type": "STRING", + "name": "string187", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string188", + "type": "STRING", + "name": "string188", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string189", + "type": "STRING", + "name": "string189", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string190", + "type": "STRING", + "name": "string190", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string191", + "type": "STRING", + "name": "string191", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string192", + "type": "STRING", + "name": "string192", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string193", + "type": "STRING", + "name": "string193", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string194", + "type": "STRING", + "name": "string194", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string195", + "type": "STRING", + "name": "string195", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string196", + "type": "STRING", + "name": "string196", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string197", + "type": "STRING", + "name": "string197", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string198", + "type": "STRING", + "name": "string198", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string199", + "type": "STRING", + "name": "string199", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string200", + "type": "STRING", + "name": "string200", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string201", + "type": "STRING", + "name": "string201", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string202", + "type": "STRING", + "name": "string202", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string203", + "type": "STRING", + "name": "string203", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string204", + "type": "STRING", + "name": "string204", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string205", + "type": "STRING", + "name": "string205", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string206", + "type": "STRING", + "name": "string206", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string207", + "type": "STRING", + "name": "string207", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string208", + "type": "STRING", + "name": "string208", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string209", + "type": "STRING", + "name": "string209", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string210", + "type": "STRING", + "name": "string210", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string211", + "type": "STRING", + "name": "string211", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string212", + "type": "STRING", + "name": "string212", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string213", + "type": "STRING", + "name": "string213", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string214", + "type": "STRING", + "name": "string214", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string215", + "type": "STRING", + "name": "string215", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string216", + "type": "STRING", + "name": "string216", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string217", + "type": "STRING", + "name": "string217", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string218", + "type": "STRING", + "name": "string218", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string219", + "type": "STRING", + "name": "string219", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string220", + "type": "STRING", + "name": "string220", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string221", + "type": "STRING", + "name": "string221", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string222", + "type": "STRING", + "name": "string222", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string223", + "type": "STRING", + "name": "string223", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string224", + "type": "STRING", + "name": "string224", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string225", + "type": "STRING", + "name": "string225", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string226", + "type": "STRING", + "name": "string226", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string227", + "type": "STRING", + "name": "string227", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string228", + "type": "STRING", + "name": "string228", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string229", + "type": "STRING", + "name": "string229", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string230", + "type": "STRING", + "name": "string230", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string231", + "type": "STRING", + "name": "string231", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string232", + "type": "STRING", + "name": "string232", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string233", + "type": "STRING", + "name": "string233", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string234", + "type": "STRING", + "name": "string234", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string235", + "type": "STRING", + "name": "string235", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string236", + "type": "STRING", + "name": "string236", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string237", + "type": "STRING", + "name": "string237", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string238", + "type": "STRING", + "name": "string238", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string239", + "type": "STRING", + "name": "string239", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string240", + "type": "STRING", + "name": "string240", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string241", + "type": "STRING", + "name": "string241", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string242", + "type": "STRING", + "name": "string242", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string243", + "type": "STRING", + "name": "string243", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string244", + "type": "STRING", + "name": "string244", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string245", + "type": "STRING", + "name": "string245", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string246", + "type": "STRING", + "name": "string246", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string247", + "type": "STRING", + "name": "string247", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string248", + "type": "STRING", + "name": "string248", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string249", + "type": "STRING", + "name": "string249", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string250", + "type": "STRING", + "name": "string250", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string251", + "type": "STRING", + "name": "string251", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string252", + "type": "STRING", + "name": "string252", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string253", + "type": "STRING", + "name": "string253", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string254", + "type": "STRING", + "name": "string254", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string255", + "type": "STRING", + "name": "string255", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string256", + "type": "STRING", + "name": "string256", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string257", + "type": "STRING", + "name": "string257", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string258", + "type": "STRING", + "name": "string258", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string259", + "type": "STRING", + "name": "string259", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string260", + "type": "STRING", + "name": "string260", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string261", + "type": "STRING", + "name": "string261", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string262", + "type": "STRING", + "name": "string262", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string263", + "type": "STRING", + "name": "string263", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string264", + "type": "STRING", + "name": "string264", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string265", + "type": "STRING", + "name": "string265", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string266", + "type": "STRING", + "name": "string266", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string267", + "type": "STRING", + "name": "string267", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string268", + "type": "STRING", + "name": "string268", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string269", + "type": "STRING", + "name": "string269", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string270", + "type": "STRING", + "name": "string270", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string271", + "type": "STRING", + "name": "string271", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string272", + "type": "STRING", + "name": "string272", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string273", + "type": "STRING", + "name": "string273", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string274", + "type": "STRING", + "name": "string274", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string275", + "type": "STRING", + "name": "string275", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string276", + "type": "STRING", + "name": "string276", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string277", + "type": "STRING", + "name": "string277", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string278", + "type": "STRING", + "name": "string278", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string279", + "type": "STRING", + "name": "string279", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string280", + "type": "STRING", + "name": "string280", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string281", + "type": "STRING", + "name": "string281", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string282", + "type": "STRING", + "name": "string282", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string283", + "type": "STRING", + "name": "string283", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string284", + "type": "STRING", + "name": "string284", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string285", + "type": "STRING", + "name": "string285", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string286", + "type": "STRING", + "name": "string286", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string287", + "type": "STRING", + "name": "string287", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string288", + "type": "STRING", + "name": "string288", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string289", + "type": "STRING", + "name": "string289", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string290", + "type": "STRING", + "name": "string290", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string291", + "type": "STRING", + "name": "string291", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string292", + "type": "STRING", + "name": "string292", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string293", + "type": "STRING", + "name": "string293", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string294", + "type": "STRING", + "name": "string294", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string295", + "type": "STRING", + "name": "string295", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string296", + "type": "STRING", + "name": "string296", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string297", + "type": "STRING", + "name": "string297", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string298", + "type": "STRING", + "name": "string298", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string299", + "type": "STRING", + "name": "string299", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string300", + "type": "STRING", + "name": "string300", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string301", + "type": "STRING", + "name": "string301", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string302", + "type": "STRING", + "name": "string302", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string303", + "type": "STRING", + "name": "string303", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string304", + "type": "STRING", + "name": "string304", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string305", + "type": "STRING", + "name": "string305", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string306", + "type": "STRING", + "name": "string306", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string307", + "type": "STRING", + "name": "string307", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string308", + "type": "STRING", + "name": "string308", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string309", + "type": "STRING", + "name": "string309", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string310", + "type": "STRING", + "name": "string310", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string311", + "type": "STRING", + "name": "string311", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string312", + "type": "STRING", + "name": "string312", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string313", + "type": "STRING", + "name": "string313", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string314", + "type": "STRING", + "name": "string314", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string315", + "type": "STRING", + "name": "string315", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string316", + "type": "STRING", + "name": "string316", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string317", + "type": "STRING", + "name": "string317", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string318", + "type": "STRING", + "name": "string318", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string319", + "type": "STRING", + "name": "string319", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string320", + "type": "STRING", + "name": "string320", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string321", + "type": "STRING", + "name": "string321", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string322", + "type": "STRING", + "name": "string322", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string323", + "type": "STRING", + "name": "string323", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string324", + "type": "STRING", + "name": "string324", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string325", + "type": "STRING", + "name": "string325", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string326", + "type": "STRING", + "name": "string326", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string327", + "type": "STRING", + "name": "string327", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string328", + "type": "STRING", + "name": "string328", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string329", + "type": "STRING", + "name": "string329", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string330", + "type": "STRING", + "name": "string330", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string331", + "type": "STRING", + "name": "string331", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string332", + "type": "STRING", + "name": "string332", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string333", + "type": "STRING", + "name": "string333", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string334", + "type": "STRING", + "name": "string334", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string335", + "type": "STRING", + "name": "string335", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string336", + "type": "STRING", + "name": "string336", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string337", + "type": "STRING", + "name": "string337", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string338", + "type": "STRING", + "name": "string338", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string339", + "type": "STRING", + "name": "string339", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string340", + "type": "STRING", + "name": "string340", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string341", + "type": "STRING", + "name": "string341", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string342", + "type": "STRING", + "name": "string342", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string343", + "type": "STRING", + "name": "string343", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string344", + "type": "STRING", + "name": "string344", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string345", + "type": "STRING", + "name": "string345", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string346", + "type": "STRING", + "name": "string346", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string347", + "type": "STRING", + "name": "string347", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string348", + "type": "STRING", + "name": "string348", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string349", + "type": "STRING", + "name": "string349", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string350", + "type": "STRING", + "name": "string350", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string351", + "type": "STRING", + "name": "string351", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string352", + "type": "STRING", + "name": "string352", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string353", + "type": "STRING", + "name": "string353", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string354", + "type": "STRING", + "name": "string354", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string355", + "type": "STRING", + "name": "string355", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string356", + "type": "STRING", + "name": "string356", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string357", + "type": "STRING", + "name": "string357", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string358", + "type": "STRING", + "name": "string358", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string359", + "type": "STRING", + "name": "string359", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string360", + "type": "STRING", + "name": "string360", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string361", + "type": "STRING", + "name": "string361", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string362", + "type": "STRING", + "name": "string362", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string363", + "type": "STRING", + "name": "string363", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string364", + "type": "STRING", + "name": "string364", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string365", + "type": "STRING", + "name": "string365", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string366", + "type": "STRING", + "name": "string366", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string367", + "type": "STRING", + "name": "string367", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string368", + "type": "STRING", + "name": "string368", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string369", + "type": "STRING", + "name": "string369", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string370", + "type": "STRING", + "name": "string370", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string371", + "type": "STRING", + "name": "string371", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string372", + "type": "STRING", + "name": "string372", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string373", + "type": "STRING", + "name": "string373", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string374", + "type": "STRING", + "name": "string374", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string375", + "type": "STRING", + "name": "string375", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string376", + "type": "STRING", + "name": "string376", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string377", + "type": "STRING", + "name": "string377", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string378", + "type": "STRING", + "name": "string378", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string379", + "type": "STRING", + "name": "string379", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string380", + "type": "STRING", + "name": "string380", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string381", + "type": "STRING", + "name": "string381", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string382", + "type": "STRING", + "name": "string382", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string383", + "type": "STRING", + "name": "string383", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string384", + "type": "STRING", + "name": "string384", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string385", + "type": "STRING", + "name": "string385", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string386", + "type": "STRING", + "name": "string386", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string387", + "type": "STRING", + "name": "string387", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string388", + "type": "STRING", + "name": "string388", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string389", + "type": "STRING", + "name": "string389", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string390", + "type": "STRING", + "name": "string390", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string391", + "type": "STRING", + "name": "string391", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string392", + "type": "STRING", + "name": "string392", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string393", + "type": "STRING", + "name": "string393", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string394", + "type": "STRING", + "name": "string394", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string395", + "type": "STRING", + "name": "string395", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string396", + "type": "STRING", + "name": "string396", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string397", + "type": "STRING", + "name": "string397", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string398", + "type": "STRING", + "name": "string398", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string399", + "type": "STRING", + "name": "string399", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string400", + "type": "STRING", + "name": "string400", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string401", + "type": "STRING", + "name": "string401", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string402", + "type": "STRING", + "name": "string402", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string403", + "type": "STRING", + "name": "string403", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string404", + "type": "STRING", + "name": "string404", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string405", + "type": "STRING", + "name": "string405", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string406", + "type": "STRING", + "name": "string406", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string407", + "type": "STRING", + "name": "string407", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string408", + "type": "STRING", + "name": "string408", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string409", + "type": "STRING", + "name": "string409", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string410", + "type": "STRING", + "name": "string410", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string411", + "type": "STRING", + "name": "string411", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string412", + "type": "STRING", + "name": "string412", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string413", + "type": "STRING", + "name": "string413", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string414", + "type": "STRING", + "name": "string414", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string415", + "type": "STRING", + "name": "string415", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string416", + "type": "STRING", + "name": "string416", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string417", + "type": "STRING", + "name": "string417", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string418", + "type": "STRING", + "name": "string418", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string419", + "type": "STRING", + "name": "string419", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string420", + "type": "STRING", + "name": "string420", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string421", + "type": "STRING", + "name": "string421", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string422", + "type": "STRING", + "name": "string422", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string423", + "type": "STRING", + "name": "string423", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string424", + "type": "STRING", + "name": "string424", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string425", + "type": "STRING", + "name": "string425", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string426", + "type": "STRING", + "name": "string426", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string427", + "type": "STRING", + "name": "string427", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string428", + "type": "STRING", + "name": "string428", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string429", + "type": "STRING", + "name": "string429", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string430", + "type": "STRING", + "name": "string430", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string431", + "type": "STRING", + "name": "string431", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string432", + "type": "STRING", + "name": "string432", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string433", + "type": "STRING", + "name": "string433", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string434", + "type": "STRING", + "name": "string434", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string435", + "type": "STRING", + "name": "string435", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string436", + "type": "STRING", + "name": "string436", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string437", + "type": "STRING", + "name": "string437", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string438", + "type": "STRING", + "name": "string438", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string439", + "type": "STRING", + "name": "string439", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string440", + "type": "STRING", + "name": "string440", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string441", + "type": "STRING", + "name": "string441", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string442", + "type": "STRING", + "name": "string442", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string443", + "type": "STRING", + "name": "string443", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string444", + "type": "STRING", + "name": "string444", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string445", + "type": "STRING", + "name": "string445", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string446", + "type": "STRING", + "name": "string446", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string447", + "type": "STRING", + "name": "string447", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string448", + "type": "STRING", + "name": "string448", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string449", + "type": "STRING", + "name": "string449", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string450", + "type": "STRING", + "name": "string450", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string451", + "type": "STRING", + "name": "string451", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string452", + "type": "STRING", + "name": "string452", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string453", + "type": "STRING", + "name": "string453", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string454", + "type": "STRING", + "name": "string454", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string455", + "type": "STRING", + "name": "string455", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string456", + "type": "STRING", + "name": "string456", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string457", + "type": "STRING", + "name": "string457", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string458", + "type": "STRING", + "name": "string458", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string459", + "type": "STRING", + "name": "string459", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string460", + "type": "STRING", + "name": "string460", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string461", + "type": "STRING", + "name": "string461", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string462", + "type": "STRING", + "name": "string462", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string463", + "type": "STRING", + "name": "string463", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string464", + "type": "STRING", + "name": "string464", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string465", + "type": "STRING", + "name": "string465", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string466", + "type": "STRING", + "name": "string466", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string467", + "type": "STRING", + "name": "string467", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string468", + "type": "STRING", + "name": "string468", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string469", + "type": "STRING", + "name": "string469", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string470", + "type": "STRING", + "name": "string470", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string471", + "type": "STRING", + "name": "string471", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string472", + "type": "STRING", + "name": "string472", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string473", + "type": "STRING", + "name": "string473", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string474", + "type": "STRING", + "name": "string474", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string475", + "type": "STRING", + "name": "string475", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string476", + "type": "STRING", + "name": "string476", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string477", + "type": "STRING", + "name": "string477", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string478", + "type": "STRING", + "name": "string478", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string479", + "type": "STRING", + "name": "string479", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string480", + "type": "STRING", + "name": "string480", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string481", + "type": "STRING", + "name": "string481", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string482", + "type": "STRING", + "name": "string482", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string483", + "type": "STRING", + "name": "string483", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string484", + "type": "STRING", + "name": "string484", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string485", + "type": "STRING", + "name": "string485", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string486", + "type": "STRING", + "name": "string486", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string487", + "type": "STRING", + "name": "string487", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string488", + "type": "STRING", + "name": "string488", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string489", + "type": "STRING", + "name": "string489", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string490", + "type": "STRING", + "name": "string490", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string491", + "type": "STRING", + "name": "string491", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string492", + "type": "STRING", + "name": "string492", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string493", + "type": "STRING", + "name": "string493", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string494", + "type": "STRING", + "name": "string494", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string495", + "type": "STRING", + "name": "string495", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string496", + "type": "STRING", + "name": "string496", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string497", + "type": "STRING", + "name": "string497", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string498", + "type": "STRING", + "name": "string498", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string499", + "type": "STRING", + "name": "string499", "mode": "REQUIRED" - }, + }, { - "type": "STRING", - "name": "string500", + "type": "STRING", + "name": "string500", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric1", + "type": "NUMERIC", + "name": "numeric1", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric2", + "type": "NUMERIC", + "name": "numeric2", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric3", + "type": "NUMERIC", + "name": "numeric3", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric4", + "type": "NUMERIC", + "name": "numeric4", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric5", + "type": "NUMERIC", + "name": "numeric5", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric6", + "type": "NUMERIC", + "name": "numeric6", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric7", + "type": "NUMERIC", + "name": "numeric7", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric8", + "type": "NUMERIC", + "name": "numeric8", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric9", + "type": "NUMERIC", + "name": "numeric9", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric10", + "type": "NUMERIC", + "name": "numeric10", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric11", + "type": "NUMERIC", + "name": "numeric11", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric12", + "type": "NUMERIC", + "name": "numeric12", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric13", + "type": "NUMERIC", + "name": "numeric13", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric14", + "type": "NUMERIC", + "name": "numeric14", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric15", + "type": "NUMERIC", + "name": "numeric15", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric16", + "type": "NUMERIC", + "name": "numeric16", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric17", + "type": "NUMERIC", + "name": "numeric17", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric18", + "type": "NUMERIC", + "name": "numeric18", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric19", + "type": "NUMERIC", + "name": "numeric19", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric20", + "type": "NUMERIC", + "name": "numeric20", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric21", + "type": "NUMERIC", + "name": "numeric21", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric22", + "type": "NUMERIC", + "name": "numeric22", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric23", + "type": "NUMERIC", + "name": "numeric23", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric24", + "type": "NUMERIC", + "name": "numeric24", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric25", + "type": "NUMERIC", + "name": "numeric25", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric26", + "type": "NUMERIC", + "name": "numeric26", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric27", + "type": "NUMERIC", + "name": "numeric27", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric28", + "type": "NUMERIC", + "name": "numeric28", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric29", + "type": "NUMERIC", + "name": "numeric29", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric30", + "type": "NUMERIC", + "name": "numeric30", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric31", + "type": "NUMERIC", + "name": "numeric31", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric32", + "type": "NUMERIC", + "name": "numeric32", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric33", + "type": "NUMERIC", + "name": "numeric33", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric34", + "type": "NUMERIC", + "name": "numeric34", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric35", + "type": "NUMERIC", + "name": "numeric35", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric36", + "type": "NUMERIC", + "name": "numeric36", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric37", + "type": "NUMERIC", + "name": "numeric37", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric38", + "type": "NUMERIC", + "name": "numeric38", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric39", + "type": "NUMERIC", + "name": "numeric39", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric40", + "type": "NUMERIC", + "name": "numeric40", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric41", + "type": "NUMERIC", + "name": "numeric41", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric42", + "type": "NUMERIC", + "name": "numeric42", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric43", + "type": "NUMERIC", + "name": "numeric43", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric44", + "type": "NUMERIC", + "name": "numeric44", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric45", + "type": "NUMERIC", + "name": "numeric45", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric46", + "type": "NUMERIC", + "name": "numeric46", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric47", + "type": "NUMERIC", + "name": "numeric47", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric48", + "type": "NUMERIC", + "name": "numeric48", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric49", + "type": "NUMERIC", + "name": "numeric49", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric50", + "type": "NUMERIC", + "name": "numeric50", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric51", + "type": "NUMERIC", + "name": "numeric51", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric52", + "type": "NUMERIC", + "name": "numeric52", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric53", + "type": "NUMERIC", + "name": "numeric53", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric54", + "type": "NUMERIC", + "name": "numeric54", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric55", + "type": "NUMERIC", + "name": "numeric55", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric56", + "type": "NUMERIC", + "name": "numeric56", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric57", + "type": "NUMERIC", + "name": "numeric57", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric58", + "type": "NUMERIC", + "name": "numeric58", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric59", + "type": "NUMERIC", + "name": "numeric59", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric60", + "type": "NUMERIC", + "name": "numeric60", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric61", + "type": "NUMERIC", + "name": "numeric61", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric62", + "type": "NUMERIC", + "name": "numeric62", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric63", + "type": "NUMERIC", + "name": "numeric63", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric64", + "type": "NUMERIC", + "name": "numeric64", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric65", + "type": "NUMERIC", + "name": "numeric65", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric66", + "type": "NUMERIC", + "name": "numeric66", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric67", + "type": "NUMERIC", + "name": "numeric67", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric68", + "type": "NUMERIC", + "name": "numeric68", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric69", + "type": "NUMERIC", + "name": "numeric69", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric70", + "type": "NUMERIC", + "name": "numeric70", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric71", + "type": "NUMERIC", + "name": "numeric71", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric72", + "type": "NUMERIC", + "name": "numeric72", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric73", + "type": "NUMERIC", + "name": "numeric73", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric74", + "type": "NUMERIC", + "name": "numeric74", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric75", + "type": "NUMERIC", + "name": "numeric75", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric76", + "type": "NUMERIC", + "name": "numeric76", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric77", + "type": "NUMERIC", + "name": "numeric77", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric78", + "type": "NUMERIC", + "name": "numeric78", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric79", + "type": "NUMERIC", + "name": "numeric79", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric80", + "type": "NUMERIC", + "name": "numeric80", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric81", + "type": "NUMERIC", + "name": "numeric81", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric82", + "type": "NUMERIC", + "name": "numeric82", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric83", + "type": "NUMERIC", + "name": "numeric83", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric84", + "type": "NUMERIC", + "name": "numeric84", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric85", + "type": "NUMERIC", + "name": "numeric85", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric86", + "type": "NUMERIC", + "name": "numeric86", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric87", + "type": "NUMERIC", + "name": "numeric87", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric88", + "type": "NUMERIC", + "name": "numeric88", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric89", + "type": "NUMERIC", + "name": "numeric89", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric90", + "type": "NUMERIC", + "name": "numeric90", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric91", + "type": "NUMERIC", + "name": "numeric91", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric92", + "type": "NUMERIC", + "name": "numeric92", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric93", + "type": "NUMERIC", + "name": "numeric93", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric94", + "type": "NUMERIC", + "name": "numeric94", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric95", + "type": "NUMERIC", + "name": "numeric95", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric96", + "type": "NUMERIC", + "name": "numeric96", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric97", + "type": "NUMERIC", + "name": "numeric97", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric98", + "type": "NUMERIC", + "name": "numeric98", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric99", + "type": "NUMERIC", + "name": "numeric99", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric100", + "type": "NUMERIC", + "name": "numeric100", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric101", + "type": "NUMERIC", + "name": "numeric101", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric102", + "type": "NUMERIC", + "name": "numeric102", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric103", + "type": "NUMERIC", + "name": "numeric103", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric104", + "type": "NUMERIC", + "name": "numeric104", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric105", + "type": "NUMERIC", + "name": "numeric105", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric106", + "type": "NUMERIC", + "name": "numeric106", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric107", + "type": "NUMERIC", + "name": "numeric107", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric108", + "type": "NUMERIC", + "name": "numeric108", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric109", + "type": "NUMERIC", + "name": "numeric109", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric110", + "type": "NUMERIC", + "name": "numeric110", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric111", + "type": "NUMERIC", + "name": "numeric111", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric112", + "type": "NUMERIC", + "name": "numeric112", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric113", + "type": "NUMERIC", + "name": "numeric113", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric114", + "type": "NUMERIC", + "name": "numeric114", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric115", + "type": "NUMERIC", + "name": "numeric115", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric116", + "type": "NUMERIC", + "name": "numeric116", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric117", + "type": "NUMERIC", + "name": "numeric117", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric118", + "type": "NUMERIC", + "name": "numeric118", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric119", + "type": "NUMERIC", + "name": "numeric119", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric120", + "type": "NUMERIC", + "name": "numeric120", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric121", + "type": "NUMERIC", + "name": "numeric121", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric122", + "type": "NUMERIC", + "name": "numeric122", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric123", + "type": "NUMERIC", + "name": "numeric123", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric124", + "type": "NUMERIC", + "name": "numeric124", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric125", + "type": "NUMERIC", + "name": "numeric125", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric126", + "type": "NUMERIC", + "name": "numeric126", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric127", + "type": "NUMERIC", + "name": "numeric127", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric128", + "type": "NUMERIC", + "name": "numeric128", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric129", + "type": "NUMERIC", + "name": "numeric129", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric130", + "type": "NUMERIC", + "name": "numeric130", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric131", + "type": "NUMERIC", + "name": "numeric131", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric132", + "type": "NUMERIC", + "name": "numeric132", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric133", + "type": "NUMERIC", + "name": "numeric133", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric134", + "type": "NUMERIC", + "name": "numeric134", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric135", + "type": "NUMERIC", + "name": "numeric135", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric136", + "type": "NUMERIC", + "name": "numeric136", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric137", + "type": "NUMERIC", + "name": "numeric137", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric138", + "type": "NUMERIC", + "name": "numeric138", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric139", + "type": "NUMERIC", + "name": "numeric139", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric140", + "type": "NUMERIC", + "name": "numeric140", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric141", + "type": "NUMERIC", + "name": "numeric141", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric142", + "type": "NUMERIC", + "name": "numeric142", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric143", + "type": "NUMERIC", + "name": "numeric143", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric144", + "type": "NUMERIC", + "name": "numeric144", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric145", + "type": "NUMERIC", + "name": "numeric145", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric146", + "type": "NUMERIC", + "name": "numeric146", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric147", + "type": "NUMERIC", + "name": "numeric147", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric148", + "type": "NUMERIC", + "name": "numeric148", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric149", + "type": "NUMERIC", + "name": "numeric149", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric150", + "type": "NUMERIC", + "name": "numeric150", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric151", + "type": "NUMERIC", + "name": "numeric151", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric152", + "type": "NUMERIC", + "name": "numeric152", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric153", + "type": "NUMERIC", + "name": "numeric153", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric154", + "type": "NUMERIC", + "name": "numeric154", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric155", + "type": "NUMERIC", + "name": "numeric155", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric156", + "type": "NUMERIC", + "name": "numeric156", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric157", + "type": "NUMERIC", + "name": "numeric157", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric158", + "type": "NUMERIC", + "name": "numeric158", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric159", + "type": "NUMERIC", + "name": "numeric159", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric160", + "type": "NUMERIC", + "name": "numeric160", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric161", + "type": "NUMERIC", + "name": "numeric161", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric162", + "type": "NUMERIC", + "name": "numeric162", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric163", + "type": "NUMERIC", + "name": "numeric163", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric164", + "type": "NUMERIC", + "name": "numeric164", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric165", + "type": "NUMERIC", + "name": "numeric165", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric166", + "type": "NUMERIC", + "name": "numeric166", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric167", + "type": "NUMERIC", + "name": "numeric167", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric168", + "type": "NUMERIC", + "name": "numeric168", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric169", + "type": "NUMERIC", + "name": "numeric169", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric170", + "type": "NUMERIC", + "name": "numeric170", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric171", + "type": "NUMERIC", + "name": "numeric171", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric172", + "type": "NUMERIC", + "name": "numeric172", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric173", + "type": "NUMERIC", + "name": "numeric173", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric174", + "type": "NUMERIC", + "name": "numeric174", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric175", + "type": "NUMERIC", + "name": "numeric175", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric176", + "type": "NUMERIC", + "name": "numeric176", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric177", + "type": "NUMERIC", + "name": "numeric177", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric178", + "type": "NUMERIC", + "name": "numeric178", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric179", + "type": "NUMERIC", + "name": "numeric179", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric180", + "type": "NUMERIC", + "name": "numeric180", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric181", + "type": "NUMERIC", + "name": "numeric181", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric182", + "type": "NUMERIC", + "name": "numeric182", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric183", + "type": "NUMERIC", + "name": "numeric183", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric184", + "type": "NUMERIC", + "name": "numeric184", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric185", + "type": "NUMERIC", + "name": "numeric185", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric186", + "type": "NUMERIC", + "name": "numeric186", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric187", + "type": "NUMERIC", + "name": "numeric187", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric188", + "type": "NUMERIC", + "name": "numeric188", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric189", + "type": "NUMERIC", + "name": "numeric189", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric190", + "type": "NUMERIC", + "name": "numeric190", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric191", + "type": "NUMERIC", + "name": "numeric191", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric192", + "type": "NUMERIC", + "name": "numeric192", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric193", + "type": "NUMERIC", + "name": "numeric193", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric194", + "type": "NUMERIC", + "name": "numeric194", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric195", + "type": "NUMERIC", + "name": "numeric195", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric196", + "type": "NUMERIC", + "name": "numeric196", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric197", + "type": "NUMERIC", + "name": "numeric197", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric198", + "type": "NUMERIC", + "name": "numeric198", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric199", + "type": "NUMERIC", + "name": "numeric199", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric200", + "type": "NUMERIC", + "name": "numeric200", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric201", + "type": "NUMERIC", + "name": "numeric201", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric202", + "type": "NUMERIC", + "name": "numeric202", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric203", + "type": "NUMERIC", + "name": "numeric203", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric204", + "type": "NUMERIC", + "name": "numeric204", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric205", + "type": "NUMERIC", + "name": "numeric205", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric206", + "type": "NUMERIC", + "name": "numeric206", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric207", + "type": "NUMERIC", + "name": "numeric207", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric208", + "type": "NUMERIC", + "name": "numeric208", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric209", + "type": "NUMERIC", + "name": "numeric209", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric210", + "type": "NUMERIC", + "name": "numeric210", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric211", + "type": "NUMERIC", + "name": "numeric211", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric212", + "type": "NUMERIC", + "name": "numeric212", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric213", + "type": "NUMERIC", + "name": "numeric213", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric214", + "type": "NUMERIC", + "name": "numeric214", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric215", + "type": "NUMERIC", + "name": "numeric215", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric216", + "type": "NUMERIC", + "name": "numeric216", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric217", + "type": "NUMERIC", + "name": "numeric217", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric218", + "type": "NUMERIC", + "name": "numeric218", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric219", + "type": "NUMERIC", + "name": "numeric219", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric220", + "type": "NUMERIC", + "name": "numeric220", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric221", + "type": "NUMERIC", + "name": "numeric221", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric222", + "type": "NUMERIC", + "name": "numeric222", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric223", + "type": "NUMERIC", + "name": "numeric223", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric224", + "type": "NUMERIC", + "name": "numeric224", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric225", + "type": "NUMERIC", + "name": "numeric225", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric226", + "type": "NUMERIC", + "name": "numeric226", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric227", + "type": "NUMERIC", + "name": "numeric227", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric228", + "type": "NUMERIC", + "name": "numeric228", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric229", + "type": "NUMERIC", + "name": "numeric229", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric230", + "type": "NUMERIC", + "name": "numeric230", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric231", + "type": "NUMERIC", + "name": "numeric231", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric232", + "type": "NUMERIC", + "name": "numeric232", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric233", + "type": "NUMERIC", + "name": "numeric233", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric234", + "type": "NUMERIC", + "name": "numeric234", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric235", + "type": "NUMERIC", + "name": "numeric235", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric236", + "type": "NUMERIC", + "name": "numeric236", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric237", + "type": "NUMERIC", + "name": "numeric237", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric238", + "type": "NUMERIC", + "name": "numeric238", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric239", + "type": "NUMERIC", + "name": "numeric239", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric240", + "type": "NUMERIC", + "name": "numeric240", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric241", + "type": "NUMERIC", + "name": "numeric241", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric242", + "type": "NUMERIC", + "name": "numeric242", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric243", + "type": "NUMERIC", + "name": "numeric243", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric244", + "type": "NUMERIC", + "name": "numeric244", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric245", + "type": "NUMERIC", + "name": "numeric245", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric246", + "type": "NUMERIC", + "name": "numeric246", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric247", + "type": "NUMERIC", + "name": "numeric247", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric248", + "type": "NUMERIC", + "name": "numeric248", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric249", + "type": "NUMERIC", + "name": "numeric249", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric250", + "type": "NUMERIC", + "name": "numeric250", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric251", + "type": "NUMERIC", + "name": "numeric251", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric252", + "type": "NUMERIC", + "name": "numeric252", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric253", + "type": "NUMERIC", + "name": "numeric253", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric254", + "type": "NUMERIC", + "name": "numeric254", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric255", + "type": "NUMERIC", + "name": "numeric255", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric256", + "type": "NUMERIC", + "name": "numeric256", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric257", + "type": "NUMERIC", + "name": "numeric257", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric258", + "type": "NUMERIC", + "name": "numeric258", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric259", + "type": "NUMERIC", + "name": "numeric259", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric260", + "type": "NUMERIC", + "name": "numeric260", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric261", + "type": "NUMERIC", + "name": "numeric261", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric262", + "type": "NUMERIC", + "name": "numeric262", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric263", + "type": "NUMERIC", + "name": "numeric263", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric264", + "type": "NUMERIC", + "name": "numeric264", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric265", + "type": "NUMERIC", + "name": "numeric265", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric266", + "type": "NUMERIC", + "name": "numeric266", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric267", + "type": "NUMERIC", + "name": "numeric267", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric268", + "type": "NUMERIC", + "name": "numeric268", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric269", + "type": "NUMERIC", + "name": "numeric269", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric270", + "type": "NUMERIC", + "name": "numeric270", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric271", + "type": "NUMERIC", + "name": "numeric271", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric272", + "type": "NUMERIC", + "name": "numeric272", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric273", + "type": "NUMERIC", + "name": "numeric273", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric274", + "type": "NUMERIC", + "name": "numeric274", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric275", + "type": "NUMERIC", + "name": "numeric275", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric276", + "type": "NUMERIC", + "name": "numeric276", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric277", + "type": "NUMERIC", + "name": "numeric277", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric278", + "type": "NUMERIC", + "name": "numeric278", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric279", + "type": "NUMERIC", + "name": "numeric279", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric280", + "type": "NUMERIC", + "name": "numeric280", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric281", + "type": "NUMERIC", + "name": "numeric281", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric282", + "type": "NUMERIC", + "name": "numeric282", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric283", + "type": "NUMERIC", + "name": "numeric283", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric284", + "type": "NUMERIC", + "name": "numeric284", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric285", + "type": "NUMERIC", + "name": "numeric285", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric286", + "type": "NUMERIC", + "name": "numeric286", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric287", + "type": "NUMERIC", + "name": "numeric287", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric288", + "type": "NUMERIC", + "name": "numeric288", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric289", + "type": "NUMERIC", + "name": "numeric289", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric290", + "type": "NUMERIC", + "name": "numeric290", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric291", + "type": "NUMERIC", + "name": "numeric291", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric292", + "type": "NUMERIC", + "name": "numeric292", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric293", + "type": "NUMERIC", + "name": "numeric293", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric294", + "type": "NUMERIC", + "name": "numeric294", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric295", + "type": "NUMERIC", + "name": "numeric295", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric296", + "type": "NUMERIC", + "name": "numeric296", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric297", + "type": "NUMERIC", + "name": "numeric297", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric298", + "type": "NUMERIC", + "name": "numeric298", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric299", + "type": "NUMERIC", + "name": "numeric299", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric300", + "type": "NUMERIC", + "name": "numeric300", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric301", + "type": "NUMERIC", + "name": "numeric301", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric302", + "type": "NUMERIC", + "name": "numeric302", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric303", + "type": "NUMERIC", + "name": "numeric303", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric304", + "type": "NUMERIC", + "name": "numeric304", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric305", + "type": "NUMERIC", + "name": "numeric305", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric306", + "type": "NUMERIC", + "name": "numeric306", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric307", + "type": "NUMERIC", + "name": "numeric307", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric308", + "type": "NUMERIC", + "name": "numeric308", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric309", + "type": "NUMERIC", + "name": "numeric309", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric310", + "type": "NUMERIC", + "name": "numeric310", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric311", + "type": "NUMERIC", + "name": "numeric311", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric312", + "type": "NUMERIC", + "name": "numeric312", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric313", + "type": "NUMERIC", + "name": "numeric313", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric314", + "type": "NUMERIC", + "name": "numeric314", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric315", + "type": "NUMERIC", + "name": "numeric315", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric316", + "type": "NUMERIC", + "name": "numeric316", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric317", + "type": "NUMERIC", + "name": "numeric317", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric318", + "type": "NUMERIC", + "name": "numeric318", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric319", + "type": "NUMERIC", + "name": "numeric319", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric320", + "type": "NUMERIC", + "name": "numeric320", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric321", + "type": "NUMERIC", + "name": "numeric321", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric322", + "type": "NUMERIC", + "name": "numeric322", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric323", + "type": "NUMERIC", + "name": "numeric323", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric324", + "type": "NUMERIC", + "name": "numeric324", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric325", + "type": "NUMERIC", + "name": "numeric325", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric326", + "type": "NUMERIC", + "name": "numeric326", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric327", + "type": "NUMERIC", + "name": "numeric327", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric328", + "type": "NUMERIC", + "name": "numeric328", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric329", + "type": "NUMERIC", + "name": "numeric329", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric330", + "type": "NUMERIC", + "name": "numeric330", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric331", + "type": "NUMERIC", + "name": "numeric331", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric332", + "type": "NUMERIC", + "name": "numeric332", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric333", + "type": "NUMERIC", + "name": "numeric333", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric334", + "type": "NUMERIC", + "name": "numeric334", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric335", + "type": "NUMERIC", + "name": "numeric335", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric336", + "type": "NUMERIC", + "name": "numeric336", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric337", + "type": "NUMERIC", + "name": "numeric337", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric338", + "type": "NUMERIC", + "name": "numeric338", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric339", + "type": "NUMERIC", + "name": "numeric339", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric340", + "type": "NUMERIC", + "name": "numeric340", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric341", + "type": "NUMERIC", + "name": "numeric341", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric342", + "type": "NUMERIC", + "name": "numeric342", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric343", + "type": "NUMERIC", + "name": "numeric343", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric344", + "type": "NUMERIC", + "name": "numeric344", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric345", + "type": "NUMERIC", + "name": "numeric345", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric346", + "type": "NUMERIC", + "name": "numeric346", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric347", + "type": "NUMERIC", + "name": "numeric347", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric348", + "type": "NUMERIC", + "name": "numeric348", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric349", + "type": "NUMERIC", + "name": "numeric349", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric350", + "type": "NUMERIC", + "name": "numeric350", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric351", + "type": "NUMERIC", + "name": "numeric351", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric352", + "type": "NUMERIC", + "name": "numeric352", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric353", + "type": "NUMERIC", + "name": "numeric353", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric354", + "type": "NUMERIC", + "name": "numeric354", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric355", + "type": "NUMERIC", + "name": "numeric355", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric356", + "type": "NUMERIC", + "name": "numeric356", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric357", + "type": "NUMERIC", + "name": "numeric357", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric358", + "type": "NUMERIC", + "name": "numeric358", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric359", + "type": "NUMERIC", + "name": "numeric359", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric360", + "type": "NUMERIC", + "name": "numeric360", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric361", + "type": "NUMERIC", + "name": "numeric361", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric362", + "type": "NUMERIC", + "name": "numeric362", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric363", + "type": "NUMERIC", + "name": "numeric363", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric364", + "type": "NUMERIC", + "name": "numeric364", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric365", + "type": "NUMERIC", + "name": "numeric365", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric366", + "type": "NUMERIC", + "name": "numeric366", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric367", + "type": "NUMERIC", + "name": "numeric367", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric368", + "type": "NUMERIC", + "name": "numeric368", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric369", + "type": "NUMERIC", + "name": "numeric369", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric370", + "type": "NUMERIC", + "name": "numeric370", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric371", + "type": "NUMERIC", + "name": "numeric371", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric372", + "type": "NUMERIC", + "name": "numeric372", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric373", + "type": "NUMERIC", + "name": "numeric373", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric374", + "type": "NUMERIC", + "name": "numeric374", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric375", + "type": "NUMERIC", + "name": "numeric375", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric376", + "type": "NUMERIC", + "name": "numeric376", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric377", + "type": "NUMERIC", + "name": "numeric377", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric378", + "type": "NUMERIC", + "name": "numeric378", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric379", + "type": "NUMERIC", + "name": "numeric379", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric380", + "type": "NUMERIC", + "name": "numeric380", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric381", + "type": "NUMERIC", + "name": "numeric381", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric382", + "type": "NUMERIC", + "name": "numeric382", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric383", + "type": "NUMERIC", + "name": "numeric383", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric384", + "type": "NUMERIC", + "name": "numeric384", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric385", + "type": "NUMERIC", + "name": "numeric385", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric386", + "type": "NUMERIC", + "name": "numeric386", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric387", + "type": "NUMERIC", + "name": "numeric387", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric388", + "type": "NUMERIC", + "name": "numeric388", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric389", + "type": "NUMERIC", + "name": "numeric389", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric390", + "type": "NUMERIC", + "name": "numeric390", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric391", + "type": "NUMERIC", + "name": "numeric391", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric392", + "type": "NUMERIC", + "name": "numeric392", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric393", + "type": "NUMERIC", + "name": "numeric393", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric394", + "type": "NUMERIC", + "name": "numeric394", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric395", + "type": "NUMERIC", + "name": "numeric395", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric396", + "type": "NUMERIC", + "name": "numeric396", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric397", + "type": "NUMERIC", + "name": "numeric397", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric398", + "type": "NUMERIC", + "name": "numeric398", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric399", + "type": "NUMERIC", + "name": "numeric399", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric400", + "type": "NUMERIC", + "name": "numeric400", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric401", + "type": "NUMERIC", + "name": "numeric401", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric402", + "type": "NUMERIC", + "name": "numeric402", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric403", + "type": "NUMERIC", + "name": "numeric403", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric404", + "type": "NUMERIC", + "name": "numeric404", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric405", + "type": "NUMERIC", + "name": "numeric405", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric406", + "type": "NUMERIC", + "name": "numeric406", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric407", + "type": "NUMERIC", + "name": "numeric407", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric408", + "type": "NUMERIC", + "name": "numeric408", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric409", + "type": "NUMERIC", + "name": "numeric409", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric410", + "type": "NUMERIC", + "name": "numeric410", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric411", + "type": "NUMERIC", + "name": "numeric411", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric412", + "type": "NUMERIC", + "name": "numeric412", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric413", + "type": "NUMERIC", + "name": "numeric413", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric414", + "type": "NUMERIC", + "name": "numeric414", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric415", + "type": "NUMERIC", + "name": "numeric415", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric416", + "type": "NUMERIC", + "name": "numeric416", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric417", + "type": "NUMERIC", + "name": "numeric417", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric418", + "type": "NUMERIC", + "name": "numeric418", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric419", + "type": "NUMERIC", + "name": "numeric419", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric420", + "type": "NUMERIC", + "name": "numeric420", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric421", + "type": "NUMERIC", + "name": "numeric421", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric422", + "type": "NUMERIC", + "name": "numeric422", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric423", + "type": "NUMERIC", + "name": "numeric423", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric424", + "type": "NUMERIC", + "name": "numeric424", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric425", + "type": "NUMERIC", + "name": "numeric425", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric426", + "type": "NUMERIC", + "name": "numeric426", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric427", + "type": "NUMERIC", + "name": "numeric427", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric428", + "type": "NUMERIC", + "name": "numeric428", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric429", + "type": "NUMERIC", + "name": "numeric429", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric430", + "type": "NUMERIC", + "name": "numeric430", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric431", + "type": "NUMERIC", + "name": "numeric431", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric432", + "type": "NUMERIC", + "name": "numeric432", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric433", + "type": "NUMERIC", + "name": "numeric433", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric434", + "type": "NUMERIC", + "name": "numeric434", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric435", + "type": "NUMERIC", + "name": "numeric435", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric436", + "type": "NUMERIC", + "name": "numeric436", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric437", + "type": "NUMERIC", + "name": "numeric437", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric438", + "type": "NUMERIC", + "name": "numeric438", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric439", + "type": "NUMERIC", + "name": "numeric439", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric440", + "type": "NUMERIC", + "name": "numeric440", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric441", + "type": "NUMERIC", + "name": "numeric441", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric442", + "type": "NUMERIC", + "name": "numeric442", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric443", + "type": "NUMERIC", + "name": "numeric443", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric444", + "type": "NUMERIC", + "name": "numeric444", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric445", + "type": "NUMERIC", + "name": "numeric445", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric446", + "type": "NUMERIC", + "name": "numeric446", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric447", + "type": "NUMERIC", + "name": "numeric447", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric448", + "type": "NUMERIC", + "name": "numeric448", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric449", + "type": "NUMERIC", + "name": "numeric449", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric450", + "type": "NUMERIC", + "name": "numeric450", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric451", + "type": "NUMERIC", + "name": "numeric451", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric452", + "type": "NUMERIC", + "name": "numeric452", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric453", + "type": "NUMERIC", + "name": "numeric453", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric454", + "type": "NUMERIC", + "name": "numeric454", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric455", + "type": "NUMERIC", + "name": "numeric455", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric456", + "type": "NUMERIC", + "name": "numeric456", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric457", + "type": "NUMERIC", + "name": "numeric457", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric458", + "type": "NUMERIC", + "name": "numeric458", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric459", + "type": "NUMERIC", + "name": "numeric459", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric460", + "type": "NUMERIC", + "name": "numeric460", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric461", + "type": "NUMERIC", + "name": "numeric461", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric462", + "type": "NUMERIC", + "name": "numeric462", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric463", + "type": "NUMERIC", + "name": "numeric463", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric464", + "type": "NUMERIC", + "name": "numeric464", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric465", + "type": "NUMERIC", + "name": "numeric465", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric466", + "type": "NUMERIC", + "name": "numeric466", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric467", + "type": "NUMERIC", + "name": "numeric467", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric468", + "type": "NUMERIC", + "name": "numeric468", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric469", + "type": "NUMERIC", + "name": "numeric469", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric470", + "type": "NUMERIC", + "name": "numeric470", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric471", + "type": "NUMERIC", + "name": "numeric471", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric472", + "type": "NUMERIC", + "name": "numeric472", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric473", + "type": "NUMERIC", + "name": "numeric473", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric474", + "type": "NUMERIC", + "name": "numeric474", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric475", + "type": "NUMERIC", + "name": "numeric475", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric476", + "type": "NUMERIC", + "name": "numeric476", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric477", + "type": "NUMERIC", + "name": "numeric477", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric478", + "type": "NUMERIC", + "name": "numeric478", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric479", + "type": "NUMERIC", + "name": "numeric479", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric480", + "type": "NUMERIC", + "name": "numeric480", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric481", + "type": "NUMERIC", + "name": "numeric481", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric482", + "type": "NUMERIC", + "name": "numeric482", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric483", + "type": "NUMERIC", + "name": "numeric483", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric484", + "type": "NUMERIC", + "name": "numeric484", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric485", + "type": "NUMERIC", + "name": "numeric485", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric486", + "type": "NUMERIC", + "name": "numeric486", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric487", + "type": "NUMERIC", + "name": "numeric487", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric488", + "type": "NUMERIC", + "name": "numeric488", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric489", + "type": "NUMERIC", + "name": "numeric489", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric490", + "type": "NUMERIC", + "name": "numeric490", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric491", + "type": "NUMERIC", + "name": "numeric491", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric492", + "type": "NUMERIC", + "name": "numeric492", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric493", + "type": "NUMERIC", + "name": "numeric493", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric494", + "type": "NUMERIC", + "name": "numeric494", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric495", + "type": "NUMERIC", + "name": "numeric495", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric496", + "type": "NUMERIC", + "name": "numeric496", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric497", + "type": "NUMERIC", + "name": "numeric497", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric498", + "type": "NUMERIC", + "name": "numeric498", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric499", + "type": "NUMERIC", + "name": "numeric499", "mode": "REQUIRED" - }, + }, { - "type": "NUMERIC", - "name": "numeric500", + "type": "NUMERIC", + "name": "numeric500", "mode": "REQUIRED" } ] diff --git a/examples/cloud-composer-examples/README.md b/examples/cloud-composer-examples/README.md index 721d01c88c..f89bd5185b 100644 --- a/examples/cloud-composer-examples/README.md +++ b/examples/cloud-composer-examples/README.md @@ -1,4 +1,4 @@ -## Cloud Composer Examples: +## Cloud Composer Examples: This repo constains the following examples of using Cloud Composer, Google Cloud Platform's managed Apache Airflow service: 1. [Composer Dataflow Examples](composer_dataflow_examples/README.md) diff --git a/examples/cloud-composer-examples/composer_dataflow_examples/README.md b/examples/cloud-composer-examples/composer_dataflow_examples/README.md index bc046ff031..e8f96f910e 100644 --- a/examples/cloud-composer-examples/composer_dataflow_examples/README.md +++ b/examples/cloud-composer-examples/composer_dataflow_examples/README.md @@ -2,7 +2,7 @@ ##### This repo contains an example Cloud Composer workflow that triggers Cloud Dataflow to transform, enrich and load a delimited text file into Cloud BigQuery. The goal of this example is to provide a common pattern to automatically trigger, via Google Cloud Function, a Dataflow job when a file arrives in Google Cloud Storage, process the data and load it into BigQuery. -### Workflow Overview +### Workflow Overview *** @@ -90,7 +90,7 @@ The following high-level steps describe the setup needed to run this example: 8. Upload the Python Dataflow code [process_delimited.py](dataflow/process_delimited.py) into a *dataflow* folder created in the base DAG folder. 9. Finally follow [these](https://cloud.google.com/composer/docs/how-to/using/triggering-with-gcf) instructions to create a Cloud Function. - Ensure that the **DAG_NAME** property is set to _**GcsToBigQueryTriggered**_ i.e. The DAG name defined in [simple_load_dag.py](simple_load_dag.py). - + *** ##### Triggering the workflow diff --git a/examples/cloud-composer-examples/composer_http_post_example/README.md b/examples/cloud-composer-examples/composer_http_post_example/README.md index 41c4512d72..b921d34deb 100644 --- a/examples/cloud-composer-examples/composer_http_post_example/README.md +++ b/examples/cloud-composer-examples/composer_http_post_example/README.md @@ -1,5 +1,5 @@ ## Cloud Composer: Ephemeral Dataproc Cluster for Spark Job -### Workflow Overview +### Workflow Overview *** @@ -9,11 +9,11 @@ An HTTP POST to the airflow endpoint from an on-prem system is used as a trigger to initiate the workflow. At a high level the Cloud Composer workflow performs the following steps: -1. Extracts some metadata from the HTTP POST that triggered the workflow. -1. Spins up a Dataproc Cluster. +1. Extracts some metadata from the HTTP POST that triggered the workflow. +1. Spins up a Dataproc Cluster. 1. Submits a Spark job that performs the following: - * Reads newline delimited json data generated by an export from the [nyc-tlc:yellow.trips public - BigQuery table](https://bigquery.cloud.google.com/table/nyc-tlc:yellow.trips?pli=1). + * Reads newline delimited json data generated by an export from the [nyc-tlc:yellow.trips public + BigQuery table](https://bigquery.cloud.google.com/table/nyc-tlc:yellow.trips?pli=1). * Enhances the data with an average_speed column. * Writes the enhanced data as in CSV format to a temporary location in Google Cloud storage. 1. Tear down the Dataproc Cluster Load these files to BigQuery. @@ -25,10 +25,10 @@ When there is an HTTP POST to the airflow endpoint it should contain a paylaod o payload = { 'run_id': 'post-triggered-run-%s' % datetime.now().strftime('%Y%m%d%H%M%s'), 'conf': "{'raw_path': raw_path, 'transformed_path': transformed_path}" - + } ``` -Where raw_path is a timestamped path to the existing raw files in gcs in newline delimited json format and +Where raw_path is a timestamped path to the existing raw files in gcs in newline delimited json format and transformed path is a path with matching time stamp to stage the enhanced file before loading to BigQuery. @@ -54,7 +54,7 @@ virtualenv composer-env source composer-env/bin/activate ``` The POST will need to be authenticated with [Identity Aware Proxy](https://cloud.google.com/iap/docs/). -We reccomend doing this by copying the latest version of [make_iap_request.py](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/iap/make_iap_request.py) +We reccomend doing this by copying the latest version of [make_iap_request.py](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/iap/make_iap_request.py) from the Google Cloud python-docs-samples repo and using the provided [dag_trigger.py](dag_trigger.py). ```bash pip install -r ~/professional-services/examples/cloud-composer-examples/requirements.txt @@ -108,7 +108,7 @@ gcloud beta composer environments create demo-ephemeral-dataproc \ --location us-central1 \ --zone us-central1-b \ --machine-type n1-standard-2 \ - --disk-size 20 + --disk-size 20 # Set Airflow Variables in the Composer Environment we just created. gcloud composer environments run \ @@ -132,7 +132,7 @@ gcloud composer environments run demo-ephemeral-dataproc \ 7. Upload the PySpark code [spark_avg_speed.py](composer_http_examples/spark_avg_speed.py) into a *spark-jobs* folder in GCS. ```bash gsutil cp ~/professional-services/examples/cloud-composer-examples/composer_http_post_example/spark_avg_speed.py gs://$PROJECT/spark-jobs/ -``` +``` 8. The DAG folder is essentially a Cloud Storage bucket. Upload the [ephemeral_dataproc_spark_dag.py](composer_http_examples/ephemeral_dataproc_spark_dag.py) file into the folder: @@ -148,7 +148,7 @@ You will need to create a service account with the necessary permissions to crea ```bash gcloud iam service-accounts create dag-trigger -# Give service account permissions to create tokens for +# Give service account permissions to create tokens for # iap requests. gcloud projects add-iam-policy-binding $PROJECT \ --member \ @@ -185,8 +185,8 @@ The airflow webserver can be found once your composer environment is set up by c ![Alt text](../img/airflow-ui.png "Screen Shot showing how to get the airflow URL") -In oder to obtain your `--iapClientId` -Visit the Airflow URL https://YOUR_UNIQUE_ID.appspot.com (which you noted in the last step) in an incognito window, *don't* authenticate or login, and first landing page for IAP Auth has client Id in the url in the address bar: +In oder to obtain your `--iapClientId` +Visit the Airflow URL https://YOUR_UNIQUE_ID.appspot.com (which you noted in the last step) in an incognito window, *don't* authenticate or login, and first landing page for IAP Auth has client Id in the url in the address bar: https://accounts.google.com/signin/oauth/identifier?**client_id=00000000000-xxxx0x0xx0xx00xxxx0x00xxx0xxxxx.apps.googleusercontent.com**&as=a6VGEPwFpCL1qIwusi49IQ&destination=https%3A%2F%2Fh0b798498b93687a6-tp.appspot.com&approval_state=!ChRKSmd1TVc1VlQzMDB3MHI2UGI4SxIfWXhaRjJLcWdwcndRVUU3MWpGWk5XazFEbUp6N05SWQ%E2%88%99AB8iHBUAAAAAWvsaqTGCmRazWx9NqQtnYVOllz0r2x_i&xsrfsig=AHgIfE_o0kxXt6N3ch1JH4Fb19CB7wdbMg&flowName=GeneralOAuthFlow *** diff --git a/examples/cloud-composer-examples/run_tests.sh b/examples/cloud-composer-examples/run_tests.sh index b9a819837b..15b0c0d2ae 100755 --- a/examples/cloud-composer-examples/run_tests.sh +++ b/examples/cloud-composer-examples/run_tests.sh @@ -36,7 +36,7 @@ function setup_local_airflow() { FERNET_KEY=$(python3 -c "from cryptography.fernet import Fernet; \ print(Fernet.generate_key().decode('utf-8'))") export FERNET_KEY - + get_conns echo "uploading connections." @@ -50,7 +50,7 @@ function setup_local_airflow() { echo "imported airflow vaiables:" airflow variables --export /tmp/AirflowVariables.json.exported cat /tmp/AirflowVariables.json.exported - + echo "setting up DAGs." rsync -r dags $AIRFLOW_HOME @@ -75,7 +75,7 @@ function set_local_conn() { echo "Upload $1 to local Airflow failed" } -# Run DAG validation tests. +# Run DAG validation tests. function run_tests() { python3 -m unittest discover tests } diff --git a/examples/cloud-composer-examples/tests/test_spark_avg_speed.py b/examples/cloud-composer-examples/tests/test_spark_avg_speed.py index 8c1e65dcf8..439de7cbcc 100644 --- a/examples/cloud-composer-examples/tests/test_spark_avg_speed.py +++ b/examples/cloud-composer-examples/tests/test_spark_avg_speed.py @@ -224,7 +224,7 @@ def test_enhance_with_average_speed(self): u"store_and_fwd_flag": u"N", u"average_speed": 18.523489932885905 }) - + actual_enhancement = self.average_speed_enhancer.enhance_with_avg_speed(example_record) self.assertEqual(actual_enhancement, expected_enhancement) diff --git a/examples/cloudml-bank-marketing/bank_marketing_classification_model.ipynb b/examples/cloudml-bank-marketing/bank_marketing_classification_model.ipynb index 9fc8c925bb..b11aba6083 100644 --- a/examples/cloudml-bank-marketing/bank_marketing_classification_model.ipynb +++ b/examples/cloudml-bank-marketing/bank_marketing_classification_model.ipynb @@ -1704,7 +1704,7 @@ ] }, { - "cell_type": "code", + "cell_type": "code", "execution_count": null, "metadata": { "colab": {}, diff --git a/examples/cloudml-bee-health-detection/README.md b/examples/cloudml-bee-health-detection/README.md index 3fbd3a5ae7..e510512c76 100644 --- a/examples/cloudml-bee-health-detection/README.md +++ b/examples/cloudml-bee-health-detection/README.md @@ -1,8 +1,8 @@ # Bee Health Detection Example -This repository contains example code detect if a bee is healthy. Specifically, given a picture and structured attributes about a bee, it predicts if the bee is healthy. +This repository contains example code detect if a bee is healthy. Specifically, given a picture and structured attributes about a bee, it predicts if the bee is healthy. -The code leverages pre-trained TF Hub image modules and uses Google Cloud Machine Learning Engine to train a TensorFlow DNN classification model. +The code leverages pre-trained TF Hub image modules and uses Google Cloud Machine Learning Engine to train a TensorFlow DNN classification model. ## Default values ``` diff --git a/examples/cloudml-bee-health-detection/trainer/model.py b/examples/cloudml-bee-health-detection/trainer/model.py index 8a86ea2e9e..f80266a450 100644 --- a/examples/cloudml-bee-health-detection/trainer/model.py +++ b/examples/cloudml-bee-health-detection/trainer/model.py @@ -97,4 +97,3 @@ def create_classifier(config, parameters): estimator, _estimator_metrics) estimator = tf.contrib.estimator.forward_features(estimator, 'img_file') return estimator - \ No newline at end of file diff --git a/examples/cloudml-churn-prediction/README.md b/examples/cloudml-churn-prediction/README.md index c5c244a2ff..6e12fe961c 100644 --- a/examples/cloudml-churn-prediction/README.md +++ b/examples/cloudml-churn-prediction/README.md @@ -4,16 +4,16 @@ This model uses Survival Analysis to classify customers into time-to-churn bucke The same methodology can be used used to predict customers' total lifetime from their "birth" (intital signup, or t = 0) and from the current state (t > 0). ## Why is Survival Analysis Helpful for Churn Prediction? -Survival Analysis is used to predict the time-to-event, when the event in question has not necessarily occurred yet. In this case, the event is a customer churning. - +Survival Analysis is used to predict the time-to-event, when the event in question has not necessarily occurred yet. In this case, the event is a customer churning. + If a customer is still active, or is "censored" using Survival Analysis terminology, we do not know their final lifetime or when they will churn. If we assume that the customer's lifetime ended at the time of prediction (or training), the results will be biased (underestimating lifetime). Throwing out active users will also bias results through information loss. - -By using a Survival Analysis approach to churn prediction, the entire population (regardless of current tenure or status) can be included. + +By using a Survival Analysis approach to churn prediction, the entire population (regardless of current tenure or status) can be included. ## Dataset -This example uses the public [Google Analytics Sample Dataset](https://support.google.com/analytics/answer/7586738?hl=en) on BigQuery and artificially generated subscription start and end dates as input. +This example uses the public [Google Analytics Sample Dataset](https://support.google.com/analytics/answer/7586738?hl=en) on BigQuery and artificially generated subscription start and end dates as input. -To create a churn model with real data, omit the 'Generate Data' step in the Beam pipeline in preprocessor/preprocessor/preprocess.py. Instead of randomly generating values, the BigQuery results should include the following fields: start_date, end_date, and active. These values correspond to the user's subscription lifetime and their censorship status. +To create a churn model with real data, omit the 'Generate Data' step in the Beam pipeline in preprocessor/preprocessor/preprocess.py. Instead of randomly generating values, the BigQuery results should include the following fields: start_date, end_date, and active. These values correspond to the user's subscription lifetime and their censorship status. ## Setup ### Set up GCP credentials @@ -24,20 +24,20 @@ gcloud auth application-default login ### Set up Python environment ```shell -virtualenv venv +virtualenv venv source ./venv/bin/activate pip install -r requirements.txt ``` ## Preprocessing -Using Dataflow, the data preprocessing script reads user data from BigQuery, generates random (fake) time-to-churn labels, creates TFRecords, and adds them to Google Cloud Storage. +Using Dataflow, the data preprocessing script reads user data from BigQuery, generates random (fake) time-to-churn labels, creates TFRecords, and adds them to Google Cloud Storage. Each record should have three labels before preprocessing: 1. **active**: indicator for censorship. It is 0 if user is inactive (uncensored) and 1 if the user is active (censored). 2. **start_date**: Date when user began their lifetime. -3. **end_date**: Date when user ends their lifetime. It is None if the user is still active. -`_generateFakeData` randomly generates these three fields in order to create fake sample data. In practice, these fields should be available in some form in the historical data. +3. **end_date**: Date when user ends their lifetime. It is None if the user is still active. +`_generateFakeData` randomly generates these three fields in order to create fake sample data. In practice, these fields should be available in some form in the historical data. During preprocessing, the aforementioned fields are combined into a single `2*n-dimensional indicator array`, where n is the number of bounded lifetime buckets (i.e. n = 2 for 0-2 months, 2-3 months, 3+ months): + indicator array = [survival array | failure array] @@ -77,15 +77,15 @@ python -m run_preprocessing \ cd .. ``` - - + + ## Model Training Model training minimizes the negative of the log likelihood function for a statistical Survival Analysis model with discrete-time intervals. The loss function is based off the paper [A scalable discrete-time survival model for neural networks](https://peerj.com/articles/6257.pdf). For each record, the conditional hazard probability is the probability of failure in an interval, given that individual has survived at least to the beginning of the interval. Therefore, the probability that a user survives the given interval, or the likelihood, is the product of (1 - hazard) for all of the earlier (and current) intervals. - + So, the log likelihood is: ln(current hazard) + sum(ln(1 - earlier hazards)) summed over all time intervals. Equivalently, each individual's log likelihood is: `ln(1 - (1 if survived 0 if not)*(Prob of failure)) + ln(1 - (1 if failed 0 if not)*(Prob of survival))` summed over all time intervals. - + ### Set Constants The TFRecord output of the preprocessing job should be used as input to the training job. @@ -95,7 +95,7 @@ Make sure to navigate back to the top-level directory. INPUT_DIR="${OUTPUT_DIR}" MODEL_DIR="${BUCKET}/model/$(date +%Y%m%d%H%M%S)" ``` - + ### Train locally with AI Platform ```shell gcloud ai-platform local train \ @@ -105,7 +105,7 @@ gcloud ai-platform local train \ -- \ --input-dir "${INPUT_DIR}" ``` - + ### Train on the Cloud with AI Platform ```shell JOB_NAME="train_$(date +%Y%m%d%H%M%S)" @@ -121,7 +121,7 @@ gcloud ai-platform jobs submit training ${JOB_NAME} \ -- \ --input-dir ${INPUT_DIR} ``` - + ### Hyperparameter Tuning with AI Platform ```shell JOB_NAME="hptuning_$(date +%Y%m%d%H%M%S)" @@ -136,19 +136,19 @@ gcloud ai-platform jobs submit training ${JOB_NAME} \ -- \ --input-dir ${INPUT_DIR} ``` - + ### Launch Tensorboard ```shell tensorboard --logdir ${MODEL_DIR} ``` - + ## Predictions The model predicts the conditional likelihood that a user survived an interval given that the user reached the interval. It outputs an n-dimensional vector, where each element corresponds to predicted conditional probability of surviving through end of time interval (1 - hazard). - + In order to determine the predicted class, the cumulative product of the conditional probabilities must be compared to some threshold. - + ### Deploy model on AI Platform -The SavedModel was saved in a timestamped subdirectory of model_dir. +The SavedModel was saved in a timestamped subdirectory of model_dir. ```shell MODEL_NAME="survival_model" VERSION_NAME="demo_version" diff --git a/examples/cloudml-churn-prediction/trainer/config.yaml b/examples/cloudml-churn-prediction/trainer/config.yaml index 3782898902..c0f1356aad 100644 --- a/examples/cloudml-churn-prediction/trainer/config.yaml +++ b/examples/cloudml-churn-prediction/trainer/config.yaml @@ -1,3 +1,2 @@ trainingInput: scaleTier: STANDARD_1 - \ No newline at end of file diff --git a/examples/cloudml-churn-prediction/trainer/hptuning_config.yaml b/examples/cloudml-churn-prediction/trainer/hptuning_config.yaml index 71fb9d173d..908529bb5b 100644 --- a/examples/cloudml-churn-prediction/trainer/hptuning_config.yaml +++ b/examples/cloudml-churn-prediction/trainer/hptuning_config.yaml @@ -40,4 +40,3 @@ trainingInput: minValue: 0.0001 maxValue: 0.5 scaleType: UNIT_LINEAR_SCALE - \ No newline at end of file diff --git a/examples/cloudml-collaborative-filtering/README.md b/examples/cloudml-collaborative-filtering/README.md index 96b3b63cb2..6dfe16755a 100644 --- a/examples/cloudml-collaborative-filtering/README.md +++ b/examples/cloudml-collaborative-filtering/README.md @@ -3,7 +3,7 @@ A simple machine learning system capable of recommending songs given a user as a using collaborative filtering and TensorFlow. Unlike classic matrix factorization approaches, using a neural network allows -user and item features to be included during training. +user and item features to be included during training. This example covers how distributed data preprocessing, training, and serving can be done on [Google Cloud Platform](https://cloud.google.com/)(GCP). diff --git a/examples/cloudml-collaborative-filtering/bin/run.train.tune.sh b/examples/cloudml-collaborative-filtering/bin/run.train.tune.sh index 196473ac2a..ee9c0008b7 100755 --- a/examples/cloudml-collaborative-filtering/bin/run.train.tune.sh +++ b/examples/cloudml-collaborative-filtering/bin/run.train.tune.sh @@ -44,6 +44,6 @@ gcloud ai-platform jobs submit training "${TRAINING_JOB_NAME}" \ --model_dir "${MODEL_PATH}" \ --input_dir "${INPUT_PATH}" \ --tft_dir "${TFT_PATH}" \ - --max_steps 100000 + --max_steps 100000 echo "Upon completion, serve the model by running: bin/run.serve.sh ${NOW}" diff --git a/examples/cloudml-collaborative-filtering/preprocessing/query.py b/examples/cloudml-collaborative-filtering/preprocessing/query.py index 1317373fff..787734df0d 100644 --- a/examples/cloudml-collaborative-filtering/preprocessing/query.py +++ b/examples/cloudml-collaborative-filtering/preprocessing/query.py @@ -84,8 +84,8 @@ GROUP BY song ) SELECT user, song, artist, tags, albums, user_tags, - IF(user_song_listens > 2, - SQRT(user_song_listens/user_max_listen), + IF(user_song_listens > 2, + SQRT(user_song_listens/user_max_listen), 1/user_song_listens) AS weight, IF(user_song_listens > 2, 1, 0) as label FROM user_songs diff --git a/examples/cloudml-collaborative-filtering/trainer/hptuning_config.yaml b/examples/cloudml-collaborative-filtering/trainer/hptuning_config.yaml index 93716a012b..7c726ac049 100644 --- a/examples/cloudml-collaborative-filtering/trainer/hptuning_config.yaml +++ b/examples/cloudml-collaborative-filtering/trainer/hptuning_config.yaml @@ -4,7 +4,7 @@ trainingInput: maxTrials: 10 maxParallelTrials: 2 enableTrialEarlyStopping: True - goal: MAXIMIZE + goal: MAXIMIZE hyperparameterMetricTag: recall/recall_10 params: - parameterName: num_layers diff --git a/examples/cloudml-energy-price-forecasting/README.md b/examples/cloudml-energy-price-forecasting/README.md index b31c05951a..1279139de7 100644 --- a/examples/cloudml-energy-price-forecasting/README.md +++ b/examples/cloudml-energy-price-forecasting/README.md @@ -1,14 +1,14 @@ # Energy Price Forecasting Example -This repository contains example code to forecast energy prices. Specifically, given a historical time series of hourly spot prices and weather, it predicts future hourly spot prices multiple days into the future. +This repository contains example code to forecast energy prices. Specifically, given a historical time series of hourly spot prices and weather, it predicts future hourly spot prices multiple days into the future. -The code takes in raw data from BigQuery, transforms and prepares the data, uses Google Cloud Machine Learning Engine to train a TensorFlow DNN regression model on historical spot prices, and then makes predictions of future spot prices using the model. +The code takes in raw data from BigQuery, transforms and prepares the data, uses Google Cloud Machine Learning Engine to train a TensorFlow DNN regression model on historical spot prices, and then makes predictions of future spot prices using the model. # Data preparation instructions -1. Raw data for this problem is publicly available in BigQuery in the following tables: +1. Raw data for this problem is publicly available in BigQuery in the following tables: -* `dpe-cloud-mle.Energy.MarketPricePT` - Historical hourly energy prices. +* `dpe-cloud-mle.Energy.MarketPricePT` - Historical hourly energy prices. * `dpe-cloud-mle.Energy.historical_weather` - Historical hourly weather forecasts. Disclaimer: The data for both tables was downloaded from http://complatt.smartwatt.net/. This website hosts a closed competition meant to solve the energy price forecasting problem. The data was not collected or vetted by Google LLC and hence, we can't guarantee the veracity or qualitty of it. diff --git a/examples/cloudml-energy-price-forecasting/data_preparation/data_prep.py b/examples/cloudml-energy-price-forecasting/data_preparation/data_prep.py index 9952e511fe..6dc1fb038c 100644 --- a/examples/cloudml-energy-price-forecasting/data_preparation/data_prep.py +++ b/examples/cloudml-energy-price-forecasting/data_preparation/data_prep.py @@ -36,10 +36,10 @@ def initialise_params(): """Parses all arguments and assigns default values when missing. - + Convert argument strings to objects and assign them as attributes of the namespace. - + Returns: An object containing all the parsed arguments for script to use. """ diff --git a/examples/cloudml-energy-price-forecasting/trainer/task.py b/examples/cloudml-energy-price-forecasting/trainer/task.py index 16dfc54641..de17362ac4 100644 --- a/examples/cloudml-energy-price-forecasting/trainer/task.py +++ b/examples/cloudml-energy-price-forecasting/trainer/task.py @@ -34,10 +34,10 @@ def initialise_params(): """Parses all arguments and assigns default values when missing. - + Convert argument strings to objects and assign them as attributes of the namespace. - + Returns: An object containing all the parsed arguments for script to use. """ diff --git a/examples/cloudml-sklearn-pipeline/README.md b/examples/cloudml-sklearn-pipeline/README.md index b0db224b8f..668a0f0017 100644 --- a/examples/cloudml-sklearn-pipeline/README.md +++ b/examples/cloudml-sklearn-pipeline/README.md @@ -1,7 +1,7 @@ # Scikit-learn pipeline trainer for AI Platform -This is a example for building a scikit-learn-based machine learning pipeline trainer -that can be run on AI Platform, which is built on top of the [scikit-learn template](https://github.com/GoogleCloudPlatform/cloudml-samples/tree/master/sklearn/sklearn-template/template). +This is a example for building a scikit-learn-based machine learning pipeline trainer +that can be run on AI Platform, which is built on top of the [scikit-learn template](https://github.com/GoogleCloudPlatform/cloudml-samples/tree/master/sklearn/sklearn-template/template). The pipeline can be trained locally or remotely on AI platform. The trained model can be further deployed on AI platform to serve online traffic. The entire pipeline includes three major components: @@ -17,21 +17,21 @@ this example has the following additional feature: 3. Support additional custome transformation logics besides typical pre-processing provided by scikit-learn Google Cloud tools used: -- [Google Cloud Platform](https://cloud.google.com/) (GCP) lets you build and -host applications and websites, store data, and analyze data on Google's +- [Google Cloud Platform](https://cloud.google.com/) (GCP) lets you build and +host applications and websites, store data, and analyze data on Google's scalable infrastructure. -- [Cloud ML Engine](https://cloud.google.com/ml-engine/) is a managed service -that enables you to easily build machine learning models that work on any type -of data, of any size. This is now part of +- [Cloud ML Engine](https://cloud.google.com/ml-engine/) is a managed service +that enables you to easily build machine learning models that work on any type +of data, of any size. This is now part of [AI Platform](https://cloud.google.com/ai-platform/). -- [Google Cloud Storage](https://cloud.google.com/storage/) (GCS) is a unified -object storage for developers and enterprises, from live data serving to data +- [Google Cloud Storage](https://cloud.google.com/storage/) (GCS) is a unified +object storage for developers and enterprises, from live data serving to data analytics/ML to data archiving. -- [Cloud SDK](https://cloud.google.com/sdk/) is a set of tools for Google Cloud -Platform, which contains e.g. gcloud, gsutil, and bq command-line tools to +- [Cloud SDK](https://cloud.google.com/sdk/) is a set of tools for Google Cloud +Platform, which contains e.g. gcloud, gsutil, and bq command-line tools to interact with Google Cloud products and services. -- [Google BigQuery](https://cloud.google.com/bigquery/) A fast, highly scalable, -cost-effective, and fully managed cloud data warehouse for analytics, with even +- [Google BigQuery](https://cloud.google.com/bigquery/) A fast, highly scalable, +cost-effective, and fully managed cloud data warehouse for analytics, with even built-in machine learning. ## Pipeline overview @@ -43,10 +43,10 @@ The overall flow of the pipeline can be summarized as follows and illustrated in ## Repository structure ``` -template +template |__ config |__ config.yaml # for running normal training job on AI Platform - |__ hptuning_config.yaml # for running hyperparameter tunning job on AI Platform + |__ hptuning_config.yaml # for running hyperparameter tunning job on AI Platform |__ scripts |__ train.sh # convenience script for running machine learning training jobs |__ deploy.sh # convenience script for deploying trained scikit-learn model @@ -56,12 +56,12 @@ template |__ util # utility functions |__ utils.py # utility functions including e.g. loading data from bigquery and cloud storage |__ preprocess_utils.py # utility functions for constructing preprocessing pipeline - |__ transform_utils.py # utility functions for constructing transform pipeline + |__ transform_utils.py # utility functions for constructing transform pipeline |__ metadata.py # dataset metadata and feature columns definitions |__ constants.py # constants used in the project |__ model.py # pre-processing and machine learning model pipeline definition |__ task.py # training job entry point, handling the parameters passed from command line - |__ transform_config.py # configuration for transform pipeline construction" + |__ transform_config.py # configuration for transform pipeline construction" |__ predictor.py # define custom prediction behavior |__ setup.py # specify necessary dependency for running job on AI Platform |__ requirements.txt # specify necessary dependency, helper for setup environemnt for local development @@ -69,8 +69,8 @@ template ## Using the template ### Step 0. Prerequisites -Before you follow the instructions below to adapt the tempate to your machine learning job, -you need a Google cloud project if you don't have one. You can find detailed instructions +Before you follow the instructions below to adapt the tempate to your machine learning job, +you need a Google cloud project if you don't have one. You can find detailed instructions [here](https://cloud.google.com/dataproc/docs/guides/setup-project). - Make sure the following API & Services are enabled. @@ -85,14 +85,14 @@ you need a Google cloud project if you don't have one. You can find detailed ins $ export PROJECT_ID=[your-google-project-id] $ export BUCKET_ID=[your-google-cloud-storage-bucket-name] ``` - -- Set up a service account for calls to GCP APIs. - More information on setting up a service account can be found + +- Set up a service account for calls to GCP APIs. + More information on setting up a service account can be found [here](https://cloud.google.com/docs/authentication/getting-started). - + ### Step 1. Tailor the scikit-learn trainer to your data -`metadata.py` is where the dataset's metadata is defined. -By default, the file is configured to train on the Census dataset, which can be found at +`metadata.py` is where the dataset's metadata is defined. +By default, the file is configured to train on the Census dataset, which can be found at [`bigquery-public-data.ml_datasets.census_adult_income`](https://bigquery.cloud.google.com/table/bigquery-public-data:ml_datasets.census_adult_income). ```python @@ -122,7 +122,7 @@ LABEL = 'income_bracket' PROBLEM_TYPE = 'classification' # 'regression' or 'classification' ``` -In most cases, only the following items need to be modified, in order to adapt to the target dataset. +In most cases, only the following items need to be modified, in order to adapt to the target dataset. - **COLUMNS**: the schema of ths data, only required for data stored in GCS - **NUMERIC_FEATURES**: columns those will be treated as numerical features - **CATEGORICAL_FEATURES**: columns those will be treated as categorical features @@ -132,7 +132,7 @@ In most cases, only the following items need to be modified, in order to adapt t `transform_config.py` is where the logic of generating new features out of raw dataset is defined. There are two parts need to be provided for each new feature generating logic: -* User defined function that handle the generation of new feature. There would be four cases in terms of the +* User defined function that handle the generation of new feature. There would be four cases in terms of the combinations of the dimensions of input and output as listed below: * ()->(): scalar to scalar * (n) -> (): multi-inputs to scalar @@ -168,9 +168,9 @@ entire pipeline, an additional entry need to be added to `TRANSFORM_CONFIG` with * input_columns: name of columns needed for as inputs to the transform function * process_functions: transform function * output_columns: names assigned to the output columns, data type indicator (N: for numerical, C: for categorical) - + The example below is the counter part of the user defined function in previous section. - + ```python # this is an example for generating new categorical feature using single # column from the raw data @@ -196,12 +196,12 @@ one since Python 2.7 is [deprecated](https://pythonclock.org/) soon. trainingInput: scaleTier: STANDARD_1 # Machine type runtimeVersion: "1.13" # Scikit-learn version - # Note that both Python 2.7 and Python 3.5 are supported, but Python 3.5 is the + # Note that both Python 2.7 and Python 3.5 are supported, but Python 3.5 is the # recommended one since 2.7 is deprecated soon - pythonVersion: "3.5" + pythonVersion: "3.5" ``` -More information on supported runtime version can be found +More information on supported runtime version can be found [here](https://cloud.google.com/ml-engine/docs/tensorflow/runtime-version-list). ### Step 4. Submit scikit-learn training job @@ -236,14 +236,14 @@ where: - VERSION_NAME: Version of the model to be deployed. - MODEL_DIR: Path to directory containing trained and exported scikit-learn model. -**Note**: Please make sure the following parameters are properly set in deploy.sh +**Note**: Please make sure the following parameters are properly set in deploy.sh ```shell REGION=us-central1 # The following two parameters should be aligned with those used during # training job, i.e., specified in the yaml files under config/ RUN_TIME=1.13 -# Note that both Python 2.7 and Python 3.5 are supported, +# Note that both Python 2.7 and Python 3.5 are supported, # but Python 3.5 is the recommended one since 2.7 is deprecated soon PYTHON_VERSION=3.5 ``` @@ -251,8 +251,8 @@ PYTHON_VERSION=3.5 ### Step 6. Run predictions using the deployed model After the model is successfully deployed, you can send small samples of new data to the API associated with the model, -and it would return predictions in the response. -There are two helper scripts available, `predict.sh` and `predict.py`, which use gcloud and Python API for +and it would return predictions in the response. +There are two helper scripts available, `predict.sh` and `predict.py`, which use gcloud and Python API for requesting predictions respectively. ```shell @@ -261,8 +261,8 @@ bash scripts/predict.sh [INPUT_DATA_FILE] [MODEL_NAME] [VERSION_NAME] where: -- INPUT_DATA_FILE: Path to sample file contained data in line-delimited JSON format. - See `sample_data/sample_list.txt` or `sample_data/sample_json.txt` for an example. More information can be found +- INPUT_DATA_FILE: Path to sample file contained data in line-delimited JSON format. + See `sample_data/sample_list.txt` or `sample_data/sample_json.txt` for an example. More information can be found [here](https://cloud.google.com/ml-engine/docs/scikit/online-predict#formatting_instances_as_lists). - MODEL_NAME: Name of the deployed model to use. - VERSION_NAME: Version of the deployed model to use. diff --git a/examples/cloudsql-custom-metric/Dockerfile b/examples/cloudsql-custom-metric/Dockerfile index b8fade7f1b..149f657e31 100644 --- a/examples/cloudsql-custom-metric/Dockerfile +++ b/examples/cloudsql-custom-metric/Dockerfile @@ -17,8 +17,8 @@ # libraries. The source is on github at: # https://github.com/GoogleCloudPlatform/python-docker -# This code is a prototype and not engineered for production use. -# Error handling is incomplete or inappropriate for usage beyond +# This code is a prototype and not engineered for production use. +# Error handling is incomplete or inappropriate for usage beyond # a development sample. FROM gcr.io/google-appengine/python @@ -33,4 +33,4 @@ RUN pip install -r /app/requirements.txt ADD . /app -ENTRYPOINT [ "python", "main.py" ] +ENTRYPOINT [ "python", "main.py" ] diff --git a/examples/cloudsql-custom-metric/README.md b/examples/cloudsql-custom-metric/README.md index b608025eb3..3b2bd69ee9 100644 --- a/examples/cloudsql-custom-metric/README.md +++ b/examples/cloudsql-custom-metric/README.md @@ -3,7 +3,7 @@ This example demonstrates how to create a custom metric for Stackdriver Monitori estimates the number of IP's consumed in a CloudSQL private services subnet. ![Cloud SQL Metric Architecture](images/CloudSQL_Metric.png) ## Component Description -A Stackdriver log sink at the organization level populates BigQuery with logs when a CloudSQL +A Stackdriver log sink at the organization level populates BigQuery with logs when a CloudSQL instance is created or deleted. The metric app periodically querries BigQuery to determine which projects have CloudSQL instances with private networks. This means the app can avoid polling the organization for a list of projects then iterating over each project to determine @@ -16,7 +16,7 @@ organization and a count is calculated. This information is then converted to a StackDriver Monitoring TimeSeries which is fed to the StackDriver Monitoring API. ## Caveats -This code is a prototype and not engineered for production use. Error handling +This code is a prototype and not engineered for production use. Error handling is incomplete or inappropriate for usage beyond a development sample. ## Pre-Requisites diff --git a/examples/cryptorealtime/README.md b/examples/cryptorealtime/README.md index 94cf8ab7a8..15e9c5575c 100644 --- a/examples/cryptorealtime/README.md +++ b/examples/cryptorealtime/README.md @@ -2,7 +2,7 @@ ## A Google Cloud Dataflow/Cloud Bigtable Websockets example -The last year has been like a roller coaster for the cryptocurrency market. At the end of 2017, the value of bitcoin (BTC) almost reached $20,000 USD, only to fall below $4,000 USD a few months later. What if there is a pattern in the high volatility of the cryptocurrencies market? If so, can we learn from it and get an edge on future trends? Is there a way to observe all exchanges in real time and visualize it on a single chart? +The last year has been like a roller coaster for the cryptocurrency market. At the end of 2017, the value of bitcoin (BTC) almost reached $20,000 USD, only to fall below $4,000 USD a few months later. What if there is a pattern in the high volatility of the cryptocurrencies market? If so, can we learn from it and get an edge on future trends? Is there a way to observe all exchanges in real time and visualize it on a single chart? In this tutorial we will graph the trades, volume and time delta from trade execution until it reaches our system (an indicator of how close to real time we can get the data). @@ -13,10 +13,10 @@ In this tutorial we will graph the trades, volume and time delta from trade exec [Terraform - get this up and running in less than 5 minutes](https://github.com/galic1987/professional-services/blob/master/examples/cryptorealtime/TERRAFORM-README.md) -## Architecture +## Architecture ![Cryptorealtime Cloud Architecture overview](https://i.ibb.co/dMc9bMz/Screen-Shot-2019-02-11-at-4-56-29-PM.png) -## Frontend +## Frontend ![Cryptorealtime Cloud Fronted overview](https://i.ibb.co/2S28KYq/Screen-Shot-2019-02-12-at-2-53-41-PM.png) ## Costs @@ -28,7 +28,7 @@ This tutorial uses billable components of GCP, including: We recommend to clean up the project after finishing this tutorial to avoid costs. Use the [Pricing Calculator](https://cloud.google.com/products/calculator/) to generate a cost estimate based on your projected usage. -## Project setup +## Project setup ### Install the Google Cloud Platform SDK on a new VM * Log into the console, and activate a cloud console session * Create a new VM @@ -45,12 +45,12 @@ gcloud beta compute instances create crypto-driver \ ``` - * SSH into that VM + * SSH into that VM ```console gcloud compute ssh --zone=us-central1-a crypto-driver ``` - + * Installing necessary tools like java, git, maven, pip, python and Cloud Bigtable command line tool cbt using the following command: ```console sudo -s @@ -60,17 +60,17 @@ gcloud beta compute instances create crypto-driver \ sudo pip3 install virtualenv virtualenv -p python3 venv source venv/bin/activate - sudo apt -y --allow-downgrades install openjdk-8-jdk git maven google-cloud-sdk=271.0.0-0 google-cloud-sdk-cbt=271.0.0-0 + sudo apt -y --allow-downgrades install openjdk-8-jdk git maven google-cloud-sdk=271.0.0-0 google-cloud-sdk-cbt=271.0.0-0 ``` -### Create a Google Cloud Bigtable instance +### Create a Google Cloud Bigtable instance ```console export PROJECT=$(gcloud info --format='value(config.project)') export ZONE=$(curl "http://metadata.google.internal/computeMetadata/v1/instance/zone" -H "Metadata-Flavor: Google"|cut -d/ -f4) gcloud services enable bigtable.googleapis.com \ bigtableadmin.googleapis.com \ -dataflow.googleapis.com +dataflow.googleapis.com gcloud bigtable instances create cryptorealtime \ --cluster=cryptorealtime-c1 \ @@ -81,39 +81,39 @@ gcloud bigtable instances create cryptorealtime \ cbt -instance=cryptorealtime createtable cryptorealtime families=market ``` -### Create a Bucket -```console +### Create a Bucket +```console gsutil mb -p ${PROJECT} gs://realtimecrypto-${PROJECT} ``` ### Create firewall for visualization server on port 5000 -```console +```console gcloud compute firewall-rules create crypto-dashboard --action=ALLOW --rules=tcp:5000 --source-ranges=0.0.0.0/0 --target-tags=crypto-console --description="Open port 5000 for crypto visualization tutorial" - + gcloud compute instances add-tags crypto-driver --tags="crypto-console" --zone=${ZONE} ``` - + ### Clone the repo -```console +```console git clone https://github.com/GoogleCloudPlatform/professional-services ``` ### Build the pipeline -```console +```console cd professional-services/examples/cryptorealtime mvn clean install ``` ### Start the DataFlow pipeline -```console +```console ./run.sh ${PROJECT} \ cryptorealtime gs://realtimecrypto-${PROJECT}/temp \ cryptorealtime market -``` +``` ### Start the Webserver and Visualization -```console +```console cd frontend/ pip install -r requirements.txt python app.py ${PROJECT} cryptorealtime cryptorealtime market @@ -127,7 +127,7 @@ You should be able to see the visualization of aggregated BTC/USD pair on severa # Cleanup * To save on cost we can clean up the pipeline by running the following command -```console +```console gcloud dataflow jobs cancel \ $(gcloud dataflow jobs list \ --format='value(id)' \ @@ -135,18 +135,18 @@ gcloud dataflow jobs cancel \ ``` * Empty and Delete the bucket: -```console +```console gsutil -m rm -r gs://realtimecrypto-${PROJECT}/* gsutil rb gs://realtimecrypto-${PROJECT} ``` * Delete the Cloud Bigtable instance: -```console +```console gcloud bigtable instances delete cryptorealtime ``` * Exit the VM and delete it. -```console +```console gcloud compute instances delete crypto-driver --delete-disks ``` @@ -154,14 +154,14 @@ gcloud dataflow jobs cancel \ 1. After a few minutes, from the shell, -```console +```console cbt -instance= read ``` Should return many rows of crypto trades data that the frontend project will read for it's dashboard. -## External libraries used to connnect to exchanges +## External libraries used to connnect to exchanges https://github.com/bitrich-info/xchange-stream diff --git a/examples/cryptorealtime/TERRAFORM-README.md b/examples/cryptorealtime/TERRAFORM-README.md index cf0bbda19c..438041d602 100644 --- a/examples/cryptorealtime/TERRAFORM-README.md +++ b/examples/cryptorealtime/TERRAFORM-README.md @@ -13,65 +13,65 @@ ### Setup: - Open the Terraform Shell and clone the project -```console +```console git clone https://github.com/GoogleCloudPlatform/professional-services cd professional-services/examples/cryptorealtime/terraform-setup/ ``` - Fill out the [terraform.tfvars](terraform-setup/terraform.tfvars) configuration -```console - vim terraform.tfvars +```console + vim terraform.tfvars ``` -- Check that everything is working -```console +- Check that everything is working +```console terraform init -terraform apply +terraform apply ``` (ignore api enablement errors and/or rerun) -- Wait 5-10 minutes until the VM startup script is booted -- Note: Your public IP address will be displayed here or in console +- Wait 5-10 minutes until the VM startup script is booted +- Note: Your public IP address will be displayed here or in console - SSH into the VM that was [created](https://console.cloud.google.com/compute/instances) -```console -sudo -s +```console +sudo -s cd ~/professional-services/examples/cryptorealtime/ ``` - Verify the variables from terraform are in place: -```console -echo "PROJECT_ID" $PROJECT_ID "REGION" $REGION "ZONE" $ZONE "BUCKET_NAME" $BUCKET_NAME "BUCKET_FOLDER" $BUCKET_FOLDER "BIGTABLE_INSTANCE_NAME" $BIGTABLE_INSTANCE_NAME "BIGTABLE_TABLE_NAME" $BIGTABLE_TABLE_NAME "BIGTABLE_FAMILY_NAME" $BIGTABLE_FAMILY_NAME +```console +echo "PROJECT_ID" $PROJECT_ID "REGION" $REGION "ZONE" $ZONE "BUCKET_NAME" $BUCKET_NAME "BUCKET_FOLDER" $BUCKET_FOLDER "BIGTABLE_INSTANCE_NAME" $BIGTABLE_INSTANCE_NAME "BIGTABLE_TABLE_NAME" $BIGTABLE_TABLE_NAME "BIGTABLE_FAMILY_NAME" $BIGTABLE_FAMILY_NAME ``` - Run the Dataflow job to connect to exchanges -```console +```console ./run.sh ${PROJECT_ID} ${BIGTABLE_INSTANCE_NAME} ${BUCKET_NAME}${BUCKET_FOLDER} ${BIGTABLE_TABLE_NAME} $BIGTABLE_FAMILY_NAME -``` +``` - Ignore any *java.lang.IllegalThreadStateException* - Go to frontend script and run the frontend flask server and data visualisation -```console +```console cd frontend/ python app.py ${PROJECT_ID} ${BIGTABLE_INSTANCE_NAME} ${BIGTABLE_TABLE_NAME} ${BIGTABLE_FAMILY_NAME} ``` -- Open the VM IP on port 5000 in your browser to see the chart +- Open the VM IP on port 5000 in your browser to see the chart **Cleanup:** - Delete the Dataflow jobs -```console +```console gcloud dataflow jobs cancel \ $(gcloud dataflow jobs list \ --format='value(id)' \ --filter="name:runthepipeline*") -``` +``` -- Take down the infrastructure -```console +- Take down the infrastructure +```console terraform destroy ``` diff --git a/examples/cryptorealtime/frontend/README.MD b/examples/cryptorealtime/frontend/README.MD index cb74d149ed..9f21496035 100644 --- a/examples/cryptorealtime/frontend/README.MD +++ b/examples/cryptorealtime/frontend/README.MD @@ -7,17 +7,17 @@ sudo python3 get-pip.py sudo pip3 install virtualenv virtualenv -p python3 venv source venv/bin/activate -sudo apt -y --allow-downgrades install openjdk-8-jdk git maven google-cloud-sdk=271.0.0-0 google-cloud-sdk-cbt=271.0.0-0 +sudo apt -y --allow-downgrades install openjdk-8-jdk git maven google-cloud-sdk=271.0.0-0 google-cloud-sdk-cbt=271.0.0-0 ``` -3) Get dependencies and requirements +3) Get dependencies and requirements cd frontend/ pip install -r requirements.txt --user 4) Run the server (replace the variables with your instance names) python app.py ${PROJECT_ID} ${BIGTABLE_INSTANCE_NAME} ${BIGTABLE_TABLE_NAME} ${BIGTABLE_FAMILY_NAME} -This will get the localhost:5000/stream or externalip:5000/stream running and you will abe to see this +This will get the localhost:5000/stream or externalip:5000/stream running and you will abe to see this ![Real time chart](https://media.giphy.com/media/238teoXcI17pu3YOSP/giphy.gif) diff --git a/examples/cryptorealtime/src/main/java/source/CryptoMarketTradeUnboundedReader.java b/examples/cryptorealtime/src/main/java/source/CryptoMarketTradeUnboundedReader.java index 1c6cdca206..885f6dcd28 100644 --- a/examples/cryptorealtime/src/main/java/source/CryptoMarketTradeUnboundedReader.java +++ b/examples/cryptorealtime/src/main/java/source/CryptoMarketTradeUnboundedReader.java @@ -125,7 +125,7 @@ public boolean start() throws IOException { // signal next batch return advance(); } - + /** * Advances the reader to the next valid record. * Returns true if a record was read, false if there is no more input available. Future calls to advance() may return true once more data is available. diff --git a/examples/cryptorealtime/terraform-setup/startup.tpl b/examples/cryptorealtime/terraform-setup/startup.tpl index 418be01000..79cc96f603 100755 --- a/examples/cryptorealtime/terraform-setup/startup.tpl +++ b/examples/cryptorealtime/terraform-setup/startup.tpl @@ -23,7 +23,7 @@ sudo python3 get-pip.py sudo pip3 install virtualenv virtualenv -p python3 venv source venv/bin/activate -sudo apt -y --allow-downgrades install openjdk-8-jdk git maven google-cloud-sdk=271.0.0-0 google-cloud-sdk-cbt=271.0.0-0 +sudo apt -y --allow-downgrades install openjdk-8-jdk git maven google-cloud-sdk=271.0.0-0 google-cloud-sdk-cbt=271.0.0-0 cd ~ git clone https://github.com/galic1987/professional-services cd professional-services/examples/cryptorealtime/ diff --git a/examples/dataflow-data-generator/README.md b/examples/dataflow-data-generator/README.md index 95a0d2d8f3..a82e969107 100644 --- a/examples/dataflow-data-generator/README.md +++ b/examples/dataflow-data-generator/README.md @@ -1,15 +1,15 @@ # Data Generator -This directory shows a series of pipelines used to generate data in GCS or BigQuery. -The intention for these pipelines are to be a tool for partners, customers and SCEs who want to create a dummy dataset that +This directory shows a series of pipelines used to generate data in GCS or BigQuery. +The intention for these pipelines are to be a tool for partners, customers and SCEs who want to create a dummy dataset that looks like the schema of their actual data in order to run some queries in BigQuery. There are two different types of use cases for this kind of tool which we refer to throughout this documentation as Human Readable and Performance -Testing Data Generators. +Testing Data Generators. ## Human Readable Data Generation These pipelines are a great place to get started when you only have a customer's schema -and do not have a requirement for your generated dataset to have similar distribution to -the source dataset (this is required for accurately capturing query performance). +and do not have a requirement for your generated dataset to have similar distribution to +the source dataset (this is required for accurately capturing query performance). - Human readable / queryable data. This includes smart populating columns with data formatted based on the field name. - This can be used in scenarios where there are hurdles to get over in migrating actual data to BigQuery to unblock integration tests and downstream development. - Generate joinable schemas for < 1 Billion distinct keys @@ -19,11 +19,11 @@ the source dataset (this is required for accurately capturing query performance) ![Alt text](img/data-generator.png) - - [Data Generator](data-generator-pipeline/data_generator_pipeline.py): This pipeline should - can be used to generate a central fact table in snowflake schema. - - [Data Generator (Joinable Table)](data-generator-pipeline/data_generator_pipeline.py): + - [Data Generator](data-generator-pipeline/data_generator_pipeline.py): This pipeline should + can be used to generate a central fact table in snowflake schema. + - [Data Generator (Joinable Table)](data-generator-pipeline/data_generator_pipeline.py): this pipeline should be used to generate data that joins to an exsiting BigQuery Table - on a certain key. + on a certain key. ## Performance Testing Data Generation The final pipeline supports the later use case where matching the distribution of the source @@ -35,10 +35,10 @@ dataset for replicating query performance is the goal. ![Alt text](img/distribution-matcher.png) - - [Histogram Tool](bigquery-scripts/bq_histogram_tool.py): This is an example script of what could - be run on a customer's table to extract the distribution information per key without collecting - meaningful data. This script would be run by the client and they would share the output table. - If the customer is not already in BigQuery this histogram tool can serve as boilerplate for a + - [Histogram Tool](bigquery-scripts/bq_histogram_tool.py): This is an example script of what could + be run on a customer's table to extract the distribution information per key without collecting + meaningful data. This script would be run by the client and they would share the output table. + If the customer is not already in BigQuery this histogram tool can serve as boilerplate for a histogram tool that reads from their source database and writes to BigQuery. - [Distribution Matcher](data-generator-pipeline/data_distribution_matcher.py): This pipeline operates on a BigQuery table containing key hashes and counts and will replicate this distribution in the @@ -49,7 +49,7 @@ A few recommendations when generating large datasets with any of these pipelines - Write to AVRO on GCS then load to BigQuery. - Use machines with a lot of CPU. We reccommend `n1-highcpu-32`. - Run on a private network to avoid using public ip addresses. - - Request higher quotas for your project to support scaling to 300+ large workers, + - Request higher quotas for your project to support scaling to 300+ large workers, specifically, in the region you wish to run the pipeline: - 300+ In-use IP addresses - 10,000+ CPUs @@ -58,14 +58,14 @@ A few recommendations when generating large datasets with any of these pipelines This tool has several parameters to specify what kind of data you would like to generate. -#### Schema -The schema may be specified using the `--schema_file` parameter with a file containing a -list of json objects with `name`, `type`, `mode` and optionally `description` fields. -This form follows the output of`bq show --format=json --schema `. +#### Schema +The schema may be specified using the `--schema_file` parameter with a file containing a +list of json objects with `name`, `type`, `mode` and optionally `description` fields. +This form follows the output of`bq show --format=json --schema `. This data generator now supports nested types like `RECORD`/`STRUCT`. Note, that the approach taken was to generate a `REPEATED` `RECORD` (aka `ARRAY`) and each record generated -will have between 0 and 3 elements in this array. -ie. +will have between 0 and 3 elements in this array. +ie. ``` --schema_file=gs://python-dataflow-example/schemas/lineorder-schema.json ``` @@ -86,15 +86,15 @@ lineorder-schema.json: } ``` Alternatively, the schema may be specified with a reference to an existing BigQuery table with the -`--input_bq_table` parameter. We suggest using the BigQuery UI to create an empty BigQuery table to +`--input_bq_table` parameter. We suggest using the BigQuery UI to create an empty BigQuery table to avoid typos when writing your own schema json. ``` --input_bq_table=BigQueryFaker.lineorders ``` -Note, if you are generating data that is also being loaded into an RDBMS you can specify the RDMS type -in the `description` field of the schema. The data generator will parse this to extract datasize. +Note, if you are generating data that is also being loaded into an RDBMS you can specify the RDMS type +in the `description` field of the schema. The data generator will parse this to extract datasize. ie. The below field will have strings truncated to be within 36 bytes. ``` [ @@ -117,17 +117,17 @@ script several times. ``` #### Output Prefix -The output is specified as a GCS prefix. Note that multiple files will be written with +The output is specified as a GCS prefix. Note that multiple files will be written with `--of-.`. The suffix will be the appropriate suffix for the file type based on if you pass the `--csv_schema_order` or `--avro_schema_file` parameters described later. -#### Output format +#### Output format Output format is specified by passing one of the `--csv_schema_order`, `--avro_schema_file`, or `--write_to_parquet` parameters. -`--csv_schema_order` should be a comma separated list specifying the order of the fieldnames for writing. +`--csv_schema_order` should be a comma separated list specifying the order of the fieldnames for writing. Note that `RECORD` are not supported when writing to CSV, because it is a flat file format. ``` @@ -140,7 +140,7 @@ Note that `RECORD` are not supported when writing to CSV, because it is a flat f --avro_schema_file=/path/to/linorders.avsc ``` -`--write_to_parquet` is a flag that specifies the output should be parquet. In order for beam to write to parquet, +`--write_to_parquet` is a flag that specifies the output should be parquet. In order for beam to write to parquet, a pyarrow schema is needed. Therefore, this tool translates the schema in the `--schema_file` to a pyarrow schema automatically if this flag is included, but pyarrow doesn't support all fields that are supported by BigQuery. STRING, NUMERIC, INTEGER, FLOAT, NUMERIC, BOOLEAN, TIMESTAMP, DATE, TIME, and DATETIME types are supported. @@ -154,11 +154,11 @@ to parquet. --write_to_parquet ``` -Alternatively, you can write directly to a BigQuery table by specifying an `--output_bq_table`. However, if you are generating +Alternatively, you can write directly to a BigQuery table by specifying an `--output_bq_table`. However, if you are generating more than 100K records, you may run into the limitation of the python SDK where WriteToBigQuery does not orchestrate multiple -load jobs you hit one of the single load job limitations [BEAM-2801](https://issues.apache.org/jira/browse/BEAM-2801). If you -are not concerned with having many duplicates, you can generate an initial BigQuery table with `--num_records=10000000` and -then use [`bq_table_resizer.py`](bigquery-scripts/bq_table_resizer.py) to copy the table into itself until it reaches the +load jobs you hit one of the single load job limitations [BEAM-2801](https://issues.apache.org/jira/browse/BEAM-2801). If you +are not concerned with having many duplicates, you can generate an initial BigQuery table with `--num_records=10000000` and +then use [`bq_table_resizer.py`](bigquery-scripts/bq_table_resizer.py) to copy the table into itself until it reaches the desired size. ``` @@ -176,18 +176,18 @@ Data is seldom full for every record so you can specify the probability of a NUL #### Keys and IDs (optional) -The data generator will parse your field names and generate keys/ids for fields whose name contains "`_key`" or "`_id`". -The cardinality of such key columns can be controlled with the `--n_keys` parameter. +The data generator will parse your field names and generate keys/ids for fields whose name contains "`_key`" or "`_id`". +The cardinality of such key columns can be controlled with the `--n_keys` parameter. -Additionally, you can parameterize the key-skew by passing` --key_skew_distribution`. By default this is `None`, meaning roughly equal -distribution of rowcount across keys. This also supports `"binomial"` giving a maximum variance bell curve of keys over the range of the +Additionally, you can parameterize the key-skew by passing` --key_skew_distribution`. By default this is `None`, meaning roughly equal +distribution of rowcount across keys. This also supports `"binomial"` giving a maximum variance bell curve of keys over the range of the keyset or `"zipf"` giving a distribution across the keyset according to zipf's law. ##### Primary Key (optional) -The data generator can support a primary key columns by passing a comma separated list of field names to `--primary_key_cols`. -Note this is done by a deduplication process at the end of the pipeline. This may be a bottleneck for large data volumes. -Also, using this parameter might cause you to fall short of `--num_records` output records due to the deduplicaiton. +The data generator can support a primary key columns by passing a comma separated list of field names to `--primary_key_cols`. +Note this is done by a deduplication process at the end of the pipeline. This may be a bottleneck for large data volumes. +Also, using this parameter might cause you to fall short of `--num_records` output records due to the deduplicaiton. To mitigate this you can set `--n_keys` to a number much larger than the number of records you are generating. #### Date Parameters (optional) @@ -204,7 +204,7 @@ If you are using these parameters be sure to use YYYY-MM-DD format. #### Number Parameters (optional) The range of integers and/or floats can be constrained with the `--max_int` and `--max_float` parameters. -These default to 100 Million. +These default to 100 Million. The number of decimal places in a float can be controlled with the `--float_precision` parameter. The default float precision is 2. Both integers and floats can be constrained to strictly positive values using @@ -224,7 +224,7 @@ python data_generator_pipeline.py \ --project= \ --setup_file=./setup.py \ ---worker_machine_type=n1-highcpu-32 \ # This is a high cpu process so tuning the machine type will boost performance +--worker_machine_type=n1-highcpu-32 \ # This is a high cpu process so tuning the machine type will boost performance --runner=DataflowRunner \ # run on Dataflow workers --staging_location=gs:///test \ @@ -244,36 +244,36 @@ For isolating your Dataflow workers on a private network you can additionally sp ### Modifying FakeRowGen You may want to change the `FakeRowGen` DoFn class to more accurately spoof your data. You can use `special_map` to map substrings in field names to [Faker Providers](https://faker.readthedocs.io/en/latest/providers.html). The only -requirement for this DoFn is for it to return a list containing a single python dictionary mapping field names to values. -So hack away if you need something more specific any python code is fair game. Keep in mind -that if you use a non-standard module (available in PyPI) you will need to make sure it gets installed on each of the workers or you will get +requirement for this DoFn is for it to return a list containing a single python dictionary mapping field names to values. +So hack away if you need something more specific any python code is fair game. Keep in mind +that if you use a non-standard module (available in PyPI) you will need to make sure it gets installed on each of the workers or you will get -namespace issues. This can be done most simply by adding the module to `setup.py`. +namespace issues. This can be done most simply by adding the module to `setup.py`. ### Generating Joinable tables Snowfalke schema -To generate multiple tables that join based on certain keys, start by generating the central fact table with the above described -[`data_generator_pipeline.py`](data-generator-pipeline/data_generator_pipeline.py). -Then use [`data_generator_joinable_table.py`](data-generator-pipeline/data_generator_pipeline.py) with the above described parameters -for the new table plust three additional parameters described below. +To generate multiple tables that join based on certain keys, start by generating the central fact table with the above described +[`data_generator_pipeline.py`](data-generator-pipeline/data_generator_pipeline.py). +Then use [`data_generator_joinable_table.py`](data-generator-pipeline/data_generator_pipeline.py) with the above described parameters +for the new table plust three additional parameters described below. - `--fact_table` The existing fact table in BigQuery that will be queried to obtain list of distinct key values. - `--source_joining_key_col` The field name of the foreign key col in the existing table. - `--dest_joining_key_col` The field name in the table we are generating with thie pipeline for joining to the existing table. -Note, this method selects disctinct keys from the `--fact_table` as a side input which are passed as a list to the to each worker which randomly -selects a value to assign to this record. This means that this list must comfortably fit in memory. This makes this method only suitable for key -columns with relatively low cardinality (< 1 Billion distinct keys). If you have more rigorous needs for generating joinable schemas, you should -consider using the distribution matcher pipeline. +Note, this method selects disctinct keys from the `--fact_table` as a side input which are passed as a list to the to each worker which randomly +selects a value to assign to this record. This means that this list must comfortably fit in memory. This makes this method only suitable for key +columns with relatively low cardinality (< 1 Billion distinct keys). If you have more rigorous needs for generating joinable schemas, you should +consider using the distribution matcher pipeline. ## Performance Testing Data Generator Usage Steps: - - Generate the posterior histogram table. For an example of how to do this on an existing BigQuery table look at the BigQuery Histogram Tool + - Generate the posterior histogram table. For an example of how to do this on an existing BigQuery table look at the BigQuery Histogram Tool described later in this doc. - - Use the [`data_distribution_matcher.py`](data-generator-pipeline/data_distribution_matcher.py) pipeline. + - Use the [`data_distribution_matcher.py`](data-generator-pipeline/data_distribution_matcher.py) pipeline. -You can specify `--schema_file` (or `--input_table`), `--output_prefix` and `--output_format` the same way as described above in the +You can specify `--schema_file` (or `--input_table`), `--output_prefix` and `--output_format` the same way as described above in the Human Readable Data Generator section. Additionally, you must specify an `--histogram_table`. This table will have a field for each key column (which will store -a hash of each value) and a frequency with which these values occur. +a hash of each value) and a frequency with which these values occur. ### Generating Joinable Schemas Joinable tables can be created by running the distribution matcher on a histogram for all relevant tables in the dataset. Because each histogram table @@ -282,13 +282,13 @@ entry captures the hash of each key it referes to we can capture exact join scen ## BigQuery Scripts Included are three BigQuery utility scripts to help you with your data generating needs. The first helps with loading many gcs files to BigQuery while staying under the 15TB per load job limit, the next will help you profile the distribution of an existing dataset and the last will allow -you to resize BigQuery tables to be a desired size. +you to resize BigQuery tables to be a desired size. ### BigQuery batch loads This script is meant to orchestrate BigQuery load jobs of many -json files on Google Cloud Storage. It ensures that each load -stays under the 15 TB per load job limit. It operates on the +json files on Google Cloud Storage. It ensures that each load +stays under the 15 TB per load job limit. It operates on the output of `gsutil -l`. @@ -297,7 +297,7 @@ This script can be called with the following arguments: `--project`: GCP project ID -`--dataset`: BigQuery datset ID containing the table your wish +`--dataset`: BigQuery datset ID containing the table your wish to populate. `--table`: BigQuery table ID of the table you wish to populate @@ -305,7 +305,7 @@ This script can be called with the following arguments: `--source_file`: This is the output of `gsutil -l` with the URI of each file that you would like to load -`--create_table`: If passed this script will create +`--create_table`: If passed this script will create the destination table. `--schema_file`: Path to a json file defining the destination BigQuery @@ -319,7 +319,7 @@ This script can be called with the following arguments: `--max_bad_records`: Number of permissible bad records per load job. -#### Example Usage: +#### Example Usage: ``` gsutil -l gs:///path/to/json/-*.json >> ./files_to_load.txt @@ -330,13 +330,13 @@ python bq_load_batches.py --project= \ --source_file=files_to_load.txt ``` ### BigQuery Histogram Tool -This script will create a BigQuery table containing the hashes of the key columns -specified as a comma separated list to the `--key_cols` parameter and the frequency -for which that group of key columns appears in the `--input_table`. This serves as -a histogram of the original table and will be used as the source for +This script will create a BigQuery table containing the hashes of the key columns +specified as a comma separated list to the `--key_cols` parameter and the frequency +for which that group of key columns appears in the `--input_table`. This serves as +a histogram of the original table and will be used as the source for [`data_distribution_matcher.py`](data_generator_pipeline/data_distribution_matcher.py) -#### Example Usage: +#### Example Usage: ``` python bq_histogram_tool.py \ --input_table=.. \ @@ -344,15 +344,15 @@ python bq_histogram_tool.py \ --key_cols=item_id,store_id ``` -### BigQuery table resizer +### BigQuery table resizer This script is to help increase the size of a table based on a generated or sample. -If you are short on time and have a requirement to generate a 100TB table you can +If you are short on time and have a requirement to generate a 100TB table you can use this script to generate a few GB and copy table into itself until it it is the desired size or number of rows. While this would be inapropriate for accurate performance benchmarking it can be used to get a query specific cost estimate. -This script can be used to copy a table in place or create a new table if you -want to maintain the record of the original records. You can specify the target +This script can be used to copy a table in place or create a new table if you +want to maintain the record of the original records. You can specify the target table suze in either number of rows or GB. #### Example Usage @@ -369,7 +369,7 @@ python bq_table_resizer.py \ ``` ### Running the tests -Note, that the tests for the BigQuery table resizer require that you have +Note, that the tests for the BigQuery table resizer require that you have `GOOGLE_APPLICATION_DEFAULT` set to credentials with access to a BigQuery environment where you can create and destory tables. diff --git a/examples/dataflow-data-generator/data-generator-pipeline/data_distribution_matcher.py b/examples/dataflow-data-generator/data-generator-pipeline/data_distribution_matcher.py index a102a4e381..8204dbc322 100644 --- a/examples/dataflow-data-generator/data-generator-pipeline/data_distribution_matcher.py +++ b/examples/dataflow-data-generator/data-generator-pipeline/data_distribution_matcher.py @@ -12,11 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. """ -A Dataflow pipeline which reads a schema to simulate or "fake" data -from a json file and writes random data of the schema's shape to a -BigQuery table or as CSV or AVRO files on GCS. This can be used to +A Dataflow pipeline which reads a schema to simulate or "fake" data +from a json file and writes random data of the schema's shape to a +BigQuery table or as CSV or AVRO files on GCS. This can be used to ease apprehension about BQ costs, unblock integration testing before -real data can be provided by the business, or create dummy datasets +real data can be provided by the business, or create dummy datasets for stress testing in the event of large data growth. """ diff --git a/examples/dataflow-data-generator/data-generator-pipeline/data_generator/CsvUtil.py b/examples/dataflow-data-generator/data-generator-pipeline/data_generator/CsvUtil.py index 6ecf385621..49daf1c59a 100644 --- a/examples/dataflow-data-generator/data-generator-pipeline/data_generator/CsvUtil.py +++ b/examples/dataflow-data-generator/data-generator-pipeline/data_generator/CsvUtil.py @@ -19,12 +19,12 @@ def dict_to_csv(input_dict, output_order=[]): """ - This funciton converts a python dictionary to a - CSV line. - Note keys in output schema that are missing in the - dictionary or that contains commas will result in + This funciton converts a python dictionary to a + CSV line. + Note keys in output schema that are missing in the + dictionary or that contains commas will result in empty values. - + Arguments: dictionary: (dict) A dictionary containing the data of interest. output_order: (list of strings) The order of field names to write to CSV. diff --git a/examples/dataflow-data-generator/data-generator-pipeline/data_generator/ParquetUtil.py b/examples/dataflow-data-generator/data-generator-pipeline/data_generator/ParquetUtil.py index f6968f4386..4a9cac6705 100644 --- a/examples/dataflow-data-generator/data-generator-pipeline/data_generator/ParquetUtil.py +++ b/examples/dataflow-data-generator/data-generator-pipeline/data_generator/ParquetUtil.py @@ -66,7 +66,7 @@ def _bq_to_pa_type(field): return type_conversions.get(field.get('type')) except KeyError as err: raise KeyError( - """Type {} is not a valid BigQuery type and not supported by this + """Type {} is not a valid BigQuery type and not supported by this utility.""".format(field['type'])) pa_schema_list = [] @@ -100,11 +100,11 @@ def fix_record_for_parquet(record, schema): :param record: record of data from beam pipeline :param schema: string schema dict. :return: record with converted TIMESTAMP, DATETIME, DATE, and/or TIME - fields. + fields. """ def _fix_primitive(record, field): """ - Converts the a value in the field in the record for parquet + Converts the a value in the field in the record for parquet compatibility. This is mainly to consistently repeated types. :param record: record from data from beam pipeline. :param field: (bigquery.schema.SchemaField) to convert. diff --git a/examples/dataflow-data-generator/data-generator-pipeline/data_generator/PerformantDataGenerator.py b/examples/dataflow-data-generator/data-generator-pipeline/data_generator/PerformantDataGenerator.py index 44b3657e58..2fdc881ddb 100644 --- a/examples/dataflow-data-generator/data-generator-pipeline/data_generator/PerformantDataGenerator.py +++ b/examples/dataflow-data-generator/data-generator-pipeline/data_generator/PerformantDataGenerator.py @@ -268,7 +268,7 @@ def get_faker_schema(self, fields=None): def enforce_joinable_keys(self, record, key_set=None): """ - This function will accept key_set as a side input containing the set of + This function will accept key_set as a side input containing the set of key values for the key_col in record. Args: record: (dict) A single generated record. @@ -276,7 +276,7 @@ def enforce_joinable_keys(self, record, key_set=None): key_set: (apache_beam.pvalue.AsList) side input from the BigQuery query against the fact table. Returns: - record (dict) The record mutated to have keys in key_col that join + record (dict) The record mutated to have keys in key_col that join to the fact table. """ record[self.dest_joining_key_col] = np.random.choice(key_set) @@ -567,7 +567,7 @@ def process(self, element, *args, **kwargs): PCollection. Args: - element: A single element of the PCollection + element: A single element of the PCollection """ faker_schema = self.data_gen.get_faker_schema() diff --git a/examples/dataflow-data-generator/data-generator-pipeline/data_generator/PrettyDataGenerator.py b/examples/dataflow-data-generator/data-generator-pipeline/data_generator/PrettyDataGenerator.py index a9447b76e5..df2fa5a984 100644 --- a/examples/dataflow-data-generator/data-generator-pipeline/data_generator/PrettyDataGenerator.py +++ b/examples/dataflow-data-generator/data-generator-pipeline/data_generator/PrettyDataGenerator.py @@ -264,7 +264,7 @@ def get_faker_schema(self, fields=None): def enforce_joinable_keys(self, record, key_set=None): """ - This function will accept key_set as a side input containing the set of + This function will accept key_set as a side input containing the set of key values for the key_col in record. Args: record: (dict) A single generated record. @@ -272,7 +272,7 @@ def enforce_joinable_keys(self, record, key_set=None): key_set: (apache_beam.pvalue.AsList) side input from the BigQuery query against the fact table. Returns: - record (dict) The record mutated to have keys in key_col that join + record (dict) The record mutated to have keys in key_col that join to the fact table. """ record[self.dest_joining_key_col] = np.random.choice(key_set) @@ -559,7 +559,7 @@ def process(self, element, *args, **kwargs): PCollection. Args: - element: A single element of the PCollection + element: A single element of the PCollection """ faker_schema = self.data_gen.get_faker_schema() diff --git a/examples/dataflow-data-generator/data-generator-pipeline/data_generator/enforce_primary_keys.py b/examples/dataflow-data-generator/data-generator-pipeline/data_generator/enforce_primary_keys.py index d5a969af2a..c2b0415fdc 100644 --- a/examples/dataflow-data-generator/data-generator-pipeline/data_generator/enforce_primary_keys.py +++ b/examples/dataflow-data-generator/data-generator-pipeline/data_generator/enforce_primary_keys.py @@ -25,7 +25,7 @@ class EnforcePrimaryKeys(beam.PTransform): def __init__(self, primary_key): """ Args: - primary_keys: (str) The column by which to ensure + primary_keys: (str) The column by which to ensure uniqueness in the posterior PCollection. """ self.primary_key = primary_key diff --git a/examples/dataflow-data-generator/data-generator-pipeline/data_generator_pipeline.py b/examples/dataflow-data-generator/data-generator-pipeline/data_generator_pipeline.py index c840df6172..b056346942 100644 --- a/examples/dataflow-data-generator/data-generator-pipeline/data_generator_pipeline.py +++ b/examples/dataflow-data-generator/data-generator-pipeline/data_generator_pipeline.py @@ -12,11 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. """ -A Dataflow pipeline which reads a schema to simulate or "fake" data -from a json file and writes random data of the schema's shape to a -BigQuery table or as CSV or AVRO files on GCS. This can be used to +A Dataflow pipeline which reads a schema to simulate or "fake" data +from a json file and writes random data of the schema's shape to a +BigQuery table or as CSV or AVRO files on GCS. This can be used to ease apprehension about BQ costs, unblock integration testing before -real data can be provided by the business, or create dummy datasets +real data can be provided by the business, or create dummy datasets for stress testing in the event of large data growth. """ diff --git a/examples/dataflow-elasticsearch-indexer/README.md b/examples/dataflow-elasticsearch-indexer/README.md index 32790d6c93..1031c521f6 100644 --- a/examples/dataflow-elasticsearch-indexer/README.md +++ b/examples/dataflow-elasticsearch-indexer/README.md @@ -1,7 +1,7 @@ ## Indexing documents into Elasticsearch using Cloud Dataflow This example Cloud Dataflow pipeline demonstrates the process of reading JSON documents from Cloud Pub/Sub, enhancing the document using metadata stored in Cloud Bigtable and indexing those documents into [Elasticsearch](https://www.elastic.co/). The pipeline also validates the documents for correctness and availability of metadata and publishes any documents that fail validation into another Cloud Pub/Sub topic for debugging and eventual reprocessing. -### Workflow Overview +### Workflow Overview *** diff --git a/examples/dataflow-python-examples/README.md b/examples/dataflow-python-examples/README.md index d3c194ad2f..321f8d521c 100644 --- a/examples/dataflow-python-examples/README.md +++ b/examples/dataflow-python-examples/README.md @@ -1,5 +1,5 @@ # Dataflow using python -This repo contains several examples of the Dataflow python API. The examples are solutions to common use cases we see +This repo contains several examples of the Dataflow python API. The examples are solutions to common use cases we see in the field. - [Ingesting data from a file into BigQuery](#ingesting-data-from-a-file-into-bigquery) @@ -85,10 +85,10 @@ Ready to dive deeper? Check out the complete code [here](dataflow_python_exampl ## Joining file and BigQuery datasets in Dataflow ![Alt text](img/csv_join_bigquery_to_bigquery.png?raw=true "CSV file joined with BigQuery data to BigQuery") -This example demonstrates how to work with two datasets. A primary dataset is read from a file, and another dataset -containing reference is read from BigQuery. The two datasets are then joined in Dataflow before writing the joined +This example demonstrates how to work with two datasets. A primary dataset is read from a file, and another dataset +containing reference is read from BigQuery. The two datasets are then joined in Dataflow before writing the joined dataset down to BigQuery. - + This pipeline contains 4 steps: 1. [Read in the primary dataset from a file](dataflow_python_examples/data_enrichment.py#L165-L176). 2. [Read in the reference data from BigQuery](dataflow_python_examples/data_enrichment.py#L155-L163). @@ -107,7 +107,7 @@ Similar to previous examples, we use TextIO to read the dataset from a CSV file. Using BigQueryIO, we can specify a query to read data from. Dataflow then is able to distribute the data from BigQuery to the next stages in the pipeline. -In this example the additional dataset is represented as a side input. Side inputs in Dataflow are typically reference +In this example the additional dataset is represented as a side input. Side inputs in Dataflow are typically reference datasets that fit into memory. Other examples will explore alternative methods for joining datasets which work well for datasets that do not fit into memory. @@ -120,14 +120,14 @@ the python code is the same as it would be for unioning any two python dictionar ### The joined dataset is written out to BigQuery ![Alt text](img/4_output_to_bigquery.png?raw=true "Custom python code") -Finally the joined dataset is written out to BigQuery. This uses the same BigQueryIO API which is used in previous +Finally the joined dataset is written out to BigQuery. This uses the same BigQueryIO API which is used in previous examples. ### Full code examples Ready to dive deeper? Check out the complete code [here](dataflow_python_examples/data_enrichment.py). -## Ingest data from files into Bigquery reading the file structure from Datastore +## Ingest data from files into Bigquery reading the file structure from Datastore In this example we create a Python [Apache Beam](https://beam.apache.org/) pipeline running on [Google Cloud Dataflow](https://cloud.google.com/dataflow/) to import CSV files into BigQuery using the following architecture: @@ -240,7 +240,7 @@ the joined dataset before uploading to BigQuery. Joining two datasets from BigQuery is a common use case when a data lake has been implemented in BigQuery. Creating a data mart with denormalized datasets facilitates better performance when using visualization tools. - + This pipeline contains 4 steps: 1. [Read in the primary dataset from BigQuery](dataflow_python_examples/data_lake_to_mart.py#L278-L283). 2. [Read in the reference data from BigQuery](dataflow_python_examples/data_lake_to_mart.py#L248-L276). @@ -252,35 +252,35 @@ Alternatively, [CoGroupByKey can be used to join the two datasets](dataflow_pyth ### Read in the primary dataset from BigQuery ![Alt text](img/1_query_orders.png?raw=true "Read from BigQuery") -Similar to previous examples, we use BigQueryIO to read the dataset from the results of a query. In this case our +Similar to previous examples, we use BigQueryIO to read the dataset from the results of a query. In this case our main dataset is a fake orders dataset, containing a history of orders and associated data like quantity. ### Read in the reference data from BigQuery ![Alt text](img/2_query_account_details.png?raw=true "Import state name data from BigQuery") In this example we use a fake account details dataset. This represents a common use case for denormalizing a dataset. -The account details information contains attributes linked to the accounts in the orders dataset. For example the +The account details information contains attributes linked to the accounts in the orders dataset. For example the address and city of the account. ### Custom Python code is used to join the two datasets ![Alt text](img/3_custom_python_code.png?raw=true "Custom python code") -Using custom python code, we join the two datasets together. We provide two examples of joining these datasets. The +Using custom python code, we join the two datasets together. We provide two examples of joining these datasets. The first example uses side inputs, which require the dataset fit into memory. The second example demonstrates how to use CoGroupByKey to join the datasets. -CoGroupByKey will facilitate joins between two datesets even if neither fit into memory. Explore the comments in the +CoGroupByKey will facilitate joins between two datesets even if neither fit into memory. Explore the comments in the two code examples for a more in depth explanation. ### The joined dataset is written out to BigQuery ![Alt text](img/4_output_to_bigquery.png?raw=true "Custom python code") -Finally the joined dataset is written out to BigQuery. This uses the same BigQueryIO API which is used in previous +Finally the joined dataset is written out to BigQuery. This uses the same BigQueryIO API which is used in previous examples. ### Full code examples Ready to dive deeper? Check out the complete code. -The example using side inputs is [here](dataflow_python_examples/data_lake_to_mart.py) and the example using CoGroupByKey is +The example using side inputs is [here](dataflow_python_examples/data_lake_to_mart.py) and the example using CoGroupByKey is [here](dataflow_python_examples/data_lake_to_mart_cogroupbykey.py). diff --git a/examples/dataflow-python-examples/dataflow_python_examples/data_enrichment.py b/examples/dataflow-python-examples/dataflow_python_examples/data_enrichment.py index f83dcde2f8..3d4e06bb60 100644 --- a/examples/dataflow-python-examples/dataflow_python_examples/data_enrichment.py +++ b/examples/dataflow-python-examples/dataflow_python_examples/data_enrichment.py @@ -15,7 +15,7 @@ """ data_enrichment.py demonstrates a Dataflow pipeline which reads a file and writes its contents to a BigQuery table. Along the way, data from BigQuery is read in as a side input and joined in with the primary data from the file. - + """ from __future__ import absolute_import @@ -50,16 +50,16 @@ def __init__(self): def parse_method(self, string_input): """This method translates a single line of comma separated values to a dictionary which can be loaded into BigQuery. - + Args: - string_input: A comma separated list of values in the form of + string_input: A comma separated list of values in the form of state_abbreviation,gender,year,name,count_of_babies,dataset_created_date example string_input: KS,F,1923,Dorothy,654,11/28/2016 - + Returns: A dict mapping BigQuery column names as keys to the corresponding value - parsed from string_input. In this example, the data is not transformed, and - remains in the same format as the CSV. There are no date format transformations. + parsed from string_input. In this example, the data is not transformed, and + remains in the same format as the CSV. There are no date format transformations. example output: {'state': 'KS', diff --git a/examples/dataflow-python-examples/dataflow_python_examples/data_lake_to_mart.py b/examples/dataflow-python-examples/dataflow_python_examples/data_lake_to_mart.py index cfb82b32aa..18d3155f55 100644 --- a/examples/dataflow-python-examples/dataflow_python_examples/data_lake_to_mart.py +++ b/examples/dataflow-python-examples/dataflow_python_examples/data_lake_to_mart.py @@ -12,9 +12,9 @@ # See the License for the specific language governing permissions and # limitations under the License. -""" data_lake_to_mart.py demonstrates a Dataflow pipeline which reads a -large BigQuery Table, joins in another dataset, and writes its contents to a -BigQuery table. +""" data_lake_to_mart.py demonstrates a Dataflow pipeline which reads a +large BigQuery Table, joins in another dataset, and writes its contents to a +BigQuery table. """ from __future__ import absolute_import @@ -30,9 +30,9 @@ class DataLakeToDataMart: - """A helper class which contains the logic to translate the file into + """A helper class which contains the logic to translate the file into a format BigQuery will accept. - + This example uses side inputs to join two datasets together. """ @@ -47,8 +47,8 @@ def __init__(self): self.schema_str = '{"fields": ' + data + '}' def get_orders_query(self): - """This returns a query against a very large fact table. We are - using a fake orders dataset to simulate a fact table in a typical + """This returns a query against a very large fact table. We are + using a fake orders dataset to simulate a fact table in a typical data warehouse.""" orders_query = """SELECT acct_number, @@ -202,16 +202,16 @@ def get_orders_query(self): FROM `python-dataflow-example.example_data.orders` orders LIMIT - 10 + 10 """ return orders_query def add_account_details(self, row, account_details): - """add_account_details joins two datasets together. Dataflow passes in the + """add_account_details joins two datasets together. Dataflow passes in the a row from the orders dataset along with the entire account details dataset. - + This works because the entire account details dataset can be passed in memory. - + The function then looks up the account details, and adds all columns to a result dictionary, which will be written to BigQuery.""" result = row.copy() diff --git a/examples/dataflow-python-examples/dataflow_python_examples/data_lake_to_mart_cogroupbykey.py b/examples/dataflow-python-examples/dataflow_python_examples/data_lake_to_mart_cogroupbykey.py index 4642eded2e..a2943f5cd1 100644 --- a/examples/dataflow-python-examples/dataflow_python_examples/data_lake_to_mart_cogroupbykey.py +++ b/examples/dataflow-python-examples/dataflow_python_examples/data_lake_to_mart_cogroupbykey.py @@ -12,9 +12,9 @@ # See the License for the specific language governing permissions and # limitations under the License. -""" data_lake_to_mart.py demonstrates a Dataflow pipeline which reads a -large BigQuery Table, joins in another dataset, and writes its contents to a -BigQuery table. +""" data_lake_to_mart.py demonstrates a Dataflow pipeline which reads a +large BigQuery Table, joins in another dataset, and writes its contents to a +BigQuery table. """ from __future__ import absolute_import @@ -29,9 +29,9 @@ class DataLakeToDataMartCGBK: - """A helper class which contains the logic to translate the file into + """A helper class which contains the logic to translate the file into a format BigQuery will accept. - + This example uses CoGroupByKey to join two datasets together. """ @@ -47,8 +47,8 @@ def __init__(self): self.schema_str = '{"fields": ' + data + '}' def get_orders_query(self): - """This returns a query against a very large fact table. We are - using a fake orders dataset to simulate a fact table in a typical + """This returns a query against a very large fact table. We are + using a fake orders dataset to simulate a fact table in a typical data warehouse.""" orders_query = """SELECT acct_number, @@ -202,7 +202,7 @@ def get_orders_query(self): FROM `python-dataflow-example.example_data.orders` orders LIMIT - 10 + 10 """ return orders_query diff --git a/examples/dataflow-python-examples/dataflow_python_examples/data_transformation.py b/examples/dataflow-python-examples/dataflow_python_examples/data_transformation.py index 9de2dd9612..b67907b9df 100644 --- a/examples/dataflow-python-examples/dataflow_python_examples/data_transformation.py +++ b/examples/dataflow-python-examples/dataflow_python_examples/data_transformation.py @@ -12,10 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -""" data_transformation.py is a Dataflow pipeline which reads a file and writes +""" data_transformation.py is a Dataflow pipeline which reads a file and writes its contents to a BigQuery table. -This example reads a json schema of the intended output into BigQuery, +This example reads a json schema of the intended output into BigQuery, and transforms the date data to match the format BigQuery expects. """ @@ -51,14 +51,14 @@ def parse_method(self, string_input): dictionary which can be loaded into BigQuery. Args: - string_input: A comma separated list of values in the form of + string_input: A comma separated list of values in the form of state_abbreviation,gender,year,name,count_of_babies,dataset_created_date example string_input: KS,F,1923,Dorothy,654,11/28/2016 Returns: A dict mapping BigQuery column names as keys to the corresponding value - parsed from string_input. In this example, the data is not transformed, and - remains in the same format as the CSV. There are no date format transformations. + parsed from string_input. In this example, the data is not transformed, and + remains in the same format as the CSV. There are no date format transformations. example output: {'state': 'KS', diff --git a/examples/dataflow-python-examples/tests/test_parsing_logic.py b/examples/dataflow-python-examples/tests/test_parsing_logic.py index fbac5cca7d..1b059d23fb 100644 --- a/examples/dataflow-python-examples/tests/test_parsing_logic.py +++ b/examples/dataflow-python-examples/tests/test_parsing_logic.py @@ -23,7 +23,7 @@ class TestHandlers(unittest.TestCase): - """The test cases are focused on the business logic. In this case this is how we parse the data, transform the types + """The test cases are focused on the business logic. In this case this is how we parse the data, transform the types and join datasets.""" def setUp(self): diff --git a/examples/dataflow-scala-kafka2avro/README.md b/examples/dataflow-scala-kafka2avro/README.md index 40da8cf3ac..0fc4499136 100644 --- a/examples/dataflow-scala-kafka2avro/README.md +++ b/examples/dataflow-scala-kafka2avro/README.md @@ -1,7 +1,7 @@ # kafka2avro This example shows how to use Apache Beam and SCIO to read objects from a Kafka -topic, and serialize them encoded as Avro files in Google Cloud Storage. +topic, and serialize them encoded as Avro files in Google Cloud Storage. This example contains two Dataflow pipelines: * [Object2Kafka](src/main/scala/com/google/cloud/pso/kafka2avro/Object2Kafka.scala): generates a set of objects and write them to Kafka. This is a @@ -93,7 +93,7 @@ CLASSPATH="target/pack/lib/*" java com.google.cloud.pso.kafka2avro.Object2Kafka This is a streaming pipeline. It will keep running unless you cancel it. The default windowing policy is to group messages every 2 minutes, in a fixed -window. To change the policy, please see +window. To change the policy, please see [the function `windowIn` in `Kafka2Avro.scala`](src/main/scala/com/google/cloud/pso/kafka2avro/Kafka2Avro.scala#L60-L70). Once you have generated the JAR file using the `pack` command inside SBT, you @@ -129,8 +129,8 @@ mv target/pack/lib/netty-codec-http2-\[4.1.25.Final,4.1.25.Final\].jar target/pa ## Continuous Integration -This example includes [a configuration file for Cloud Build](cloudbuild.yaml), -so you can use it to run the unit tests with every commit done to your repository. +This example includes [a configuration file for Cloud Build](cloudbuild.yaml), +so you can use it to run the unit tests with every commit done to your repository. To use this configuration file: * Add your sources to a Git repository (either in Bitbucket, Github or Google diff --git a/examples/dataflow-streaming-benchmark/README.md b/examples/dataflow-streaming-benchmark/README.md index 85158d5b44..a9931234a0 100644 --- a/examples/dataflow-streaming-benchmark/README.md +++ b/examples/dataflow-streaming-benchmark/README.md @@ -1,17 +1,17 @@ # Dataflow Streaming Benchmark When developing Dataflow pipelines, it's common to want to benchmark them at a specific QPS using -fake or generated data. This pipeline takes in a QPS parameter, a path to a schema file, and +fake or generated data. This pipeline takes in a QPS parameter, a path to a schema file, and generates fake JSON messages matching the schema to a Pub/Sub topic at the rate of the QPS. ## Pipeline [StreamingBenchmark](src/main/java/com/google/cloud/pso/pipeline/StreamingBenchmark.java) - -A streaming pipeline which generates messages at a specified rate to a Pub/Sub topic. The messages -are generated according to a schema template which instructs the pipeline how to populate the +A streaming pipeline which generates messages at a specified rate to a Pub/Sub topic. The messages +are generated according to a schema template which instructs the pipeline how to populate the messages with fake data compliant to constraints. -> Note the number of workers executing the pipeline must be large enough to support the supplied +> Note the number of workers executing the pipeline must be large enough to support the supplied > QPS. Use a general rule of 2,500 QPS per core in the worker pool when configuring your pipeline. @@ -32,11 +32,11 @@ mvn clean compile ``` ### Creating the Schema File -The schema file used to generate JSON messages with fake data is based on the +The schema file used to generate JSON messages with fake data is based on the [json-data-generator](https://github.com/vincentrussell/json-data-generator) library. This library -allows for the structuring of a sample JSON schema and injection of common faker functions to -instruct the data generator of what type of fake data to create in each field. See the -json-data-generator [docs](https://github.com/vincentrussell/json-data-generator) for more +allows for the structuring of a sample JSON schema and injection of common faker functions to +instruct the data generator of what type of fake data to create in each field. See the +json-data-generator [docs](https://github.com/vincentrussell/json-data-generator) for more information on the faker functions. #### Example Schema File diff --git a/examples/dataproc-gcs-connector/README.md b/examples/dataproc-gcs-connector/README.md index ee230de94b..476686db1c 100644 --- a/examples/dataproc-gcs-connector/README.md +++ b/examples/dataproc-gcs-connector/README.md @@ -4,7 +4,7 @@ The Google Cloud Storage connector for Hadoop (HCFS) enables running [Apache Had To install a released version of the connector see the [installing instructions](https://github.com/GoogleCloudDataproc/hadoop-connectors/blob/master/gcs/INSTALL.md). In some cases we want to test features that have not been released but are in the master branch (or a development branch if you are preparing a PR). -The script `build_gcs_connector.sh` will use the steps below to install the GCS Connector for Dataproc for testing purposes from the source code. +The script `build_gcs_connector.sh` will use the steps below to install the GCS Connector for Dataproc for testing purposes from the source code. ### Building the GCS connector for Dataproc on GCP @@ -42,7 +42,7 @@ The steps below outline the process executed by the script: ### 1. Clone the Hadoop connectors -Clone the Hadoop connector locally from the [GoogleCloudDataproc/hadoop-connectors](https://github.com/GoogleCloudDataproc/hadoop-connectors/blob/master/gcs/README.md) GitHub. +Clone the Hadoop connector locally from the [GoogleCloudDataproc/hadoop-connectors](https://github.com/GoogleCloudDataproc/hadoop-connectors/blob/master/gcs/README.md) GitHub. ### 2. Build the shaded JAR file and upload to GCS @@ -70,11 +70,11 @@ Terraform will create a GCS bucket and upload this JAR to the bucket at `gs://gc ### 3. Provide the Dataproc initialization script (with Terraform) -When creating the [Google Cloud Dataproc](https://cloud.google.com/dataproc) cluster, you can specify the [inititalization action](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/init-actions) to install the specified version of the [GCS connector](https://github.com/GoogleCloudDataproc/hadoop-connectors/blob/master/gcs/README.md) on the cluster. The initalization actions for updating the GCS connector for Dataproc is based off of the `connectors.sh` script from the [GoogleCloudDataproc/initalization-actions](https://github.com/GoogleCloudDataproc/initialization-actions/tree/master/connectors) GitHub repository. +When creating the [Google Cloud Dataproc](https://cloud.google.com/dataproc) cluster, you can specify the [inititalization action](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/init-actions) to install the specified version of the [GCS connector](https://github.com/GoogleCloudDataproc/hadoop-connectors/blob/master/gcs/README.md) on the cluster. The initalization actions for updating the GCS connector for Dataproc is based off of the `connectors.sh` script from the [GoogleCloudDataproc/initalization-actions](https://github.com/GoogleCloudDataproc/initialization-actions/tree/master/connectors) GitHub repository. The `connectors.sh` file in this repository will be the initialization script for the Dataproc cluster. Terraform will rename this script to `dataproc-init-script.sh` before uploading it to the `gs://gcs-connector-init_actions/` GCS bucket. It will then specify `dataproc-init-script.sh` as an initialization action for the Dataproc cluster. -### 4. Run Terraform +### 4. Run Terraform From the main directory of this project `gcs-connector-poc/`, the script will run the following commands to build the Dataproc cluster using the GCS connector. diff --git a/examples/dataproc-gcs-connector/build_gcs_connector.sh b/examples/dataproc-gcs-connector/build_gcs_connector.sh index 158494a69d..b816f232c7 100755 --- a/examples/dataproc-gcs-connector/build_gcs_connector.sh +++ b/examples/dataproc-gcs-connector/build_gcs_connector.sh @@ -27,9 +27,9 @@ export TF_VAR_region=${REGION} export TF_VAR_network_name=${NETWORK_NAME} export TF_VAR_dataproc_cluster=${DATAPROC_CLUSTER_NAME} export TF_VAR_dataproc_subnet=${DATAPROC_SUBNET} -export TF_VAR_hadoop_version=${HADOOP_VERSION} +export TF_VAR_hadoop_version=${HADOOP_VERSION} -echo "Cloning https://github.com/GoogleCloudDataproc/hadoop-connectors" +echo "Cloning https://github.com/GoogleCloudDataproc/hadoop-connectors" git clone https://github.com/GoogleCloudDataproc/hadoop-connectors cd hadoop-connectors || exit @@ -38,15 +38,15 @@ echo "Building JAR file" if [[ $HADOOP_VERSION == *"hadoop2"* ]] then if ! ./mvnw -P hadoop2 clean package - then - echo 'Error building JAR file from https://github.com/GoogleCloudDataproc/hadoop-connectors'; + then + echo 'Error building JAR file from https://github.com/GoogleCloudDataproc/hadoop-connectors'; exit fi elif [[ $HADOOP_VERSION == *"hadoop3"* ]] then if ! ./mvnw -P hadoop3 clean package then - echo 'Error building JAR file from https://github.com/GoogleCloudDataproc/hadoop-connectors'; + echo 'Error building JAR file from https://github.com/GoogleCloudDataproc/hadoop-connectors'; exit fi else @@ -60,7 +60,7 @@ cd terraform || exit terraform init terraform apply -auto-approve -cd .. +cd .. echo "Running test script on Dataproc cluster" chmod u+x test_gcs_connector.sh diff --git a/examples/dataproc-gcs-connector/terraform/README.md b/examples/dataproc-gcs-connector/terraform/README.md index b82a905247..84f486907c 100644 --- a/examples/dataproc-gcs-connector/terraform/README.md +++ b/examples/dataproc-gcs-connector/terraform/README.md @@ -11,7 +11,7 @@ ## How to Use -This Terraform code builds a Dataproc cluster with the GCS connector from the master branch of the [GoogleCloudDataproc/hadoop-connectors](https://github.com/GoogleCloudDataproc/hadoop-connectors) GitHub. It will include creating a Google Cloud Storage bucket to store the JAR file of the GCS connector (see [this README](../README.md) for building the JAR) and the [initialization action](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/init-actions) for the Dataproc cluster. +This Terraform code builds a Dataproc cluster with the GCS connector from the master branch of the [GoogleCloudDataproc/hadoop-connectors](https://github.com/GoogleCloudDataproc/hadoop-connectors) GitHub. It will include creating a Google Cloud Storage bucket to store the JAR file of the GCS connector (see [this README](../README.md) for building the JAR) and the [initialization action](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/init-actions) for the Dataproc cluster. Before running this code, you will need to confirm that the file path to the JAR on Line 23 of `main.tf` and the file path to the initialization action on Line 29 of `main.tf` are correct. diff --git a/examples/dataproc-gcs-connector/test_gcs_connector.sh b/examples/dataproc-gcs-connector/test_gcs_connector.sh index 2d9c1676ac..3907569215 100755 --- a/examples/dataproc-gcs-connector/test_gcs_connector.sh +++ b/examples/dataproc-gcs-connector/test_gcs_connector.sh @@ -18,8 +18,8 @@ export YOUR_BUCKET=output-examples export YOUR_CLUSTER=dataproc-cluster Q1='DROP TABLE Names; -CREATE TABLE Names - (state string, +CREATE TABLE Names + (state string, gender string, year string, name string, @@ -31,12 +31,12 @@ LINES TERMINATED BY "\n" STORED AS TEXTFILE;' # Load data from public GCS bucket -Q2='LOAD DATA +Q2='LOAD DATA INPATH "gs://python-dataflow-example/data_files/usa_names.csv" INTO TABLE Names;' Q3="DROP TABLE top_10_names; -CREATE TABLE top_10_names +CREATE TABLE top_10_names ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE diff --git a/examples/dataproc-persistent-history-server/README.md b/examples/dataproc-persistent-history-server/README.md index ca670240ad..6911c5a8f5 100644 --- a/examples/dataproc-persistent-history-server/README.md +++ b/examples/dataproc-persistent-history-server/README.md @@ -8,18 +8,18 @@ aggregated YARN logs from short-lived clusters on GCS. ## Directory structure - `cluster_templates/` - `history_server.yaml` - - `ephemeral_cluster.yaml` + - `ephemeral_cluster.yaml` - `init_actions` - `disable_history_servers.sh` - `workflow_templates` - `spark_mr_workflow_template.yaml` - `terraform` - - `variables.tf` - - `network.tf` - - `history-server.tf` - - `history-bucket.tf` + - `variables.tf` + - `network.tf` + - `history-server.tf` + - `history-bucket.tf` - `long-running-cluster.tf` - - `firewall.tf` + - `firewall.tf` - `service-account.tf` ## Usage @@ -37,26 +37,26 @@ dataproc.googleapis.com - [Install Google Cloud SDK](https://cloud.google.com/sdk/) - Enable the following APIs if not already enabled. - `gcloud services enable compute.googleapis.com dataproc.googleapis.com` -- \[Optional\] [Install Terraform](https://learn.hashicorp.com/terraform/getting-started/install.html) +- \[Optional\] [Install Terraform](https://learn.hashicorp.com/terraform/getting-started/install.html) ### Disclaimer This is for example purposes only. You should take a much closer look at the firewall rules that make sense for your organization's security requirements. ### Should I run with Terraform or `gcloud` SDK ? -This repo provides artifacts to spin up the infrastructure for persisting -job history and yarn logs with terraform or with gcloud. The recommended -way to use this is to modify the Terraform code to fit your needs for +This repo provides artifacts to spin up the infrastructure for persisting +job history and yarn logs with terraform or with gcloud. The recommended +way to use this is to modify the Terraform code to fit your needs for long running resources. -However, the cluster templates are included as an example of -standardiznig cluster creation for ephemeral clusters. -You might ask, "Why is there a cluster template for the history server?". +However, the cluster templates are included as an example of +standardiznig cluster creation for ephemeral clusters. +You might ask, "Why is there a cluster template for the history server?". The history server is simply a cleaner interface for reading your logs from GCS. For Spark, it is stateless and you may wish to only spin up a history server when you'll actually be using it. For MapReduce, the history server will only be aware of the files on GCS when it was -created and those files which it moves from intermediate done directory +created and those files which it moves from intermediate done directory to the done directory. For this reason, MapReduce workflows should use a persistent history server. @@ -72,8 +72,8 @@ properties: - `mapred:mapreduce.jobhistory.max-age-ms` ### Terraform -To spin up the whole example you could simply edit the -`terraform.tfvars` file to set the variables to the +To spin up the whole example you could simply edit the +`terraform.tfvars` file to set the variables to the desired values and run the following commands. Note, this assumes that you have an existing project and @@ -92,7 +92,7 @@ This will create: 1. A GCS Bucket for YARN log aggregation, and Spark MapReduce Job History as well as initialization actions for your clusters. -### Alternatively, with Google Cloud SDK +### Alternatively, with Google Cloud SDK These instructions detail how to run this entire example with `gcloud`. 1. Replace `PROJECT` with your GCP project id in each file. 1. Replace `HISTORY_BUCKET` with your GCS bucket for logs in each file. @@ -118,7 +118,7 @@ sed -i 's/ZONE/us-central1-f/g' * sed -i 's/SUBNET/your-subnet-id/g' * ``` -Stage an empty file to create the spark-events path on GCS. +Stage an empty file to create the spark-events path on GCS. ``` touch .keep diff --git a/examples/dataproc-persistent-history-server/cluster_templates/ephemeral-cluster.yaml b/examples/dataproc-persistent-history-server/cluster_templates/ephemeral-cluster.yaml index e6c5a49a2c..6c83e30596 100644 --- a/examples/dataproc-persistent-history-server/cluster_templates/ephemeral-cluster.yaml +++ b/examples/dataproc-persistent-history-server/cluster_templates/ephemeral-cluster.yaml @@ -1,7 +1,7 @@ config: gceClusterConfig: internalIpOnly: true - zoneUri: ZONE + zoneUri: ZONE subnetworkUri: https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/subnetworks/SUBNET tags: - hadoop-admin-ui-access diff --git a/examples/dataproc-persistent-history-server/cluster_templates/history-server.yaml b/examples/dataproc-persistent-history-server/cluster_templates/history-server.yaml index a52031c4ca..c978e37173 100644 --- a/examples/dataproc-persistent-history-server/cluster_templates/history-server.yaml +++ b/examples/dataproc-persistent-history-server/cluster_templates/history-server.yaml @@ -1,7 +1,7 @@ config: gceClusterConfig: serviceAccount: HISTORY_SERVER-account@PROJECT.iam.gserviceaccount.com - zoneUri: ZONE + zoneUri: ZONE subnetworkUri: https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/subnetworks/SUBNET tags: - hadoop-history-ui-access @@ -15,7 +15,7 @@ config: minCpuPlatform: AUTOMATIC numInstances: 1 softwareConfig: - imageVersion: preview + imageVersion: preview properties: dataproc:dataproc.allow.zero.workers: "true" yarn:yarn.log-aggregation-enable: "true" @@ -30,6 +30,6 @@ config: spark:spark.eventLog.dir: gs://HISTORY_BUCKET/spark-events/ spark:spark.ui.enabled: "true" spark:spark.history.fs.logDirectory: gs://HISTORY_BUCKET/spark-events/ - spark:spark.ui.filters: org.apache.spark.deploy.yarn.YarnProxyRedirectFilter + spark:spark.ui.filters: org.apache.spark.deploy.yarn.YarnProxyRedirectFilter endpointConfig: enableHttpPortAccess: "true" diff --git a/examples/dataproc-persistent-history-server/workflow_templates/spark_mr_workflow_template.yaml b/examples/dataproc-persistent-history-server/workflow_templates/spark_mr_workflow_template.yaml index 1fe7671a70..598876920b 100644 --- a/examples/dataproc-persistent-history-server/workflow_templates/spark_mr_workflow_template.yaml +++ b/examples/dataproc-persistent-history-server/workflow_templates/spark_mr_workflow_template.yaml @@ -21,7 +21,7 @@ placement: config: gceClusterConfig: internalIpOnly: true - zoneUri: ZONE + zoneUri: ZONE subnetworkUri: https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/subnetworks/SUBNET tags: - hadoop-admin-ui-access diff --git a/examples/dialogflow-entities-example/README.md b/examples/dialogflow-entities-example/README.md index 67b6204291..1b6e2d94db 100644 --- a/examples/dialogflow-entities-example/README.md +++ b/examples/dialogflow-entities-example/README.md @@ -115,7 +115,7 @@ Run the sample using gcloud util as followed: ] } ] - }] + }] }' ``` @@ -131,14 +131,14 @@ Use the EntityTypesClient.batch_update_entity_types to create or update entities #### Examples ##### Using entity_type_batch_uri -The URI to a Google Cloud Storage file containing entity types to update or create. +The URI to a Google Cloud Storage file containing entity types to update or create. The URI must start with "gs://". The entities.json file is an example of a json format file that can be uploaded to gcs and passed to the function. -``` +``` $ gcloud functions call entities_builder --data '{ "bucket": "gs:///entities.json"}' - + ``` -##### Using entity_type_batch_inline +##### Using entity_type_batch_inline For each entity type in the batch: - The `name` is the the unique identifier of the entity type - If `name` is specified, we update an existing entity type. diff --git a/examples/dialogflow-entities-example/main.py b/examples/dialogflow-entities-example/main.py index c47c0e1fa4..051be8bac2 100644 --- a/examples/dialogflow-entities-example/main.py +++ b/examples/dialogflow-entities-example/main.py @@ -64,7 +64,7 @@ def callback(operation_future): These futures are used asynchronously using callbacks and Operation.add_done_callback More info: https://googleapis.dev/python/google-api-core/1.14.3/futures.html """ - result = operation_future.result() + operation_future.result() response.add_done_callback(callback) diff --git a/examples/dialogflow-webhook-example/README.md b/examples/dialogflow-webhook-example/README.md index 0fe55e4cef..38b287e484 100644 --- a/examples/dialogflow-webhook-example/README.md +++ b/examples/dialogflow-webhook-example/README.md @@ -85,9 +85,9 @@ This example connects to a Cloud Firestore with a collection with the following } Examples how to add data to a collection can be found [here](https://cloud.google.com/firestore/docs/quickstart-servers#add_data). - + from google.cloud import firestore - + user_dict= { u'user_id': u'123456', u'first_name': u'Pedro', diff --git a/examples/dlp/cloud_function_example/README.md b/examples/dlp/cloud_function_example/README.md index 9edd15571e..b822ec12c6 100644 --- a/examples/dlp/cloud_function_example/README.md +++ b/examples/dlp/cloud_function_example/README.md @@ -1,5 +1,5 @@ # Redacting Sensitive Data Using the DLP API - + This example illustrates how to use the DLP api in a Cloud Function to redact sensitive data from log exports. The scrubbed logs will then be posted to a Pub/Sub topic to be ingested elsewhere. diff --git a/examples/dlp/cloud_function_example/tests/cloud_function_test.py b/examples/dlp/cloud_function_example/tests/cloud_function_test.py index 4116c00cd9..90e4701e3e 100644 --- a/examples/dlp/cloud_function_example/tests/cloud_function_test.py +++ b/examples/dlp/cloud_function_example/tests/cloud_function_test.py @@ -39,7 +39,7 @@ def test_build_deidentify_config(self): } } ] - } + } } generated_config = main._build_deidentify_config(info_type_list) self.assertDictEqual(expected_config, generated_config) diff --git a/examples/e2e-home-appliance-status-monitoring/README.md b/examples/e2e-home-appliance-status-monitoring/README.md index 6c799d9ed4..9c4ff53129 100644 --- a/examples/e2e-home-appliance-status-monitoring/README.md +++ b/examples/e2e-home-appliance-status-monitoring/README.md @@ -4,7 +4,7 @@ The popularization of IoT devices and the evolvement of machine learning technol * Machine learning model development using Tensorflow and training using Cloud Machine Learning Engine (CMLE) * Machine Learning model serving using CMLE together with App Engine as frontend * Data visualization and exploration using Colab -![system architecture](https://storage.googleapis.com/gcp_blog/img/arch.jpg) +![system architecture](https://storage.googleapis.com/gcp_blog/img/arch.jpg) ## Steps to deploy the demo system @@ -41,8 +41,8 @@ You also need to enable the following APIs in the APIs & Services menu. * Cloud PubSub API ### Step 1. Deploy a trained ML model in Cloud ML Engine. -You can download our trained model [here](https://storage.googleapis.com/gcp_blog/e2e_demo/model.tar) or you can train your own model using the `ml/start.sh`. -Notice: you need to enable CLoud ML Engine API first. +You can download our trained model [here](https://storage.googleapis.com/gcp_blog/e2e_demo/model.tar) or you can train your own model using the `ml/start.sh`. +Notice: you need to enable CLoud ML Engine API first. If you are using our trained model: ```shell @@ -84,7 +84,7 @@ REGION="your-application-region" gcloud ml-engine models create EnergyDisaggregationModel \ --regions ${REGION} \ --project ${GOOGLE_PROJECT_ID} - + # create a model version gcloud ml-engine versions create v01 \ --model EnergyDisaggregationModel \ @@ -96,7 +96,7 @@ gcloud ml-engine versions create v01 \ ``` ### Step 2. Deploy server. -Type in the following commands to start server in app engine. +Type in the following commands to start server in app engine. ```shell cd e2e_demo/server cp ${GOOGLE_APPLICATION_CREDENTIALS} . @@ -135,8 +135,8 @@ bq --project_id ${GOOGLE_PROJECT_ID} mk \ ``` ### Step 3. Setup your Cloud IoT Client(s) -Follow the instructions below to set up your client(s). -Note: you need to enable the Cloud IoT API first. +Follow the instructions below to set up your client(s). +Note: you need to enable the Cloud IoT API first. ```shell # You need to specify the IDs for cloud iot registry and the devices you want. # See more details for permitted characters and sizes for each resource: @@ -150,7 +150,7 @@ gcloud --project ${GOOGLE_PROJECT_ID} iot registries create ${REGISTRY_ID} \ # generates key pair for setting in Cloud IoT device. # The rs256.key generated by the following command would be used to create JWT. -ssh-keygen -t rsa -b 4096 -f ./rs256.key +ssh-keygen -t rsa -b 4096 -f ./rs256.key # Press "Enter" twice openssl rsa -in ./rs256.key -pubout -outform PEM -out ./rs256.pub @@ -179,9 +179,9 @@ pip install jupyter jupyter notebook ``` -*notebook/EnergyDisaggregationDemo_View.ipynb* allows you to view raw power consumption data and our model's prediction results in almost real time. It pulls data from our server's pubsub topic for visualization. Fill in the necessary information in the *Configuration* block and run all the cells. +*notebook/EnergyDisaggregationDemo_View.ipynb* allows you to view raw power consumption data and our model's prediction results in almost real time. It pulls data from our server's pubsub topic for visualization. Fill in the necessary information in the *Configuration* block and run all the cells. -*notebook/EnergyDisaggregationDemo_Client.ipynb* simulates multiple smart meters by reading in power consumption data from a real world dataset and sends the readings to our server. All Cloud IoT Core related code resides in this notebook. Fill in the necessary information in the *Configuration* block and run all the cells, once you see messages being sent you should be able to see plots like the one shown below in *notebook/EnergyDisaggregationDemo_View.ipynb*. +*notebook/EnergyDisaggregationDemo_Client.ipynb* simulates multiple smart meters by reading in power consumption data from a real world dataset and sends the readings to our server. All Cloud IoT Core related code resides in this notebook. Fill in the necessary information in the *Configuration* block and run all the cells, once you see messages being sent you should be able to see plots like the one shown below in *notebook/EnergyDisaggregationDemo_View.ipynb*. ![Demo system sample output](https://storage.googleapis.com/gcp_blog/img/demo03.gif) diff --git a/examples/gce-to-adminsdk/README.md b/examples/gce-to-adminsdk/README.md index 1c17a3b4bd..1c2d24b3fd 100644 --- a/examples/gce-to-adminsdk/README.md +++ b/examples/gce-to-adminsdk/README.md @@ -1,24 +1,24 @@ # GCE access to Google AdminSDK -## Introduction +## Introduction -This package provides basic instruction and code snippets (in python), to help users manage access to [Google's Admin SDK](https://developers.google.com/admin-sdk/) using GCE's [service account](https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances) identity. +This package provides basic instruction and code snippets (in python), to help users manage access to [Google's Admin SDK](https://developers.google.com/admin-sdk/) using GCE's [service account](https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances) identity. When developing code locally (i.e. laptop), best practice is to use a [service account key](https://cloud.google.com/iam/docs/creating-managing-service-account-keys) to access GCP resources. Through _domain-wide delegation of authority_, the service account can impersonate other G Suite users, and gain access to Google Admin SDK APIs. Using a service account key allows the developer to call the _with_subject_ function (of the [oauth2 module](https://google-auth.readthedocs.io/en/latest/reference/google.oauth2.service_account.html)), and assume the delegated role for Admin SDK access. But when running on GCE, there is no _with_subject_ method, as it's not a part of the [google.auth](https://google-auth.readthedocs.io/en/latest/reference/google.auth.html#google.auth.default) package. This causes heartache, as one strives for a single code base that runs both locally, and on GCE. (See https://github.com/googleapis/google-auth-library-python/issues/310). -Building upon a [function](https://github.com/GoogleCloudPlatform/forseti-security/blob/c8d1485e5c88673d8c6190ba0e9a7c22013db385/google/cloud/forseti/common/gcp_api/api_helpers.py#L29-L66) from [Forseti Security](https://forsetisecurity.org/), [main.py](./main.py) provides an example creating credential object(s) with authorization to the Admin Directory API, using service account key file or a GCE service account identity. +Building upon a [function](https://github.com/GoogleCloudPlatform/forseti-security/blob/c8d1485e5c88673d8c6190ba0e9a7c22013db385/google/cloud/forseti/common/gcp_api/api_helpers.py#L29-L66) from [Forseti Security](https://forsetisecurity.org/), [main.py](./main.py) provides an example creating credential object(s) with authorization to the Admin Directory API, using service account key file or a GCE service account identity. ## Requirements -The solution relies on domain-wide delegation of authority. Following this [process](https://developers.google.com/admin-sdk/directory/v1/guides/delegation), a _Service Account_ gets created with delegated access enabled, and then a defined set of scopes allowed for the service account's clientId. Only users (delegated subjects) with access to the Admin APIs can access Admin SDK Directory API. In this example, we recommend creating a unique user account for delegated access, and attaching a custom AdminRole that grants `admin.directory.group.readonly` only (least privileged access). +The solution relies on domain-wide delegation of authority. Following this [process](https://developers.google.com/admin-sdk/directory/v1/guides/delegation), a _Service Account_ gets created with delegated access enabled, and then a defined set of scopes allowed for the service account's clientId. Only users (delegated subjects) with access to the Admin APIs can access Admin SDK Directory API. In this example, we recommend creating a unique user account for delegated access, and attaching a custom AdminRole that grants `admin.directory.group.readonly` only (least privileged access). **NOTE:** The delegated subject must have logged in at least once and accepted the G Suite Terms of Service ### Service Account -For the service account to be a `signer`, it requires the `roles/iam.serviceAccountTokenCreator` on itself. Yes, it needs to permissions to perform actions on itself. Through the console, select _IAM & admin -> Service accounts_, find the service account that you plan to use for these tests, and check the checkbox. On the right, under permissions, click Add Member, and add the service account name, and select the _Role -> Service Accounts -> Service Account Token Creator_. Below is an example of what the minimum policy should look like. +For the service account to be a `signer`, it requires the `roles/iam.serviceAccountTokenCreator` on itself. Yes, it needs to permissions to perform actions on itself. Through the console, select _IAM & admin -> Service accounts_, find the service account that you plan to use for these tests, and check the checkbox. On the right, under permissions, click Add Member, and add the service account name, and select the _Role -> Service Accounts -> Service Account Token Creator_. Below is an example of what the minimum policy should look like. $ gcloud iam service-accounts get-iam-policy demigod@example.iam.gserviceaccount.com bindings: @@ -27,21 +27,21 @@ For the service account to be a `signer`, it requires the `roles/iam.serviceAcco role: roles/iam.serviceAccountTokenCreator -### Delegated Subject +### Delegated Subject -The delegated subject should be a G Suite "headless user"; Or a user that will never log in after the initial log on to accept the G Suite Terms. There are a few important properties of this user that should be set. +The delegated subject should be a G Suite "headless user"; Or a user that will never log in after the initial log on to accept the G Suite Terms. There are a few important properties of this user that should be set. 1. Directory sharing (under User Information) - Best to turn off (Optional) - 2. Admin roles and privileges - First go to [Admin roles](https://support.google.com/a/answer/2406043), and create a role with **Admin API Privileges** Group Read Only. Then attach this role to the user. + 2. Admin roles and privileges - First go to [Admin roles](https://support.google.com/a/answer/2406043), and create a role with **Admin API Privileges** Group Read Only. Then attach this role to the user. -## Permissions Model +## Permissions Model -The permission model consists of three different components, and as shown in the figure below, requests will only be authorized (ALLOW) in the union space. +The permission model consists of three different components, and as shown in the figure below, requests will only be authorized (ALLOW) in the union space. ![](./pics/permission_model.png "Permission model") -### Subject Scopes +### Subject Scopes ``` GROUP_READ_SCOPES = [ 'https://www.googleapis.com/auth/admin.directory.group.readonly' @@ -57,17 +57,17 @@ The permission model consists of three different components, and as shown in the ![](./pics/admin_role.png "Admin Role") -## Installation +## Installation $ cd $ virtualenv -p python3 venv $ source venv/bin/activate - $ pip install -r requirements.txt + $ pip install -r requirements.txt $ ./main.py --group bears@example.com --delegated-subject axe@example.com ## Appendix -### To Dos +### To Dos - Add support for CloudFunctions diff --git a/examples/gcs-fixity-function/README.md b/examples/gcs-fixity-function/README.md index ba9d9236eb..f816e33d05 100644 --- a/examples/gcs-fixity-function/README.md +++ b/examples/gcs-fixity-function/README.md @@ -20,7 +20,7 @@ _* If function is invoked by listening to changes on a GCS bucket, then Fixity i This Fixity function is configured for 1 Google Cloud Storage bucket containing any number of Bags. ### Bags -Bags should be created using the [BagIt Specification (RFC 8493)](https://tools.ietf.org/html/rfc8493). A Bag is a directory in a GCS bucket that contains a `data/` directory containing archived files. +Bags should be created using the [BagIt Specification (RFC 8493)](https://tools.ietf.org/html/rfc8493). A Bag is a directory in a GCS bucket that contains a `data/` directory containing archived files. Any number of bags can be created in a GCS bucket, **as long as each bag contains a `data/` directory**. In the following example, this function will recognize 4 bags: `collection-europe/italy/`, `collection-europe/france/`, `collection-na/1700s/`, and `uncategorized/`. ``` diff --git a/examples/gcs-fixity-function/docs/setup.md b/examples/gcs-fixity-function/docs/setup.md index a225e358ef..c2370f9ed7 100644 --- a/examples/gcs-fixity-function/docs/setup.md +++ b/examples/gcs-fixity-function/docs/setup.md @@ -4,7 +4,7 @@ Clone this repository and run locally, or use Cloud Shell to walk through the st [![Open in Cloud Shell](https://gstatic.com/cloudssh/images/open-btn.png)](https://ssh.cloud.google.com/cloudshell/open?page=shell&cloudshell_git_repo=https://github.com/GoogleCloudPlatform/professional-services&cloudshell_tutorial=examples%2Fgcs-fixity-function%2Fdocs%2Fsetup.md) ## Prepare -To setup this function, run through these instructions from the root of the repository or using Cloud Shell. +To setup this function, run through these instructions from the root of the repository or using Cloud Shell. Set the following environment variables, replacing the values with those for your project and bucket: ```bash @@ -73,7 +73,7 @@ export SCHEDULE="1 of month 08:00" ``` Then run the following. If prompted to enable any APIs, enter `y` for Yes. ```bash -gcloud scheduler jobs create pubsub fixity-${BUCKET_NAME} --schedule="${SCHEDULE}" --topic=fixity-${BUCKET_NAME}-topic --message-body={} +gcloud scheduler jobs create pubsub fixity-${BUCKET_NAME} --schedule="${SCHEDULE}" --topic=fixity-${BUCKET_NAME}-topic --message-body={} ``` Once the above has been created, you can run Fixity on demand by visiting [https://console.cloud.google.com/cloudscheduler]. diff --git a/examples/gcs-fixity-function/scripts/schema.json b/examples/gcs-fixity-function/scripts/schema.json index 68213b2143..af5f0d5c3d 100644 --- a/examples/gcs-fixity-function/scripts/schema.json +++ b/examples/gcs-fixity-function/scripts/schema.json @@ -40,4 +40,3 @@ "mode": "NULLABLE" } ] - \ No newline at end of file diff --git a/examples/gcs-fixity-function/src/main.py b/examples/gcs-fixity-function/src/main.py index 004ba826d1..3f164cd9ca 100644 --- a/examples/gcs-fixity-function/src/main.py +++ b/examples/gcs-fixity-function/src/main.py @@ -24,8 +24,8 @@ from datetime import datetime from google.cloud import storage, bigquery -FIXITY_MANIFEST_NAME = 'manifest-md5sum.txt' -DATA_DIRECTORY_NAME = 'data' # Do not include trailing slash here +FIXITY_MANIFEST_NAME = "manifest-md5sum.txt" +DATA_DIRECTORY_NAME = "data" # Do not include trailing slash here def main(event, context): @@ -34,12 +34,12 @@ def main(event, context): event (obj): PubSub event data context (obj): Object that contains event context information """ - if 'data' in event: - event = json.loads(base64.b64decode(event['data']).decode('utf-8')) - print('Event: ' + str(event)) - print('Context: ' + str(context)) - if event == {} or is_manifest(context) == False: - bucket_name = os.environ['BUCKET'] + if "data" in event: + event = json.loads(base64.b64decode(event["data"]).decode("utf-8")) + print("Event: " + str(event)) + print("Context: " + str(context)) + if event == {} or is_manifest(context) is False: + bucket_name = os.environ["BUCKET"] storage_client = storage.Client() bucket = storage_client.get_bucket(bucket_name) bags = get_bags(bucket, None) @@ -56,7 +56,7 @@ def match_bag(context, bags): context (obj): Object that contains event context information bags (set): List of bags to match against """ - filename = context.resource['name'] + filename = context.resource["name"] for bag in bags: if bag in filename: return [bag] @@ -70,9 +70,9 @@ def get_bags(bucket, top_prefix=None): prefixes = set() top_prefixes = get_prefixes(bucket, top_prefix) for prefix in top_prefixes: - if prefix.endswith(f'{DATA_DIRECTORY_NAME}/'): + if prefix.endswith(f"{DATA_DIRECTORY_NAME}/"): prefixes.add( - re.sub(r'\/' + re.escape(DATA_DIRECTORY_NAME) + r'\/$', '', + re.sub(r"\/" + re.escape(DATA_DIRECTORY_NAME) + r"\/$", "", prefix)) # remove data/ from bag name else: prefixes.update(get_bags(bucket, prefix)) @@ -85,7 +85,7 @@ def get_prefixes(bucket, prefix=None): bucket (obj): Bucket object to retrieve prefixes against prefix (str): Prefix to look for nested prefixes underneath """ - iterator = bucket.list_blobs(prefix=prefix, delimiter='/') + iterator = bucket.list_blobs(prefix=prefix, delimiter="/") prefixes = [] for page in iterator.pages: prefixes.extend(list(page.prefixes)) @@ -98,7 +98,7 @@ def is_manifest(context): Args: context (obj): Object that contains event context information """ - return FIXITY_MANIFEST_NAME in context.resource['name'] + return FIXITY_MANIFEST_NAME in context.resource["name"] class BagIt: @@ -112,7 +112,7 @@ def __init__(self, bucket, bag): bag (str): Name of bag to run Fixity against.∂∂∂∂ """ self.bag = bag - self.bucket_name = os.environ['BUCKET'] + self.bucket_name = os.environ["BUCKET"] self.bucket = bucket self.blobs = self.get_blobs() self.bigquery_client = bigquery.Client() @@ -125,7 +125,7 @@ def commit(self): def get_blobs(self): """Retrieve files with metadata present in a bag""" blobs = self.bucket.list_blobs( - prefix=f'{self.bag}/{DATA_DIRECTORY_NAME}/') + prefix=f"{self.bag}/{DATA_DIRECTORY_NAME}/") blobs_with_metadata = [] for blob in blobs: blobs_with_metadata.append(self.get_metadata(blob.name)) @@ -139,44 +139,53 @@ def get_metadata(self, blob_name): def decode_hash(hash_bytes): return binascii.hexlify( - base64.urlsafe_b64decode(hash_bytes)).decode('utf-8') + base64.urlsafe_b64decode(hash_bytes)).decode("utf-8") blob = self.bucket.get_blob(blob_name) return { - 'name': blob.name, - 'id': blob.id, - 'size': blob.size, - 'updated': blob.updated, - 'crc32c': decode_hash(blob.crc32c), - 'md5sum': decode_hash(blob.md5_hash) + "name": blob.name, + "id": blob.id, + "size": blob.size, + "updated": blob.updated, + "crc32c": decode_hash(blob.crc32c), + "md5sum": decode_hash(blob.md5_hash), } def write_to_bigquery(self): """Writes dict object into BigQuery using Streaming Inserts""" - dataset_id = 'fixity_data' # replace with your dataset ID - table_id = 'records' # replace with your table ID + dataset_id = "fixity_data" # replace with your dataset ID + table_id = "records" # replace with your table ID table_ref = self.bigquery_client.dataset(dataset_id).table(table_id) table = self.bigquery_client.get_table(table_ref) # API request rows_to_insert = list( map( - lambda blob: (self.bucket_name, self.bag, blob['name'], blob[ - 'size'], blob['updated'], blob['crc32c'], blob['md5sum'], - self.fixity_date), self.blobs)) + lambda blob: ( + self.bucket_name, + self.bag, + blob["name"], + blob["size"], + blob["updated"], + blob["crc32c"], + blob["md5sum"], + self.fixity_date, + ), + self.blobs, + )) try: errors = self.bigquery_client.insert_rows(table, rows_to_insert) assert errors == [] print( - f'Wrote {len(rows_to_insert)} records to BigQuery for {self.bucket_name}:{self.bag}' + f"Wrote {len(rows_to_insert)} records to BigQuery for {self.bucket_name}:{self.bag}" ) except AssertionError: - raise AssertionError('Error with BigQuery streaming inserts') + raise AssertionError("Error with BigQuery streaming inserts") def write_and_upload_manifest(self): """Writes a manifest file into bag top-level directory""" manifest = "" for blob in self.blobs: - manifest = manifest + blob['name'] + '\t' + blob['md5sum'] + '\n' + manifest = manifest + blob["name"] + "\t" + blob["md5sum"] + "\n" - manifest_blob = self.bucket.blob(f'{self.bag}/{FIXITY_MANIFEST_NAME}') + manifest_blob = self.bucket.blob(f"{self.bag}/{FIXITY_MANIFEST_NAME}") manifest_blob.upload_from_string(manifest) - print(f'Wrote manifest file for {self.bucket_name}:{self.bag}') + print(f"Wrote manifest file for {self.bucket_name}:{self.bag}") diff --git a/examples/iot-nirvana/app-engine/src/main/webapp/WEB-INF/logging.properties b/examples/iot-nirvana/app-engine/src/main/webapp/WEB-INF/logging.properties index 19e9bf064c..ad9a38d644 100644 --- a/examples/iot-nirvana/app-engine/src/main/webapp/WEB-INF/logging.properties +++ b/examples/iot-nirvana/app-engine/src/main/webapp/WEB-INF/logging.properties @@ -3,7 +3,7 @@ # # To use this configuration, copy it into your application's WEB-INF # folder and add the following to your appengine-web.xml: -# +# # # # diff --git a/examples/iot-nirvana/pipeline/pom.xml b/examples/iot-nirvana/pipeline/pom.xml index 345884b680..78c82e48fc 100644 --- a/examples/iot-nirvana/pipeline/pom.xml +++ b/examples/iot-nirvana/pipeline/pom.xml @@ -58,7 +58,7 @@ - + org.apache.beam diff --git a/examples/kubeflow-fairing-example/README.md b/examples/kubeflow-fairing-example/README.md index 5ac998f71c..925c535181 100644 --- a/examples/kubeflow-fairing-example/README.md +++ b/examples/kubeflow-fairing-example/README.md @@ -1,7 +1,7 @@ -# Kubeflow Fairing Examples -`Kubeflow Fairing` is a Python package that streamlines the process of building, training, and deploying machine learning -(ML) models in a hybrid cloud environment. By using Kubeflow Fairing and adding a few lines of code, you can run your ML -training job locally or in the cloud, directly from Python code or a Jupyter notebook. After your training job is +# Kubeflow Fairing Examples +`Kubeflow Fairing` is a Python package that streamlines the process of building, training, and deploying machine learning +(ML) models in a hybrid cloud environment. By using Kubeflow Fairing and adding a few lines of code, you can run your ML +training job locally or in the cloud, directly from Python code or a Jupyter notebook. After your training job is complete, you can use Kubeflow Fairing to deploy your trained model as a prediction endpoint. In the repo, we provided three notebooks to demonstrate the usage of Kubeflow Faring: @@ -10,25 +10,25 @@ In the repo, we provided three notebooks to demonstrate the usage of Kubeflow Fa * Train an XGBoost model remotely on Kubeflow cluster, with Kubeflow Fairing * Train an XGBoost model remotely on AI Platform training, with Kubeflow Fairing * Deploy a trained model to Kubeflow, and call the deployed endpoint for predictions, with Kubeflow Fairing - + - Fairing_Tensorflow_Keras: this notebook demonstrate how to * Train an Keras model in a local notebook, * Train an Keras model remotely on Kubeflow cluster (distributed), with Kubeflow Fairing * Train an Keras model remotely on AI Platform training, with Kubeflow Fairing * Deploy a trained model to Kubeflow, with Kubeflow Fairing - -- Fairing_Py_File: this notebook introduces you to using Kubeflow Fairing to train the model, which is developed + +- Fairing_Py_File: this notebook introduces you to using Kubeflow Fairing to train the model, which is developed using tensorflow or keras and enclosed in python files * Train an Tensorflow model remotely on Kubeflow cluster (distributed), with Kubeflow Fairing * Train an Tensorflow model remotely on AI Platform training, with Kubeflow Fairing -**Note that Kubeflow Fairing doesn't require kubeflow cluster as pre-requisite. +**Note that Kubeflow Fairing doesn't require kubeflow cluster as pre-requisite. Kubeflow Fairing + AI platform is a valid combination** ## Setups: ### Prerequisites -Before you follow the instructions below to deploy your own kubeflow cluster, -you need a Google cloud project if you don't have one. You can find detailed instructions +Before you follow the instructions below to deploy your own kubeflow cluster, +you need a Google cloud project if you don't have one. You can find detailed instructions [here](https://cloud.google.com/dataproc/docs/guides/setup-project). - Make sure the following API & Services are enabled. @@ -44,15 +44,15 @@ you need a Google cloud project if you don't have one. You can find detailed ins ```bash $ export PROJECT_ID=[your-google-project-id] $ export GCP_BUCKET=[your-google-cloud-storage-bucket-name] - $ export DEPLOYMENT_NAME=[your-deployment-name] + $ export DEPLOYMENT_NAME=[your-deployment-name] ``` - + - Deploy Kubeflow Cluster on GCP. The running of training and serving jobs on kubeflow will require a kubeflow deployment. Please refer the link [here](https://www.kubeflow.org/docs/gke/deploy/) to set up your Kubeflow deployment in your environment. ### Setup Environment -Please refer the link [here](https://www.kubeflow.org/docs/fairing/gcp-local-notebook/) to properly +Please refer the link [here](https://www.kubeflow.org/docs/fairing/gcp-local-notebook/) to properly setup the environments. The key steps are summarized as follows - Create service account ```bash @@ -87,17 +87,17 @@ setup the environments. The key steps are summarized as follows pip install git+https://github.com/kubeflow/fairing@master ``` ### Running Notebook -Please not that the above configuration is required for notebook service running outside Kubeflow environment. -And the examples demonstrated are fully tested on notebook service outside Kubeflow cluster also, which +Please not that the above configuration is required for notebook service running outside Kubeflow environment. +And the examples demonstrated are fully tested on notebook service outside Kubeflow cluster also, which means it could be - Notebook running on your personal computer - Notebook on AI Platform, Google Cloud Platform - Essentially notebook on any environment outside Kubeflow cluster - -For notebook running inside Kubeflow cluster, for example JupytHub will be deployed together with kubeflow, the -environemt variables, e.g. service account, projects and etc, should have been pre-configured while + +For notebook running inside Kubeflow cluster, for example JupytHub will be deployed together with kubeflow, the +environemt variables, e.g. service account, projects and etc, should have been pre-configured while setting up the cluster. The fairing package will also be pre-installed together with the deployment. **The only thing -need to be aware is that docker is usually not installed, which would require `cluster` as the builder option as +need to be aware is that docker is usually not installed, which would require `cluster` as the builder option as explained in the following section** ## Concepts of Kubeflow Fairing diff --git a/examples/ml-audio-content-profiling/README.md b/examples/ml-audio-content-profiling/README.md index f581ac27a4..0ecc955dc1 100644 --- a/examples/ml-audio-content-profiling/README.md +++ b/examples/ml-audio-content-profiling/README.md @@ -1,15 +1,15 @@ Introduction -============ +============ Many consumer-facing applications allow creators to upload audio files as a part of the creative experience. If you’re running an application with a similar use case, you may want to extract the text from the audio file and then classify based on the content. For example, you may want to categorize content or add appropriate tags for search indexing. The process of having humans listening to content is problematic if you have a large volume of content. Having users supplying their own tags may also be problematic because they may not include all useful tags or they may tag inaccurately. -Through the use of machine learning, you can build an automated categorization pipeline. This solution describes an approach to automating the review process for audio files using machine learning APIs. +Through the use of machine learning, you can build an automated categorization pipeline. This solution describes an approach to automating the review process for audio files using machine learning APIs. Assumptions ============ -This example only supports the encoding formats currently supported by the +This example only supports the encoding formats currently supported by the [Speech API](https://cloud.google.com/speech-to-text/docs/encoding). If you try to use .mp3 or another file type, then you may need to perform preprocessing to convert @@ -18,15 +18,15 @@ your file into an accepted encoding type.

Background on Serverless Data Processing Pipelines

-The solution involves creating five GCS buckets using default configuration settings. Because of -this, no [object lifecycle management](https://cloud.google.com/storage/docs/lifecycle) policies are -configured. If you would like to specify different retention policies you can [enable](https://cloud.google.com/storage/docs/managing-lifecycles#enable) +The solution involves creating five GCS buckets using default configuration settings. Because of +this, no [object lifecycle management](https://cloud.google.com/storage/docs/lifecycle) policies are +configured. If you would like to specify different retention policies you can [enable](https://cloud.google.com/storage/docs/managing-lifecycles#enable) this using `gsutil` while following the deployment process. -During processing, audio files are moved between buckets as they progress -through various stages of the pipeline. Specifically, the audio file should first be moved to the -`staging` bucket. After the Speech API completes processing the file, the audio file is moved from -the `staging` bucket to either the `processed` or `error` bucket, depending on whether the Speech +During processing, audio files are moved between buckets as they progress +through various stages of the pipeline. Specifically, the audio file should first be moved to the +`staging` bucket. After the Speech API completes processing the file, the audio file is moved from +the `staging` bucket to either the `processed` or `error` bucket, depending on whether the Speech API returned a success or error response.

Installation/Set-up

@@ -67,7 +67,7 @@ Step 3: [View Results](#view-results) ### Step 1

Clone the repository and change your directory into the root folder

-1. In your terminal type the following to clone the professional-services repository: +1. In your terminal type the following to clone the professional-services repository: ```` git clone https://github.com/GoogleCloudPlatform/professional-services @@ -86,7 +86,7 @@ cd tools/ml-audio-content-moderation/ cd app ```` -2a. Compile the angular frontend application. Note that this requires [installing Angular](https://angular.io/cli) on +2a. Compile the angular frontend application. Note that this requires [installing Angular](https://angular.io/cli) on your device and compiling the output. ```` @@ -122,10 +122,10 @@ repository. gcloud app deploy ```` -You will be prompted to use a region to serve the location from. You may pick any region, but you +You will be prompted to use a region to serve the location from. You may pick any region, but you cannot change this value later. -You can verify that the app was deployed correctly by navigating to +You can verify that the app was deployed correctly by navigating to https://`$PROJECT`.appspot.google.com. You should see the following UI: ![text](img/app_home.png?raw=true) @@ -168,7 +168,7 @@ export SUBSCRIPTION_NAME=pull_stt_ids gcloud pubsub subscriptions create $SUBSCRIPTION_NAME --topic=$TOPIC_NAME ```` -3. Generate a static UUID that you will need in each of your bucket names to ensure that they are +3. Generate a static UUID that you will need in each of your bucket names to ensure that they are unique. 3a. First install uuidgen. If it is already installed or if you are using Cloud Shell, skip this step. @@ -214,7 +214,7 @@ gsutil mb gs://$output_bucket ```` -4. Deploy first Cloud Function to Send STT API +4. Deploy first Cloud Function to Send STT API Change directories into the send_stt_api_function directory @@ -306,8 +306,8 @@ gcloud functions deploy nlp_api \ 1. [Install Terraform](https://learn.hashicorp.com/terraform/getting-started/install) -2. Copy `terraform.tfvars.sample` to create the `terraform.tfvars` file. -You must input the `project_id` inside of the quotes. If you wish to edit any of the other +2. Copy `terraform.tfvars.sample` to create the `terraform.tfvars` file. +You must input the `project_id` inside of the quotes. If you wish to edit any of the other default values for the other variables specified in `variables.tf`, you may add them in your `terraform.tfvars`. @@ -342,32 +342,32 @@ All of the resources should be deployed. ### View Results

Test it out

-1. You can start by trying to upload an audio file in GCS. You can do this using `gsutil` or in the -UI under the staging bucket. This will trigger `send_stt_api_function`. This submits the +1. You can start by trying to upload an audio file in GCS. You can do this using `gsutil` or in the +UI under the staging bucket. This will trigger `send_stt_api_function`. This submits the request to the Speech API and publishes the job id to PubSub. -2. By default, `read_stt_api_function` is scheduled to run every ten minutes, as configured by Cloud +2. By default, `read_stt_api_function` is scheduled to run every ten minutes, as configured by Cloud Scheduler. If you want to test it earlier, you can navigate to Cloud Scheduler in the console and -click 'Run Now'. This will pull from the PubSub topic to grab any job ids. It then calls -the Speech API to see if the job is complete. If it is not complete, it repushes the id back to +click 'Run Now'. This will pull from the PubSub topic to grab any job ids. It then calls +the Speech API to see if the job is complete. If it is not complete, it repushes the id back to PubSub. If it is complete, it extracts the transcript from the Speech API response. Finally, it then saves this -transcript in GCS in the transcription files bucket. It also moves the audio file from the staging +transcript in GCS in the transcription files bucket. It also moves the audio file from the staging staging bucket to the processed audio bucket. If there were any errors, it moves the audio file instead to the error audio bucket. ![](img/cloud_scheduler.png) -3. The upload in the previous step to the transcription files bucket then triggers the other two -functions: `perpsective_api_function` and `nlp_api_function`. Each of these downloads the -transcription file from GCS and then calls its respective API with it to receive insight about the -probability of toxic content in the file as well as entities mentioned. Each then publishes the +3. The upload in the previous step to the transcription files bucket then triggers the other two +functions: `perpsective_api_function` and `nlp_api_function`. Each of these downloads the +transcription file from GCS and then calls its respective API with it to receive insight about the +probability of toxic content in the file as well as entities mentioned. Each then publishes the response into its respective GCS bucket. 4. You can view the result of the entire pipeline by using the deployed App Engine app. Navigate -to: https://`[PROJECT_ID]`.appspot.com. This will present a table of all files that have been -uploaded and which already have completed processing through the pipeline. You can click through +to: https://`[PROJECT_ID]`.appspot.com. This will present a table of all files that have been +uploaded and which already have completed processing through the pipeline. You can click through each file to view the resulting transcript, toxicity, and entity/sentiment analysis. ![](img/app_home_files.png) diff --git a/examples/ml-audio-content-profiling/read_stt_api_function/main.py b/examples/ml-audio-content-profiling/read_stt_api_function/main.py index 7fc7941ca0..94387bb363 100644 --- a/examples/ml-audio-content-profiling/read_stt_api_function/main.py +++ b/examples/ml-audio-content-profiling/read_stt_api_function/main.py @@ -392,7 +392,7 @@ def main(data: dict, context) -> None: # Speech-to-text returned an empty response. if stt_response is None: error_message = ''' - Speech-to-text API request returned empty + Speech-to-text API request returned empty response.''' logging.error(error_message) copy_file(gcs_client, staging_bucket_name, @@ -420,8 +420,8 @@ def main(data: dict, context) -> None: job['file']) else: error_message = ''' - STT API request completed. Parsing the - output returned a blank response. + STT API request completed. Parsing the + output returned a blank response. Transcription may be blank, indicating no audio found.''' logging.error(error_message) diff --git a/examples/ml-audio-content-profiling/send_stt_api_function/main.py b/examples/ml-audio-content-profiling/send_stt_api_function/main.py index f85a196956..8cb8f6a440 100644 --- a/examples/ml-audio-content-profiling/send_stt_api_function/main.py +++ b/examples/ml-audio-content-profiling/send_stt_api_function/main.py @@ -159,7 +159,7 @@ def copy_file(client: google.cloud.storage.Client, source_bucket_name: str, Returns: None; Logs message to Stackdriver. """ - log_message = (f'Starting copy file {file_name} from {source_bucket_name}' + log_message = (f'Starting copy file {file_name} from {source_bucket_name}' f'to {destination_bucket_name}.') logging.info(log_message) source_bucket = client.get_bucket(source_bucket_name) diff --git a/examples/ml-audio-content-profiling/tests/test_nlp_api_function.py b/examples/ml-audio-content-profiling/tests/test_nlp_api_function.py index 9647396d2b..31339e19c9 100644 --- a/examples/ml-audio-content-profiling/tests/test_nlp_api_function.py +++ b/examples/ml-audio-content-profiling/tests/test_nlp_api_function.py @@ -77,13 +77,13 @@ def test_format_api_result(self): setattr(response, 'language', "en") text = """ - I'm pretty good. It's been a long week, but you know pretty good + I'm pretty good. It's been a long week, but you know pretty good very excited about a very cool episode about public data sets. """ actual_result = main.format_nlp_api_results(response, text) expected_result = { 'text': """ - I'm pretty good. It's been a long week, but you know pretty good + I'm pretty good. It's been a long week, but you know pretty good very excited about a very cool episode about public data sets. """, 'nlp_response': [ diff --git a/examples/ml-audio-content-profiling/tests/test_perspective_api_function.py b/examples/ml-audio-content-profiling/tests/test_perspective_api_function.py index 7426d10b48..b9cd6035cd 100644 --- a/examples/ml-audio-content-profiling/tests/test_perspective_api_function.py +++ b/examples/ml-audio-content-profiling/tests/test_perspective_api_function.py @@ -41,25 +41,25 @@ def test_format_api_result(self): 'languages': ['en'], 'detectedLanguages': ['en']} text = {'transcript': """ - Hi and welcome to episode number 83 of the weekly - Google Cloud platform podcast. I am princess Campo - and I'm here with my colleague Mark Mendel. Hey, - Mark, how are you doing? I'm doing very very very - well. How you doing Friends Ask? I'm pretty good. It's - been a long week, but you know pretty good very - excited about a very cool episode about public data - sets. Yeah, it's super cool where we talk about how - we host all these really large data sets for all - these people to play with and do fun things with - yeah. I've used some of them before my favorite one - is we have a lot of good from GitHub. You can do - cool things with it, but it's not the only one. So - we're going to be talking about a bunch of different - ones that you can just go and use and have fun with - them. And after that we have a question of the week - that is actually a question of the week whose answer - comes from someone. We interviewed in the future. So - at some point we'll have him on the podcast. But for + Hi and welcome to episode number 83 of the weekly + Google Cloud platform podcast. I am princess Campo + and I'm here with my colleague Mark Mendel. Hey, + Mark, how are you doing? I'm doing very very very + well. How you doing Friends Ask? I'm pretty good. It's + been a long week, but you know pretty good very + excited about a very cool episode about public data + sets. Yeah, it's super cool where we talk about how + we host all these really large data sets for all + these people to play with and do fun things with + yeah. I've used some of them before my favorite one + is we have a lot of good from GitHub. You can do + cool things with it, but it's not the only one. So + we're going to be talking about a bunch of different + ones that you can just go and use and have fun with + them. And after that we have a question of the week + that is actually a question of the week whose answer + comes from someone. We interviewed in the future. So + at some point we'll have him on the podcast. But for now, we have something that he """, 'start_time': '00:00:04', @@ -67,27 +67,27 @@ def test_format_api_result(self): actual_result = main.format_api_results(response, text) expected_result = {'text': """ - Hi and welcome to episode number 83 of the - weekly Google Cloud platform podcast. I am - princess Campo and I'm here with my colleague - Mark Mendel. Hey, Mark, how are you doing? I'm - doing very very very well. How you doing Friends - Ask? I'm pretty good. It's been a long week, but - you know pretty good very excited about a very - cool episode about public data sets. Yeah, it's - super cool where we talk about how we host all - these really large data sets for all these - people to play with and do fun things with yeah. - I've used some of them before my favorite one is - we have a lot of good from GitHub. You can do - cool things with it, but it's not the only one. - So we're going to be talking about a bunch of - different ones that you can just go and use and - have fun with them. And after that we have a - question of the week that is actually a question - of the week whose answer comes from someone. We - interviewed in the future. So at some point - we'll have him on the podcast. But for now, we + Hi and welcome to episode number 83 of the + weekly Google Cloud platform podcast. I am + princess Campo and I'm here with my colleague + Mark Mendel. Hey, Mark, how are you doing? I'm + doing very very very well. How you doing Friends + Ask? I'm pretty good. It's been a long week, but + you know pretty good very excited about a very + cool episode about public data sets. Yeah, it's + super cool where we talk about how we host all + these really large data sets for all these + people to play with and do fun things with yeah. + I've used some of them before my favorite one is + we have a lot of good from GitHub. You can do + cool things with it, but it's not the only one. + So we're going to be talking about a bunch of + different ones that you can just go and use and + have fun with them. And after that we have a + question of the week that is actually a question + of the week whose answer comes from someone. We + interviewed in the future. So at some point + we'll have him on the podcast. But for now, we have something that he """, 'start_time': '00:00:04', diff --git a/examples/ml-audio-content-profiling/tests/test_read_stt_api_function.py b/examples/ml-audio-content-profiling/tests/test_read_stt_api_function.py index 05b1c9fbc4..b784652d7f 100644 --- a/examples/ml-audio-content-profiling/tests/test_read_stt_api_function.py +++ b/examples/ml-audio-content-profiling/tests/test_read_stt_api_function.py @@ -73,8 +73,8 @@ def test_parse_transcript_output(self): 'results': [{ 'alternatives': [{ 'transcript': """ - Hi and welcome to episode number - 83 of the weekly Google Cloud + Hi and welcome to episode number + 83 of the weekly Google Cloud platform podcast. """, 'confidence': 0.7370642, @@ -139,8 +139,8 @@ def test_parse_transcript_output(self): {'alternatives': [{}]}]}} actual_output = main.parse_transcript_output(sample_resp) expected_output = [{'transcript': """ - Hi and welcome to episode number - 83 of the weekly Google Cloud + Hi and welcome to episode number + 83 of the weekly Google Cloud platform podcast. """, 'start_time': '00:00:04', diff --git a/examples/python-cicd-with-cloudbuilder/README.md b/examples/python-cicd-with-cloudbuilder/README.md index b524083ca5..605eee6877 100644 --- a/examples/python-cicd-with-cloudbuilder/README.md +++ b/examples/python-cicd-with-cloudbuilder/README.md @@ -1,7 +1,7 @@ # Basic Python Continuous Integration (CI) With Cloud Source Repositories (CSR) and Google Cloud Build ## Overview -This repo contains example code and instructions that show you how to use CSR and +This repo contains example code and instructions that show you how to use CSR and Google Cloud Build to automatically run unit tests and pylint upon code check-in. By following this tutorial you will learn how to build basic Python continuous integration pipelines on Google Cloud Platform (GCP). @@ -12,13 +12,13 @@ By following along with this example you will learn how to: 1. Create a cloud build trigger that will tell Google Cloud Build when to run. 1. Tie it all together by creating a cloudbuild.yaml file that tells Google Cloud Build how to execute your tests when the cloud build trigger fires, using the custom cloud builder you created. - + In order to follow along with this tutorial you'll need to: * Create or have access to an existing [GCP project](https://cloud.google.com/resource-manager/docs/creating-managing-projects). * Install and configure the [Google Cloud SDK](https://cloud.google.com/sdk). ## 1. Create a new project in Cloud Source Repositories -You'll start by creating a new repository in CSR, copying the files in this example into the CSR repository, and +You'll start by creating a new repository in CSR, copying the files in this example into the CSR repository, and commiting them to your new repository. 1. Go to [https://source.cloud.google.com/](https://source.cloud.google.com/). @@ -46,7 +46,7 @@ You can alternatively do the same using the Google Cloud SDK: ```bash gcloud source repos create $REPO_NAME ``` -1. Clone the new repository to your local machine by running the command: +1. Clone the new repository to your local machine by running the command: ```bash gcloud source repos clone $REPO_NAME. ``` @@ -62,12 +62,12 @@ You can alternatively do the same using the Google Cloud SDK: ``` ## 2. Create your code and unit tests -Creating unit tests is beyond the scope of this README, but if you review the tests in tests/ you'll quickly get the idea. -Pytest is being used as the testing suite for this project. Before proceeding make sure you can run your tests from the +Creating unit tests is beyond the scope of this README, but if you review the tests in tests/ you'll quickly get the idea. +Pytest is being used as the testing suite for this project. Before proceeding make sure you can run your tests from the command line by running this command from the root of the project: ```bash -python3 -m pytest +python3 -m pytest ``` Or if you want to be fancy and use the [coverage](https://pytest-cov.readthedocs.io/en/latest/readme.html) plug-in: @@ -100,10 +100,10 @@ TOTAL 5 0 100% Now that your tests are working locally, you can configure Google Cloud Build to run them every time you push new code. ## 3. Building a Python Cloud Build Container -To run Python-based tests in Google Cloud Build you need a Python container image used as a [cloud builder](https://cloud.google.com/cloud-build/docs/cloud-builders). -A cloud builder is just a container image with the software you need for your build steps in it. Google does not distribute a -prebuilt Python cloud builder, so a custom cloud builder is required. The code needed to build a custom Python 3 cloud build -container is located in '/python-cloud-builder' under the root of this project. +To run Python-based tests in Google Cloud Build you need a Python container image used as a [cloud builder](https://cloud.google.com/cloud-build/docs/cloud-builders). +A cloud builder is just a container image with the software you need for your build steps in it. Google does not distribute a +prebuilt Python cloud builder, so a custom cloud builder is required. The code needed to build a custom Python 3 cloud build +container is located in '/python-cloud-builder' under the root of this project. Inside that folder you will find a Dockerfile and a very minimal cloud-build.yaml. @@ -111,25 +111,25 @@ The Dockerfile specifies the software that will be inside the container image. ```Docker FROM python:3 # Start from the public Python 3 image contained in DockerHub -RUN pip install virtualenv -# Install virtualenv so that a virtual environment can be used to carry build steps forward. +RUN pip install virtualenv +# Install virtualenv so that a virtual environment can be used to carry build steps forward. ``` -The Dockerfile is enough to build the image, however you will also need a cloud-build.yaml to tell Cloud Build how to +The Dockerfile is enough to build the image, however you will also need a cloud-build.yaml to tell Cloud Build how to build and upload the resulting image to GCP. ```yaml steps: - name: 'gcr.io/cloud-builders/docker' args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/python-cloudbuild', '.' ] - # This step tells Google Cloud Build to use docker to build the Dockerfile. + # This step tells Google Cloud Build to use docker to build the Dockerfile. images: - 'gcr.io/$PROJECT_ID/python-cloudbuild' - # The resulting image is then named python-cloudbuild and uploaded to your projects container registry. + # The resulting image is then named python-cloudbuild and uploaded to your projects container registry. ``` -You don't need to change either of these files to follow this tutorial. They are included here to help you understand +You don't need to change either of these files to follow this tutorial. They are included here to help you understand the process of building custom build images. Once you're ready, run these commands from the root of the project to build and upload your custom Python cloud builder: @@ -137,13 +137,13 @@ and upload your custom Python cloud builder: cd python-cloud-builder gcloud builds submit --config=cloudbuild.yaml . ``` -This creates the custom Python cloud builder and uploads it to your GCP project's +This creates the custom Python cloud builder and uploads it to your GCP project's [container registry](https://cloud.google.com/container-registry/), which is a private -location to store container images. Your new cloud builder will be called gcr.io/$PROJECT_ID/python-cloudbuild, where +location to store container images. Your new cloud builder will be called gcr.io/$PROJECT_ID/python-cloudbuild, where $PROJECT_ID is the name of your GCP project. ## 4. Create a Google Cloud Build Trigger -Now that you've created a Python cloud builder to run your tests, you +Now that you've created a Python cloud builder to run your tests, you should [create a trigger](https://cloud.google.com/cloud-build/docs/running-builds/automate-builds) that tells Cloud Build when to run those tests. To do that, follow these steps: @@ -156,49 +156,49 @@ Build when to run those tests. To do that, follow these steps: ## 5. Create a cloudbuild.yaml file that executes your tests and runs pylint -At this point you've ran some unit tests on the command line, created a new repository in CSR, -created a Python cloud builder, and used Google Cloud Build to create build trigger that runs whenever you -push new code. In this last step you'll tie this all together and tell Google Cloud Build how to automatically run +At this point you've ran some unit tests on the command line, created a new repository in CSR, +created a Python cloud builder, and used Google Cloud Build to create build trigger that runs whenever you +push new code. In this last step you'll tie this all together and tell Google Cloud Build how to automatically run tests and run pylint to examine your code whenever a code change is pushed into CSR. In order to tell Google Cloud Builder how to run your tests, you'll need to create a file called cloudbuild.yaml in the -root of your project. Inside that file you'll and add the steps needed to execute your unit tests. For each steps you -will reference the cloud builder that was created in step 3, by it's location in the Google Container Registry. +root of your project. Inside that file you'll and add the steps needed to execute your unit tests. For each steps you +will reference the cloud builder that was created in step 3, by it's location in the Google Container Registry. -*Note: Each step specified in the cloudbuild.yaml is a separate, ephemerial run of a docker image, -however [the /workspace/ directory is preserved between runs](https://cloud.google.com/cloud-build/docs/build-config#dir). +*Note: Each step specified in the cloudbuild.yaml is a separate, ephemerial run of a docker image, +however [the /workspace/ directory is preserved between runs](https://cloud.google.com/cloud-build/docs/build-config#dir). One way to carry python packages forward is to use a virtualenv housed in /workspace/* ```yaml steps: -- name: 'gcr.io/$PROJECT_ID/python-cloudbuild' # Cloud Build automatically substitutes $PROJECT_ID for your Project ID. +- name: 'gcr.io/$PROJECT_ID/python-cloudbuild' # Cloud Build automatically substitutes $PROJECT_ID for your Project ID. entrypoint: '/bin/bash' args: ['-c','virtualenv /workspace/venv' ] - # Creates a Python virtualenv stored in /workspace/venv that will persist across container runs. + # Creates a Python virtualenv stored in /workspace/venv that will persist across container runs. - name: 'gcr.io/$PROJECT_ID/python-cloudbuild' entrypoint: 'venv/bin/pip' args: ['install', '-V', '-r', 'requirements.txt'] - # Installs any dependencies listed in the project's requirements.txt. + # Installs any dependencies listed in the project's requirements.txt. - name: 'gcr.io/$PROJECT_ID/python-cloudbuild' entrypoint: 'venv/bin/python' args: ['-m', 'pytest', '-v'] - # Runs pytest from the virtual environment (with all requirements) - # using the verbose flag so you can see each individual test. + # Runs pytest from the virtual environment (with all requirements) + # using the verbose flag so you can see each individual test. - name: 'gcr.io/$PROJECT_ID/python-cloudbuild' entrypoint: 'venv/bin/pylint' args: ['my_module/'] - # Runs pylint against the module my_module contained one folder under the project root. + # Runs pylint against the module my_module contained one folder under the project root. ``` ## Wrap Up -That's all there is to it! +That's all there is to it! From here you can inspect your builds in Google Cloud Build's history. You can also build in third-party integrations via PubSub. You can find more documentation on how to use third party integrations [here](https://cloud.google.com/cloud-build/docs/configure-third-party-notifications). -If you wanted to automatically deploy this code you could add additional steps that enabled continuous delivery. +If you wanted to automatically deploy this code you could add additional steps that enabled continuous delivery. Prebuilt cloud builders exist for gcloud, kubectl, etc. The full list can be found at [https://github.com/GoogleCloudPlatform/cloud-builders](https://github.com/GoogleCloudPlatform/cloud-builders). Google also maintains a community repo for other cloud builders contributed by the public [here](https://github.com/GoogleCloudPlatform/cloud-builders-community). diff --git a/examples/qaoa/README.md b/examples/qaoa/README.md index ad493fb358..5a673f624c 100644 --- a/examples/qaoa/README.md +++ b/examples/qaoa/README.md @@ -1,6 +1,6 @@ # QAOA Examples for Max-SAT Problems -These are examples of parsing a max-SAT problem in a proprietary format. Problems can be converted into QUBO form as described in [this article, appendix C](https://arxiv.org/pdf/1708.09780.pdf) to be later simulated with [cirq](https://github.com/quantumlib/Cirq/). +These are examples of parsing a max-SAT problem in a proprietary format. Problems can be converted into QUBO form as described in [this article, appendix C](https://arxiv.org/pdf/1708.09780.pdf) to be later simulated with [cirq](https://github.com/quantumlib/Cirq/). The maxSAT problem (after being converted into QUBO form) can be also saved into a proprietary format that is supported by DWave machine to be run on the hardware. diff --git a/examples/qaoa/qubo_test.py b/examples/qaoa/qubo_test.py index 6891210331..590243ca81 100644 --- a/examples/qaoa/qubo_test.py +++ b/examples/qaoa/qubo_test.py @@ -99,7 +99,7 @@ def test_get_qaoa(self): def test_to_qwave(self): # (X0|X1|X2) & (X2|X4|X5) - clauses = [Clause([1, 2, 3]), Clause([3, 5, 6])] + clauses = [Clause([1, 2, 3]), Clause([3, 5, 6])] sat = Sat(clauses, 2, 'test') q = QuboProblem(sat) lines = q.to_qwave_format() diff --git a/examples/spinnaker/pipeline/example_spinnaker_pipeline_template.yml b/examples/spinnaker/pipeline/example_spinnaker_pipeline_template.yml index aaf99408d1..36fa5725b7 100644 --- a/examples/spinnaker/pipeline/example_spinnaker_pipeline_template.yml +++ b/examples/spinnaker/pipeline/example_spinnaker_pipeline_template.yml @@ -1,6 +1,6 @@ -# This is an example pipeline template (NOT for production usage) that can be used by any application to generate a +# This is an example pipeline template (NOT for production usage) that can be used by any application to generate a # a pipeline to take a docker image, deploy it to dev, run tests, and then deploy to prod -# The nomenclature it includes (account names, etc.) is according the Spinnaker POC provided by Google PSO, so it +# The nomenclature it includes (account names, etc.) is according the Spinnaker POC provided by Google PSO, so it # would need to be modified to properly function with a different Spinnaker instance schema: "1" @@ -64,7 +64,7 @@ variables: type: string description: Command to run for functional test group: Testing - defaultValue: 'curl www.google.com' + defaultValue: 'curl www.google.com' configuration: concurrentExecutions: diff --git a/examples/tensorflow-profiling-examples/README.md b/examples/tensorflow-profiling-examples/README.md index a0d224a917..08d1708614 100644 --- a/examples/tensorflow-profiling-examples/README.md +++ b/examples/tensorflow-profiling-examples/README.md @@ -58,7 +58,7 @@ gcloud ml-engine jobs submit training $JOBNAME \ --train_steps=50000 ``` -### Training on GPU: +### Training on GPU: ```shell OUTDIR=gs://$BUCKET/babyweight/hooks_gpu JOBNAME=babyweight_$(date -u +%y%m%d_%H%M%S) diff --git a/examples/web-instrumentation/README.md b/examples/web-instrumentation/README.md index ba27e02394..cf85a3a696 100644 --- a/examples/web-instrumentation/README.md +++ b/examples/web-instrumentation/README.md @@ -35,7 +35,7 @@ cd professional-services/examples/web-instrumentation WI_HOME=`pwd` ``` -Set Google Cloud SDK to the current project +Set Google Cloud SDK to the current project ```shell export GOOGLE_CLOUD_PROJECT=[Your project] @@ -279,7 +279,7 @@ bq --location=US mk -d \ web_instr_container ``` -Create a log export for the container logs +Create a log export for the container logs ```shell LOG_SA=$(gcloud logging sinks create web-instr-container-logs \ @@ -315,7 +315,7 @@ LOG_SA=$(gcloud logging sinks create web-instr-load-balancer-logs \ --format='value("writerIdentity")') ``` -Note that the service account id changes so that you need to note that anre +Note that the service account id changes so that you need to note that anre repeat the step for granting write access BigQuery ```shell diff --git a/helpers/check_format.sh b/helpers/check_format.sh index b7570aaf25..7809f559ac 100755 --- a/helpers/check_format.sh +++ b/helpers/check_format.sh @@ -45,6 +45,12 @@ validate_python() { # Initialize FILES_TO_LINT to empty string FILES_TO_LINT="" + (cd $FOLDER && flake8 --exclude=.git,__pycache__,.venv,venv --ignore=E501,W5) + if [ $? -ne 0 ] + then + need_formatting $FOLDER + fi + if [[ ! -z "$FILES_TO_CHECK" ]] then # Checking python files diff --git a/tools/agile-machine-learning-api/README.md b/tools/agile-machine-learning-api/README.md index caf9458a30..95e6609d61 100644 --- a/tools/agile-machine-learning-api/README.md +++ b/tools/agile-machine-learning-api/README.md @@ -2,12 +2,12 @@ ## Overview -Machine Learning is a vast subject and to use a basic model of linear or logistic regression can be a difficult task for non-developers. This API has been created to make it easier for -non-developers to use machine learning. At high level The API takes care of -- The basic and important aspects of machine learning so that the accuracy of the model can be improved from the baseline models. -- Deployment of the trained models and model versioning. -- Versions of the training on the same data. -- Prediction on your saved model. +Machine Learning is a vast subject and to use a basic model of linear or logistic regression can be a difficult task for non-developers. This API has been created to make it easier for +non-developers to use machine learning. At high level The API takes care of +- The basic and important aspects of machine learning so that the accuracy of the model can be improved from the baseline models. +- Deployment of the trained models and model versioning. +- Versions of the training on the same data. +- Prediction on your saved model. In training, the API first cleans the data and then calculates all the relevant features that will be used in the training. This training data is then saved into temporary files on the disk. These temporary files are then fed into the tensorflow dataset API which makes the input function of the tensorflow estimators which are divided into two parts, custom and canned based on the choice of model users want to run on the data. In the process of training, all the metrics are called calculated and shown in the logs. These logs when stored as checkpoint can be used to preview the model in Tensorboard. @@ -18,25 +18,25 @@ The trained model are saved into different versions based on the name you give t All the below functionalities can be used with a simple post request to the respective APIs with very basic background knowledge. - Train various ML models on GCP CMLE - Deploy the trained model on GCP CMLE - - Predict results of the deployed model both on a batch or on a single datapoints using GCP CMLE - - Visualize the predicted results using LIME functionality + - Predict results of the deployed model both on a batch or on a single datapoints using GCP CMLE + - Visualize the predicted results using LIME functionality ## Structure of code ``` AMLA - |__ main.py (entry point of the API) + |__ main.py (entry point of the API) |__ train.py (train functions) - |__ predict.py (predict functions) + |__ predict.py (predict functions) |__ deploy.py (deploy functions) |__ lime_utils.py (utils functions for LIME functionalities) - |__ update.sh (bash script for updating trainer package) + |__ update.sh (bash script for updating trainer package) |__ config |__ train.yaml (file for train configurations) |__ config_file.yaml (file for API configurations) |__ developer.yaml (file for developer configurations) - |__ codes + |__ codes |__ config.yaml (file for CloudML configurations) - |__ setup.py + |__ setup.py |__ trainer (trainer package) |__ __init__.py |__ launch_demo.py (end-to-end script for running package) @@ -62,7 +62,7 @@ AMLA service_account_json_key: ``` -- Create a config file named **_'train.yaml'_** like below along for train.py in the **config directory** to specify train configurations. Refer to [*CMLE machine types*](https://cloud.google.com/ml-engine/docs/tensorflow/machine-types) for specifying type virtual machines you want the model to be trained. The trainer package will be created and updated in GCS bucket by running bash script update.sh. +- Create a config file named **_'train.yaml'_** like below along for train.py in the **config directory** to specify train configurations. Refer to [*CMLE machine types*](https://cloud.google.com/ml-engine/docs/tensorflow/machine-types) for specifying type virtual machines you want the model to be trained. The trainer package will be created and updated in GCS bucket by running bash script update.sh. ``` scaleTier: "CUSTOM" @@ -71,14 +71,14 @@ AMLA parameterServerType: "large_model" workerCount: 3 parameterServerCount: 1 - packageUris: [''] # bucket_name+'/trainer-0.0.tar.gz' + packageUris: [''] # bucket_name+'/trainer-0.0.tar.gz' region: "us-central1" jobDir: runtimeVersion: pythonVersion: ##python2.7 ``` - Create a config file named **_'config.yaml'_** like below in **codes** folder, with the type of virtual machines you want the model to be trained on. Currently if the training job is submitted through Train API the machine configurations are directly loaded from train.yaml. However to this has been added to provide an option to launch training jobs using [*command line*](https://cloud.google.com/sdk/gcloud/reference/ml-engine/jobs/submit/training) -Example of **_'config.yaml'_** looks like +Example of **_'config.yaml'_** looks like ``` trainingInput: scaleTier: CUSTOM @@ -94,7 +94,7 @@ Example of **_'config.yaml'_** looks like ```bash $ gcloud services enable ml.googleapis.com ``` - + - Create a service account key which should have following IAM roles: > Machine Learning Engine > ML Engine Admin @@ -111,7 +111,7 @@ Example of **_'config.yaml'_** looks like - Upload/Update the trainer folder on the google cloud storage bucket using the following command. This command creates tar.gz file of the trainer directory and uploads it to the cloud storage bucket. **Please ensure that "python" executable version used here is aligned with the python version used in CMLE for training and serving.** To update the trainer in GCS run - ```bash + ```bash $ bash update.sh ``` @@ -172,7 +172,7 @@ Example of **_'config.yaml'_** looks like "to_drop": ["drop_col1","drop_col2","drop_col3"] } ``` -Response of the API would look like +Response of the API would look like ``` { "Message": "", @@ -194,7 +194,7 @@ Response of the API would look like ``` "job_id": Job ID of the training job - "model_name": Required name of the deployed model + "model_name": Required name of the deployed model "version_name": Required version of the deployed model "runtime_version": Tensorflow version of the deployed model "trained_model_location": Export dir of the model @@ -241,11 +241,11 @@ Response of the API would look like "instances": Data in JSON format on which prediction is to be made "version_name": Version of the deployed model on which predictions to be made ``` - + A sample body of Predict API would look like : ```json - { + { "model_name": "census", "instances": [{"capital_gain": 0, "race": "White", "hours_per_week": 40}], "version_name": "v1_1" @@ -263,8 +263,8 @@ Response of the API would look like ``` **Prediction with visualization:** This is to create visualization for predicted results using lime. Please find an example [sample_lime.html](sample_lime.html) - - ##### VERSION 1 + + ##### VERSION 1 To generate prediction based on your trained job and to produce the lime visualization on them based on the prediction, go to **localhost:8080/predict/lime** and make a POST request with following parameters in JSON format ``` @@ -278,7 +278,7 @@ Response of the API would look like A sample body of Predict using LIME v1 API would look like : ```json - { + { "job_id": "", "batch_prediction": "", "export_dir": "", @@ -287,8 +287,8 @@ Response of the API would look like "name": "" } ``` - Here specifying - where predict_json look like + Here specifying + where predict_json look like ```json { "D_id_1": {"capital_gain": 0, "relationship": "Unmarried", "sex": "Male"}, @@ -307,7 +307,7 @@ Response of the API would look like A sample body of Predict using LIME v2 API would look like : ```json - { + { "job_id": "", "batch_prediction": "", "export_dir": "", @@ -337,6 +337,6 @@ In case of any error in calling the any request in API, Response of the API woul - Ansuj Joshi We would like to take this oppourtunity to thank the following reviewers for their constant support and suggestions for improving this tool: -- Yiliang Zhao +- Yiliang Zhao - Shixin Luo - Yujin Tang diff --git a/tools/agile-machine-learning-api/codes/trainer/input_pipeline_dask.py b/tools/agile-machine-learning-api/codes/trainer/input_pipeline_dask.py index 57d733451c..64f6bd2693 100644 --- a/tools/agile-machine-learning-api/codes/trainer/input_pipeline_dask.py +++ b/tools/agile-machine-learning-api/codes/trainer/input_pipeline_dask.py @@ -75,7 +75,7 @@ def parse_csv_wrap(self): """ A Wrapper function for parsing csv files - Returns: + Returns: _parse_csv function """ return self._parse_csv() diff --git a/tools/agile-machine-learning-api/codes/trainer/launch_demo.py b/tools/agile-machine-learning-api/codes/trainer/launch_demo.py index 8bd90b2723..44802acbc2 100644 --- a/tools/agile-machine-learning-api/codes/trainer/launch_demo.py +++ b/tools/agile-machine-learning-api/codes/trainer/launch_demo.py @@ -135,7 +135,7 @@ def prep_input( {'a': 'float', 'b': 'object', 'c': 'int' } name : str, name of the data being based [train, eval] - Returns: + Returns: df : dask.DataFrame object, dataframe containing cleaned data of the passed csv file cols : list, list containing column names of the data defaults : list, list containing defaults of the columns diff --git a/tools/agile-machine-learning-api/codes/trainer/utils/optimizer_utils.py b/tools/agile-machine-learning-api/codes/trainer/utils/optimizer_utils.py index 8a8d437888..51a58ecd06 100644 --- a/tools/agile-machine-learning-api/codes/trainer/utils/optimizer_utils.py +++ b/tools/agile-machine-learning-api/codes/trainer/utils/optimizer_utils.py @@ -48,12 +48,12 @@ def __init__( """Total number of arguments any optimizer can take. Arguments: - rho : A Tensor containing the value to minimize or a callable taking no arguments which returns the value to minimize. + rho : A Tensor containing the value to minimize or a callable taking no arguments which returns the value to minimize. When eager execution is enabled it must be a callable. epsilon : Small value to avoid zero denominator. use_locking : boolean, If True use locks for update operations. global_step : tf.train.get_global_step() object - initial_gradient_squared_accumulator_value : float, + initial_gradient_squared_accumulator_value : float, l1_regularization_strength : A float value, must be greater than or equal to zero. l2_regularization_strength : A float value, must be greater than or equal to zero. beta1 : A float value or a constant float tensor. The exponential decay rate for the 1st moment estimates. @@ -62,12 +62,12 @@ def __init__( initial_accumulator_value : The starting value for accumulators. Only zero or positive values are allowed. accum_name : The suffix for the variable that keeps the gradient squared accumulator. If not present, defaults to name. linear_name : The suffix for the variable that keeps the linear gradient accumulator. If not present, defaults to name + "_1". - l2_shrinkage_regularization_strength : A float value, must be greater than or equal to zero. - This differs from L2 above in that the L2 above is a stabilization penalty, whereas this L2 shrinkage is a magnitude penalty. + l2_shrinkage_regularization_strength : A float value, must be greater than or equal to zero. + This differs from L2 above in that the L2 above is a stabilization penalty, whereas this L2 shrinkage is a magnitude penalty. momentum : A scalar tensor. use_nesterov : If True use Nesterov Momentum. See Sutskever et al., 2013. This implementation always computes gradients at the value of the variable(s) passed to the optimizer. - Using Nesterov Momentum makes the variable(s) track the values called theta_t + mu*v_t in the paper. + Using Nesterov Momentum makes the variable(s) track the values called theta_t + mu*v_t in the paper. decay : Discounting factor for the history/coming gradient centered : boolean, If True, gradients are normalized by the estimated variance of the gradient; if False, by the uncentered second moment. Setting this to True may help with training, but is slightly more expensive in terms of computation and memory. Defaults to False. @@ -269,8 +269,8 @@ def set_opt_wrap(self, name, learning_rate, decay): name : str, Name of the optimizer to be used learning_rate : float, Learning rate for the optimizer decay : Boolean, whether or not to use learning rate decay - Returns: - _set_opt function + Returns: + _set_opt function """ return self._set_opt(name, learning_rate, decay) diff --git a/tools/agile-machine-learning-api/sample_lime.html b/tools/agile-machine-learning-api/sample_lime.html index 498c2ab1dd..2bf829ff0d 100644 --- a/tools/agile-machine-learning-api/sample_lime.html +++ b/tools/agile-machine-learning-api/sample_lime.html @@ -48,36 +48,36 @@ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {'use strict'; - + Object.defineProperty(exports, "__esModule", { value: true }); exports.PredictedValue = exports.PredictProba = exports.Barchart = exports.Explanation = undefined; - + var _explanation = __webpack_require__(1); - + var _explanation2 = _interopRequireDefault(_explanation); - + var _bar_chart = __webpack_require__(3); - + var _bar_chart2 = _interopRequireDefault(_bar_chart); - + var _predict_proba = __webpack_require__(6); - + var _predict_proba2 = _interopRequireDefault(_predict_proba); - + var _predicted_value = __webpack_require__(7); - + var _predicted_value2 = _interopRequireDefault(_predicted_value); - + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - + if (!global._babelPolyfill) { __webpack_require__(8); } - + __webpack_require__(304); - + exports.Explanation = _explanation2.default; exports.Barchart = _bar_chart2.default; exports.PredictProba = _predict_proba2.default; @@ -90,31 +90,31 @@ /***/ (function(module, exports, __webpack_require__) { 'use strict'; - + Object.defineProperty(exports, "__esModule", { value: true }); - + var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - + var _d2 = __webpack_require__(2); - + var _d3 = _interopRequireDefault(_d2); - + var _bar_chart = __webpack_require__(3); - + var _bar_chart2 = _interopRequireDefault(_bar_chart); - + var _lodash = __webpack_require__(4); - + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - + var Explanation = function () { function Explanation(class_names) { _classCallCheck(this, Explanation); - + this.names = class_names; if (class_names.length < 10) { this.colors = _d3.default.scale.category10().domain(this.names); @@ -127,8 +127,8 @@ // exp: [(feature-name, weight), ...] // label: int // div: d3 selection - - + + Explanation.prototype.show = function show(exp, label, div) { var svg = div.append('svg').style('width', '100%'); var colors = ['#5F9EA0', this.colors_i(label)]; @@ -142,11 +142,11 @@ }; // exp has all ocurrences of words, with start index and weight: // exp = [('word', 132, -0.13), ('word3', 111, 1.3) - - + + Explanation.prototype.show_raw_text = function show_raw_text(exp, label, raw, div) { var opacity = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; - + //let colors=['#5F9EA0', this.colors(this.exp['class'])]; var colors = ['#5F9EA0', this.colors_i(label)]; if (this.names.length == 2) { @@ -157,14 +157,14 @@ var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; - + try { for (var _iterator = exp[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var _step$value = _slicedToArray(_step.value, 3), word = _step$value[0], start = _step$value[1], weight = _step$value[2]; - + if (weight > 0) { word_lists[1].push([start, start + word.length, weight]); } else { @@ -186,15 +186,15 @@ } } } - + if (!opacity) { max_weight = 0; } this.display_raw_text(div, raw, word_lists, colors, max_weight, true); }; // exp is list of (feature_name, value, weight) - - + + Explanation.prototype.show_raw_tabular = function show_raw_tabular(exp, label, div) { div.classed('lime', true).classed('table_div', true); var colors = ['#5F9EA0', this.colors_i(label)]; @@ -209,14 +209,14 @@ var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; - + try { for (var _iterator2 = exp[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var _step2$value = _slicedToArray(_step2.value, 3), fname = _step2$value[0], value = _step2$value[1], weight = _step2$value[2]; - + var tr = table.append('tr'); tr.style('border-style', 'hidden'); tr.append('td').text(fname); @@ -244,7 +244,7 @@ } } }; - + Explanation.prototype.hexToRgb = function hexToRgb(hex) { var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); return result ? { @@ -253,21 +253,21 @@ b: parseInt(result[3], 16) } : null; }; - + Explanation.prototype.applyAlpha = function applyAlpha(hex, alpha) { var components = this.hexToRgb(hex); return 'rgba(' + components.r + "," + components.g + "," + components.b + "," + alpha.toFixed(3) + ")"; }; // sord_lists is an array of arrays, of length (colors). if with_positions is true, // word_lists is an array of [start,end] positions instead - - + + Explanation.prototype.display_raw_text = function display_raw_text(div, raw_text) { var word_lists = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; var colors = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; var max_weight = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; var positions = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false; - + div.classed('lime', true).classed('text_div', true); div.append('h3').text('Text with highlighted words'); var highlight_tag = 'span'; @@ -280,16 +280,16 @@ var _iteratorNormalCompletion3 = true; var _didIteratorError3 = false; var _iteratorError3 = undefined; - + try { var _loop = function _loop() { var i = _step3.value; - + position_lists[i].map(function (x) { return objects.push({ 'label': i, 'start': x[0], 'end': x[1], 'alpha': max_weight === 0 ? 1 : x[2] / max_weight }); }); }; - + for (var _iterator3 = (0, _lodash.range)(position_lists.length)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { _loop(); } @@ -307,7 +307,7 @@ } } } - + objects = (0, _lodash.sortBy)(objects, function (x) { return x['start']; }); @@ -316,11 +316,11 @@ var _iteratorNormalCompletion4 = true; var _didIteratorError4 = false; var _iteratorError4 = undefined; - + try { for (var _iterator4 = objects[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { var obj = _step4.value; - + var word = raw_text.slice(obj.start, obj.end); var start = obj.start - subtract; var end = obj.end - subtract; @@ -348,17 +348,17 @@ } } }; - + Explanation.prototype.wordlists_to_positions = function wordlists_to_positions(word_lists, raw_text) { var ret = []; var _iteratorNormalCompletion5 = true; var _didIteratorError5 = false; var _iteratorError5 = undefined; - + try { for (var _iterator5 = word_lists[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { var words = _step5.value; - + if (words.length === 0) { ret.push([]); continue; @@ -385,13 +385,13 @@ } } } - + return ret; }; - + return Explanation; }(); - + exports.default = Explanation; /***/ }), @@ -1582,7 +1582,7 @@ svg.remove(); } } - if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, + if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, point.y = e.clientY; point = point.matrixTransform(container.getScreenCTM().inverse()); return [ point.x, point.y ]; @@ -1957,7 +1957,7 @@ } function mousewheeled() { var dispatch = event.of(this, arguments); - if (mousewheelTimer) clearTimeout(mousewheelTimer); else d3_selection_interrupt.call(this), + if (mousewheelTimer) clearTimeout(mousewheelTimer); else d3_selection_interrupt.call(this), translate0 = location(center0 = center || d3.mouse(this)), zoomstarted(dispatch); mousewheelTimer = setTimeout(function() { mousewheelTimer = null; @@ -2112,7 +2112,7 @@ { return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100); } - + case "rgb": { return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2])); @@ -2326,7 +2326,7 @@ d3.xhr = d3_xhrType(d3_identity); function d3_xhrType(response) { return function(url, mimeType, callback) { - if (arguments.length === 2 && typeof mimeType === "function") callback = mimeType, + if (arguments.length === 2 && typeof mimeType === "function") callback = mimeType, mimeType = null; return d3_xhr(url, mimeType, response, callback); }; @@ -2632,33 +2632,33 @@ comma = true; type = "g"; break; - + case "%": scale = 100; suffix = "%"; type = "f"; break; - + case "p": scale = 100; suffix = "%"; type = "r"; break; - + case "b": case "o": case "x": case "X": if (symbol === "#") prefix = "0" + type.toLowerCase(); - + case "c": exponent = false; - + case "d": integer = true; precision = 0; break; - + case "s": scale = -1; type = "r"; @@ -3167,7 +3167,7 @@ return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1; } function d3_time_parseZone(date, string, i) { - return /^[+-]\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string, + return /^[+-]\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string, i + 5) : -1; } function d3_time_expandYear(d) { @@ -3360,7 +3360,7 @@ var λ00, φ00, λ0, cosφ0, sinφ0; d3_geo_area.point = function(λ, φ) { d3_geo_area.point = nextPoint; - λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), + λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), sinφ0 = Math.sin(φ); }; function nextPoint(λ, φ) { @@ -5189,7 +5189,7 @@ return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]); }; projection.rotate = function(_) { - return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), + return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), [ _[0], _[1], _[2] - 90 ]); }; return rotate([ 0, 0, 90 ]); @@ -6043,7 +6043,7 @@ }; quadtree.extent = function(_) { if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ]; - if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], + if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], y2 = +_[1][1]; return quadtree; }; @@ -6097,15 +6097,15 @@ case 0: find(node, x1, y1, xm, ym); break; - + case 1: find(node, xm, y1, x2, ym); break; - + case 2: find(node, x1, ym, xm, y2); break; - + case 3: find(node, xm, ym, x2, y2); break; @@ -7768,7 +7768,7 @@ return d3_layout_treemapPad(node, x); } var type; - pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === "function" ? padFunction : type === "number" ? (x = [ x, x, x, x ], + pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === "function" ? padFunction : type === "number" ? (x = [ x, x, x, x ], padConstant) : padConstant; return treemap; }; @@ -8171,7 +8171,7 @@ }; scale.rangePoints = function(x, padding) { if (arguments.length < 2) padding = 0; - var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2, + var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2, 0) : (stop - start) / (domain.length - 1 + padding); range = steps(start + step * padding / 2, step); rangeBand = 0; @@ -8183,7 +8183,7 @@ }; scale.rangeRoundPoints = function(x, padding) { if (arguments.length < 2) padding = 0; - var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2), + var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2), 0) : (stop - start) / (domain.length - 1 + padding) | 0; range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2), step); rangeBand = 0; @@ -8611,7 +8611,7 @@ return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension)); } function d3_svg_lineCardinalClosed(points, tension) { - return points.length < 3 ? d3_svg_lineLinearClosed(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), + return points.length < 3 ? d3_svg_lineLinearClosed(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension)); } function d3_svg_lineCardinal(points, tension) { @@ -9384,7 +9384,7 @@ var g = d3.select(this); var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy(); var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(".tick").data(ticks, scale1), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", ε), tickExit = d3.transition(tick.exit()).style("opacity", ε).remove(), tickUpdate = d3.transition(tick.order()).style("opacity", 1), tickSpacing = Math.max(innerTickSize, 0) + tickPadding, tickTransform; - var range = d3_scaleRange(scale1), path = g.selectAll(".domain").data([ 0 ]), pathUpdate = (path.enter().append("path").attr("class", "domain"), + var range = d3_scaleRange(scale1), path = g.selectAll(".domain").data([ 0 ]), pathUpdate = (path.enter().append("path").attr("class", "domain"), d3.transition(path)); tickEnter.append("line"); tickEnter.append("text"); @@ -9958,21 +9958,21 @@ /***/ (function(module, exports, __webpack_require__) { 'use strict'; - + Object.defineProperty(exports, "__esModule", { value: true }); - + var _d = __webpack_require__(2); - + var _d2 = _interopRequireDefault(_d); - + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - + function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - + var Barchart = // svg: d3 object with the svg in question // exp_array: list of (feature_name, weight) @@ -9982,9 +9982,9 @@ var colors = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : ['red', 'green']; var show_numbers = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false; var bar_height = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 5; - + _classCallCheck(this, Barchart); - + var svg_width = Math.min(600, parseInt(svg.style('width'))); var bar_width = two_sided ? svg_width / 2 : svg_width; if (titles === undefined) { @@ -9997,7 +9997,7 @@ // 13.1 is +- the width of W, the widest letter. if (two_sided && titles.length == 2) { svg.append('text').attr('x', svg_width / 4).attr('y', 15).attr('font-size', '20').attr('text-anchor', 'middle').style('fill', colors[0]).text(titles[0]); - + svg.append('text').attr('x', svg_width / 4 * 3).attr('y', 15).attr('font-size', '20').attr('text-anchor', 'middle').style('fill', colors[1]).text(titles[1]); } else { var pos = two_sided ? svg_width / 2 : x_offset; @@ -10022,7 +10022,7 @@ return Math.abs(v); }))); var xscale = _d2.default.scale.linear().domain([0, Math.max(1, max_weight)]).range([0, bar_width]); - + for (var i = 0; i < exp_array.length; ++i) { var name = names[i]; var weight = weights[i]; @@ -10044,7 +10044,7 @@ } var line = svg.append("line").attr("x1", x_offset).attr("x2", x_offset).attr("y1", bar_height + yshift).attr("y2", Math.max(bar_height, yscale(exp_array.length))).style("stroke-width", 2).style("stroke", "black"); }; - + exports.default = Barchart; /***/ }), @@ -10060,38 +10060,38 @@ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors */ ;(function() { - + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ var undefined; - + /** Used as the semantic version number. */ var VERSION = '4.17.4'; - + /** Used as the size to enable large array optimizations. */ var LARGE_ARRAY_SIZE = 200; - + /** Error message constants. */ var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', FUNC_ERROR_TEXT = 'Expected a function'; - + /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; - + /** Used as the maximum memoize cache size. */ var MAX_MEMOIZE_SIZE = 500; - + /** Used as the internal argument placeholder. */ var PLACEHOLDER = '__lodash_placeholder__'; - + /** Used to compose bitmasks for cloning. */ var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG = 4; - + /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; - + /** Used to compose bitmasks for function metadata. */ var WRAP_BIND_FLAG = 1, WRAP_BIND_KEY_FLAG = 2, @@ -10103,31 +10103,31 @@ WRAP_ARY_FLAG = 128, WRAP_REARG_FLAG = 256, WRAP_FLIP_FLAG = 512; - + /** Used as default options for `_.truncate`. */ var DEFAULT_TRUNC_LENGTH = 30, DEFAULT_TRUNC_OMISSION = '...'; - + /** Used to detect hot functions by number of calls within a span of milliseconds. */ var HOT_COUNT = 800, HOT_SPAN = 16; - + /** Used to indicate the type of lazy iteratees. */ var LAZY_FILTER_FLAG = 1, LAZY_MAP_FLAG = 2, LAZY_WHILE_FLAG = 3; - + /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0, MAX_SAFE_INTEGER = 9007199254740991, MAX_INTEGER = 1.7976931348623157e+308, NAN = 0 / 0; - + /** Used as references for the maximum length and index of an array. */ var MAX_ARRAY_LENGTH = 4294967295, MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - + /** Used to associate wrap methods with their bit flags. */ var wrapFlags = [ ['ary', WRAP_ARY_FLAG], @@ -10140,7 +10140,7 @@ ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], ['rearg', WRAP_REARG_FLAG] ]; - + /** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', @@ -10164,7 +10164,7 @@ undefinedTag = '[object Undefined]', weakMapTag = '[object WeakMap]', weakSetTag = '[object WeakSet]'; - + var arrayBufferTag = '[object ArrayBuffer]', dataViewTag = '[object DataView]', float32Tag = '[object Float32Array]', @@ -10176,85 +10176,85 @@ uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]'; - + /** Used to match empty string literals in compiled template source. */ var reEmptyStringLeading = /\b__p \+= '';/g, reEmptyStringMiddle = /\b(__p \+=) '' \+/g, reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; - + /** Used to match HTML entities and HTML characters. */ var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, reUnescapedHtml = /[&<>"']/g, reHasEscapedHtml = RegExp(reEscapedHtml.source), reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - + /** Used to match template delimiters. */ var reEscape = /<%-([\s\S]+?)%>/g, reEvaluate = /<%([\s\S]+?)%>/g, reInterpolate = /<%=([\s\S]+?)%>/g; - + /** Used to match property names within property paths. */ var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/, reLeadingDot = /^\./, rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - + /** * Used to match `RegExp` * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, reHasRegExpChar = RegExp(reRegExpChar.source); - + /** Used to match leading and trailing whitespace. */ var reTrim = /^\s+|\s+$/g, reTrimStart = /^\s+/, reTrimEnd = /\s+$/; - + /** Used to match wrap detail comments. */ var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, reSplitDetails = /,? & /; - + /** Used to match words composed of alphanumeric characters. */ var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; - + /** Used to match backslashes in property paths. */ var reEscapeChar = /\\(\\)?/g; - + /** * Used to match * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). */ var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; - + /** Used to match `RegExp` flags from their coerced string values. */ var reFlags = /\w*$/; - + /** Used to detect bad signed hexadecimal string values. */ var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - + /** Used to detect binary string values. */ var reIsBinary = /^0b[01]+$/i; - + /** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\[object .+?Constructor\]$/; - + /** Used to detect octal string values. */ var reIsOctal = /^0o[0-7]+$/i; - + /** Used to detect unsigned integer values. */ var reIsUint = /^(?:0|[1-9]\d*)$/; - + /** Used to match Latin Unicode letters (excluding mathematical operators). */ var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; - + /** Used to ensure capturing order of template delimiters. */ var reNoMatch = /($^)/; - + /** Used to match unescaped characters in compiled string literals. */ var reUnescapedString = /['\n\r\u2028\u2029\\]/g; - + /** Used to compose unicode character classes. */ var rsAstralRange = '\\ud800-\\udfff', rsComboMarksRange = '\\u0300-\\u036f', @@ -10270,7 +10270,7 @@ rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', rsVarRange = '\\ufe0e\\ufe0f', rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; - + /** Used to compose unicode capture groups. */ var rsApos = "['\u2019]", rsAstral = '[' + rsAstralRange + ']', @@ -10287,7 +10287,7 @@ rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', rsUpper = '[' + rsUpperRange + ']', rsZWJ = '\\u200d'; - + /** Used to compose unicode regexes. */ var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', @@ -10301,19 +10301,19 @@ rsSeq = rsOptVar + reOptMod + rsOptJoin, rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - + /** Used to match apostrophes. */ var reApos = RegExp(rsApos, 'g'); - + /** * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). */ var reComboMark = RegExp(rsCombo, 'g'); - + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - + /** Used to match complex or compound words. */ var reUnicodeWord = RegExp([ rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', @@ -10325,13 +10325,13 @@ rsDigits, rsEmoji ].join('|'), 'g'); - + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); - + /** Used to detect strings that need a more robust regexp to match words. */ var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; - + /** Used to assign default `context` object properties. */ var contextProps = [ 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', @@ -10340,10 +10340,10 @@ 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' ]; - + /** Used to make template sourceURLs easier to identify. */ var templateCounter = -1; - + /** Used to identify `toStringTag` values of typed arrays. */ var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = @@ -10359,7 +10359,7 @@ typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; - + /** Used to identify `toStringTag` values supported by `_.clone`. */ var cloneableTags = {}; cloneableTags[argsTag] = cloneableTags[arrayTag] = @@ -10375,7 +10375,7 @@ cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false; - + /** Used to map Latin Unicode letters to basic Latin letters. */ var deburredLetters = { // Latin-1 Supplement block. @@ -10433,7 +10433,7 @@ '\u0152': 'Oe', '\u0153': 'oe', '\u0149': "'n", '\u017f': 's' }; - + /** Used to map characters to HTML entities. */ var htmlEscapes = { '&': '&', @@ -10442,7 +10442,7 @@ '"': '"', "'": ''' }; - + /** Used to map HTML entities to characters. */ var htmlUnescapes = { '&': '&', @@ -10451,7 +10451,7 @@ '"': '"', ''': "'" }; - + /** Used to escape characters for inclusion in compiled string literals. */ var stringEscapes = { '\\': '\\', @@ -10461,39 +10461,39 @@ '\u2028': 'u2028', '\u2029': 'u2029' }; - + /** Built-in method references without a dependency on `root`. */ var freeParseFloat = parseFloat, freeParseInt = parseInt; - + /** Detect free variable `global` from Node.js. */ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - + /** Detect free variable `self`. */ var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - + /** Used as a reference to the global object. */ var root = freeGlobal || freeSelf || Function('return this')(); - + /** Detect free variable `exports`. */ var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - + /** Detect free variable `module`. */ var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - + /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; - + /** Detect free variable `process` from Node.js. */ var freeProcess = moduleExports && freeGlobal.process; - + /** Used to access faster Node.js helpers. */ var nodeUtil = (function() { try { return freeProcess && freeProcess.binding && freeProcess.binding('util'); } catch (e) {} }()); - + /* Node.js helper references. */ var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, nodeIsDate = nodeUtil && nodeUtil.isDate, @@ -10501,9 +10501,9 @@ nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, nodeIsSet = nodeUtil && nodeUtil.isSet, nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - + /*--------------------------------------------------------------------------*/ - + /** * Adds the key-value `pair` to `map`. * @@ -10517,7 +10517,7 @@ map.set(pair[0], pair[1]); return map; } - + /** * Adds `value` to `set`. * @@ -10531,7 +10531,7 @@ set.add(value); return set; } - + /** * A faster alternative to `Function#apply`, this function invokes `func` * with the `this` binding of `thisArg` and the arguments of `args`. @@ -10551,7 +10551,7 @@ } return func.apply(thisArg, args); } - + /** * A specialized version of `baseAggregator` for arrays. * @@ -10565,14 +10565,14 @@ function arrayAggregator(array, setter, iteratee, accumulator) { var index = -1, length = array == null ? 0 : array.length; - + while (++index < length) { var value = array[index]; setter(accumulator, value, iteratee(value), array); } return accumulator; } - + /** * A specialized version of `_.forEach` for arrays without support for * iteratee shorthands. @@ -10585,7 +10585,7 @@ function arrayEach(array, iteratee) { var index = -1, length = array == null ? 0 : array.length; - + while (++index < length) { if (iteratee(array[index], index, array) === false) { break; @@ -10593,7 +10593,7 @@ } return array; } - + /** * A specialized version of `_.forEachRight` for arrays without support for * iteratee shorthands. @@ -10605,7 +10605,7 @@ */ function arrayEachRight(array, iteratee) { var length = array == null ? 0 : array.length; - + while (length--) { if (iteratee(array[length], length, array) === false) { break; @@ -10613,7 +10613,7 @@ } return array; } - + /** * A specialized version of `_.every` for arrays without support for * iteratee shorthands. @@ -10627,7 +10627,7 @@ function arrayEvery(array, predicate) { var index = -1, length = array == null ? 0 : array.length; - + while (++index < length) { if (!predicate(array[index], index, array)) { return false; @@ -10635,7 +10635,7 @@ } return true; } - + /** * A specialized version of `_.filter` for arrays without support for * iteratee shorthands. @@ -10650,7 +10650,7 @@ length = array == null ? 0 : array.length, resIndex = 0, result = []; - + while (++index < length) { var value = array[index]; if (predicate(value, index, array)) { @@ -10659,7 +10659,7 @@ } return result; } - + /** * A specialized version of `_.includes` for arrays without support for * specifying an index to search from. @@ -10673,7 +10673,7 @@ var length = array == null ? 0 : array.length; return !!length && baseIndexOf(array, value, 0) > -1; } - + /** * This function is like `arrayIncludes` except that it accepts a comparator. * @@ -10686,7 +10686,7 @@ function arrayIncludesWith(array, value, comparator) { var index = -1, length = array == null ? 0 : array.length; - + while (++index < length) { if (comparator(value, array[index])) { return true; @@ -10694,7 +10694,7 @@ } return false; } - + /** * A specialized version of `_.map` for arrays without support for iteratee * shorthands. @@ -10708,13 +10708,13 @@ var index = -1, length = array == null ? 0 : array.length, result = Array(length); - + while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } - + /** * Appends the elements of `values` to `array`. * @@ -10727,13 +10727,13 @@ var index = -1, length = values.length, offset = array.length; - + while (++index < length) { array[offset + index] = values[index]; } return array; } - + /** * A specialized version of `_.reduce` for arrays without support for * iteratee shorthands. @@ -10749,7 +10749,7 @@ function arrayReduce(array, iteratee, accumulator, initAccum) { var index = -1, length = array == null ? 0 : array.length; - + if (initAccum && length) { accumulator = array[++index]; } @@ -10758,7 +10758,7 @@ } return accumulator; } - + /** * A specialized version of `_.reduceRight` for arrays without support for * iteratee shorthands. @@ -10781,7 +10781,7 @@ } return accumulator; } - + /** * A specialized version of `_.some` for arrays without support for iteratee * shorthands. @@ -10795,7 +10795,7 @@ function arraySome(array, predicate) { var index = -1, length = array == null ? 0 : array.length; - + while (++index < length) { if (predicate(array[index], index, array)) { return true; @@ -10803,7 +10803,7 @@ } return false; } - + /** * Gets the size of an ASCII `string`. * @@ -10812,7 +10812,7 @@ * @returns {number} Returns the string size. */ var asciiSize = baseProperty('length'); - + /** * Converts an ASCII `string` to an array. * @@ -10823,7 +10823,7 @@ function asciiToArray(string) { return string.split(''); } - + /** * Splits an ASCII `string` into an array of its words. * @@ -10834,7 +10834,7 @@ function asciiWords(string) { return string.match(reAsciiWord) || []; } - + /** * The base implementation of methods like `_.findKey` and `_.findLastKey`, * without support for iteratee shorthands, which iterates over `collection` @@ -10856,7 +10856,7 @@ }); return result; } - + /** * The base implementation of `_.findIndex` and `_.findLastIndex` without * support for iteratee shorthands. @@ -10871,7 +10871,7 @@ function baseFindIndex(array, predicate, fromIndex, fromRight) { var length = array.length, index = fromIndex + (fromRight ? 1 : -1); - + while ((fromRight ? index-- : ++index < length)) { if (predicate(array[index], index, array)) { return index; @@ -10879,7 +10879,7 @@ } return -1; } - + /** * The base implementation of `_.indexOf` without `fromIndex` bounds checks. * @@ -10894,7 +10894,7 @@ ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex); } - + /** * This function is like `baseIndexOf` except that it accepts a comparator. * @@ -10908,7 +10908,7 @@ function baseIndexOfWith(array, value, fromIndex, comparator) { var index = fromIndex - 1, length = array.length; - + while (++index < length) { if (comparator(array[index], value)) { return index; @@ -10916,7 +10916,7 @@ } return -1; } - + /** * The base implementation of `_.isNaN` without support for number objects. * @@ -10927,7 +10927,7 @@ function baseIsNaN(value) { return value !== value; } - + /** * The base implementation of `_.mean` and `_.meanBy` without support for * iteratee shorthands. @@ -10941,7 +10941,7 @@ var length = array == null ? 0 : array.length; return length ? (baseSum(array, iteratee) / length) : NAN; } - + /** * The base implementation of `_.property` without support for deep paths. * @@ -10954,7 +10954,7 @@ return object == null ? undefined : object[key]; }; } - + /** * The base implementation of `_.propertyOf` without support for deep paths. * @@ -10967,7 +10967,7 @@ return object == null ? undefined : object[key]; }; } - + /** * The base implementation of `_.reduce` and `_.reduceRight`, without support * for iteratee shorthands, which iterates over `collection` using `eachFunc`. @@ -10989,7 +10989,7 @@ }); return accumulator; } - + /** * The base implementation of `_.sortBy` which uses `comparer` to define the * sort order of `array` and replaces criteria objects with their corresponding @@ -11002,14 +11002,14 @@ */ function baseSortBy(array, comparer) { var length = array.length; - + array.sort(comparer); while (length--) { array[length] = array[length].value; } return array; } - + /** * The base implementation of `_.sum` and `_.sumBy` without support for * iteratee shorthands. @@ -11023,7 +11023,7 @@ var result, index = -1, length = array.length; - + while (++index < length) { var current = iteratee(array[index]); if (current !== undefined) { @@ -11032,7 +11032,7 @@ } return result; } - + /** * The base implementation of `_.times` without support for iteratee shorthands * or max array length checks. @@ -11045,13 +11045,13 @@ function baseTimes(n, iteratee) { var index = -1, result = Array(n); - + while (++index < n) { result[index] = iteratee(index); } return result; } - + /** * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array * of key-value pairs for `object` corresponding to the property names of `props`. @@ -11066,7 +11066,7 @@ return [key, object[key]]; }); } - + /** * The base implementation of `_.unary` without support for storing metadata. * @@ -11079,7 +11079,7 @@ return func(value); }; } - + /** * The base implementation of `_.values` and `_.valuesIn` which creates an * array of `object` property values corresponding to the property names @@ -11095,7 +11095,7 @@ return object[key]; }); } - + /** * Checks if a `cache` value for `key` exists. * @@ -11107,7 +11107,7 @@ function cacheHas(cache, key) { return cache.has(key); } - + /** * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol * that is not found in the character symbols. @@ -11120,11 +11120,11 @@ function charsStartIndex(strSymbols, chrSymbols) { var index = -1, length = strSymbols.length; - + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} return index; } - + /** * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol * that is not found in the character symbols. @@ -11136,11 +11136,11 @@ */ function charsEndIndex(strSymbols, chrSymbols) { var index = strSymbols.length; - + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} return index; } - + /** * Gets the number of `placeholder` occurrences in `array`. * @@ -11152,7 +11152,7 @@ function countHolders(array, placeholder) { var length = array.length, result = 0; - + while (length--) { if (array[length] === placeholder) { ++result; @@ -11160,7 +11160,7 @@ } return result; } - + /** * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A * letters to basic Latin letters. @@ -11170,7 +11170,7 @@ * @returns {string} Returns the deburred letter. */ var deburrLetter = basePropertyOf(deburredLetters); - + /** * Used by `_.escape` to convert characters to HTML entities. * @@ -11179,7 +11179,7 @@ * @returns {string} Returns the escaped character. */ var escapeHtmlChar = basePropertyOf(htmlEscapes); - + /** * Used by `_.template` to escape characters for inclusion in compiled string literals. * @@ -11190,7 +11190,7 @@ function escapeStringChar(chr) { return '\\' + stringEscapes[chr]; } - + /** * Gets the value at `key` of `object`. * @@ -11202,7 +11202,7 @@ function getValue(object, key) { return object == null ? undefined : object[key]; } - + /** * Checks if `string` contains Unicode symbols. * @@ -11213,7 +11213,7 @@ function hasUnicode(string) { return reHasUnicode.test(string); } - + /** * Checks if `string` contains a word composed of Unicode symbols. * @@ -11224,7 +11224,7 @@ function hasUnicodeWord(string) { return reHasUnicodeWord.test(string); } - + /** * Converts `iterator` to an array. * @@ -11235,13 +11235,13 @@ function iteratorToArray(iterator) { var data, result = []; - + while (!(data = iterator.next()).done) { result.push(data.value); } return result; } - + /** * Converts `map` to its key-value pairs. * @@ -11252,13 +11252,13 @@ function mapToArray(map) { var index = -1, result = Array(map.size); - + map.forEach(function(value, key) { result[++index] = [key, value]; }); return result; } - + /** * Creates a unary function that invokes `func` with its argument transformed. * @@ -11272,7 +11272,7 @@ return func(transform(arg)); }; } - + /** * Replaces all `placeholder` elements in `array` with an internal placeholder * and returns an array of their indexes. @@ -11287,7 +11287,7 @@ length = array.length, resIndex = 0, result = []; - + while (++index < length) { var value = array[index]; if (value === placeholder || value === PLACEHOLDER) { @@ -11297,7 +11297,7 @@ } return result; } - + /** * Converts `set` to an array of its values. * @@ -11308,13 +11308,13 @@ function setToArray(set) { var index = -1, result = Array(set.size); - + set.forEach(function(value) { result[++index] = value; }); return result; } - + /** * Converts `set` to its value-value pairs. * @@ -11325,13 +11325,13 @@ function setToPairs(set) { var index = -1, result = Array(set.size); - + set.forEach(function(value) { result[++index] = [value, value]; }); return result; } - + /** * A specialized version of `_.indexOf` which performs strict equality * comparisons of values, i.e. `===`. @@ -11345,7 +11345,7 @@ function strictIndexOf(array, value, fromIndex) { var index = fromIndex - 1, length = array.length; - + while (++index < length) { if (array[index] === value) { return index; @@ -11353,7 +11353,7 @@ } return -1; } - + /** * A specialized version of `_.lastIndexOf` which performs strict equality * comparisons of values, i.e. `===`. @@ -11373,7 +11373,7 @@ } return index; } - + /** * Gets the number of symbols in `string`. * @@ -11386,7 +11386,7 @@ ? unicodeSize(string) : asciiSize(string); } - + /** * Converts `string` to an array. * @@ -11399,7 +11399,7 @@ ? unicodeToArray(string) : asciiToArray(string); } - + /** * Used by `_.unescape` to convert HTML entities to characters. * @@ -11408,7 +11408,7 @@ * @returns {string} Returns the unescaped character. */ var unescapeHtmlChar = basePropertyOf(htmlUnescapes); - + /** * Gets the size of a Unicode `string`. * @@ -11423,7 +11423,7 @@ } return result; } - + /** * Converts a Unicode `string` to an array. * @@ -11434,7 +11434,7 @@ function unicodeToArray(string) { return string.match(reUnicode) || []; } - + /** * Splits a Unicode `string` into an array of its words. * @@ -11445,9 +11445,9 @@ function unicodeWords(string) { return string.match(reUnicodeWord) || []; } - + /*--------------------------------------------------------------------------*/ - + /** * Create a new pristine `lodash` function using the `context` object. * @@ -11479,7 +11479,7 @@ */ var runInContext = (function runInContext(context) { context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); - + /** Built-in constructor references. */ var Array = context.Array, Date = context.Date, @@ -11490,49 +11490,49 @@ RegExp = context.RegExp, String = context.String, TypeError = context.TypeError; - + /** Used for built-in method references. */ var arrayProto = Array.prototype, funcProto = Function.prototype, objectProto = Object.prototype; - + /** Used to detect overreaching core-js shims. */ var coreJsData = context['__core-js_shared__']; - + /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; - + /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; - + /** Used to generate unique IDs. */ var idCounter = 0; - + /** Used to detect methods masquerading as native. */ var maskSrcKey = (function() { var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); return uid ? ('Symbol(src)_1.' + uid) : ''; }()); - + /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; - + /** Used to infer the `Object` constructor. */ var objectCtorString = funcToString.call(Object); - + /** Used to restore the original `_` reference in `_.noConflict`. */ var oldDash = root._; - + /** Used to detect if a method is native. */ var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' ); - + /** Built-in value references. */ var Buffer = moduleExports ? context.Buffer : undefined, Symbol = context.Symbol, @@ -11545,7 +11545,7 @@ spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, symIterator = Symbol ? Symbol.iterator : undefined, symToStringTag = Symbol ? Symbol.toStringTag : undefined; - + var defineProperty = (function() { try { var func = getNative(Object, 'defineProperty'); @@ -11553,12 +11553,12 @@ return func; } catch (e) {} }()); - + /** Mocked built-ins. */ var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, ctxNow = Date && Date.now !== root.Date.now && Date.now, ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; - + /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeCeil = Math.ceil, nativeFloor = Math.floor, @@ -11573,7 +11573,7 @@ nativeParseInt = context.parseInt, nativeRandom = Math.random, nativeReverse = arrayProto.reverse; - + /* Built-in method references that are verified to be native. */ var DataView = getNative(context, 'DataView'), Map = getNative(context, 'Map'), @@ -11581,27 +11581,27 @@ Set = getNative(context, 'Set'), WeakMap = getNative(context, 'WeakMap'), nativeCreate = getNative(Object, 'create'); - + /** Used to store function metadata. */ var metaMap = WeakMap && new WeakMap; - + /** Used to lookup unminified function names. */ var realNames = {}; - + /** Used to detect maps, sets, and weakmaps. */ var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map), promiseCtorString = toSource(Promise), setCtorString = toSource(Set), weakMapCtorString = toSource(WeakMap); - + /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, symbolToString = symbolProto ? symbolProto.toString : undefined; - + /*------------------------------------------------------------------------*/ - + /** * Creates a `lodash` object which wraps `value` to enable implicit method * chain sequences. Methods that operate on and return arrays, collections, @@ -11730,7 +11730,7 @@ } return new LodashWrapper(value); } - + /** * The base implementation of `_.create` without support for assigning * properties to the created object. @@ -11754,7 +11754,7 @@ return result; }; }()); - + /** * The function whose prototype chain sequence wrappers inherit from. * @@ -11763,7 +11763,7 @@ function baseLodash() { // No operation performed. } - + /** * The base constructor for creating `lodash` wrapper objects. * @@ -11778,7 +11778,7 @@ this.__index__ = 0; this.__values__ = undefined; } - + /** * By default, the template delimiters used by lodash are like those in * embedded Ruby (ERB) as well as ES2015 template strings. Change the @@ -11789,7 +11789,7 @@ * @type {Object} */ lodash.templateSettings = { - + /** * Used to detect `data` property values to be HTML-escaped. * @@ -11797,7 +11797,7 @@ * @type {RegExp} */ 'escape': reEscape, - + /** * Used to detect code to be evaluated. * @@ -11805,7 +11805,7 @@ * @type {RegExp} */ 'evaluate': reEvaluate, - + /** * Used to detect `data` property values to inject. * @@ -11813,7 +11813,7 @@ * @type {RegExp} */ 'interpolate': reInterpolate, - + /** * Used to reference the data object in the template text. * @@ -11821,7 +11821,7 @@ * @type {string} */ 'variable': '', - + /** * Used to import variables into the compiled template. * @@ -11829,7 +11829,7 @@ * @type {Object} */ 'imports': { - + /** * A reference to the `lodash` function. * @@ -11839,16 +11839,16 @@ '_': lodash } }; - + // Ensure wrappers are instances of `baseLodash`. lodash.prototype = baseLodash.prototype; lodash.prototype.constructor = lodash; - + LodashWrapper.prototype = baseCreate(baseLodash.prototype); LodashWrapper.prototype.constructor = LodashWrapper; - + /*------------------------------------------------------------------------*/ - + /** * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. * @@ -11865,7 +11865,7 @@ this.__takeCount__ = MAX_ARRAY_LENGTH; this.__views__ = []; } - + /** * Creates a clone of the lazy wrapper object. * @@ -11884,7 +11884,7 @@ result.__views__ = copyArray(this.__views__); return result; } - + /** * Reverses the direction of lazy iteration. * @@ -11904,7 +11904,7 @@ } return result; } - + /** * Extracts the unwrapped value from its lazy wrapper. * @@ -11928,25 +11928,25 @@ iterLength = iteratees.length, resIndex = 0, takeCount = nativeMin(length, this.__takeCount__); - + if (!isArr || (!isRight && arrLength == length && takeCount == length)) { return baseWrapperValue(array, this.__actions__); } var result = []; - + outer: while (length-- && resIndex < takeCount) { index += dir; - + var iterIndex = -1, value = array[index]; - + while (++iterIndex < iterLength) { var data = iteratees[iterIndex], iteratee = data.iteratee, type = data.type, computed = iteratee(value); - + if (type == LAZY_MAP_FLAG) { value = computed; } else if (!computed) { @@ -11961,13 +11961,13 @@ } return result; } - + // Ensure `LazyWrapper` is an instance of `baseLodash`. LazyWrapper.prototype = baseCreate(baseLodash.prototype); LazyWrapper.prototype.constructor = LazyWrapper; - + /*------------------------------------------------------------------------*/ - + /** * Creates a hash object. * @@ -11978,14 +11978,14 @@ function Hash(entries) { var index = -1, length = entries == null ? 0 : entries.length; - + this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } - + /** * Removes all key-value entries from the hash. * @@ -11997,7 +11997,7 @@ this.__data__ = nativeCreate ? nativeCreate(null) : {}; this.size = 0; } - + /** * Removes `key` and its value from the hash. * @@ -12013,7 +12013,7 @@ this.size -= result ? 1 : 0; return result; } - + /** * Gets the hash value for `key`. * @@ -12031,7 +12031,7 @@ } return hasOwnProperty.call(data, key) ? data[key] : undefined; } - + /** * Checks if a hash value for `key` exists. * @@ -12045,7 +12045,7 @@ var data = this.__data__; return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); } - + /** * Sets the hash `key` to `value`. * @@ -12062,16 +12062,16 @@ data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; return this; } - + // Add methods to `Hash`. Hash.prototype.clear = hashClear; Hash.prototype['delete'] = hashDelete; Hash.prototype.get = hashGet; Hash.prototype.has = hashHas; Hash.prototype.set = hashSet; - + /*------------------------------------------------------------------------*/ - + /** * Creates an list cache object. * @@ -12082,14 +12082,14 @@ function ListCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; - + this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } - + /** * Removes all key-value entries from the list cache. * @@ -12101,7 +12101,7 @@ this.__data__ = []; this.size = 0; } - + /** * Removes `key` and its value from the list cache. * @@ -12114,7 +12114,7 @@ function listCacheDelete(key) { var data = this.__data__, index = assocIndexOf(data, key); - + if (index < 0) { return false; } @@ -12127,7 +12127,7 @@ --this.size; return true; } - + /** * Gets the list cache value for `key`. * @@ -12140,10 +12140,10 @@ function listCacheGet(key) { var data = this.__data__, index = assocIndexOf(data, key); - + return index < 0 ? undefined : data[index][1]; } - + /** * Checks if a list cache value for `key` exists. * @@ -12156,7 +12156,7 @@ function listCacheHas(key) { return assocIndexOf(this.__data__, key) > -1; } - + /** * Sets the list cache `key` to `value`. * @@ -12170,7 +12170,7 @@ function listCacheSet(key, value) { var data = this.__data__, index = assocIndexOf(data, key); - + if (index < 0) { ++this.size; data.push([key, value]); @@ -12179,16 +12179,16 @@ } return this; } - + // Add methods to `ListCache`. ListCache.prototype.clear = listCacheClear; ListCache.prototype['delete'] = listCacheDelete; ListCache.prototype.get = listCacheGet; ListCache.prototype.has = listCacheHas; ListCache.prototype.set = listCacheSet; - + /*------------------------------------------------------------------------*/ - + /** * Creates a map cache object to store key-value pairs. * @@ -12199,14 +12199,14 @@ function MapCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; - + this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } - + /** * Removes all key-value entries from the map. * @@ -12222,7 +12222,7 @@ 'string': new Hash }; } - + /** * Removes `key` and its value from the map. * @@ -12237,7 +12237,7 @@ this.size -= result ? 1 : 0; return result; } - + /** * Gets the map value for `key`. * @@ -12250,7 +12250,7 @@ function mapCacheGet(key) { return getMapData(this, key).get(key); } - + /** * Checks if a map value for `key` exists. * @@ -12263,7 +12263,7 @@ function mapCacheHas(key) { return getMapData(this, key).has(key); } - + /** * Sets the map `key` to `value`. * @@ -12277,21 +12277,21 @@ function mapCacheSet(key, value) { var data = getMapData(this, key), size = data.size; - + data.set(key, value); this.size += data.size == size ? 0 : 1; return this; } - + // Add methods to `MapCache`. MapCache.prototype.clear = mapCacheClear; MapCache.prototype['delete'] = mapCacheDelete; MapCache.prototype.get = mapCacheGet; MapCache.prototype.has = mapCacheHas; MapCache.prototype.set = mapCacheSet; - + /*------------------------------------------------------------------------*/ - + /** * * Creates an array cache object to store unique values. @@ -12303,13 +12303,13 @@ function SetCache(values) { var index = -1, length = values == null ? 0 : values.length; - + this.__data__ = new MapCache; while (++index < length) { this.add(values[index]); } } - + /** * Adds `value` to the array cache. * @@ -12324,7 +12324,7 @@ this.__data__.set(value, HASH_UNDEFINED); return this; } - + /** * Checks if `value` is in the array cache. * @@ -12337,13 +12337,13 @@ function setCacheHas(value) { return this.__data__.has(value); } - + // Add methods to `SetCache`. SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; SetCache.prototype.has = setCacheHas; - + /*------------------------------------------------------------------------*/ - + /** * Creates a stack cache object to store key-value pairs. * @@ -12355,7 +12355,7 @@ var data = this.__data__ = new ListCache(entries); this.size = data.size; } - + /** * Removes all key-value entries from the stack. * @@ -12367,7 +12367,7 @@ this.__data__ = new ListCache; this.size = 0; } - + /** * Removes `key` and its value from the stack. * @@ -12380,11 +12380,11 @@ function stackDelete(key) { var data = this.__data__, result = data['delete'](key); - + this.size = data.size; return result; } - + /** * Gets the stack value for `key`. * @@ -12397,7 +12397,7 @@ function stackGet(key) { return this.__data__.get(key); } - + /** * Checks if a stack value for `key` exists. * @@ -12410,7 +12410,7 @@ function stackHas(key) { return this.__data__.has(key); } - + /** * Sets the stack `key` to `value`. * @@ -12436,16 +12436,16 @@ this.size = data.size; return this; } - + // Add methods to `Stack`. Stack.prototype.clear = stackClear; Stack.prototype['delete'] = stackDelete; Stack.prototype.get = stackGet; Stack.prototype.has = stackHas; Stack.prototype.set = stackSet; - + /*------------------------------------------------------------------------*/ - + /** * Creates an array of the enumerable property names of the array-like `value`. * @@ -12462,7 +12462,7 @@ skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; - + for (var key in value) { if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( @@ -12480,7 +12480,7 @@ } return result; } - + /** * A specialized version of `_.sample` for arrays. * @@ -12492,7 +12492,7 @@ var length = array.length; return length ? array[baseRandom(0, length - 1)] : undefined; } - + /** * A specialized version of `_.sampleSize` for arrays. * @@ -12504,7 +12504,7 @@ function arraySampleSize(array, n) { return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); } - + /** * A specialized version of `_.shuffle` for arrays. * @@ -12515,7 +12515,7 @@ function arrayShuffle(array) { return shuffleSelf(copyArray(array)); } - + /** * This function is like `assignValue` except that it doesn't assign * `undefined` values. @@ -12531,7 +12531,7 @@ baseAssignValue(object, key, value); } } - + /** * Assigns `value` to `key` of `object` if the existing value is not equivalent * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) @@ -12549,7 +12549,7 @@ baseAssignValue(object, key, value); } } - + /** * Gets the index at which the `key` is found in `array` of key-value pairs. * @@ -12567,7 +12567,7 @@ } return -1; } - + /** * Aggregates elements of `collection` on `accumulator` with keys transformed * by `iteratee` and values set by `setter`. @@ -12585,7 +12585,7 @@ }); return accumulator; } - + /** * The base implementation of `_.assign` without support for multiple sources * or `customizer` functions. @@ -12598,7 +12598,7 @@ function baseAssign(object, source) { return object && copyObject(source, keys(source), object); } - + /** * The base implementation of `_.assignIn` without support for multiple sources * or `customizer` functions. @@ -12611,7 +12611,7 @@ function baseAssignIn(object, source) { return object && copyObject(source, keysIn(source), object); } - + /** * The base implementation of `assignValue` and `assignMergeValue` without * value checks. @@ -12633,7 +12633,7 @@ object[key] = value; } } - + /** * The base implementation of `_.at` without support for individual paths. * @@ -12647,13 +12647,13 @@ length = paths.length, result = Array(length), skip = object == null; - + while (++index < length) { result[index] = skip ? undefined : get(object, paths[index]); } return result; } - + /** * The base implementation of `_.clamp` which doesn't coerce arguments. * @@ -12674,7 +12674,7 @@ } return number; } - + /** * The base implementation of `_.clone` and `_.cloneDeep` which tracks * traversed objects. @@ -12696,7 +12696,7 @@ isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG; - + if (customizer) { result = object ? customizer(value, key, object, stack) : customizer(value); } @@ -12715,7 +12715,7 @@ } else { var tag = getTag(value), isFunc = tag == funcTag || tag == genTag; - + if (isBuffer(value)) { return cloneBuffer(value, isDeep); } @@ -12740,11 +12740,11 @@ return stacked; } stack.set(value, result); - + var keysFunc = isFull ? (isFlat ? getAllKeysIn : getAllKeys) : (isFlat ? keysIn : keys); - + var props = isArr ? undefined : keysFunc(value); arrayEach(props || value, function(subValue, key) { if (props) { @@ -12756,7 +12756,7 @@ }); return result; } - + /** * The base implementation of `_.conforms` which doesn't clone `source`. * @@ -12770,7 +12770,7 @@ return baseConformsTo(object, source, props); }; } - + /** * The base implementation of `_.conformsTo` which accepts `props` to check. * @@ -12789,14 +12789,14 @@ var key = props[length], predicate = source[key], value = object[key]; - + if ((value === undefined && !(key in object)) || !predicate(value)) { return false; } } return true; } - + /** * The base implementation of `_.delay` and `_.defer` which accepts `args` * to provide to `func`. @@ -12813,7 +12813,7 @@ } return setTimeout(function() { func.apply(undefined, args); }, wait); } - + /** * The base implementation of methods like `_.difference` without support * for excluding multiple arrays or iteratee shorthands. @@ -12832,7 +12832,7 @@ length = array.length, result = [], valuesLength = values.length; - + if (!length) { return result; } @@ -12852,7 +12852,7 @@ while (++index < length) { var value = array[index], computed = iteratee == null ? value : iteratee(value); - + value = (comparator || value !== 0) ? value : 0; if (isCommon && computed === computed) { var valuesIndex = valuesLength; @@ -12869,7 +12869,7 @@ } return result; } - + /** * The base implementation of `_.forEach` without support for iteratee shorthands. * @@ -12879,7 +12879,7 @@ * @returns {Array|Object} Returns `collection`. */ var baseEach = createBaseEach(baseForOwn); - + /** * The base implementation of `_.forEachRight` without support for iteratee shorthands. * @@ -12889,7 +12889,7 @@ * @returns {Array|Object} Returns `collection`. */ var baseEachRight = createBaseEach(baseForOwnRight, true); - + /** * The base implementation of `_.every` without support for iteratee shorthands. * @@ -12907,7 +12907,7 @@ }); return result; } - + /** * The base implementation of methods like `_.max` and `_.min` which accepts a * `comparator` to determine the extremum value. @@ -12921,11 +12921,11 @@ function baseExtremum(array, iteratee, comparator) { var index = -1, length = array.length; - + while (++index < length) { var value = array[index], current = iteratee(value); - + if (current != null && (computed === undefined ? (current === current && !isSymbol(current)) : comparator(current, computed) @@ -12936,7 +12936,7 @@ } return result; } - + /** * The base implementation of `_.fill` without an iteratee call guard. * @@ -12949,7 +12949,7 @@ */ function baseFill(array, value, start, end) { var length = array.length; - + start = toInteger(start); if (start < 0) { start = -start > length ? 0 : (length + start); @@ -12964,7 +12964,7 @@ } return array; } - + /** * The base implementation of `_.filter` without support for iteratee shorthands. * @@ -12982,7 +12982,7 @@ }); return result; } - + /** * The base implementation of `_.flatten` with support for restricting flattening. * @@ -12997,10 +12997,10 @@ function baseFlatten(array, depth, predicate, isStrict, result) { var index = -1, length = array.length; - + predicate || (predicate = isFlattenable); result || (result = []); - + while (++index < length) { var value = array[index]; if (depth > 0 && predicate(value)) { @@ -13016,7 +13016,7 @@ } return result; } - + /** * The base implementation of `baseForOwn` which iterates over `object` * properties returned by `keysFunc` and invokes `iteratee` for each property. @@ -13029,7 +13029,7 @@ * @returns {Object} Returns `object`. */ var baseFor = createBaseFor(); - + /** * This function is like `baseFor` except that it iterates over properties * in the opposite order. @@ -13041,7 +13041,7 @@ * @returns {Object} Returns `object`. */ var baseForRight = createBaseFor(true); - + /** * The base implementation of `_.forOwn` without support for iteratee shorthands. * @@ -13053,7 +13053,7 @@ function baseForOwn(object, iteratee) { return object && baseFor(object, iteratee, keys); } - + /** * The base implementation of `_.forOwnRight` without support for iteratee shorthands. * @@ -13065,7 +13065,7 @@ function baseForOwnRight(object, iteratee) { return object && baseForRight(object, iteratee, keys); } - + /** * The base implementation of `_.functions` which creates an array of * `object` function property names filtered from `props`. @@ -13080,7 +13080,7 @@ return isFunction(object[key]); }); } - + /** * The base implementation of `_.get` without support for default values. * @@ -13091,16 +13091,16 @@ */ function baseGet(object, path) { path = castPath(path, object); - + var index = 0, length = path.length; - + while (object != null && index < length) { object = object[toKey(path[index++])]; } return (index && index == length) ? object : undefined; } - + /** * The base implementation of `getAllKeys` and `getAllKeysIn` which uses * `keysFunc` and `symbolsFunc` to get the enumerable property names and @@ -13116,7 +13116,7 @@ var result = keysFunc(object); return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); } - + /** * The base implementation of `getTag` without fallbacks for buggy environments. * @@ -13132,7 +13132,7 @@ ? getRawTag(value) : objectToString(value); } - + /** * The base implementation of `_.gt` which doesn't coerce arguments. * @@ -13145,7 +13145,7 @@ function baseGt(value, other) { return value > other; } - + /** * The base implementation of `_.has` without support for deep paths. * @@ -13157,7 +13157,7 @@ function baseHas(object, key) { return object != null && hasOwnProperty.call(object, key); } - + /** * The base implementation of `_.hasIn` without support for deep paths. * @@ -13169,7 +13169,7 @@ function baseHasIn(object, key) { return object != null && key in Object(object); } - + /** * The base implementation of `_.inRange` which doesn't coerce arguments. * @@ -13182,7 +13182,7 @@ function baseInRange(number, start, end) { return number >= nativeMin(start, end) && number < nativeMax(start, end); } - + /** * The base implementation of methods like `_.intersection`, without support * for iteratee shorthands, that accepts an array of arrays to inspect. @@ -13201,7 +13201,7 @@ caches = Array(othLength), maxLength = Infinity, result = []; - + while (othIndex--) { var array = arrays[othIndex]; if (othIndex && iteratee) { @@ -13213,15 +13213,15 @@ : undefined; } array = arrays[0]; - + var index = -1, seen = caches[0]; - + outer: while (++index < length && result.length < maxLength) { var value = array[index], computed = iteratee ? iteratee(value) : value; - + value = (comparator || value !== 0) ? value : 0; if (!(seen ? cacheHas(seen, computed) @@ -13245,7 +13245,7 @@ } return result; } - + /** * The base implementation of `_.invert` and `_.invertBy` which inverts * `object` with values transformed by `iteratee` and set by `setter`. @@ -13263,7 +13263,7 @@ }); return accumulator; } - + /** * The base implementation of `_.invoke` without support for individual * method arguments. @@ -13280,7 +13280,7 @@ var func = object == null ? object : object[toKey(last(path))]; return func == null ? undefined : apply(func, object, args); } - + /** * The base implementation of `_.isArguments`. * @@ -13291,7 +13291,7 @@ function baseIsArguments(value) { return isObjectLike(value) && baseGetTag(value) == argsTag; } - + /** * The base implementation of `_.isArrayBuffer` without Node.js optimizations. * @@ -13302,7 +13302,7 @@ function baseIsArrayBuffer(value) { return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; } - + /** * The base implementation of `_.isDate` without Node.js optimizations. * @@ -13313,7 +13313,7 @@ function baseIsDate(value) { return isObjectLike(value) && baseGetTag(value) == dateTag; } - + /** * The base implementation of `_.isEqual` which supports partial comparisons * and tracks traversed objects. @@ -13337,7 +13337,7 @@ } return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); } - + /** * A specialized version of `baseIsEqual` for arrays and objects which performs * deep comparisons and tracks traversed objects enabling objects with circular @@ -13357,14 +13357,14 @@ othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other); - + objTag = objTag == argsTag ? objectTag : objTag; othTag = othTag == argsTag ? objectTag : othTag; - + var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag; - + if (isSameTag && isBuffer(object)) { if (!isBuffer(other)) { return false; @@ -13381,11 +13381,11 @@ if (!(bitmask & COMPARE_PARTIAL_FLAG)) { var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - + if (objIsWrapped || othIsWrapped) { var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; - + stack || (stack = new Stack); return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); } @@ -13396,7 +13396,7 @@ stack || (stack = new Stack); return equalObjects(object, other, bitmask, customizer, equalFunc, stack); } - + /** * The base implementation of `_.isMap` without Node.js optimizations. * @@ -13407,7 +13407,7 @@ function baseIsMap(value) { return isObjectLike(value) && getTag(value) == mapTag; } - + /** * The base implementation of `_.isMatch` without support for iteratee shorthands. * @@ -13422,7 +13422,7 @@ var index = matchData.length, length = index, noCustomizer = !customizer; - + if (object == null) { return !length; } @@ -13441,7 +13441,7 @@ var key = data[0], objValue = object[key], srcValue = data[1]; - + if (noCustomizer && data[2]) { if (objValue === undefined && !(key in object)) { return false; @@ -13461,7 +13461,7 @@ } return true; } - + /** * The base implementation of `_.isNative` without bad shim checks. * @@ -13477,7 +13477,7 @@ var pattern = isFunction(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource(value)); } - + /** * The base implementation of `_.isRegExp` without Node.js optimizations. * @@ -13488,7 +13488,7 @@ function baseIsRegExp(value) { return isObjectLike(value) && baseGetTag(value) == regexpTag; } - + /** * The base implementation of `_.isSet` without Node.js optimizations. * @@ -13499,7 +13499,7 @@ function baseIsSet(value) { return isObjectLike(value) && getTag(value) == setTag; } - + /** * The base implementation of `_.isTypedArray` without Node.js optimizations. * @@ -13511,7 +13511,7 @@ return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; } - + /** * The base implementation of `_.iteratee`. * @@ -13535,7 +13535,7 @@ } return property(value); } - + /** * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. * @@ -13555,7 +13555,7 @@ } return result; } - + /** * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. * @@ -13569,7 +13569,7 @@ } var isProto = isPrototype(object), result = []; - + for (var key in object) { if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { result.push(key); @@ -13577,7 +13577,7 @@ } return result; } - + /** * The base implementation of `_.lt` which doesn't coerce arguments. * @@ -13590,7 +13590,7 @@ function baseLt(value, other) { return value < other; } - + /** * The base implementation of `_.map` without support for iteratee shorthands. * @@ -13602,13 +13602,13 @@ function baseMap(collection, iteratee) { var index = -1, result = isArrayLike(collection) ? Array(collection.length) : []; - + baseEach(collection, function(value, key, collection) { result[++index] = iteratee(value, key, collection); }); return result; } - + /** * The base implementation of `_.matches` which doesn't clone `source`. * @@ -13625,7 +13625,7 @@ return object === source || baseIsMatch(object, source, matchData); }; } - + /** * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. * @@ -13645,7 +13645,7 @@ : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); }; } - + /** * The base implementation of `_.merge` without support for multiple sources. * @@ -13670,7 +13670,7 @@ var newValue = customizer ? customizer(object[key], srcValue, (key + ''), object, source, stack) : undefined; - + if (newValue === undefined) { newValue = srcValue; } @@ -13678,7 +13678,7 @@ } }, keysIn); } - + /** * A specialized version of `baseMerge` for arrays and objects which performs * deep merges and tracks traversed objects enabling objects with circular @@ -13698,7 +13698,7 @@ var objValue = object[key], srcValue = source[key], stacked = stack.get(srcValue); - + if (stacked) { assignMergeValue(object, key, stacked); return; @@ -13706,14 +13706,14 @@ var newValue = customizer ? customizer(objValue, srcValue, (key + ''), object, source, stack) : undefined; - + var isCommon = newValue === undefined; - + if (isCommon) { var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue); - + newValue = srcValue; if (isArr || isBuff || isTyped) { if (isArray(objValue)) { @@ -13755,7 +13755,7 @@ } assignMergeValue(object, key, newValue); } - + /** * The base implementation of `_.nth` which doesn't coerce arguments. * @@ -13772,7 +13772,7 @@ n += n < 0 ? length : 0; return isIndex(n, length) ? array[n] : undefined; } - + /** * The base implementation of `_.orderBy` without param guards. * @@ -13785,19 +13785,19 @@ function baseOrderBy(collection, iteratees, orders) { var index = -1; iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee())); - + var result = baseMap(collection, function(value, key, collection) { var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); }); return { 'criteria': criteria, 'index': ++index, 'value': value }; }); - + return baseSortBy(result, function(object, other) { return compareMultiple(object, other, orders); }); } - + /** * The base implementation of `_.pick` without support for individual * property identifiers. @@ -13812,7 +13812,7 @@ return hasIn(object, path); }); } - + /** * The base implementation of `_.pickBy` without support for iteratee shorthands. * @@ -13826,18 +13826,18 @@ var index = -1, length = paths.length, result = {}; - + while (++index < length) { var path = paths[index], value = baseGet(object, path); - + if (predicate(value, path)) { baseSet(result, castPath(path, object), value); } } return result; } - + /** * A specialized version of `baseProperty` which supports deep paths. * @@ -13850,7 +13850,7 @@ return baseGet(object, path); }; } - + /** * The base implementation of `_.pullAllBy` without support for iteratee * shorthands. @@ -13867,7 +13867,7 @@ index = -1, length = values.length, seen = array; - + if (array === values) { values = copyArray(values); } @@ -13878,7 +13878,7 @@ var fromIndex = 0, value = values[index], computed = iteratee ? iteratee(value) : value; - + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { if (seen !== array) { splice.call(seen, fromIndex, 1); @@ -13888,7 +13888,7 @@ } return array; } - + /** * The base implementation of `_.pullAt` without support for individual * indexes or capturing the removed elements. @@ -13901,7 +13901,7 @@ function basePullAt(array, indexes) { var length = array ? indexes.length : 0, lastIndex = length - 1; - + while (length--) { var index = indexes[length]; if (length == lastIndex || index !== previous) { @@ -13915,7 +13915,7 @@ } return array; } - + /** * The base implementation of `_.random` without support for returning * floating-point numbers. @@ -13928,7 +13928,7 @@ function baseRandom(lower, upper) { return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); } - + /** * The base implementation of `_.range` and `_.rangeRight` which doesn't * coerce arguments. @@ -13944,14 +13944,14 @@ var index = -1, length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), result = Array(length); - + while (length--) { result[fromRight ? length : ++index] = start; start += step; } return result; } - + /** * The base implementation of `_.repeat` which doesn't coerce arguments. * @@ -13976,10 +13976,10 @@ string += string; } } while (n); - + return result; } - + /** * The base implementation of `_.rest` which doesn't validate or coerce arguments. * @@ -13991,7 +13991,7 @@ function baseRest(func, start) { return setToString(overRest(func, start, identity), func + ''); } - + /** * The base implementation of `_.sample`. * @@ -14002,7 +14002,7 @@ function baseSample(collection) { return arraySample(values(collection)); } - + /** * The base implementation of `_.sampleSize` without param guards. * @@ -14015,7 +14015,7 @@ var array = values(collection); return shuffleSelf(array, baseClamp(n, 0, array.length)); } - + /** * The base implementation of `_.set`. * @@ -14031,16 +14031,16 @@ return object; } path = castPath(path, object); - + var index = -1, length = path.length, lastIndex = length - 1, nested = object; - + while (nested != null && ++index < length) { var key = toKey(path[index]), newValue = value; - + if (index != lastIndex) { var objValue = nested[key]; newValue = customizer ? customizer(objValue, key, nested) : undefined; @@ -14055,7 +14055,7 @@ } return object; } - + /** * The base implementation of `setData` without support for hot loop shorting. * @@ -14068,7 +14068,7 @@ metaMap.set(func, data); return func; }; - + /** * The base implementation of `setToString` without support for hot loop shorting. * @@ -14085,7 +14085,7 @@ 'writable': true }); }; - + /** * The base implementation of `_.shuffle`. * @@ -14096,7 +14096,7 @@ function baseShuffle(collection) { return shuffleSelf(values(collection)); } - + /** * The base implementation of `_.slice` without an iteratee call guard. * @@ -14109,7 +14109,7 @@ function baseSlice(array, start, end) { var index = -1, length = array.length; - + if (start < 0) { start = -start > length ? 0 : (length + start); } @@ -14119,14 +14119,14 @@ } length = start > end ? 0 : ((end - start) >>> 0); start >>>= 0; - + var result = Array(length); while (++index < length) { result[index] = array[index + start]; } return result; } - + /** * The base implementation of `_.some` without support for iteratee shorthands. * @@ -14138,14 +14138,14 @@ */ function baseSome(collection, predicate) { var result; - + baseEach(collection, function(value, index, collection) { result = predicate(value, index, collection); return !result; }); return !!result; } - + /** * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which * performs a binary search of `array` to determine the index at which `value` @@ -14161,12 +14161,12 @@ function baseSortedIndex(array, value, retHighest) { var low = 0, high = array == null ? low : array.length; - + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { while (low < high) { var mid = (low + high) >>> 1, computed = array[mid]; - + if (computed !== null && !isSymbol(computed) && (retHighest ? (computed <= value) : (computed < value))) { low = mid + 1; @@ -14178,7 +14178,7 @@ } return baseSortedIndexBy(array, value, identity, retHighest); } - + /** * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` * which invokes `iteratee` for `value` and each element of `array` to compute @@ -14194,14 +14194,14 @@ */ function baseSortedIndexBy(array, value, iteratee, retHighest) { value = iteratee(value); - + var low = 0, high = array == null ? 0 : array.length, valIsNaN = value !== value, valIsNull = value === null, valIsSymbol = isSymbol(value), valIsUndefined = value === undefined; - + while (low < high) { var mid = nativeFloor((low + high) / 2), computed = iteratee(array[mid]), @@ -14209,7 +14209,7 @@ othIsNull = computed === null, othIsReflexive = computed === computed, othIsSymbol = isSymbol(computed); - + if (valIsNaN) { var setLow = retHighest || othIsReflexive; } else if (valIsUndefined) { @@ -14231,7 +14231,7 @@ } return nativeMin(high, MAX_ARRAY_INDEX); } - + /** * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without * support for iteratee shorthands. @@ -14246,11 +14246,11 @@ length = array.length, resIndex = 0, result = []; - + while (++index < length) { var value = array[index], computed = iteratee ? iteratee(value) : value; - + if (!index || !eq(computed, seen)) { var seen = computed; result[resIndex++] = value === 0 ? 0 : value; @@ -14258,7 +14258,7 @@ } return result; } - + /** * The base implementation of `_.toNumber` which doesn't ensure correct * conversions of binary, hexadecimal, or octal string values. @@ -14276,7 +14276,7 @@ } return +value; } - + /** * The base implementation of `_.toString` which doesn't convert nullish * values to empty strings. @@ -14300,7 +14300,7 @@ var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } - + /** * The base implementation of `_.uniqBy` without support for iteratee shorthands. * @@ -14317,7 +14317,7 @@ isCommon = true, result = [], seen = result; - + if (comparator) { isCommon = false; includes = arrayIncludesWith; @@ -14338,7 +14338,7 @@ while (++index < length) { var value = array[index], computed = iteratee ? iteratee(value) : value; - + value = (comparator || value !== 0) ? value : 0; if (isCommon && computed === computed) { var seenIndex = seen.length; @@ -14361,7 +14361,7 @@ } return result; } - + /** * The base implementation of `_.unset`. * @@ -14375,7 +14375,7 @@ object = parent(object, path); return object == null || delete object[toKey(last(path))]; } - + /** * The base implementation of `_.update`. * @@ -14389,7 +14389,7 @@ function baseUpdate(object, path, updater, customizer) { return baseSet(object, path, updater(baseGet(object, path)), customizer); } - + /** * The base implementation of methods like `_.dropWhile` and `_.takeWhile` * without support for iteratee shorthands. @@ -14404,15 +14404,15 @@ function baseWhile(array, predicate, isDrop, fromRight) { var length = array.length, index = fromRight ? length : -1; - + while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {} - + return isDrop ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); } - + /** * The base implementation of `wrapperValue` which returns the result of * performing a sequence of actions on the unwrapped `value`, where each @@ -14432,7 +14432,7 @@ return action.func.apply(action.thisArg, arrayPush([result], action.args)); }, result); } - + /** * The base implementation of methods like `_.xor`, without support for * iteratee shorthands, that accepts an array of arrays to inspect. @@ -14450,11 +14450,11 @@ } var index = -1, result = Array(length); - + while (++index < length) { var array = arrays[index], othIndex = -1; - + while (++othIndex < length) { if (othIndex != index) { result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); @@ -14463,7 +14463,7 @@ } return baseUniq(baseFlatten(result, 1), iteratee, comparator); } - + /** * This base implementation of `_.zipObject` which assigns values using `assignFunc`. * @@ -14478,14 +14478,14 @@ length = props.length, valsLength = values.length, result = {}; - + while (++index < length) { var value = index < valsLength ? values[index] : undefined; assignFunc(result, props[index], value); } return result; } - + /** * Casts `value` to an empty array if it's not an array like object. * @@ -14496,7 +14496,7 @@ function castArrayLikeObject(value) { return isArrayLikeObject(value) ? value : []; } - + /** * Casts `value` to `identity` if it's not a function. * @@ -14507,7 +14507,7 @@ function castFunction(value) { return typeof value == 'function' ? value : identity; } - + /** * Casts `value` to a path array if it's not one. * @@ -14522,7 +14522,7 @@ } return isKey(value, object) ? [value] : stringToPath(toString(value)); } - + /** * A `baseRest` alias which can be replaced with `identity` by module * replacement plugins. @@ -14533,7 +14533,7 @@ * @returns {Function} Returns the new function. */ var castRest = baseRest; - + /** * Casts `array` to a slice if it's needed. * @@ -14548,7 +14548,7 @@ end = end === undefined ? length : end; return (!start && end >= length) ? array : baseSlice(array, start, end); } - + /** * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). * @@ -14558,7 +14558,7 @@ var clearTimeout = ctxClearTimeout || function(id) { return root.clearTimeout(id); }; - + /** * Creates a clone of `buffer`. * @@ -14573,11 +14573,11 @@ } var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); - + buffer.copy(result); return result; } - + /** * Creates a clone of `arrayBuffer`. * @@ -14590,7 +14590,7 @@ new Uint8Array(result).set(new Uint8Array(arrayBuffer)); return result; } - + /** * Creates a clone of `dataView`. * @@ -14603,7 +14603,7 @@ var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); } - + /** * Creates a clone of `map`. * @@ -14617,7 +14617,7 @@ var array = isDeep ? cloneFunc(mapToArray(map), CLONE_DEEP_FLAG) : mapToArray(map); return arrayReduce(array, addMapEntry, new map.constructor); } - + /** * Creates a clone of `regexp`. * @@ -14630,7 +14630,7 @@ result.lastIndex = regexp.lastIndex; return result; } - + /** * Creates a clone of `set`. * @@ -14644,7 +14644,7 @@ var array = isDeep ? cloneFunc(setToArray(set), CLONE_DEEP_FLAG) : setToArray(set); return arrayReduce(array, addSetEntry, new set.constructor); } - + /** * Creates a clone of the `symbol` object. * @@ -14655,7 +14655,7 @@ function cloneSymbol(symbol) { return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; } - + /** * Creates a clone of `typedArray`. * @@ -14668,7 +14668,7 @@ var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); } - + /** * Compares values to sort them in ascending order. * @@ -14683,12 +14683,12 @@ valIsNull = value === null, valIsReflexive = value === value, valIsSymbol = isSymbol(value); - + var othIsDefined = other !== undefined, othIsNull = other === null, othIsReflexive = other === other, othIsSymbol = isSymbol(other); - + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || (valIsNull && othIsDefined && othIsReflexive) || @@ -14706,7 +14706,7 @@ } return 0; } - + /** * Used by `_.orderBy` to compare multiple properties of a value to another * and stable sort them. @@ -14727,7 +14727,7 @@ othCriteria = other.criteria, length = objCriteria.length, ordersLength = orders.length; - + while (++index < length) { var result = compareAscending(objCriteria[index], othCriteria[index]); if (result) { @@ -14747,7 +14747,7 @@ // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. return object.index - other.index; } - + /** * Creates an array that is the composition of partially applied arguments, * placeholders, and provided arguments into a single array of arguments. @@ -14768,7 +14768,7 @@ rangeLength = nativeMax(argsLength - holdersLength, 0), result = Array(leftLength + rangeLength), isUncurried = !isCurried; - + while (++leftIndex < leftLength) { result[leftIndex] = partials[leftIndex]; } @@ -14782,7 +14782,7 @@ } return result; } - + /** * This function is like `composeArgs` except that the arguments composition * is tailored for `_.partialRight`. @@ -14804,7 +14804,7 @@ rangeLength = nativeMax(argsLength - holdersLength, 0), result = Array(rangeLength + rightLength), isUncurried = !isCurried; - + while (++argsIndex < rangeLength) { result[argsIndex] = args[argsIndex]; } @@ -14819,7 +14819,7 @@ } return result; } - + /** * Copies the values of `source` to `array`. * @@ -14831,14 +14831,14 @@ function copyArray(source, array) { var index = -1, length = source.length; - + array || (array = Array(length)); while (++index < length) { array[index] = source[index]; } return array; } - + /** * Copies properties of `source` to `object`. * @@ -14852,17 +14852,17 @@ function copyObject(source, props, object, customizer) { var isNew = !object; object || (object = {}); - + var index = -1, length = props.length; - + while (++index < length) { var key = props[index]; - + var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined; - + if (newValue === undefined) { newValue = source[key]; } @@ -14874,7 +14874,7 @@ } return object; } - + /** * Copies own symbols of `source` to `object`. * @@ -14886,7 +14886,7 @@ function copySymbols(source, object) { return copyObject(source, getSymbols(source), object); } - + /** * Copies own and inherited symbols of `source` to `object`. * @@ -14898,7 +14898,7 @@ function copySymbolsIn(source, object) { return copyObject(source, getSymbolsIn(source), object); } - + /** * Creates a function like `_.groupBy`. * @@ -14911,11 +14911,11 @@ return function(collection, iteratee) { var func = isArray(collection) ? arrayAggregator : baseAggregator, accumulator = initializer ? initializer() : {}; - + return func(collection, setter, getIteratee(iteratee, 2), accumulator); }; } - + /** * Creates a function like `_.assign`. * @@ -14929,11 +14929,11 @@ length = sources.length, customizer = length > 1 ? sources[length - 1] : undefined, guard = length > 2 ? sources[2] : undefined; - + customizer = (assigner.length > 3 && typeof customizer == 'function') ? (length--, customizer) : undefined; - + if (guard && isIterateeCall(sources[0], sources[1], guard)) { customizer = length < 3 ? undefined : customizer; length = 1; @@ -14948,7 +14948,7 @@ return object; }); } - + /** * Creates a `baseEach` or `baseEachRight` function. * @@ -14968,7 +14968,7 @@ var length = collection.length, index = fromRight ? length : -1, iterable = Object(collection); - + while ((fromRight ? index-- : ++index < length)) { if (iteratee(iterable[index], index, iterable) === false) { break; @@ -14977,7 +14977,7 @@ return collection; }; } - + /** * Creates a base function for methods like `_.forIn` and `_.forOwn`. * @@ -14991,7 +14991,7 @@ iterable = Object(object), props = keysFunc(object), length = props.length; - + while (length--) { var key = props[fromRight ? length : ++index]; if (iteratee(iterable[key], key, iterable) === false) { @@ -15001,7 +15001,7 @@ return object; }; } - + /** * Creates a function that wraps `func` to invoke it with the optional `this` * binding of `thisArg`. @@ -15015,14 +15015,14 @@ function createBind(func, bitmask, thisArg) { var isBind = bitmask & WRAP_BIND_FLAG, Ctor = createCtor(func); - + function wrapper() { var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; return fn.apply(isBind ? thisArg : this, arguments); } return wrapper; } - + /** * Creates a function like `_.lowerFirst`. * @@ -15033,23 +15033,23 @@ function createCaseFirst(methodName) { return function(string) { string = toString(string); - + var strSymbols = hasUnicode(string) ? stringToArray(string) : undefined; - + var chr = strSymbols ? strSymbols[0] : string.charAt(0); - + var trailing = strSymbols ? castSlice(strSymbols, 1).join('') : string.slice(1); - + return chr[methodName]() + trailing; }; } - + /** * Creates a function like `_.camelCase`. * @@ -15062,7 +15062,7 @@ return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); }; } - + /** * Creates a function that produces an instance of `Ctor` regardless of * whether it was invoked as part of a `new` expression or by `call` or `apply`. @@ -15089,13 +15089,13 @@ } var thisBinding = baseCreate(Ctor.prototype), result = Ctor.apply(thisBinding, args); - + // Mimic the constructor's `return` behavior. // See https://es5.github.io/#x13.2.2 for more details. return isObject(result) ? result : thisBinding; }; } - + /** * Creates a function that wraps `func` to enable currying. * @@ -15107,20 +15107,20 @@ */ function createCurry(func, bitmask, arity) { var Ctor = createCtor(func); - + function wrapper() { var length = arguments.length, args = Array(length), index = length, placeholder = getHolder(wrapper); - + while (index--) { args[index] = arguments[index]; } var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) ? [] : replaceHolders(args, placeholder); - + length -= holders.length; if (length < arity) { return createRecurry( @@ -15132,7 +15132,7 @@ } return wrapper; } - + /** * Creates a `_.find` or `_.findLast` function. * @@ -15152,7 +15152,7 @@ return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; }; } - + /** * Creates a `_.flow` or `_.flowRight` function. * @@ -15165,7 +15165,7 @@ var length = funcs.length, index = length, prereq = LodashWrapper.prototype.thru; - + if (fromRight) { funcs.reverse(); } @@ -15181,10 +15181,10 @@ index = wrapper ? index : length; while (++index < length) { func = funcs[index]; - + var funcName = getFuncName(func), data = funcName == 'wrapper' ? getData(func) : undefined; - + if (data && isLaziable(data[0]) && data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && !data[4].length && data[9] == 1 @@ -15199,13 +15199,13 @@ return function() { var args = arguments, value = args[0]; - + if (wrapper && args.length == 1 && isArray(value)) { return wrapper.plant(value).value(); } var index = 0, result = length ? funcs[index].apply(this, args) : value; - + while (++index < length) { result = funcs[index].call(this, result); } @@ -15213,7 +15213,7 @@ }; }); } - + /** * Creates a function that wraps `func` to invoke it with optional `this` * binding of `thisArg`, partial application, and currying. @@ -15240,12 +15240,12 @@ isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), isFlip = bitmask & WRAP_FLIP_FLAG, Ctor = isBindKey ? undefined : createCtor(func); - + function wrapper() { var length = arguments.length, args = Array(length), index = length; - + while (index--) { args[index] = arguments[index]; } @@ -15269,7 +15269,7 @@ } var thisBinding = isBind ? thisArg : this, fn = isBindKey ? thisBinding[func] : func; - + length = args.length; if (argPos) { args = reorder(args, argPos); @@ -15286,7 +15286,7 @@ } return wrapper; } - + /** * Creates a function like `_.invertBy`. * @@ -15300,7 +15300,7 @@ return baseInverter(object, setter, toIteratee(iteratee), {}); }; } - + /** * Creates a function that performs a mathematical operation on two values. * @@ -15334,7 +15334,7 @@ return result; }; } - + /** * Creates a function like `_.over`. * @@ -15353,7 +15353,7 @@ }); }); } - + /** * Creates the padding for `string` based on `length`. The `chars` string * is truncated if the number of characters exceeds `length`. @@ -15365,7 +15365,7 @@ */ function createPadding(length, chars) { chars = chars === undefined ? ' ' : baseToString(chars); - + var charsLength = chars.length; if (charsLength < 2) { return charsLength ? baseRepeat(chars, length) : chars; @@ -15375,7 +15375,7 @@ ? castSlice(stringToArray(result), 0, length).join('') : result.slice(0, length); } - + /** * Creates a function that wraps `func` to invoke it with the `this` binding * of `thisArg` and `partials` prepended to the arguments it receives. @@ -15391,7 +15391,7 @@ function createPartial(func, bitmask, thisArg, partials) { var isBind = bitmask & WRAP_BIND_FLAG, Ctor = createCtor(func); - + function wrapper() { var argsIndex = -1, argsLength = arguments.length, @@ -15399,7 +15399,7 @@ leftLength = partials.length, args = Array(leftLength + argsLength), fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - + while (++leftIndex < leftLength) { args[leftIndex] = partials[leftIndex]; } @@ -15410,7 +15410,7 @@ } return wrapper; } - + /** * Creates a `_.range` or `_.rangeRight` function. * @@ -15435,7 +15435,7 @@ return baseRange(start, end, step, fromRight); }; } - + /** * Creates a function that performs a relational operation on two values. * @@ -15452,7 +15452,7 @@ return operator(value, other); }; } - + /** * Creates a function that wraps `func` to continue currying. * @@ -15476,10 +15476,10 @@ newHoldersRight = isCurry ? undefined : holders, newPartials = isCurry ? partials : undefined, newPartialsRight = isCurry ? undefined : partials; - + bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); - + if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); } @@ -15487,7 +15487,7 @@ func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, newHoldersRight, argPos, ary, arity ]; - + var result = wrapFunc.apply(undefined, newData); if (isLaziable(func)) { setData(result, newData); @@ -15495,7 +15495,7 @@ result.placeholder = placeholder; return setWrapToString(result, func, bitmask); } - + /** * Creates a function like `_.round`. * @@ -15513,14 +15513,14 @@ // See [MDN](https://mdn.io/round#Examples) for more details. var pair = (toString(number) + 'e').split('e'), value = func(pair[0] + 'e' + (+pair[1] + precision)); - + pair = (toString(value) + 'e').split('e'); return +(pair[0] + 'e' + (+pair[1] - precision)); } return func(number); }; } - + /** * Creates a set object of `values`. * @@ -15531,7 +15531,7 @@ var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { return new Set(values); }; - + /** * Creates a `_.toPairs` or `_.toPairsIn` function. * @@ -15551,7 +15551,7 @@ return baseToPairs(object, keysFunc(object)); }; } - + /** * Creates a function that either curries or invokes `func` with optional * `this` binding and partially applied arguments. @@ -15590,20 +15590,20 @@ ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); arity = arity === undefined ? arity : toInteger(arity); length -= holders ? holders.length : 0; - + if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { var partialsRight = partials, holdersRight = holders; - + partials = holders = undefined; } var data = isBindKey ? undefined : getData(func); - + var newData = [ func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity ]; - + if (data) { mergeData(newData, data); } @@ -15615,7 +15615,7 @@ arity = newData[9] = newData[9] === undefined ? (isBindKey ? 0 : func.length) : nativeMax(newData[9] - length, 0); - + if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); } @@ -15631,7 +15631,7 @@ var setter = data ? baseSetData : setData; return setWrapToString(setter(result, newData), func, bitmask); } - + /** * Used by `_.defaults` to customize its `_.assignIn` use to assign properties * of source objects to the destination object for all destination properties @@ -15651,7 +15651,7 @@ } return objValue; } - + /** * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source * objects into destination objects that are passed thru. @@ -15675,7 +15675,7 @@ } return objValue; } - + /** * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain * objects. @@ -15688,7 +15688,7 @@ function customOmitClone(value) { return isPlainObject(value) ? undefined : value; } - + /** * A specialized version of `baseIsEqualDeep` for arrays with support for * partial deep comparisons. @@ -15706,7 +15706,7 @@ var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other.length; - + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { return false; } @@ -15718,15 +15718,15 @@ var index = -1, result = true, seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; - + stack.set(array, other); stack.set(other, array); - + // Ignore non-index properties. while (++index < arrLength) { var arrValue = array[index], othValue = other[index]; - + if (customizer) { var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) @@ -15762,7 +15762,7 @@ stack['delete'](other); return result; } - + /** * A specialized version of `baseIsEqualDeep` for comparing objects of * the same `toStringTag`. @@ -15789,38 +15789,38 @@ } object = object.buffer; other = other.buffer; - + case arrayBufferTag: if ((object.byteLength != other.byteLength) || !equalFunc(new Uint8Array(object), new Uint8Array(other))) { return false; } return true; - + case boolTag: case dateTag: case numberTag: // Coerce booleans to `1` or `0` and dates to milliseconds. // Invalid dates are coerced to `NaN`. return eq(+object, +other); - + case errorTag: return object.name == other.name && object.message == other.message; - + case regexpTag: case stringTag: // Coerce regexes to strings and treat strings, primitives and objects, // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring // for more details. return object == (other + ''); - + case mapTag: var convert = mapToArray; - + case setTag: var isPartial = bitmask & COMPARE_PARTIAL_FLAG; convert || (convert = setToArray); - + if (object.size != other.size && !isPartial) { return false; } @@ -15830,13 +15830,13 @@ return stacked == other; } bitmask |= COMPARE_UNORDERED_FLAG; - + // Recursively compare objects (susceptible to call stack limits). stack.set(object, other); var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); stack['delete'](object); return result; - + case symbolTag: if (symbolValueOf) { return symbolValueOf.call(object) == symbolValueOf.call(other); @@ -15844,7 +15844,7 @@ } return false; } - + /** * A specialized version of `baseIsEqualDeep` for objects with support for * partial deep comparisons. @@ -15864,7 +15864,7 @@ objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length; - + if (objLength != othLength && !isPartial) { return false; } @@ -15883,13 +15883,13 @@ var result = true; stack.set(object, other); stack.set(other, object); - + var skipCtor = isPartial; while (++index < objLength) { key = objProps[index]; var objValue = object[key], othValue = other[key]; - + if (customizer) { var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) @@ -15908,7 +15908,7 @@ if (result && !skipCtor) { var objCtor = object.constructor, othCtor = other.constructor; - + // Non `Object` object instances with different constructors are not equal. if (objCtor != othCtor && ('constructor' in object && 'constructor' in other) && @@ -15921,7 +15921,7 @@ stack['delete'](other); return result; } - + /** * A specialized version of `baseRest` which flattens the rest array. * @@ -15932,7 +15932,7 @@ function flatRest(func) { return setToString(overRest(func, undefined, flatten), func + ''); } - + /** * Creates an array of own enumerable property names and symbols of `object`. * @@ -15943,7 +15943,7 @@ function getAllKeys(object) { return baseGetAllKeys(object, keys, getSymbols); } - + /** * Creates an array of own and inherited enumerable property names and * symbols of `object`. @@ -15955,7 +15955,7 @@ function getAllKeysIn(object) { return baseGetAllKeys(object, keysIn, getSymbolsIn); } - + /** * Gets metadata for `func`. * @@ -15966,7 +15966,7 @@ var getData = !metaMap ? noop : function(func) { return metaMap.get(func); }; - + /** * Gets the name of `func`. * @@ -15978,7 +15978,7 @@ var result = (func.name + ''), array = realNames[result], length = hasOwnProperty.call(realNames, result) ? array.length : 0; - + while (length--) { var data = array[length], otherFunc = data.func; @@ -15988,7 +15988,7 @@ } return result; } - + /** * Gets the argument placeholder value for `func`. * @@ -16000,7 +16000,7 @@ var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; return object.placeholder; } - + /** * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, * this function returns the custom method, otherwise it returns `baseIteratee`. @@ -16017,7 +16017,7 @@ result = result === iteratee ? baseIteratee : result; return arguments.length ? result(arguments[0], arguments[1]) : result; } - + /** * Gets the data for `map`. * @@ -16032,7 +16032,7 @@ ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map; } - + /** * Gets the property names, values, and compare flags of `object`. * @@ -16043,16 +16043,16 @@ function getMatchData(object) { var result = keys(object), length = result.length; - + while (length--) { var key = result[length], value = object[key]; - + result[length] = [key, value, isStrictComparable(value)]; } return result; } - + /** * Gets the native function at `key` of `object`. * @@ -16065,7 +16065,7 @@ var value = getValue(object, key); return baseIsNative(value) ? value : undefined; } - + /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * @@ -16076,12 +16076,12 @@ function getRawTag(value) { var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; - + try { value[symToStringTag] = undefined; var unmasked = true; } catch (e) {} - + var result = nativeObjectToString.call(value); if (unmasked) { if (isOwn) { @@ -16092,7 +16092,7 @@ } return result; } - + /** * Creates an array of the own enumerable symbols of `object`. * @@ -16109,7 +16109,7 @@ return propertyIsEnumerable.call(object, symbol); }); }; - + /** * Creates an array of the own and inherited enumerable symbols of `object`. * @@ -16125,7 +16125,7 @@ } return result; }; - + /** * Gets the `toStringTag` of `value`. * @@ -16134,7 +16134,7 @@ * @returns {string} Returns the `toStringTag`. */ var getTag = baseGetTag; - + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || (Map && getTag(new Map) != mapTag) || @@ -16145,7 +16145,7 @@ var result = baseGetTag(value), Ctor = result == objectTag ? value.constructor : undefined, ctorString = Ctor ? toSource(Ctor) : ''; - + if (ctorString) { switch (ctorString) { case dataViewCtorString: return dataViewTag; @@ -16158,7 +16158,7 @@ return result; }; } - + /** * Gets the view, applying any `transforms` to the `start` and `end` positions. * @@ -16172,11 +16172,11 @@ function getView(start, end, transforms) { var index = -1, length = transforms.length; - + while (++index < length) { var data = transforms[index], size = data.size; - + switch (data.type) { case 'drop': start += size; break; case 'dropRight': end -= size; break; @@ -16186,7 +16186,7 @@ } return { 'start': start, 'end': end }; } - + /** * Extracts wrapper details from the `source` body comment. * @@ -16198,7 +16198,7 @@ var match = source.match(reWrapDetails); return match ? match[1].split(reSplitDetails) : []; } - + /** * Checks if `path` exists on `object`. * @@ -16210,11 +16210,11 @@ */ function hasPath(object, path, hasFunc) { path = castPath(path, object); - + var index = -1, length = path.length, result = false; - + while (++index < length) { var key = toKey(path[index]); if (!(result = object != null && hasFunc(object, key))) { @@ -16229,7 +16229,7 @@ return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object)); } - + /** * Initializes an array clone. * @@ -16240,7 +16240,7 @@ function initCloneArray(array) { var length = array.length, result = array.constructor(length); - + // Add properties assigned by `RegExp#exec`. if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { result.index = array.index; @@ -16248,7 +16248,7 @@ } return result; } - + /** * Initializes an object clone. * @@ -16261,7 +16261,7 @@ ? baseCreate(getPrototype(object)) : {}; } - + /** * Initializes an object clone based on its `toStringTag`. * @@ -16280,37 +16280,37 @@ switch (tag) { case arrayBufferTag: return cloneArrayBuffer(object); - + case boolTag: case dateTag: return new Ctor(+object); - + case dataViewTag: return cloneDataView(object, isDeep); - + case float32Tag: case float64Tag: case int8Tag: case int16Tag: case int32Tag: case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: return cloneTypedArray(object, isDeep); - + case mapTag: return cloneMap(object, isDeep, cloneFunc); - + case numberTag: case stringTag: return new Ctor(object); - + case regexpTag: return cloneRegExp(object); - + case setTag: return cloneSet(object, isDeep, cloneFunc); - + case symbolTag: return cloneSymbol(object); } } - + /** * Inserts wrapper `details` in a comment at the top of the `source` body. * @@ -16329,7 +16329,7 @@ details = details.join(length > 2 ? ', ' : ' '); return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); } - + /** * Checks if `value` is a flattenable `arguments` object or array. * @@ -16341,7 +16341,7 @@ return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]); } - + /** * Checks if `value` is a valid array-like index. * @@ -16356,7 +16356,7 @@ (typeof value == 'number' || reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length); } - + /** * Checks if the given arguments are from an iteratee call. * @@ -16380,7 +16380,7 @@ } return false; } - + /** * Checks if `value` is a property name and not a property path. * @@ -16401,7 +16401,7 @@ return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || (object != null && value in Object(object)); } - + /** * Checks if `value` is suitable for use as unique object key. * @@ -16415,7 +16415,7 @@ ? (value !== '__proto__') : (value === null); } - + /** * Checks if `func` has a lazy counterpart. * @@ -16427,7 +16427,7 @@ function isLaziable(func) { var funcName = getFuncName(func), other = lodash[funcName]; - + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { return false; } @@ -16437,7 +16437,7 @@ var data = getData(other); return !!data && func === data[0]; } - + /** * Checks if `func` has its source masked. * @@ -16448,7 +16448,7 @@ function isMasked(func) { return !!maskSrcKey && (maskSrcKey in func); } - + /** * Checks if `func` is capable of being masked. * @@ -16457,7 +16457,7 @@ * @returns {boolean} Returns `true` if `func` is maskable, else `false`. */ var isMaskable = coreJsData ? isFunction : stubFalse; - + /** * Checks if `value` is likely a prototype object. * @@ -16468,10 +16468,10 @@ function isPrototype(value) { var Ctor = value && value.constructor, proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - + return value === proto; } - + /** * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. * @@ -16483,7 +16483,7 @@ function isStrictComparable(value) { return value === value && !isObject(value); } - + /** * A specialized version of `matchesProperty` for source values suitable * for strict equality comparisons, i.e. `===`. @@ -16502,7 +16502,7 @@ (srcValue !== undefined || (key in Object(object))); }; } - + /** * A specialized version of `_.memoize` which clears the memoized function's * cache when it exceeds `MAX_MEMOIZE_SIZE`. @@ -16518,11 +16518,11 @@ } return key; }); - + var cache = result.cache; return result; } - + /** * Merges the function metadata of `source` into `data`. * @@ -16544,12 +16544,12 @@ srcBitmask = source[1], newBitmask = bitmask | srcBitmask, isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); - + var isCombo = ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); - + // Exit early if metadata can't be merged. if (!(isCommon || isCombo)) { return data; @@ -16590,10 +16590,10 @@ // Use source `func` and merge bitmasks. data[0] = source[0]; data[1] = newBitmask; - + return data; } - + /** * This function is like * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) @@ -16612,7 +16612,7 @@ } return result; } - + /** * Converts `value` to a string using `Object.prototype.toString`. * @@ -16623,7 +16623,7 @@ function objectToString(value) { return nativeObjectToString.call(value); } - + /** * A specialized version of `baseRest` which transforms the rest array. * @@ -16640,7 +16640,7 @@ index = -1, length = nativeMax(args.length - start, 0), array = Array(length); - + while (++index < length) { array[index] = args[start + index]; } @@ -16653,7 +16653,7 @@ return apply(func, this, otherArgs); }; } - + /** * Gets the parent value at `path` of `object`. * @@ -16665,7 +16665,7 @@ function parent(object, path) { return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); } - + /** * Reorder `array` according to the specified indexes where the element at * the first index is assigned as the first element, the element at @@ -16680,14 +16680,14 @@ var arrLength = array.length, length = nativeMin(indexes.length, arrLength), oldArray = copyArray(array); - + while (length--) { var index = indexes[length]; array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; } return array; } - + /** * Sets metadata for `func`. * @@ -16703,7 +16703,7 @@ * @returns {Function} Returns `func`. */ var setData = shortOut(baseSetData); - + /** * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). * @@ -16715,7 +16715,7 @@ var setTimeout = ctxSetTimeout || function(func, wait) { return root.setTimeout(func, wait); }; - + /** * Sets the `toString` method of `func` to return `string`. * @@ -16725,7 +16725,7 @@ * @returns {Function} Returns `func`. */ var setToString = shortOut(baseSetToString); - + /** * Sets the `toString` method of `wrapper` to mimic the source of `reference` * with wrapper details in a comment at the top of the source body. @@ -16740,7 +16740,7 @@ var source = (reference + ''); return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); } - + /** * Creates a function that'll short out and invoke `identity` instead * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` @@ -16753,11 +16753,11 @@ function shortOut(func) { var count = 0, lastCalled = 0; - + return function() { var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); - + lastCalled = stamp; if (remaining > 0) { if (++count >= HOT_COUNT) { @@ -16769,7 +16769,7 @@ return func.apply(undefined, arguments); }; } - + /** * A specialized version of `_.shuffle` which mutates and sets the size of `array`. * @@ -16782,19 +16782,19 @@ var index = -1, length = array.length, lastIndex = length - 1; - + size = size === undefined ? length : size; while (++index < size) { var rand = baseRandom(index, lastIndex), value = array[rand]; - + array[rand] = array[index]; array[index] = value; } array.length = size; return array; } - + /** * Converts `string` to a property path array. * @@ -16812,7 +16812,7 @@ }); return result; }); - + /** * Converts `value` to a string key if it's not a string or symbol. * @@ -16827,7 +16827,7 @@ var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } - + /** * Converts `func` to its source code. * @@ -16846,7 +16846,7 @@ } return ''; } - + /** * Updates wrapper `details` based on `bitmask` flags. * @@ -16864,7 +16864,7 @@ }); return details.sort(); } - + /** * Creates a clone of `wrapper`. * @@ -16882,9 +16882,9 @@ result.__values__ = wrapper.__values__; return result; } - + /*------------------------------------------------------------------------*/ - + /** * Creates an array of elements split into groups the length of `size`. * If `array` can't be split evenly, the final chunk will be the remaining @@ -16919,13 +16919,13 @@ var index = 0, resIndex = 0, result = Array(nativeCeil(length / size)); - + while (index < length) { result[resIndex++] = baseSlice(array, index, (index += size)); } return result; } - + /** * Creates an array with all falsey values removed. The values `false`, `null`, * `0`, `""`, `undefined`, and `NaN` are falsey. @@ -16946,7 +16946,7 @@ length = array == null ? 0 : array.length, resIndex = 0, result = []; - + while (++index < length) { var value = array[index]; if (value) { @@ -16955,7 +16955,7 @@ } return result; } - + /** * Creates a new array concatenating `array` with any additional arrays * and/or values. @@ -16986,13 +16986,13 @@ var args = Array(length - 1), array = arguments[0], index = length; - + while (index--) { args[index - 1] = arguments[index]; } return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); } - + /** * Creates an array of `array` values not included in the other given arrays * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) @@ -17019,7 +17019,7 @@ ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) : []; }); - + /** * This method is like `_.difference` except that it accepts `iteratee` which * is invoked for each element of `array` and `values` to generate the criterion @@ -17055,7 +17055,7 @@ ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) : []; }); - + /** * This method is like `_.difference` except that it accepts `comparator` * which is invoked to compare elements of `array` to `values`. The order and @@ -17088,7 +17088,7 @@ ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) : []; }); - + /** * Creates a slice of `array` with `n` elements dropped from the beginning. * @@ -17122,7 +17122,7 @@ n = (guard || n === undefined) ? 1 : toInteger(n); return baseSlice(array, n < 0 ? 0 : n, length); } - + /** * Creates a slice of `array` with `n` elements dropped from the end. * @@ -17157,7 +17157,7 @@ n = length - n; return baseSlice(array, 0, n < 0 ? 0 : n); } - + /** * Creates a slice of `array` excluding elements dropped from the end. * Elements are dropped until `predicate` returns falsey. The predicate is @@ -17198,7 +17198,7 @@ ? baseWhile(array, getIteratee(predicate, 3), true, true) : []; } - + /** * Creates a slice of `array` excluding elements dropped from the beginning. * Elements are dropped until `predicate` returns falsey. The predicate is @@ -17239,7 +17239,7 @@ ? baseWhile(array, getIteratee(predicate, 3), true) : []; } - + /** * Fills elements of `array` with `value` from `start` up to, but not * including, `end`. @@ -17280,7 +17280,7 @@ } return baseFill(array, value, start, end); } - + /** * This method is like `_.find` except that it returns the index of the first * element `predicate` returns truthy for instead of the element itself. @@ -17327,7 +17327,7 @@ } return baseFindIndex(array, getIteratee(predicate, 3), index); } - + /** * This method is like `_.findIndex` except that it iterates over elements * of `collection` from right to left. @@ -17377,7 +17377,7 @@ } return baseFindIndex(array, getIteratee(predicate, 3), index, true); } - + /** * Flattens `array` a single level deep. * @@ -17396,7 +17396,7 @@ var length = array == null ? 0 : array.length; return length ? baseFlatten(array, 1) : []; } - + /** * Recursively flattens `array`. * @@ -17415,7 +17415,7 @@ var length = array == null ? 0 : array.length; return length ? baseFlatten(array, INFINITY) : []; } - + /** * Recursively flatten `array` up to `depth` times. * @@ -17444,7 +17444,7 @@ depth = depth === undefined ? 1 : toInteger(depth); return baseFlatten(array, depth); } - + /** * The inverse of `_.toPairs`; this method returns an object composed * from key-value `pairs`. @@ -17464,14 +17464,14 @@ var index = -1, length = pairs == null ? 0 : pairs.length, result = {}; - + while (++index < length) { var pair = pairs[index]; result[pair[0]] = pair[1]; } return result; } - + /** * Gets the first element of `array`. * @@ -17493,7 +17493,7 @@ function head(array) { return (array && array.length) ? array[0] : undefined; } - + /** * Gets the index at which the first occurrence of `value` is found in `array` * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) @@ -17528,7 +17528,7 @@ } return baseIndexOf(array, value, index); } - + /** * Gets all but the last element of `array`. * @@ -17547,7 +17547,7 @@ var length = array == null ? 0 : array.length; return length ? baseSlice(array, 0, -1) : []; } - + /** * Creates an array of unique values that are included in all given arrays * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) @@ -17571,7 +17571,7 @@ ? baseIntersection(mapped) : []; }); - + /** * This method is like `_.intersection` except that it accepts `iteratee` * which is invoked for each element of each `arrays` to generate the criterion @@ -17598,7 +17598,7 @@ var intersectionBy = baseRest(function(arrays) { var iteratee = last(arrays), mapped = arrayMap(arrays, castArrayLikeObject); - + if (iteratee === last(mapped)) { iteratee = undefined; } else { @@ -17608,7 +17608,7 @@ ? baseIntersection(mapped, getIteratee(iteratee, 2)) : []; }); - + /** * This method is like `_.intersection` except that it accepts `comparator` * which is invoked to compare elements of `arrays`. The order and references @@ -17633,7 +17633,7 @@ var intersectionWith = baseRest(function(arrays) { var comparator = last(arrays), mapped = arrayMap(arrays, castArrayLikeObject); - + comparator = typeof comparator == 'function' ? comparator : undefined; if (comparator) { mapped.pop(); @@ -17642,7 +17642,7 @@ ? baseIntersection(mapped, undefined, comparator) : []; }); - + /** * Converts all elements in `array` into a string separated by `separator`. * @@ -17661,7 +17661,7 @@ function join(array, separator) { return array == null ? '' : nativeJoin.call(array, separator); } - + /** * Gets the last element of `array`. * @@ -17680,7 +17680,7 @@ var length = array == null ? 0 : array.length; return length ? array[length - 1] : undefined; } - + /** * This method is like `_.indexOf` except that it iterates over elements of * `array` from right to left. @@ -17716,7 +17716,7 @@ ? strictLastIndexOf(array, value, index) : baseFindIndex(array, baseIsNaN, index, true); } - + /** * Gets the element at index `n` of `array`. If `n` is negative, the nth * element from the end is returned. @@ -17741,7 +17741,7 @@ function nth(array, n) { return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; } - + /** * Removes all given values from `array` using * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) @@ -17766,7 +17766,7 @@ * // => ['b', 'b'] */ var pull = baseRest(pullAll); - + /** * This method is like `_.pull` except that it accepts an array of values to remove. * @@ -17792,7 +17792,7 @@ ? basePullAll(array, values) : array; } - + /** * This method is like `_.pullAll` except that it accepts `iteratee` which is * invoked for each element of `array` and `values` to generate the criterion @@ -17821,7 +17821,7 @@ ? basePullAll(array, values, getIteratee(iteratee, 2)) : array; } - + /** * This method is like `_.pullAll` except that it accepts `comparator` which * is invoked to compare elements of `array` to `values`. The comparator is @@ -17850,7 +17850,7 @@ ? basePullAll(array, values, undefined, comparator) : array; } - + /** * Removes elements from `array` corresponding to `indexes` and returns an * array of removed elements. @@ -17878,14 +17878,14 @@ var pullAt = flatRest(function(array, indexes) { var length = array == null ? 0 : array.length, result = baseAt(array, indexes); - + basePullAt(array, arrayMap(indexes, function(index) { return isIndex(index, length) ? +index : index; }).sort(compareAscending)); - + return result; }); - + /** * Removes all elements from `array` that `predicate` returns truthy for * and returns an array of the removed elements. The predicate is invoked @@ -17922,7 +17922,7 @@ var index = -1, indexes = [], length = array.length; - + predicate = getIteratee(predicate, 3); while (++index < length) { var value = array[index]; @@ -17934,7 +17934,7 @@ basePullAt(array, indexes); return result; } - + /** * Reverses `array` so that the first element becomes the last, the second * element becomes the second to last, and so on. @@ -17961,7 +17961,7 @@ function reverse(array) { return array == null ? array : nativeReverse.call(array); } - + /** * Creates a slice of `array` from `start` up to, but not including, `end`. * @@ -17993,7 +17993,7 @@ } return baseSlice(array, start, end); } - + /** * Uses a binary search to determine the lowest index at which `value` * should be inserted into `array` in order to maintain its sort order. @@ -18014,7 +18014,7 @@ function sortedIndex(array, value) { return baseSortedIndex(array, value); } - + /** * This method is like `_.sortedIndex` except that it accepts `iteratee` * which is invoked for `value` and each element of `array` to compute their @@ -18043,7 +18043,7 @@ function sortedIndexBy(array, value, iteratee) { return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); } - + /** * This method is like `_.indexOf` except that it performs a binary * search on a sorted `array`. @@ -18070,7 +18070,7 @@ } return -1; } - + /** * This method is like `_.sortedIndex` except that it returns the highest * index at which `value` should be inserted into `array` in order to @@ -18092,7 +18092,7 @@ function sortedLastIndex(array, value) { return baseSortedIndex(array, value, true); } - + /** * This method is like `_.sortedLastIndex` except that it accepts `iteratee` * which is invoked for `value` and each element of `array` to compute their @@ -18121,7 +18121,7 @@ function sortedLastIndexBy(array, value, iteratee) { return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); } - + /** * This method is like `_.lastIndexOf` except that it performs a binary * search on a sorted `array`. @@ -18148,7 +18148,7 @@ } return -1; } - + /** * This method is like `_.uniq` except that it's designed and optimized * for sorted arrays. @@ -18169,7 +18169,7 @@ ? baseSortedUniq(array) : []; } - + /** * This method is like `_.uniqBy` except that it's designed and optimized * for sorted arrays. @@ -18191,7 +18191,7 @@ ? baseSortedUniq(array, getIteratee(iteratee, 2)) : []; } - + /** * Gets all but the first element of `array`. * @@ -18210,7 +18210,7 @@ var length = array == null ? 0 : array.length; return length ? baseSlice(array, 1, length) : []; } - + /** * Creates a slice of `array` with `n` elements taken from the beginning. * @@ -18243,7 +18243,7 @@ n = (guard || n === undefined) ? 1 : toInteger(n); return baseSlice(array, 0, n < 0 ? 0 : n); } - + /** * Creates a slice of `array` with `n` elements taken from the end. * @@ -18278,7 +18278,7 @@ n = length - n; return baseSlice(array, n < 0 ? 0 : n, length); } - + /** * Creates a slice of `array` with elements taken from the end. Elements are * taken until `predicate` returns falsey. The predicate is invoked with @@ -18319,7 +18319,7 @@ ? baseWhile(array, getIteratee(predicate, 3), false, true) : []; } - + /** * Creates a slice of `array` with elements taken from the beginning. Elements * are taken until `predicate` returns falsey. The predicate is invoked with @@ -18360,7 +18360,7 @@ ? baseWhile(array, getIteratee(predicate, 3)) : []; } - + /** * Creates an array of unique values, in order, from all given arrays using * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) @@ -18380,7 +18380,7 @@ var union = baseRest(function(arrays) { return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); }); - + /** * This method is like `_.union` except that it accepts `iteratee` which is * invoked for each element of each `arrays` to generate the criterion by @@ -18411,7 +18411,7 @@ } return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); }); - + /** * This method is like `_.union` except that it accepts `comparator` which * is invoked to compare elements of `arrays`. Result values are chosen from @@ -18438,7 +18438,7 @@ comparator = typeof comparator == 'function' ? comparator : undefined; return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); }); - + /** * Creates a duplicate-free version of an array, using * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) @@ -18460,7 +18460,7 @@ function uniq(array) { return (array && array.length) ? baseUniq(array) : []; } - + /** * This method is like `_.uniq` except that it accepts `iteratee` which is * invoked for each element in `array` to generate the criterion by which @@ -18487,7 +18487,7 @@ function uniqBy(array, iteratee) { return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; } - + /** * This method is like `_.uniq` except that it accepts `comparator` which * is invoked to compare elements of `array`. The order of result values is @@ -18512,7 +18512,7 @@ comparator = typeof comparator == 'function' ? comparator : undefined; return (array && array.length) ? baseUniq(array, undefined, comparator) : []; } - + /** * This method is like `_.zip` except that it accepts an array of grouped * elements and creates an array regrouping the elements to their pre-zip @@ -18547,7 +18547,7 @@ return arrayMap(array, baseProperty(index)); }); } - + /** * This method is like `_.unzip` except that it accepts `iteratee` to specify * how regrouped values should be combined. The iteratee is invoked with the @@ -18581,7 +18581,7 @@ return apply(iteratee, undefined, group); }); } - + /** * Creates an array excluding all given values using * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) @@ -18607,7 +18607,7 @@ ? baseDifference(array, values) : []; }); - + /** * Creates an array of unique values that is the * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) @@ -18629,7 +18629,7 @@ var xor = baseRest(function(arrays) { return baseXor(arrayFilter(arrays, isArrayLikeObject)); }); - + /** * This method is like `_.xor` except that it accepts `iteratee` which is * invoked for each element of each `arrays` to generate the criterion by @@ -18660,7 +18660,7 @@ } return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); }); - + /** * This method is like `_.xor` except that it accepts `comparator` which is * invoked to compare elements of `arrays`. The order of result values is @@ -18687,7 +18687,7 @@ comparator = typeof comparator == 'function' ? comparator : undefined; return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); }); - + /** * Creates an array of grouped elements, the first of which contains the * first elements of the given arrays, the second of which contains the @@ -18705,7 +18705,7 @@ * // => [['a', 1, true], ['b', 2, false]] */ var zip = baseRest(unzip); - + /** * This method is like `_.fromPairs` except that it accepts two arrays, * one of property identifiers and one of corresponding values. @@ -18725,7 +18725,7 @@ function zipObject(props, values) { return baseZipObject(props || [], values || [], assignValue); } - + /** * This method is like `_.zipObject` except that it supports property paths. * @@ -18744,7 +18744,7 @@ function zipObjectDeep(props, values) { return baseZipObject(props || [], values || [], baseSet); } - + /** * This method is like `_.zip` except that it accepts `iteratee` to specify * how grouped values should be combined. The iteratee is invoked with the @@ -18768,13 +18768,13 @@ var zipWith = baseRest(function(arrays) { var length = arrays.length, iteratee = length > 1 ? arrays[length - 1] : undefined; - + iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; return unzipWith(arrays, iteratee); }); - + /*------------------------------------------------------------------------*/ - + /** * Creates a `lodash` wrapper instance that wraps `value` with explicit method * chain sequences enabled. The result of such sequences must be unwrapped @@ -18809,7 +18809,7 @@ result.__chain__ = true; return result; } - + /** * This method invokes `interceptor` and returns `value`. The interceptor * is invoked with one argument; (value). The purpose of this method is to @@ -18837,7 +18837,7 @@ interceptor(value); return value; } - + /** * This method is like `_.tap` except that it returns the result of `interceptor`. * The purpose of this method is to "pass thru" values replacing intermediate @@ -18864,7 +18864,7 @@ function thru(value, interceptor) { return interceptor(value); } - + /** * This method is the wrapper version of `_.at`. * @@ -18886,7 +18886,7 @@ start = length ? paths[0] : 0, value = this.__wrapped__, interceptor = function(object) { return baseAt(object, paths); }; - + if (length > 1 || this.__actions__.length || !(value instanceof LazyWrapper) || !isIndex(start)) { return this.thru(interceptor); @@ -18904,7 +18904,7 @@ return array; }); }); - + /** * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. * @@ -18935,7 +18935,7 @@ function wrapperChain() { return chain(this); } - + /** * Executes the chain sequence and returns the wrapped result. * @@ -18965,7 +18965,7 @@ function wrapperCommit() { return new LodashWrapper(this.value(), this.__chain__); } - + /** * Gets the next value on a wrapped object following the * [iterator protocol](https://mdn.io/iteration_protocols#iterator). @@ -18994,10 +18994,10 @@ } var done = this.__index__ >= this.__values__.length, value = done ? undefined : this.__values__[this.__index__++]; - + return { 'done': done, 'value': value }; } - + /** * Enables the wrapper to be iterable. * @@ -19019,7 +19019,7 @@ function wrapperToIterator() { return this; } - + /** * Creates a clone of the chain sequence planting `value` as the wrapped value. * @@ -19047,7 +19047,7 @@ function wrapperPlant(value) { var result, parent = this; - + while (parent instanceof baseLodash) { var clone = wrapperClone(parent); clone.__index__ = 0; @@ -19063,7 +19063,7 @@ previous.__wrapped__ = value; return result; } - + /** * This method is the wrapper version of `_.reverse`. * @@ -19101,7 +19101,7 @@ } return this.thru(reverse); } - + /** * Executes the chain sequence to resolve the unwrapped value. * @@ -19119,9 +19119,9 @@ function wrapperValue() { return baseWrapperValue(this.__wrapped__, this.__actions__); } - + /*------------------------------------------------------------------------*/ - + /** * Creates an object composed of keys generated from the results of running * each element of `collection` thru `iteratee`. The corresponding value of @@ -19151,7 +19151,7 @@ baseAssignValue(result, key, 1); } }); - + /** * Checks if `predicate` returns truthy for **all** elements of `collection`. * Iteration is stopped once `predicate` returns falsey. The predicate is @@ -19200,7 +19200,7 @@ } return func(collection, getIteratee(predicate, 3)); } - + /** * Iterates over elements of `collection`, returning an array of all elements * `predicate` returns truthy for. The predicate is invoked with three @@ -19242,7 +19242,7 @@ var func = isArray(collection) ? arrayFilter : baseFilter; return func(collection, getIteratee(predicate, 3)); } - + /** * Iterates over elements of `collection`, returning the first element * `predicate` returns truthy for. The predicate is invoked with three @@ -19280,7 +19280,7 @@ * // => object for 'barney' */ var find = createFind(findIndex); - + /** * This method is like `_.find` except that it iterates over elements of * `collection` from right to left. @@ -19301,7 +19301,7 @@ * // => 3 */ var findLast = createFind(findLastIndex); - + /** * Creates a flattened array of values by running each element in `collection` * thru `iteratee` and flattening the mapped results. The iteratee is invoked @@ -19326,7 +19326,7 @@ function flatMap(collection, iteratee) { return baseFlatten(map(collection, iteratee), 1); } - + /** * This method is like `_.flatMap` except that it recursively flattens the * mapped results. @@ -19350,7 +19350,7 @@ function flatMapDeep(collection, iteratee) { return baseFlatten(map(collection, iteratee), INFINITY); } - + /** * This method is like `_.flatMap` except that it recursively flattens the * mapped results up to `depth` times. @@ -19376,7 +19376,7 @@ depth = depth === undefined ? 1 : toInteger(depth); return baseFlatten(map(collection, iteratee), depth); } - + /** * Iterates over elements of `collection` and invokes `iteratee` for each element. * The iteratee is invoked with three arguments: (value, index|key, collection). @@ -19411,7 +19411,7 @@ var func = isArray(collection) ? arrayEach : baseEach; return func(collection, getIteratee(iteratee, 3)); } - + /** * This method is like `_.forEach` except that it iterates over elements of * `collection` from right to left. @@ -19436,7 +19436,7 @@ var func = isArray(collection) ? arrayEachRight : baseEachRight; return func(collection, getIteratee(iteratee, 3)); } - + /** * Creates an object composed of keys generated from the results of running * each element of `collection` thru `iteratee`. The order of grouped values @@ -19467,7 +19467,7 @@ baseAssignValue(result, key, [value]); } }); - + /** * Checks if `value` is in `collection`. If `collection` is a string, it's * checked for a substring of `value`, otherwise @@ -19501,7 +19501,7 @@ function includes(collection, value, fromIndex, guard) { collection = isArrayLike(collection) ? collection : values(collection); fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; - + var length = collection.length; if (fromIndex < 0) { fromIndex = nativeMax(length + fromIndex, 0); @@ -19510,7 +19510,7 @@ ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) : (!!length && baseIndexOf(collection, value, fromIndex) > -1); } - + /** * Invokes the method at `path` of each element in `collection`, returning * an array of the results of each invoked method. Any additional arguments @@ -19538,13 +19538,13 @@ var index = -1, isFunc = typeof path == 'function', result = isArrayLike(collection) ? Array(collection.length) : []; - + baseEach(collection, function(value) { result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); }); return result; }); - + /** * Creates an object composed of keys generated from the results of running * each element of `collection` thru `iteratee`. The corresponding value of @@ -19576,7 +19576,7 @@ var keyBy = createAggregator(function(result, value, key) { baseAssignValue(result, key, value); }); - + /** * Creates an array of values by running each element in `collection` thru * `iteratee`. The iteratee is invoked with three arguments: @@ -19623,7 +19623,7 @@ var func = isArray(collection) ? arrayMap : baseMap; return func(collection, getIteratee(iteratee, 3)); } - + /** * This method is like `_.sortBy` except that it allows specifying the sort * orders of the iteratees to sort by. If `orders` is unspecified, all values @@ -19666,7 +19666,7 @@ } return baseOrderBy(collection, iteratees, orders); } - + /** * Creates an array of elements split into two groups, the first of which * contains elements `predicate` returns truthy for, the second of which @@ -19706,7 +19706,7 @@ var partition = createAggregator(function(result, value, key) { result[key ? 0 : 1].push(value); }, function() { return [[], []]; }); - + /** * Reduces `collection` to a value which is the accumulated result of running * each element in `collection` thru `iteratee`, where each successive @@ -19747,10 +19747,10 @@ function reduce(collection, iteratee, accumulator) { var func = isArray(collection) ? arrayReduce : baseReduce, initAccum = arguments.length < 3; - + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); } - + /** * This method is like `_.reduce` except that it iterates over elements of * `collection` from right to left. @@ -19776,10 +19776,10 @@ function reduceRight(collection, iteratee, accumulator) { var func = isArray(collection) ? arrayReduceRight : baseReduce, initAccum = arguments.length < 3; - + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); } - + /** * The opposite of `_.filter`; this method returns the elements of `collection` * that `predicate` does **not** return truthy for. @@ -19818,7 +19818,7 @@ var func = isArray(collection) ? arrayFilter : baseFilter; return func(collection, negate(getIteratee(predicate, 3))); } - + /** * Gets a random element from `collection`. * @@ -19837,7 +19837,7 @@ var func = isArray(collection) ? arraySample : baseSample; return func(collection); } - + /** * Gets `n` random elements at unique keys from `collection` up to the * size of `collection`. @@ -19867,7 +19867,7 @@ var func = isArray(collection) ? arraySampleSize : baseSampleSize; return func(collection, n); } - + /** * Creates an array of shuffled values, using a version of the * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). @@ -19887,7 +19887,7 @@ var func = isArray(collection) ? arrayShuffle : baseShuffle; return func(collection); } - + /** * Gets the size of `collection` by returning its length for array-like * values or the number of own enumerable string keyed properties for objects. @@ -19922,7 +19922,7 @@ } return baseKeys(collection).length; } - + /** * Checks if `predicate` returns truthy for **any** element of `collection`. * Iteration is stopped once `predicate` returns truthy. The predicate is @@ -19966,7 +19966,7 @@ } return func(collection, getIteratee(predicate, 3)); } - + /** * Creates an array of elements, sorted in ascending order by the results of * running each element in a collection thru each iteratee. This method @@ -20008,9 +20008,9 @@ } return baseOrderBy(collection, baseFlatten(iteratees, 1), []); }); - + /*------------------------------------------------------------------------*/ - + /** * Gets the timestamp of the number of milliseconds that have elapsed since * the Unix epoch (1 January 1970 00:00:00 UTC). @@ -20030,9 +20030,9 @@ var now = ctxNow || function() { return root.Date.now(); }; - + /*------------------------------------------------------------------------*/ - + /** * The opposite of `_.before`; this method creates a function that invokes * `func` once it's called `n` or more times. @@ -20068,7 +20068,7 @@ } }; } - + /** * Creates a function that invokes `func`, with up to `n` arguments, * ignoring any additional arguments. @@ -20091,7 +20091,7 @@ n = (func && n == null) ? func.length : n; return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); } - + /** * Creates a function that invokes `func`, with the `this` binding and arguments * of the created function, while it's called less than `n` times. Subsequent @@ -20125,7 +20125,7 @@ return result; }; } - + /** * Creates a function that invokes `func` with the `this` binding of `thisArg` * and `partials` prepended to the arguments it receives. @@ -20169,7 +20169,7 @@ } return createWrap(func, bitmask, thisArg, partials, holders); }); - + /** * Creates a function that invokes the method at `object[key]` with `partials` * prepended to the arguments it receives. @@ -20223,7 +20223,7 @@ } return createWrap(key, bitmask, object, partials, holders); }); - + /** * Creates a function that accepts arguments of `func` and either invokes * `func` returning its result, if at least `arity` number of arguments have @@ -20271,7 +20271,7 @@ result.placeholder = curry.placeholder; return result; } - + /** * This method is like `_.curry` except that arguments are applied to `func` * in the manner of `_.partialRight` instead of `_.partial`. @@ -20316,7 +20316,7 @@ result.placeholder = curryRight.placeholder; return result; } - + /** * Creates a debounced function that delays invoking `func` until after `wait` * milliseconds have elapsed since the last time the debounced function was @@ -20382,7 +20382,7 @@ leading = false, maxing = false, trailing = true; - + if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } @@ -20393,17 +20393,17 @@ maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; trailing = 'trailing' in options ? !!options.trailing : trailing; } - + function invokeFunc(time) { var args = lastArgs, thisArg = lastThis; - + lastArgs = lastThis = undefined; lastInvokeTime = time; result = func.apply(thisArg, args); return result; } - + function leadingEdge(time) { // Reset any `maxWait` timer. lastInvokeTime = time; @@ -20412,26 +20412,26 @@ // Invoke the leading edge. return leading ? invokeFunc(time) : result; } - + function remainingWait(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, result = wait - timeSinceLastCall; - + return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result; } - + function shouldInvoke(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime; - + // Either this is the first call, activity has stopped and we're at the // trailing edge, the system time has gone backwards and we're treating // it as the trailing edge, or we've hit the `maxWait` limit. return (lastCallTime === undefined || (timeSinceLastCall >= wait) || (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); } - + function timerExpired() { var time = now(); if (shouldInvoke(time)) { @@ -20440,10 +20440,10 @@ // Restart the timer. timerId = setTimeout(timerExpired, remainingWait(time)); } - + function trailingEdge(time) { timerId = undefined; - + // Only invoke if we have `lastArgs` which means `func` has been // debounced at least once. if (trailing && lastArgs) { @@ -20452,7 +20452,7 @@ lastArgs = lastThis = undefined; return result; } - + function cancel() { if (timerId !== undefined) { clearTimeout(timerId); @@ -20460,19 +20460,19 @@ lastInvokeTime = 0; lastArgs = lastCallTime = lastThis = timerId = undefined; } - + function flush() { return timerId === undefined ? result : trailingEdge(now()); } - + function debounced() { var time = now(), isInvoking = shouldInvoke(time); - + lastArgs = arguments; lastThis = this; lastCallTime = time; - + if (isInvoking) { if (timerId === undefined) { return leadingEdge(lastCallTime); @@ -20492,7 +20492,7 @@ debounced.flush = flush; return debounced; } - + /** * Defers invoking the `func` until the current call stack has cleared. Any * additional arguments are provided to `func` when it's invoked. @@ -20514,7 +20514,7 @@ var defer = baseRest(function(func, args) { return baseDelay(func, 1, args); }); - + /** * Invokes `func` after `wait` milliseconds. Any additional arguments are * provided to `func` when it's invoked. @@ -20537,7 +20537,7 @@ var delay = baseRest(function(func, wait, args) { return baseDelay(func, toNumber(wait) || 0, args); }); - + /** * Creates a function that invokes `func` with arguments reversed. * @@ -20559,7 +20559,7 @@ function flip(func) { return createWrap(func, WRAP_FLIP_FLAG); } - + /** * Creates a function that memoizes the result of `func`. If `resolver` is * provided, it determines the cache key for storing the result based on the @@ -20612,7 +20612,7 @@ var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; - + if (cache.has(key)) { return cache.get(key); } @@ -20623,10 +20623,10 @@ memoized.cache = new (memoize.Cache || MapCache); return memoized; } - + // Expose `MapCache`. memoize.Cache = MapCache; - + /** * Creates a function that negates the result of the predicate `func`. The * `func` predicate is invoked with the `this` binding and arguments of the @@ -20662,7 +20662,7 @@ return !predicate.apply(this, args); }; } - + /** * Creates a function that is restricted to invoking `func` once. Repeat calls * to the function return the value of the first invocation. The `func` is @@ -20684,7 +20684,7 @@ function once(func) { return before(2, func); } - + /** * Creates a function that invokes `func` with its arguments transformed. * @@ -20720,19 +20720,19 @@ transforms = (transforms.length == 1 && isArray(transforms[0])) ? arrayMap(transforms[0], baseUnary(getIteratee())) : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); - + var funcsLength = transforms.length; return baseRest(function(args) { var index = -1, length = nativeMin(args.length, funcsLength); - + while (++index < length) { args[index] = transforms[index].call(this, args[index]); } return apply(func, this, args); }); }); - + /** * Creates a function that invokes `func` with `partials` prepended to the * arguments it receives. This method is like `_.bind` except it does **not** @@ -20770,7 +20770,7 @@ var holders = replaceHolders(partials, getHolder(partial)); return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); }); - + /** * This method is like `_.partial` except that partially applied arguments * are appended to the arguments it receives. @@ -20807,7 +20807,7 @@ var holders = replaceHolders(partials, getHolder(partialRight)); return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); }); - + /** * Creates a function that invokes `func` with arguments arranged according * to the specified `indexes` where the argument value at the first index is @@ -20833,7 +20833,7 @@ var rearg = flatRest(function(func, indexes) { return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); }); - + /** * Creates a function that invokes `func` with the `this` binding of the * created function and arguments from `start` and beyond provided as @@ -20866,7 +20866,7 @@ start = start === undefined ? start : toInteger(start); return baseRest(func, start); } - + /** * Creates a function that invokes `func` with the `this` binding of the * create function and an array of arguments much like @@ -20909,14 +20909,14 @@ return baseRest(function(args) { var array = args[start], otherArgs = castSlice(args, 0, start); - + if (array) { arrayPush(otherArgs, array); } return apply(func, this, otherArgs); }); } - + /** * Creates a throttled function that only invokes `func` at most once per * every `wait` milliseconds. The throttled function comes with a `cancel` @@ -20964,7 +20964,7 @@ function throttle(func, wait, options) { var leading = true, trailing = true; - + if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } @@ -20978,7 +20978,7 @@ 'trailing': trailing }); } - + /** * Creates a function that accepts up to one argument, ignoring any * additional arguments. @@ -20997,7 +20997,7 @@ function unary(func) { return ary(func, 1); } - + /** * Creates a function that provides `value` to `wrapper` as its first * argument. Any additional arguments provided to the function are appended @@ -21023,9 +21023,9 @@ function wrap(value, wrapper) { return partial(castFunction(wrapper), value); } - + /*------------------------------------------------------------------------*/ - + /** * Casts `value` as an array if it's not one. * @@ -21066,7 +21066,7 @@ var value = arguments[0]; return isArray(value) ? value : [value]; } - + /** * Creates a shallow clone of `value`. * @@ -21096,7 +21096,7 @@ function clone(value) { return baseClone(value, CLONE_SYMBOLS_FLAG); } - + /** * This method is like `_.clone` except that it accepts `customizer` which * is invoked to produce the cloned value. If `customizer` returns `undefined`, @@ -21132,7 +21132,7 @@ customizer = typeof customizer == 'function' ? customizer : undefined; return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); } - + /** * This method is like `_.clone` except that it recursively clones `value`. * @@ -21154,7 +21154,7 @@ function cloneDeep(value) { return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); } - + /** * This method is like `_.cloneWith` except that it recursively clones `value`. * @@ -21187,7 +21187,7 @@ customizer = typeof customizer == 'function' ? customizer : undefined; return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); } - + /** * Checks if `object` conforms to `source` by invoking the predicate * properties of `source` with the corresponding property values of `object`. @@ -21215,7 +21215,7 @@ function conformsTo(object, source) { return source == null || baseConformsTo(object, source, keys(source)); } - + /** * Performs a * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) @@ -21251,7 +21251,7 @@ function eq(value, other) { return value === other || (value !== value && other !== other); } - + /** * Checks if `value` is greater than `other`. * @@ -21276,7 +21276,7 @@ * // => false */ var gt = createRelationalOperation(baseGt); - + /** * Checks if `value` is greater than or equal to `other`. * @@ -21303,7 +21303,7 @@ var gte = createRelationalOperation(function(value, other) { return value >= other; }); - + /** * Checks if `value` is likely an `arguments` object. * @@ -21326,7 +21326,7 @@ return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); }; - + /** * Checks if `value` is classified as an `Array` object. * @@ -21351,7 +21351,7 @@ * // => false */ var isArray = Array.isArray; - + /** * Checks if `value` is classified as an `ArrayBuffer` object. * @@ -21370,7 +21370,7 @@ * // => false */ var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; - + /** * Checks if `value` is array-like. A value is considered array-like if it's * not a function and has a `value.length` that's an integer greater than or @@ -21399,7 +21399,7 @@ function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); } - + /** * This method is like `_.isArrayLike` except that it also checks if `value` * is an object. @@ -21428,7 +21428,7 @@ function isArrayLikeObject(value) { return isObjectLike(value) && isArrayLike(value); } - + /** * Checks if `value` is classified as a boolean primitive or object. * @@ -21450,7 +21450,7 @@ return value === true || value === false || (isObjectLike(value) && baseGetTag(value) == boolTag); } - + /** * Checks if `value` is a buffer. * @@ -21469,7 +21469,7 @@ * // => false */ var isBuffer = nativeIsBuffer || stubFalse; - + /** * Checks if `value` is classified as a `Date` object. * @@ -21488,7 +21488,7 @@ * // => false */ var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; - + /** * Checks if `value` is likely a DOM element. * @@ -21509,7 +21509,7 @@ function isElement(value) { return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); } - + /** * Checks if `value` is an empty object, collection, map, or set. * @@ -21566,7 +21566,7 @@ } return true; } - + /** * Performs a deep comparison between two values to determine if they are * equivalent. @@ -21598,7 +21598,7 @@ function isEqual(value, other) { return baseIsEqual(value, other); } - + /** * This method is like `_.isEqual` except that it accepts `customizer` which * is invoked to compare values. If `customizer` returns `undefined`, comparisons @@ -21636,7 +21636,7 @@ var result = customizer ? customizer(value, other) : undefined; return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; } - + /** * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, * `SyntaxError`, `TypeError`, or `URIError` object. @@ -21663,7 +21663,7 @@ return tag == errorTag || tag == domExcTag || (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); } - + /** * Checks if `value` is a finite primitive number. * @@ -21693,7 +21693,7 @@ function isFinite(value) { return typeof value == 'number' && nativeIsFinite(value); } - + /** * Checks if `value` is classified as a `Function` object. * @@ -21720,7 +21720,7 @@ var tag = baseGetTag(value); return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; } - + /** * Checks if `value` is an integer. * @@ -21750,7 +21750,7 @@ function isInteger(value) { return typeof value == 'number' && value == toInteger(value); } - + /** * Checks if `value` is a valid array-like length. * @@ -21781,7 +21781,7 @@ return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } - + /** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) @@ -21811,7 +21811,7 @@ var type = typeof value; return value != null && (type == 'object' || type == 'function'); } - + /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". @@ -21839,7 +21839,7 @@ function isObjectLike(value) { return value != null && typeof value == 'object'; } - + /** * Checks if `value` is classified as a `Map` object. * @@ -21858,7 +21858,7 @@ * // => false */ var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; - + /** * Performs a partial deep comparison between `object` and `source` to * determine if `object` contains equivalent property values. @@ -21890,7 +21890,7 @@ function isMatch(object, source) { return object === source || baseIsMatch(object, source, getMatchData(source)); } - + /** * This method is like `_.isMatch` except that it accepts `customizer` which * is invoked to compare values. If `customizer` returns `undefined`, comparisons @@ -21927,7 +21927,7 @@ customizer = typeof customizer == 'function' ? customizer : undefined; return baseIsMatch(object, source, getMatchData(source), customizer); } - + /** * Checks if `value` is `NaN`. * @@ -21962,7 +21962,7 @@ // ActiveX objects in IE. return isNumber(value) && value != +value; } - + /** * Checks if `value` is a pristine native function. * @@ -21995,7 +21995,7 @@ } return baseIsNative(value); } - + /** * Checks if `value` is `null`. * @@ -22016,7 +22016,7 @@ function isNull(value) { return value === null; } - + /** * Checks if `value` is `null` or `undefined`. * @@ -22040,7 +22040,7 @@ function isNil(value) { return value == null; } - + /** * Checks if `value` is classified as a `Number` primitive or object. * @@ -22071,7 +22071,7 @@ return typeof value == 'number' || (isObjectLike(value) && baseGetTag(value) == numberTag); } - + /** * Checks if `value` is a plain object, that is, an object created by the * `Object` constructor or one with a `[[Prototype]]` of `null`. @@ -22112,7 +22112,7 @@ return typeof Ctor == 'function' && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; } - + /** * Checks if `value` is classified as a `RegExp` object. * @@ -22131,7 +22131,7 @@ * // => false */ var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - + /** * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 * double precision number which isn't the result of a rounded unsafe integer. @@ -22162,7 +22162,7 @@ function isSafeInteger(value) { return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; } - + /** * Checks if `value` is classified as a `Set` object. * @@ -22181,7 +22181,7 @@ * // => false */ var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; - + /** * Checks if `value` is classified as a `String` primitive or object. * @@ -22203,7 +22203,7 @@ return typeof value == 'string' || (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); } - + /** * Checks if `value` is classified as a `Symbol` primitive or object. * @@ -22225,7 +22225,7 @@ return typeof value == 'symbol' || (isObjectLike(value) && baseGetTag(value) == symbolTag); } - + /** * Checks if `value` is classified as a typed array. * @@ -22244,7 +22244,7 @@ * // => false */ var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - + /** * Checks if `value` is `undefined`. * @@ -22265,7 +22265,7 @@ function isUndefined(value) { return value === undefined; } - + /** * Checks if `value` is classified as a `WeakMap` object. * @@ -22286,7 +22286,7 @@ function isWeakMap(value) { return isObjectLike(value) && getTag(value) == weakMapTag; } - + /** * Checks if `value` is classified as a `WeakSet` object. * @@ -22307,7 +22307,7 @@ function isWeakSet(value) { return isObjectLike(value) && baseGetTag(value) == weakSetTag; } - + /** * Checks if `value` is less than `other`. * @@ -22332,7 +22332,7 @@ * // => false */ var lt = createRelationalOperation(baseLt); - + /** * Checks if `value` is less than or equal to `other`. * @@ -22359,7 +22359,7 @@ var lte = createRelationalOperation(function(value, other) { return value <= other; }); - + /** * Converts `value` to an array. * @@ -22395,10 +22395,10 @@ } var tag = getTag(value), func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); - + return func(value); } - + /** * Converts `value` to a finite number. * @@ -22433,7 +22433,7 @@ } return value === value ? value : 0; } - + /** * Converts `value` to an integer. * @@ -22463,10 +22463,10 @@ function toInteger(value) { var result = toFinite(value), remainder = result % 1; - + return result === result ? (remainder ? result - remainder : result) : 0; } - + /** * Converts `value` to an integer suitable for use as the length of an * array-like object. @@ -22497,7 +22497,7 @@ function toLength(value) { return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; } - + /** * Converts `value` to a number. * @@ -22541,7 +22541,7 @@ ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : (reIsBadHex.test(value) ? NAN : +value); } - + /** * Converts `value` to a plain object flattening inherited enumerable string * keyed properties of `value` to own properties of the plain object. @@ -22569,7 +22569,7 @@ function toPlainObject(value) { return copyObject(value, keysIn(value)); } - + /** * Converts `value` to a safe integer. A safe integer can be compared and * represented correctly. @@ -22599,7 +22599,7 @@ ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) : (value === 0 ? value : 0); } - + /** * Converts `value` to a string. An empty string is returned for `null` * and `undefined` values. The sign of `-0` is preserved. @@ -22624,9 +22624,9 @@ function toString(value) { return value == null ? '' : baseToString(value); } - + /*------------------------------------------------------------------------*/ - + /** * Assigns own enumerable string keyed properties of source objects to the * destination object. Source objects are applied from left to right. @@ -22670,7 +22670,7 @@ } } }); - + /** * This method is like `_.assign` except that it iterates over own and * inherited source properties. @@ -22705,7 +22705,7 @@ var assignIn = createAssigner(function(object, source) { copyObject(source, keysIn(source), object); }); - + /** * This method is like `_.assignIn` except that it accepts `customizer` * which is invoked to produce the assigned values. If `customizer` returns @@ -22738,7 +22738,7 @@ var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { copyObject(source, keysIn(source), object, customizer); }); - + /** * This method is like `_.assign` except that it accepts `customizer` * which is invoked to produce the assigned values. If `customizer` returns @@ -22770,7 +22770,7 @@ var assignWith = createAssigner(function(object, source, srcIndex, customizer) { copyObject(source, keys(source), object, customizer); }); - + /** * Creates an array of values corresponding to `paths` of `object`. * @@ -22789,7 +22789,7 @@ * // => [3, 4] */ var at = flatRest(baseAt); - + /** * Creates an object that inherits from the `prototype` object. If a * `properties` object is given, its own enumerable string keyed properties @@ -22828,7 +22828,7 @@ var result = baseCreate(prototype); return properties == null ? result : baseAssign(result, properties); } - + /** * Assigns own and inherited enumerable string keyed properties of source * objects to the destination object for all destination properties that @@ -22854,7 +22854,7 @@ args.push(undefined, customDefaultsAssignIn); return apply(assignInWith, undefined, args); }); - + /** * This method is like `_.defaults` except that it recursively assigns * default properties. @@ -22878,7 +22878,7 @@ args.push(undefined, customDefaultsMerge); return apply(mergeWith, undefined, args); }); - + /** * This method is like `_.find` except that it returns the key of the first * element `predicate` returns truthy for instead of the element itself. @@ -22917,7 +22917,7 @@ function findKey(object, predicate) { return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); } - + /** * This method is like `_.findKey` except that it iterates over elements of * a collection in the opposite order. @@ -22956,7 +22956,7 @@ function findLastKey(object, predicate) { return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); } - + /** * Iterates over own and inherited enumerable string keyed properties of an * object and invokes `iteratee` for each property. The iteratee is invoked @@ -22990,7 +22990,7 @@ ? object : baseFor(object, getIteratee(iteratee, 3), keysIn); } - + /** * This method is like `_.forIn` except that it iterates over properties of * `object` in the opposite order. @@ -23022,7 +23022,7 @@ ? object : baseForRight(object, getIteratee(iteratee, 3), keysIn); } - + /** * Iterates over own enumerable string keyed properties of an object and * invokes `iteratee` for each property. The iteratee is invoked with three @@ -23054,7 +23054,7 @@ function forOwn(object, iteratee) { return object && baseForOwn(object, getIteratee(iteratee, 3)); } - + /** * This method is like `_.forOwn` except that it iterates over properties of * `object` in the opposite order. @@ -23084,7 +23084,7 @@ function forOwnRight(object, iteratee) { return object && baseForOwnRight(object, getIteratee(iteratee, 3)); } - + /** * Creates an array of function property names from own enumerable properties * of `object`. @@ -23111,7 +23111,7 @@ function functions(object) { return object == null ? [] : baseFunctions(object, keys(object)); } - + /** * Creates an array of function property names from own and inherited * enumerable properties of `object`. @@ -23138,7 +23138,7 @@ function functionsIn(object) { return object == null ? [] : baseFunctions(object, keysIn(object)); } - + /** * Gets the value at `path` of `object`. If the resolved value is * `undefined`, the `defaultValue` is returned in its place. @@ -23168,7 +23168,7 @@ var result = object == null ? undefined : baseGet(object, path); return result === undefined ? defaultValue : result; } - + /** * Checks if `path` is a direct property of `object`. * @@ -23199,7 +23199,7 @@ function has(object, path) { return object != null && hasPath(object, path, baseHas); } - + /** * Checks if `path` is a direct or inherited property of `object`. * @@ -23229,7 +23229,7 @@ function hasIn(object, path) { return object != null && hasPath(object, path, baseHasIn); } - + /** * Creates an object composed of the inverted keys and values of `object`. * If `object` contains duplicate values, subsequent values overwrite @@ -23251,7 +23251,7 @@ var invert = createInverter(function(result, value, key) { result[value] = key; }, constant(identity)); - + /** * This method is like `_.invert` except that the inverted object is generated * from the results of running each element of `object` thru `iteratee`. The @@ -23285,7 +23285,7 @@ result[value] = [key]; } }, getIteratee); - + /** * Invokes the method at `path` of `object`. * @@ -23305,7 +23305,7 @@ * // => [2, 3] */ var invoke = baseRest(baseInvoke); - + /** * Creates an array of the own enumerable property names of `object`. * @@ -23337,7 +23337,7 @@ function keys(object) { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } - + /** * Creates an array of the own and inherited enumerable property names of `object`. * @@ -23364,7 +23364,7 @@ function keysIn(object) { return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); } - + /** * The opposite of `_.mapValues`; this method creates an object with the * same values as `object` and keys generated by running each own enumerable @@ -23389,13 +23389,13 @@ function mapKeys(object, iteratee) { var result = {}; iteratee = getIteratee(iteratee, 3); - + baseForOwn(object, function(value, key, object) { baseAssignValue(result, iteratee(value, key, object), value); }); return result; } - + /** * Creates an object with the same keys as `object` and values generated * by running each own enumerable string keyed property of `object` thru @@ -23427,13 +23427,13 @@ function mapValues(object, iteratee) { var result = {}; iteratee = getIteratee(iteratee, 3); - + baseForOwn(object, function(value, key, object) { baseAssignValue(result, key, iteratee(value, key, object)); }); return result; } - + /** * This method is like `_.assign` except that it recursively merges own and * inherited enumerable string keyed properties of source objects into the @@ -23468,7 +23468,7 @@ var merge = createAssigner(function(object, source, srcIndex) { baseMerge(object, source, srcIndex); }); - + /** * This method is like `_.merge` except that it accepts `customizer` which * is invoked to produce the merged values of the destination and source @@ -23503,7 +23503,7 @@ var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { baseMerge(object, source, srcIndex, customizer); }); - + /** * The opposite of `_.pick`; this method creates an object composed of the * own and inherited enumerable property paths of `object` that are not omitted. @@ -23545,7 +23545,7 @@ } return result; }); - + /** * The opposite of `_.pickBy`; this method creates an object composed of * the own and inherited enumerable string keyed properties of `object` that @@ -23569,7 +23569,7 @@ function omitBy(object, predicate) { return pickBy(object, negate(getIteratee(predicate))); } - + /** * Creates an object composed of the picked `object` properties. * @@ -23590,7 +23590,7 @@ var pick = flatRest(function(object, paths) { return object == null ? {} : basePick(object, paths); }); - + /** * Creates an object composed of the `object` properties `predicate` returns * truthy for. The predicate is invoked with two arguments: (value, key). @@ -23621,7 +23621,7 @@ return predicate(value, path[0]); }); } - + /** * This method is like `_.get` except that if the resolved value is a * function it's invoked with the `this` binding of its parent object and @@ -23653,10 +23653,10 @@ */ function result(object, path, defaultValue) { path = castPath(path, object); - + var index = -1, length = path.length; - + // Ensure the loop is entered when path is empty. if (!length) { length = 1; @@ -23672,7 +23672,7 @@ } return object; } - + /** * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, * it's created. Arrays are created for missing index properties while objects @@ -23704,7 +23704,7 @@ function set(object, path, value) { return object == null ? object : baseSet(object, path, value); } - + /** * This method is like `_.set` except that it accepts `customizer` which is * invoked to produce the objects of `path`. If `customizer` returns `undefined` @@ -23733,7 +23733,7 @@ customizer = typeof customizer == 'function' ? customizer : undefined; return object == null ? object : baseSet(object, path, value, customizer); } - + /** * Creates an array of own enumerable string keyed-value pairs for `object` * which can be consumed by `_.fromPairs`. If `object` is a map or set, its @@ -23759,7 +23759,7 @@ * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) */ var toPairs = createToPairs(keys); - + /** * Creates an array of own and inherited enumerable string keyed-value pairs * for `object` which can be consumed by `_.fromPairs`. If `object` is a map @@ -23785,7 +23785,7 @@ * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) */ var toPairsIn = createToPairs(keysIn); - + /** * An alternative to `_.reduce`; this method transforms `object` to a new * `accumulator` object which is the result of running each of its own @@ -23819,7 +23819,7 @@ function transform(object, iteratee, accumulator) { var isArr = isArray(object), isArrLike = isArr || isBuffer(object) || isTypedArray(object); - + iteratee = getIteratee(iteratee, 4); if (accumulator == null) { var Ctor = object && object.constructor; @@ -23838,7 +23838,7 @@ }); return accumulator; } - + /** * Removes the property at `path` of `object`. * @@ -23869,7 +23869,7 @@ function unset(object, path) { return object == null ? true : baseUnset(object, path); } - + /** * This method is like `_.set` except that accepts `updater` to produce the * value to set. Use `_.updateWith` to customize `path` creation. The `updater` @@ -23900,7 +23900,7 @@ function update(object, path, updater) { return object == null ? object : baseUpdate(object, path, castFunction(updater)); } - + /** * This method is like `_.update` except that it accepts `customizer` which is * invoked to produce the objects of `path`. If `customizer` returns `undefined` @@ -23929,7 +23929,7 @@ customizer = typeof customizer == 'function' ? customizer : undefined; return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); } - + /** * Creates an array of the own enumerable string keyed property values of `object`. * @@ -23959,7 +23959,7 @@ function values(object) { return object == null ? [] : baseValues(object, keys(object)); } - + /** * Creates an array of the own and inherited enumerable string keyed property * values of `object`. @@ -23987,9 +23987,9 @@ function valuesIn(object) { return object == null ? [] : baseValues(object, keysIn(object)); } - + /*------------------------------------------------------------------------*/ - + /** * Clamps `number` within the inclusive `lower` and `upper` bounds. * @@ -24024,7 +24024,7 @@ } return baseClamp(toNumber(number), lower, upper); } - + /** * Checks if `n` is between `start` and up to, but not including, `end`. If * `end` is not specified, it's set to `start` with `start` then set to `0`. @@ -24074,7 +24074,7 @@ number = toNumber(number); return baseInRange(number, start, end); } - + /** * Produces a random number between the inclusive `lower` and `upper` bounds. * If only one argument is provided a number between `0` and the given number @@ -24144,9 +24144,9 @@ } return baseRandom(lower, upper); } - + /*------------------------------------------------------------------------*/ - + /** * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). * @@ -24171,7 +24171,7 @@ word = word.toLowerCase(); return result + (index ? capitalize(word) : word); }); - + /** * Converts the first character of `string` to upper case and the remaining * to lower case. @@ -24190,7 +24190,7 @@ function capitalize(string) { return upperFirst(toString(string).toLowerCase()); } - + /** * Deburrs `string` by converting * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) @@ -24213,7 +24213,7 @@ string = toString(string); return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); } - + /** * Checks if `string` ends with the given target string. * @@ -24240,17 +24240,17 @@ function endsWith(string, target, position) { string = toString(string); target = baseToString(target); - + var length = string.length; position = position === undefined ? length : baseClamp(toInteger(position), 0, length); - + var end = position; position -= target.length; return position >= 0 && string.slice(position, end) == target; } - + /** * Converts the characters "&", "<", ">", '"', and "'" in `string` to their * corresponding HTML entities. @@ -24285,7 +24285,7 @@ ? string.replace(reUnescapedHtml, escapeHtmlChar) : string; } - + /** * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. @@ -24307,7 +24307,7 @@ ? string.replace(reRegExpChar, '\\$&') : string; } - + /** * Converts `string` to * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). @@ -24332,7 +24332,7 @@ var kebabCase = createCompounder(function(result, word, index) { return result + (index ? '-' : '') + word.toLowerCase(); }); - + /** * Converts `string`, as space separated words, to lower case. * @@ -24356,7 +24356,7 @@ var lowerCase = createCompounder(function(result, word, index) { return result + (index ? ' ' : '') + word.toLowerCase(); }); - + /** * Converts the first character of `string` to lower case. * @@ -24375,7 +24375,7 @@ * // => 'fRED' */ var lowerFirst = createCaseFirst('toLowerCase'); - + /** * Pads `string` on the left and right sides if it's shorter than `length`. * Padding characters are truncated if they can't be evenly divided by `length`. @@ -24402,7 +24402,7 @@ function pad(string, length, chars) { string = toString(string); length = toInteger(length); - + var strLength = length ? stringSize(string) : 0; if (!length || strLength >= length) { return string; @@ -24414,7 +24414,7 @@ createPadding(nativeCeil(mid), chars) ); } - + /** * Pads `string` on the right side if it's shorter than `length`. Padding * characters are truncated if they exceed `length`. @@ -24441,13 +24441,13 @@ function padEnd(string, length, chars) { string = toString(string); length = toInteger(length); - + var strLength = length ? stringSize(string) : 0; return (length && strLength < length) ? (string + createPadding(length - strLength, chars)) : string; } - + /** * Pads `string` on the left side if it's shorter than `length`. Padding * characters are truncated if they exceed `length`. @@ -24474,13 +24474,13 @@ function padStart(string, length, chars) { string = toString(string); length = toInteger(length); - + var strLength = length ? stringSize(string) : 0; return (length && strLength < length) ? (createPadding(length - strLength, chars) + string) : string; } - + /** * Converts `string` to an integer of the specified radix. If `radix` is * `undefined` or `0`, a `radix` of `10` is used unless `value` is a @@ -24513,7 +24513,7 @@ } return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); } - + /** * Repeats the given string `n` times. * @@ -24544,7 +24544,7 @@ } return baseRepeat(toString(string), n); } - + /** * Replaces matches for `pattern` in `string` with `replacement`. * @@ -24567,10 +24567,10 @@ function replace() { var args = arguments, string = toString(args[0]); - + return args.length < 3 ? string : string.replace(args[1], args[2]); } - + /** * Converts `string` to * [snake case](https://en.wikipedia.org/wiki/Snake_case). @@ -24595,7 +24595,7 @@ var snakeCase = createCompounder(function(result, word, index) { return result + (index ? '_' : '') + word.toLowerCase(); }); - + /** * Splits `string` by `separator`. * @@ -24635,7 +24635,7 @@ } return string.split(separator, limit); } - + /** * Converts `string` to * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). @@ -24660,7 +24660,7 @@ var startCase = createCompounder(function(result, word, index) { return result + (index ? ' ' : '') + upperFirst(word); }); - + /** * Checks if `string` starts with the given target string. * @@ -24689,11 +24689,11 @@ position = position == null ? 0 : baseClamp(toInteger(position), 0, string.length); - + target = baseToString(target); return string.slice(position, position + target.length) == target; } - + /** * Creates a compiled template function that can interpolate data properties * in "interpolate" delimiters, HTML-escape interpolated data properties in @@ -24803,23 +24803,23 @@ // (http://ejohn.org/blog/javascript-micro-templating/) // and Laura Doktorova's doT.js (https://github.com/olado/doT). var settings = lodash.templateSettings; - + if (guard && isIterateeCall(string, options, guard)) { options = undefined; } string = toString(string); options = assignInWith({}, options, settings, customDefaultsAssignIn); - + var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), importsKeys = keys(imports), importsValues = baseValues(imports, importsKeys); - + var isEscaping, isEvaluating, index = 0, interpolate = options.interpolate || reNoMatch, source = "__p += '"; - + // Compile the regexp to match each delimiter. var reDelimiters = RegExp( (options.escape || reNoMatch).source + '|' + @@ -24827,20 +24827,20 @@ (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' + (options.evaluate || reNoMatch).source + '|$' , 'g'); - + // Use a sourceURL for easier debugging. var sourceURL = '//# sourceURL=' + ('sourceURL' in options ? options.sourceURL : ('lodash.templateSources[' + (++templateCounter) + ']') ) + '\n'; - + string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { interpolateValue || (interpolateValue = esTemplateValue); - + // Escape characters that can't be included in string literals. source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar); - + // Replace delimiters with snippets. if (escapeValue) { isEscaping = true; @@ -24854,14 +24854,14 @@ source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"; } index = offset + match.length; - + // The JS engine embedded in Adobe products needs `match` returned in // order to produce the correct `offset` value. return match; }); - + source += "';\n"; - + // If `variable` is not specified wrap a with-statement around the generated // code to add the data object to the top of the scope chain. var variable = options.variable; @@ -24872,7 +24872,7 @@ source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source) .replace(reEmptyStringMiddle, '$1') .replace(reEmptyStringTrailing, '$1;'); - + // Frame code as the function body. source = 'function(' + (variable || 'obj') + ') {\n' + (variable @@ -24891,12 +24891,12 @@ ) + source + 'return __p\n}'; - + var result = attempt(function() { return Function(importsKeys, sourceURL + 'return ' + source) .apply(undefined, importsValues); }); - + // Provide the compiled function's source by its `toString` method or // the `source` property as a convenience for inlining compiled templates. result.source = source; @@ -24905,7 +24905,7 @@ } return result; } - + /** * Converts `string`, as a whole, to lower case just like * [String#toLowerCase](https://mdn.io/toLowerCase). @@ -24930,7 +24930,7 @@ function toLower(value) { return toString(value).toLowerCase(); } - + /** * Converts `string`, as a whole, to upper case just like * [String#toUpperCase](https://mdn.io/toUpperCase). @@ -24955,7 +24955,7 @@ function toUpper(value) { return toString(value).toUpperCase(); } - + /** * Removes leading and trailing whitespace or specified characters from `string`. * @@ -24990,10 +24990,10 @@ chrSymbols = stringToArray(chars), start = charsStartIndex(strSymbols, chrSymbols), end = charsEndIndex(strSymbols, chrSymbols) + 1; - + return castSlice(strSymbols, start, end).join(''); } - + /** * Removes trailing whitespace or specified characters from `string`. * @@ -25023,10 +25023,10 @@ } var strSymbols = stringToArray(string), end = charsEndIndex(strSymbols, stringToArray(chars)) + 1; - + return castSlice(strSymbols, 0, end).join(''); } - + /** * Removes leading whitespace or specified characters from `string`. * @@ -25056,10 +25056,10 @@ } var strSymbols = stringToArray(string), start = charsStartIndex(strSymbols, stringToArray(chars)); - + return castSlice(strSymbols, start).join(''); } - + /** * Truncates `string` if it's longer than the given maximum string length. * The last characters of the truncated string are replaced with the omission @@ -25100,14 +25100,14 @@ function truncate(string, options) { var length = DEFAULT_TRUNC_LENGTH, omission = DEFAULT_TRUNC_OMISSION; - + if (isObject(options)) { var separator = 'separator' in options ? options.separator : separator; length = 'length' in options ? toInteger(options.length) : length; omission = 'omission' in options ? baseToString(options.omission) : omission; } string = toString(string); - + var strLength = string.length; if (hasUnicode(string)) { var strSymbols = stringToArray(string); @@ -25123,7 +25123,7 @@ var result = strSymbols ? castSlice(strSymbols, 0, end).join('') : string.slice(0, end); - + if (separator === undefined) { return result + omission; } @@ -25134,7 +25134,7 @@ if (string.slice(end).search(separator)) { var match, substring = result; - + if (!separator.global) { separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g'); } @@ -25152,7 +25152,7 @@ } return result + omission; } - + /** * The inverse of `_.escape`; this method converts the HTML entities * `&`, `<`, `>`, `"`, and `'` in `string` to @@ -25178,7 +25178,7 @@ ? string.replace(reEscapedHtml, unescapeHtmlChar) : string; } - + /** * Converts `string`, as space separated words, to upper case. * @@ -25202,7 +25202,7 @@ var upperCase = createCompounder(function(result, word, index) { return result + (index ? ' ' : '') + word.toUpperCase(); }); - + /** * Converts the first character of `string` to upper case. * @@ -25221,7 +25221,7 @@ * // => 'FRED' */ var upperFirst = createCaseFirst('toUpperCase'); - + /** * Splits `string` into an array of its words. * @@ -25244,15 +25244,15 @@ function words(string, pattern, guard) { string = toString(string); pattern = guard ? undefined : pattern; - + if (pattern === undefined) { return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); } return string.match(pattern) || []; } - + /*------------------------------------------------------------------------*/ - + /** * Attempts to invoke `func`, returning either the result or the caught error * object. Any additional arguments are provided to `func` when it's invoked. @@ -25282,7 +25282,7 @@ return isError(e) ? e : new Error(e); } }); - + /** * Binds methods of an object to the object itself, overwriting the existing * method. @@ -25316,7 +25316,7 @@ }); return object; }); - + /** * Creates a function that iterates over `pairs` and invokes the corresponding * function of the first predicate to return truthy. The predicate-function @@ -25349,14 +25349,14 @@ function cond(pairs) { var length = pairs == null ? 0 : pairs.length, toIteratee = getIteratee(); - + pairs = !length ? [] : arrayMap(pairs, function(pair) { if (typeof pair[1] != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } return [toIteratee(pair[0]), pair[1]]; }); - + return baseRest(function(args) { var index = -1; while (++index < length) { @@ -25367,7 +25367,7 @@ } }); } - + /** * Creates a function that invokes the predicate properties of `source` with * the corresponding property values of a given object, returning `true` if @@ -25395,7 +25395,7 @@ function conforms(source) { return baseConforms(baseClone(source, CLONE_DEEP_FLAG)); } - + /** * Creates a function that returns `value`. * @@ -25420,7 +25420,7 @@ return value; }; } - + /** * Checks `value` to determine whether a default value should be returned in * its place. The `defaultValue` is returned if `value` is `NaN`, `null`, @@ -25444,7 +25444,7 @@ function defaultTo(value, defaultValue) { return (value == null || value !== value) ? defaultValue : value; } - + /** * Creates a function that returns the result of invoking the given functions * with the `this` binding of the created function, where each successive @@ -25468,7 +25468,7 @@ * // => 9 */ var flow = createFlow(); - + /** * This method is like `_.flow` except that it creates a function that * invokes the given functions from right to left. @@ -25491,7 +25491,7 @@ * // => 9 */ var flowRight = createFlow(true); - + /** * This method returns the first argument it receives. * @@ -25511,7 +25511,7 @@ function identity(value) { return value; } - + /** * Creates a function that invokes `func` with the arguments of the created * function. If `func` is a property name, the created function returns the @@ -25557,7 +25557,7 @@ function iteratee(func) { return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG)); } - + /** * Creates a function that performs a partial deep comparison between a given * object and `source`, returning `true` if the given object has equivalent @@ -25589,7 +25589,7 @@ function matches(source) { return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); } - + /** * Creates a function that performs a partial deep comparison between the * value at `path` of a given object to `srcValue`, returning `true` if the @@ -25619,7 +25619,7 @@ function matchesProperty(path, srcValue) { return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG)); } - + /** * Creates a function that invokes the method at `path` of a given object. * Any additional arguments are provided to the invoked method. @@ -25649,7 +25649,7 @@ return baseInvoke(object, path, args); }; }); - + /** * The opposite of `_.method`; this method creates a function that invokes * the method at a given path of `object`. Any additional arguments are @@ -25678,7 +25678,7 @@ return baseInvoke(object, path, args); }; }); - + /** * Adds all own enumerable string keyed function properties of a source * object to the destination object. If `object` is a function, then methods @@ -25718,7 +25718,7 @@ function mixin(object, source, options) { var props = keys(source), methodNames = baseFunctions(source, props); - + if (options == null && !(isObject(source) && (methodNames.length || !props.length))) { options = source; @@ -25728,7 +25728,7 @@ } var chain = !(isObject(options) && 'chain' in options) || !!options.chain, isFunc = isFunction(object); - + arrayEach(methodNames, function(methodName) { var func = source[methodName]; object[methodName] = func; @@ -25738,7 +25738,7 @@ if (chain || chainAll) { var result = object(this.__wrapped__), actions = result.__actions__ = copyArray(this.__actions__); - + actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); result.__chain__ = chainAll; return result; @@ -25747,10 +25747,10 @@ }; } }); - + return object; } - + /** * Reverts the `_` variable to its previous value and returns a reference to * the `lodash` function. @@ -25770,7 +25770,7 @@ } return this; } - + /** * This method returns `undefined`. * @@ -25786,7 +25786,7 @@ function noop() { // No operation performed. } - + /** * Creates a function that gets the argument at index `n`. If `n` is negative, * the nth argument from the end is returned. @@ -25813,7 +25813,7 @@ return baseNth(args, n); }); } - + /** * Creates a function that invokes `iteratees` with the arguments it receives * and returns their results. @@ -25833,7 +25833,7 @@ * // => [4, 1] */ var over = createOver(arrayMap); - + /** * Creates a function that checks if **all** of the `predicates` return * truthy when invoked with the arguments it receives. @@ -25859,7 +25859,7 @@ * // => false */ var overEvery = createOver(arrayEvery); - + /** * Creates a function that checks if **any** of the `predicates` return * truthy when invoked with the arguments it receives. @@ -25885,7 +25885,7 @@ * // => false */ var overSome = createOver(arraySome); - + /** * Creates a function that returns the value at `path` of a given object. * @@ -25911,7 +25911,7 @@ function property(path) { return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); } - + /** * The opposite of `_.property`; this method creates a function that returns * the value at a given path of `object`. @@ -25938,7 +25938,7 @@ return object == null ? undefined : baseGet(object, path); }; } - + /** * Creates an array of numbers (positive and/or negative) progressing from * `start` up to, but not including, `end`. A step of `-1` is used if a negative @@ -25981,7 +25981,7 @@ * // => [] */ var range = createRange(); - + /** * This method is like `_.range` except that it populates values in * descending order. @@ -26019,7 +26019,7 @@ * // => [] */ var rangeRight = createRange(true); - + /** * This method returns a new empty array. * @@ -26041,7 +26041,7 @@ function stubArray() { return []; } - + /** * This method returns `false`. * @@ -26058,7 +26058,7 @@ function stubFalse() { return false; } - + /** * This method returns a new empty object. * @@ -26080,7 +26080,7 @@ function stubObject() { return {}; } - + /** * This method returns an empty string. * @@ -26097,7 +26097,7 @@ function stubString() { return ''; } - + /** * This method returns `true`. * @@ -26114,7 +26114,7 @@ function stubTrue() { return true; } - + /** * Invokes the iteratee `n` times, returning an array of the results of * each invocation. The iteratee is invoked with one argument; (index). @@ -26141,17 +26141,17 @@ } var index = MAX_ARRAY_LENGTH, length = nativeMin(n, MAX_ARRAY_LENGTH); - + iteratee = getIteratee(iteratee); n -= MAX_ARRAY_LENGTH; - + var result = baseTimes(length, iteratee); while (++index < n) { iteratee(index); } return result; } - + /** * Converts `value` to a property path array. * @@ -26175,7 +26175,7 @@ } return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value))); } - + /** * Generates a unique ID. If `prefix` is given, the ID is appended to it. * @@ -26197,9 +26197,9 @@ var id = ++idCounter; return toString(prefix) + id; } - + /*------------------------------------------------------------------------*/ - + /** * Adds two numbers. * @@ -26218,7 +26218,7 @@ var add = createMathOperation(function(augend, addend) { return augend + addend; }, 0); - + /** * Computes `number` rounded up to `precision`. * @@ -26241,7 +26241,7 @@ * // => 6100 */ var ceil = createRound('ceil'); - + /** * Divide two numbers. * @@ -26260,7 +26260,7 @@ var divide = createMathOperation(function(dividend, divisor) { return dividend / divisor; }, 1); - + /** * Computes `number` rounded down to `precision`. * @@ -26283,7 +26283,7 @@ * // => 4000 */ var floor = createRound('floor'); - + /** * Computes the maximum value of `array`. If `array` is empty or falsey, * `undefined` is returned. @@ -26307,7 +26307,7 @@ ? baseExtremum(array, identity, baseGt) : undefined; } - + /** * This method is like `_.max` except that it accepts `iteratee` which is * invoked for each element in `array` to generate the criterion by which @@ -26336,7 +26336,7 @@ ? baseExtremum(array, getIteratee(iteratee, 2), baseGt) : undefined; } - + /** * Computes the mean of the values in `array`. * @@ -26354,7 +26354,7 @@ function mean(array) { return baseMean(array, identity); } - + /** * This method is like `_.mean` except that it accepts `iteratee` which is * invoked for each element in `array` to generate the value to be averaged. @@ -26381,7 +26381,7 @@ function meanBy(array, iteratee) { return baseMean(array, getIteratee(iteratee, 2)); } - + /** * Computes the minimum value of `array`. If `array` is empty or falsey, * `undefined` is returned. @@ -26405,7 +26405,7 @@ ? baseExtremum(array, identity, baseLt) : undefined; } - + /** * This method is like `_.min` except that it accepts `iteratee` which is * invoked for each element in `array` to generate the criterion by which @@ -26434,7 +26434,7 @@ ? baseExtremum(array, getIteratee(iteratee, 2), baseLt) : undefined; } - + /** * Multiply two numbers. * @@ -26453,7 +26453,7 @@ var multiply = createMathOperation(function(multiplier, multiplicand) { return multiplier * multiplicand; }, 1); - + /** * Computes `number` rounded to `precision`. * @@ -26476,7 +26476,7 @@ * // => 4100 */ var round = createRound('round'); - + /** * Subtract two numbers. * @@ -26495,7 +26495,7 @@ var subtract = createMathOperation(function(minuend, subtrahend) { return minuend - subtrahend; }, 0); - + /** * Computes the sum of the values in `array`. * @@ -26515,7 +26515,7 @@ ? baseSum(array, identity) : 0; } - + /** * This method is like `_.sum` except that it accepts `iteratee` which is * invoked for each element in `array` to generate the value to be summed. @@ -26544,9 +26544,9 @@ ? baseSum(array, getIteratee(iteratee, 2)) : 0; } - + /*------------------------------------------------------------------------*/ - + // Add methods that return wrapped values in chain sequences. lodash.after = after; lodash.ary = ary; @@ -26697,18 +26697,18 @@ lodash.zipObject = zipObject; lodash.zipObjectDeep = zipObjectDeep; lodash.zipWith = zipWith; - + // Add aliases. lodash.entries = toPairs; lodash.entriesIn = toPairsIn; lodash.extend = assignIn; lodash.extendWith = assignInWith; - + // Add methods to `lodash.prototype`. mixin(lodash, lodash); - + /*------------------------------------------------------------------------*/ - + // Add methods that return unwrapped values in chain sequences. lodash.add = add; lodash.attempt = attempt; @@ -26859,12 +26859,12 @@ lodash.uniqueId = uniqueId; lodash.upperCase = upperCase; lodash.upperFirst = upperFirst; - + // Add aliases. lodash.each = forEach; lodash.eachRight = forEachRight; lodash.first = head; - + mixin(lodash, (function() { var source = {}; baseForOwn(lodash, function(func, methodName) { @@ -26874,9 +26874,9 @@ }); return source; }()), { 'chain': false }); - + /*------------------------------------------------------------------------*/ - + /** * The semantic version number. * @@ -26885,21 +26885,21 @@ * @type {string} */ lodash.VERSION = VERSION; - + // Assign default placeholders. arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) { lodash[methodName].placeholder = lodash; }); - + // Add `LazyWrapper` methods for `_.drop` and `_.take` variants. arrayEach(['drop', 'take'], function(methodName, index) { LazyWrapper.prototype[methodName] = function(n) { n = n === undefined ? 1 : nativeMax(toInteger(n), 0); - + var result = (this.__filtered__ && !index) ? new LazyWrapper(this) : this.clone(); - + if (result.__filtered__) { result.__takeCount__ = nativeMin(n, result.__takeCount__); } else { @@ -26910,17 +26910,17 @@ } return result; }; - + LazyWrapper.prototype[methodName + 'Right'] = function(n) { return this.reverse()[methodName](n).reverse(); }; }); - + // Add `LazyWrapper` methods that accept an `iteratee` value. arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) { var type = index + 1, isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG; - + LazyWrapper.prototype[methodName] = function(iteratee) { var result = this.clone(); result.__iteratees__.push({ @@ -26931,37 +26931,37 @@ return result; }; }); - + // Add `LazyWrapper` methods for `_.head` and `_.last`. arrayEach(['head', 'last'], function(methodName, index) { var takeName = 'take' + (index ? 'Right' : ''); - + LazyWrapper.prototype[methodName] = function() { return this[takeName](1).value()[0]; }; }); - + // Add `LazyWrapper` methods for `_.initial` and `_.tail`. arrayEach(['initial', 'tail'], function(methodName, index) { var dropName = 'drop' + (index ? '' : 'Right'); - + LazyWrapper.prototype[methodName] = function() { return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1); }; }); - + LazyWrapper.prototype.compact = function() { return this.filter(identity); }; - + LazyWrapper.prototype.find = function(predicate) { return this.filter(predicate).head(); }; - + LazyWrapper.prototype.findLast = function(predicate) { return this.reverse().find(predicate); }; - + LazyWrapper.prototype.invokeMap = baseRest(function(path, args) { if (typeof path == 'function') { return new LazyWrapper(this); @@ -26970,14 +26970,14 @@ return baseInvoke(value, path, args); }); }); - + LazyWrapper.prototype.reject = function(predicate) { return this.filter(negate(getIteratee(predicate))); }; - + LazyWrapper.prototype.slice = function(start, end) { start = toInteger(start); - + var result = this; if (result.__filtered__ && (start > 0 || end < 0)) { return new LazyWrapper(result); @@ -26993,22 +26993,22 @@ } return result; }; - + LazyWrapper.prototype.takeRightWhile = function(predicate) { return this.reverse().takeWhile(predicate).reverse(); }; - + LazyWrapper.prototype.toArray = function() { return this.take(MAX_ARRAY_LENGTH); }; - + // Add `LazyWrapper` methods to `lodash.prototype`. baseForOwn(LazyWrapper.prototype, function(func, methodName) { var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), isTaker = /^(?:head|last)$/.test(methodName), lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName], retUnwrapped = isTaker || /^find/.test(methodName); - + if (!lodashFunc) { return; } @@ -27018,12 +27018,12 @@ isLazy = value instanceof LazyWrapper, iteratee = args[0], useLazy = isLazy || isArray(value); - + var interceptor = function(value) { var result = lodashFunc.apply(lodash, arrayPush([value], args)); return (isTaker && chainAll) ? result[0] : result; }; - + if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) { // Avoid lazy use if the iteratee has a "length" value other than `1`. isLazy = useLazy = false; @@ -27032,7 +27032,7 @@ isHybrid = !!this.__actions__.length, isUnwrapped = retUnwrapped && !chainAll, onlyLazy = isLazy && !isHybrid; - + if (!retUnwrapped && useLazy) { value = onlyLazy ? value : new LazyWrapper(this); var result = func.apply(value, args); @@ -27046,13 +27046,13 @@ return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result; }; }); - + // Add `Array` methods to `lodash.prototype`. arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { var func = arrayProto[methodName], chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', retUnwrapped = /^(?:pop|shift)$/.test(methodName); - + lodash.prototype[methodName] = function() { var args = arguments; if (retUnwrapped && !this.__chain__) { @@ -27064,28 +27064,28 @@ }); }; }); - + // Map minified method names to their real names. baseForOwn(LazyWrapper.prototype, function(func, methodName) { var lodashFunc = lodash[methodName]; if (lodashFunc) { var key = (lodashFunc.name + ''), names = realNames[key] || (realNames[key] = []); - + names.push({ 'name': methodName, 'func': lodashFunc }); } }); - + realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{ 'name': 'wrapper', 'func': undefined }]; - + // Add methods to `LazyWrapper`. LazyWrapper.prototype.clone = lazyClone; LazyWrapper.prototype.reverse = lazyReverse; LazyWrapper.prototype.value = lazyValue; - + // Add chain sequence methods to the `lodash` wrapper. lodash.prototype.at = wrapperAt; lodash.prototype.chain = wrapperChain; @@ -27094,21 +27094,21 @@ lodash.prototype.plant = wrapperPlant; lodash.prototype.reverse = wrapperReverse; lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; - + // Add lazy aliases. lodash.prototype.first = lodash.prototype.head; - + if (symIterator) { lodash.prototype[symIterator] = wrapperToIterator; } return lodash; }); - + /*--------------------------------------------------------------------------*/ - + // Export lodash. var _ = runInContext(); - + // Some AMD build optimizers, like r.js, check for condition patterns like: if (true) { // Expose Lodash on the global object to prevent errors when Lodash is @@ -27116,7 +27116,7 @@ // See http://requirejs.org/docs/errors.html#mismatch for more details. // Use `_.noConflict` to remove Lodash from the global object. root._ = _; - + // Define as an anonymous module so, through path mapping, it can be // referenced as the "underscore" module. !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { @@ -27135,7 +27135,7 @@ root._ = _; } }.call(this)); - + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(5)(module))) /***/ }), @@ -27159,32 +27159,32 @@ /***/ (function(module, exports, __webpack_require__) { 'use strict'; - + Object.defineProperty(exports, "__esModule", { value: true }); - + var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - + var _d2 = __webpack_require__(2); - + var _d3 = _interopRequireDefault(_d2); - + var _lodash = __webpack_require__(4); - + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - + var PredictProba = function () { // svg: d3 object with the svg in question // class_names: array of class names // predict_probas: array of prediction probabilities function PredictProba(svg, class_names, predict_probas) { var title = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'Prediction probabilities'; - + _classCallCheck(this, PredictProba); - + var width = parseInt(svg.style('width')); this.names = class_names; this.names.push('Other'); @@ -27195,12 +27195,12 @@ this.colors = _d3.default.scale.category20().domain(this.names); this.colors_i = _d3.default.scale.category20().domain((0, _lodash.range)(this.names.length)); } - + var _map_classes = this.map_classes(this.names, predict_probas), _map_classes2 = _slicedToArray(_map_classes, 2), names = _map_classes2[0], data = _map_classes2[1]; - + var bar_x = width - 125; var class_names_width = bar_x; var bar_width = width - bar_x - 32; @@ -27219,15 +27219,15 @@ return (bar_height + space_between_bars) * i + bar_yshift; }; var bar = svg.append("g"); - + var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; - + try { for (var _iterator = (0, _lodash.range)(data.length)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var i = _step.value; - + var color = this.colors(names[i]); if (names[i] == 'Other' && this.names.length > 20) { color = '#5F9EA0'; @@ -27267,7 +27267,7 @@ } } } - + PredictProba.prototype.map_classes = function map_classes(class_names, predict_proba) { if (class_names.length <= 6) { return [class_names, predict_proba]; @@ -27288,11 +27288,11 @@ var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; - + try { for (var _iterator2 = (0, _lodash.range)(sorted.length)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var d = _step2.value; - + if (other.has(sorted[d].name)) { other_prob += sorted[d].prob; } else { @@ -27314,16 +27314,16 @@ } } } - + ; ret_names.push("Other"); ret_probs.push(other_prob); return [ret_names, ret_probs]; }; - + return PredictProba; }(); - + exports.default = PredictProba; /***/ }), @@ -27331,21 +27331,21 @@ /***/ (function(module, exports, __webpack_require__) { 'use strict'; - + Object.defineProperty(exports, "__esModule", { value: true }); - + var _d = __webpack_require__(2); - + var _d2 = _interopRequireDefault(_d); - + var _lodash = __webpack_require__(4); - + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - + var PredictedValue = // svg: d3 object with the svg in question // class_names: array of class names @@ -27353,23 +27353,23 @@ function PredictedValue(svg, predicted_value, min_value, max_value) { var title = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'Predicted value'; var log_coords = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false; - + _classCallCheck(this, PredictedValue); - + if (min_value == max_value) { var width_proportion = 1.0; } else { var width_proportion = (predicted_value - min_value) / (max_value - min_value); } - + var width = parseInt(svg.style('width')); - + this.color = _d2.default.scale.category10(); this.color('predicted_value'); // + 2 is due to it being a float var num_digits = Math.floor(Math.max(Math.log10(min_value), Math.log10(max_value))) + 2; num_digits = Math.max(num_digits, 3); - + var corner_width = 12 * num_digits; var corner_padding = 5.5 * num_digits; var bar_x = corner_width + corner_padding; @@ -27384,26 +27384,26 @@ } var bar_y = bar_yshift; var bar = svg.append("g"); - + //filled in bar representing predicted value in range var rect = bar.append("rect"); rect.attr("x", bar_x).attr("y", bar_y).attr("height", bar_height).attr("width", x_scale(width_proportion)).style("fill", this.color); - + //empty box representing range bar.append("rect").attr("x", bar_x).attr("y", bar_y).attr("height", bar_height).attr("width", x_scale(1)).attr("fill-opacity", 0).attr("stroke", "black"); var text = bar.append("text"); text.classed("prob_text", true); text.attr("y", bar_y + bar_height - 3).attr("fill", "black").style("font", "14px tahoma, sans-serif"); - + //text for min value text = bar.append("text"); text.attr("x", bar_x - corner_padding).attr("y", bar_y + bar_height - 3).attr("fill", "black").attr("text-anchor", "end").style("font", "14px tahoma, sans-serif").text(min_value.toFixed(2)); - + //text for range min annotation var v_adjust_min_value_annotation = text.node().getBBox().height; text = bar.append("text"); text.attr("x", bar_x - corner_padding).attr("y", bar_y + bar_height - 3 + v_adjust_min_value_annotation).attr("fill", "black").attr("text-anchor", "end").style("font", "14px tahoma, sans-serif").text("(min)"); - + //text for predicted value // console.log('bar height: ' + bar_height) text = bar.append("text"); @@ -27411,22 +27411,22 @@ // let h_adjust_predicted_value_text = text.node().getBBox().width / 2; var v_adjust_predicted_value_text = text.node().getBBox().height; text.attr("x", bar_x + x_scale(width_proportion)).attr("y", bar_y + bar_height + v_adjust_predicted_value_text).attr("fill", "black").attr("text-anchor", "middle").style("font", "14px tahoma, sans-serif"); - + //text for max value text = bar.append("text"); text.text(max_value.toFixed(2)); // let h_adjust = text.node().getBBox().width; text.attr("x", bar_x + bar_width + corner_padding).attr("y", bar_y + bar_height - 3).attr("fill", "black").attr("text-anchor", "begin").style("font", "14px tahoma, sans-serif"); - + //text for range max annotation var v_adjust_max_value_annotation = text.node().getBBox().height; text = bar.append("text"); text.attr("x", bar_x + bar_width + corner_padding).attr("y", bar_y + bar_height - 3 + v_adjust_min_value_annotation).attr("fill", "black").attr("text-anchor", "begin").style("font", "14px tahoma, sans-serif").text("(max)"); - + //readjust svg size // let svg_width = width + 1 * h_adjust; // svg.style('width', svg_width + 'px'); - + this.svg_height = n_bars * bar_height + bar_yshift + 2 * text.node().getBBox().height + 10; svg.style('height', this.svg_height + 'px'); if (log_coords) { @@ -27439,7 +27439,7 @@ console.log("Pred value: " + predicted_value); } }; - + exports.default = PredictedValue; /***/ }), @@ -27447,18 +27447,18 @@ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {"use strict"; - + __webpack_require__(9); - + __webpack_require__(300); - + __webpack_require__(301); - + if (global._babelPolyfill) { throw new Error("only one instance of babel-polyfill is allowed"); } global._babelPolyfill = true; - + var DEFINE_PROPERTY = "defineProperty"; function define(O, key, value) { O[key] || Object[DEFINE_PROPERTY](O, key, { @@ -27467,10 +27467,10 @@ value: value }); } - + define(String.prototype, "padLeft", "".padStart); define(String.prototype, "padRight", "".padEnd); - + "pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function (key) { [][key] && define(Array, key, Function.call.bind([][key])); }); @@ -27706,7 +27706,7 @@ , QObject = global.QObject; // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; - + // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 var setSymbolDesc = DESCRIPTORS && $fails(function(){ return _create(dP({}, 'a', { @@ -27718,19 +27718,19 @@ dP(it, key, D); if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc); } : dP; - + var wrap = function(tag){ var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]); sym._k = tag; return sym; }; - + var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){ return typeof it == 'symbol'; } : function(it){ return it instanceof $Symbol; }; - + var $defineProperty = function defineProperty(it, key, D){ if(it === ObjectProto)$defineProperty(OPSymbols, key, D); anObject(it); @@ -27790,7 +27790,7 @@ if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]); } return result; }; - + // 19.4.1.1 Symbol([description]) if(!USE_NATIVE){ $Symbol = function Symbol(){ @@ -27807,31 +27807,31 @@ redefine($Symbol[PROTOTYPE], 'toString', function toString(){ return this._k; }); - + $GOPD.f = $getOwnPropertyDescriptor; $DP.f = $defineProperty; __webpack_require__(57).f = gOPNExt.f = $getOwnPropertyNames; __webpack_require__(51).f = $propertyIsEnumerable; __webpack_require__(50).f = $getOwnPropertySymbols; - + if(DESCRIPTORS && !__webpack_require__(35)){ redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true); } - + wksExt.f = function(name){ return wrap(wks(name)); } } - + $export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol}); - + for(var symbols = ( // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables' ).split(','), i = 0; symbols.length > i; )wks(symbols[i++]); - + for(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]); - + $export($export.S + $export.F * !USE_NATIVE, 'Symbol', { // 19.4.2.1 Symbol.for(key) 'for': function(key){ @@ -27847,7 +27847,7 @@ useSetter: function(){ setter = true; }, useSimple: function(){ setter = false; } }); - + $export($export.S + $export.F * !USE_NATIVE, 'Object', { // 19.1.2.2 Object.create(O [, Properties]) create: $create, @@ -27862,7 +27862,7 @@ // 19.1.2.8 Object.getOwnPropertySymbols(O) getOwnPropertySymbols: $getOwnPropertySymbols }); - + // 24.3.2 JSON.stringify(value [, replacer [, space]]) $JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){ var S = $Symbol(); @@ -27887,7 +27887,7 @@ return _stringify.apply($JSON, args); } }); - + // 19.4.3.4 Symbol.prototype[@@toPrimitive](hint) $Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(17)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf); // 19.4.3.5 Symbol.prototype[@@toStringTag] @@ -27946,7 +27946,7 @@ , redefine = __webpack_require__(25) , ctx = __webpack_require__(27) , PROTOTYPE = 'prototype'; - + var $export = function(type, name, source){ var IS_FORCED = type & $export.F , IS_GLOBAL = type & $export.G @@ -27981,7 +27981,7 @@ $export.B = 16; // bind $export.W = 32; // wrap $export.U = 64; // safe - $export.R = 128; // real proto method for `library` + $export.R = 128; // real proto method for `library` module.exports = $export; /***/ }), @@ -28012,7 +28012,7 @@ , IE8_DOM_DEFINE = __webpack_require__(21) , toPrimitive = __webpack_require__(23) , dP = Object.defineProperty; - + exports.f = __webpack_require__(13) ? Object.defineProperty : function defineProperty(O, P, Attributes){ anObject(O); P = toPrimitive(P, true); @@ -28104,11 +28104,11 @@ , TO_STRING = 'toString' , $toString = Function[TO_STRING] , TPL = ('' + $toString).split(TO_STRING); - + __webpack_require__(16).inspectSource = function(it){ return $toString.call(it); }; - + (module.exports = function(O, key, val, safe){ var isFunction = typeof val == 'function'; if(isFunction)has(val, 'name') || hide(val, 'name', key); @@ -28250,7 +28250,7 @@ var def = __webpack_require__(18).f , has = __webpack_require__(12) , TAG = __webpack_require__(32)('toStringTag'); - + module.exports = function(it, tag, stat){ if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag}); }; @@ -28263,12 +28263,12 @@ , uid = __webpack_require__(26) , Symbol = __webpack_require__(11).Symbol , USE_SYMBOL = typeof Symbol == 'function'; - + var $exports = module.exports = function(name){ return store[name] || (store[name] = USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); }; - + $exports.store = store; /***/ }), @@ -28319,7 +28319,7 @@ // 19.1.2.14 / 15.2.3.14 Object.keys(O) var $keys = __webpack_require__(38) , enumBugKeys = __webpack_require__(48); - + module.exports = Object.keys || function keys(O){ return $keys(O, enumBugKeys); }; @@ -28332,7 +28332,7 @@ , toIObject = __webpack_require__(39) , arrayIndexOf = __webpack_require__(43)(false) , IE_PROTO = __webpack_require__(47)('IE_PROTO'); - + module.exports = function(object, names){ var O = toIObject(object) , i = 0 @@ -28372,7 +28372,7 @@ /***/ (function(module, exports) { var toString = {}.toString; - + module.exports = function(it){ return toString.call(it).slice(8, -1); }; @@ -28519,7 +28519,7 @@ , IE_PROTO = __webpack_require__(47)('IE_PROTO') , Empty = function(){ /* empty */ } , PROTOTYPE = 'prototype'; - + // Create object with fake `null` prototype: use iframe Object with cleared prototype var createDict = function(){ // Thrash, waste and sodomy: IE GC bug @@ -28541,7 +28541,7 @@ while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]]; return createDict(); }; - + module.exports = Object.create || function create(O, Properties){ var result; if(O !== null){ @@ -28562,7 +28562,7 @@ var dP = __webpack_require__(18) , anObject = __webpack_require__(19) , getKeys = __webpack_require__(37); - + module.exports = __webpack_require__(13) ? Object.defineProperties : function defineProperties(O, Properties){ anObject(O); var keys = getKeys(Properties) @@ -28587,10 +28587,10 @@ var toIObject = __webpack_require__(39) , gOPN = __webpack_require__(57).f , toString = {}.toString; - + var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : []; - + var getWindowNames = function(it){ try { return gOPN(it); @@ -28598,7 +28598,7 @@ return windowNames.slice(); } }; - + module.exports.f = function getOwnPropertyNames(it){ return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it)); }; @@ -28611,7 +28611,7 @@ // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O) var $keys = __webpack_require__(38) , hiddenKeys = __webpack_require__(48).concat('length', 'prototype'); - + exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){ return $keys(O, hiddenKeys); }; @@ -28627,7 +28627,7 @@ , has = __webpack_require__(12) , IE8_DOM_DEFINE = __webpack_require__(21) , gOPD = Object.getOwnPropertyDescriptor; - + exports.f = __webpack_require__(13) ? gOPD : function getOwnPropertyDescriptor(O, P){ O = toIObject(O); P = toPrimitive(P, true); @@ -28668,7 +28668,7 @@ // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) var toIObject = __webpack_require__(39) , $getOwnPropertyDescriptor = __webpack_require__(58).f; - + __webpack_require__(63)('getOwnPropertyDescriptor', function(){ return function getOwnPropertyDescriptor(it, key){ return $getOwnPropertyDescriptor(toIObject(it), key); @@ -28697,7 +28697,7 @@ // 19.1.2.9 Object.getPrototypeOf(O) var toObject = __webpack_require__(65) , $getPrototypeOf = __webpack_require__(66); - + __webpack_require__(63)('getPrototypeOf', function(){ return function getPrototypeOf(it){ return $getPrototypeOf(toObject(it)); @@ -28723,7 +28723,7 @@ , toObject = __webpack_require__(65) , IE_PROTO = __webpack_require__(47)('IE_PROTO') , ObjectProto = Object.prototype; - + module.exports = Object.getPrototypeOf || function(O){ O = toObject(O); if(has(O, IE_PROTO))return O[IE_PROTO]; @@ -28739,7 +28739,7 @@ // 19.1.2.14 Object.keys(O) var toObject = __webpack_require__(65) , $keys = __webpack_require__(37); - + __webpack_require__(63)('keys', function(){ return function keys(it){ return $keys(toObject(it)); @@ -28762,7 +28762,7 @@ // 19.1.2.5 Object.freeze(O) var isObject = __webpack_require__(20) , meta = __webpack_require__(29).onFreeze; - + __webpack_require__(63)('freeze', function($freeze){ return function freeze(it){ return $freeze && isObject(it) ? $freeze(meta(it)) : it; @@ -28776,7 +28776,7 @@ // 19.1.2.17 Object.seal(O) var isObject = __webpack_require__(20) , meta = __webpack_require__(29).onFreeze; - + __webpack_require__(63)('seal', function($seal){ return function seal(it){ return $seal && isObject(it) ? $seal(meta(it)) : it; @@ -28790,7 +28790,7 @@ // 19.1.2.15 Object.preventExtensions(O) var isObject = __webpack_require__(20) , meta = __webpack_require__(29).onFreeze; - + __webpack_require__(63)('preventExtensions', function($preventExtensions){ return function preventExtensions(it){ return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it; @@ -28803,7 +28803,7 @@ // 19.1.2.12 Object.isFrozen(O) var isObject = __webpack_require__(20); - + __webpack_require__(63)('isFrozen', function($isFrozen){ return function isFrozen(it){ return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true; @@ -28816,7 +28816,7 @@ // 19.1.2.13 Object.isSealed(O) var isObject = __webpack_require__(20); - + __webpack_require__(63)('isSealed', function($isSealed){ return function isSealed(it){ return isObject(it) ? $isSealed ? $isSealed(it) : false : true; @@ -28829,7 +28829,7 @@ // 19.1.2.11 Object.isExtensible(O) var isObject = __webpack_require__(20); - + __webpack_require__(63)('isExtensible', function($isExtensible){ return function isExtensible(it){ return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false; @@ -28842,7 +28842,7 @@ // 19.1.3.1 Object.assign(target, source) var $export = __webpack_require__(15); - + $export($export.S + $export.F, 'Object', {assign: __webpack_require__(76)}); /***/ }), @@ -28857,7 +28857,7 @@ , toObject = __webpack_require__(65) , IObject = __webpack_require__(40) , $assign = Object.assign; - + // should work with symbols and should have deterministic property order (V8 bug) module.exports = !$assign || __webpack_require__(14)(function(){ var A = {} @@ -28962,14 +28962,14 @@ , TAG = __webpack_require__(32)('toStringTag') // ES3 wrong here , ARG = cof(function(){ return arguments; }()) == 'Arguments'; - + // fallback for IE11 Script Access Denied error var tryGet = function(it, key){ try { return it[key]; } catch(e){ /* empty */ } }; - + module.exports = function(it){ var O, T, B; return it === undefined ? 'Undefined' : it === null ? 'Null' @@ -28987,7 +28987,7 @@ // 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...) var $export = __webpack_require__(15); - + $export($export.P, 'Function', {bind: __webpack_require__(84)}); /***/ }), @@ -29000,14 +29000,14 @@ , invoke = __webpack_require__(85) , arraySlice = [].slice , factories = {}; - + var construct = function(F, len, args){ if(!(len in factories)){ for(var n = [], i = 0; i < len; i++)n[i] = 'a[' + i + ']'; factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')'); } return factories[len](F, args); }; - + module.exports = Function.bind || function bind(that /*, args... */){ var fn = aFunction(this) , partArgs = arraySlice.call(arguments, 1); @@ -29050,11 +29050,11 @@ , FProto = Function.prototype , nameRE = /^\s*function ([^ (]*)/ , NAME = 'name'; - + var isExtensible = Object.isExtensible || function(){ return true; }; - + // 19.2.4.2 name NAME in FProto || __webpack_require__(13) && dP(FProto, NAME, { configurable: true, @@ -29105,7 +29105,7 @@ , $trim = __webpack_require__(90).trim , ws = __webpack_require__(91) , hex = /^[\-+]?0[xX]/; - + module.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix){ var string = $trim(String(str), 3); return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10)); @@ -29123,7 +29123,7 @@ , non = '\u200b\u0085' , ltrim = RegExp('^' + space + space + '*') , rtrim = RegExp(space + space + '*$'); - + var exporter = function(KEY, exec, ALIAS){ var exp = {}; var FORCE = fails(function(){ @@ -29133,7 +29133,7 @@ if(ALIAS)exp[ALIAS] = fn; $export($export.P + $export.F * FORCE, 'String', exp); }; - + // 1 -> String#trimLeft // 2 -> String#trimRight // 3 -> String#trim @@ -29143,7 +29143,7 @@ if(TYPE & 2)string = string.replace(rtrim, ''); return string; }; - + module.exports = exporter; /***/ }), @@ -29168,7 +29168,7 @@ var $parseFloat = __webpack_require__(11).parseFloat , $trim = __webpack_require__(90).trim; - + module.exports = 1 / $parseFloat(__webpack_require__(91) + '-0') !== -Infinity ? function parseFloat(str){ var string = $trim(String(str), 3) , result = $parseFloat(string); @@ -29197,7 +29197,7 @@ // Opera ~12 has broken Object#toString , BROKEN_COF = cof(__webpack_require__(53)(proto)) == NUMBER , TRIM = 'trim' in String.prototype; - + // 7.1.3 ToNumber(argument) var toNumber = function(argument){ var it = toPrimitive(argument, false); @@ -29223,7 +29223,7 @@ } } return +it; }; - + if(!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')){ $Number = function Number(value){ var it = arguments.length < 1 ? 0 : value @@ -29276,7 +29276,7 @@ , data = [0, 0, 0, 0, 0, 0] , ERROR = 'Number.toFixed: incorrect invocation!' , ZERO = '0'; - + var multiply = function(n, c){ var i = -1 , c2 = c; @@ -29320,7 +29320,7 @@ x2 /= 2; } return n; }; - + $export($export.P + $export.F * (!!$toFixed && ( 0.00008.toFixed(3) !== '0.000' || 0.9.toFixed(0) !== '1' || @@ -29397,7 +29397,7 @@ 'use strict'; var toInteger = __webpack_require__(45) , defined = __webpack_require__(42); - + module.exports = function repeat(count){ var str = String(defined(this)) , res = '' @@ -29416,7 +29416,7 @@ , $fails = __webpack_require__(14) , aNumberValue = __webpack_require__(97) , $toPrecision = 1..toPrecision; - + $export($export.P + $export.F * ($fails(function(){ // IE7- return $toPrecision.call(1, undefined) !== '1'; @@ -29426,7 +29426,7 @@ })), 'Number', { toPrecision: function toPrecision(precision){ var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!'); - return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision); + return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision); } }); @@ -29436,7 +29436,7 @@ // 20.1.2.1 Number.EPSILON var $export = __webpack_require__(15); - + $export($export.S, 'Number', {EPSILON: Math.pow(2, -52)}); /***/ }), @@ -29446,7 +29446,7 @@ // 20.1.2.2 Number.isFinite(number) var $export = __webpack_require__(15) , _isFinite = __webpack_require__(11).isFinite; - + $export($export.S, 'Number', { isFinite: function isFinite(it){ return typeof it == 'number' && _isFinite(it); @@ -29459,7 +29459,7 @@ // 20.1.2.3 Number.isInteger(number) var $export = __webpack_require__(15); - + $export($export.S, 'Number', {isInteger: __webpack_require__(103)}); /***/ }), @@ -29479,7 +29479,7 @@ // 20.1.2.4 Number.isNaN(number) var $export = __webpack_require__(15); - + $export($export.S, 'Number', { isNaN: function isNaN(number){ return number != number; @@ -29494,7 +29494,7 @@ var $export = __webpack_require__(15) , isInteger = __webpack_require__(103) , abs = Math.abs; - + $export($export.S, 'Number', { isSafeInteger: function isSafeInteger(number){ return isInteger(number) && abs(number) <= 0x1fffffffffffff; @@ -29507,7 +29507,7 @@ // 20.1.2.6 Number.MAX_SAFE_INTEGER var $export = __webpack_require__(15); - + $export($export.S, 'Number', {MAX_SAFE_INTEGER: 0x1fffffffffffff}); /***/ }), @@ -29516,7 +29516,7 @@ // 20.1.2.10 Number.MIN_SAFE_INTEGER var $export = __webpack_require__(15); - + $export($export.S, 'Number', {MIN_SAFE_INTEGER: -0x1fffffffffffff}); /***/ }), @@ -29546,11 +29546,11 @@ , log1p = __webpack_require__(111) , sqrt = Math.sqrt , $acosh = Math.acosh; - + $export($export.S + $export.F * !($acosh // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509 && Math.floor($acosh(Number.MAX_VALUE)) == 710 - // Tor Browser bug: Math.acosh(Infinity) -> NaN + // Tor Browser bug: Math.acosh(Infinity) -> NaN && $acosh(Infinity) == Infinity ), 'Math', { acosh: function acosh(x){ @@ -29576,12 +29576,12 @@ // 20.2.2.5 Math.asinh(x) var $export = __webpack_require__(15) , $asinh = Math.asinh; - + function asinh(x){ return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1)); } - - // Tor Browser bug: Math.asinh(0) -> -0 + + // Tor Browser bug: Math.asinh(0) -> -0 $export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', {asinh: asinh}); /***/ }), @@ -29591,8 +29591,8 @@ // 20.2.2.7 Math.atanh(x) var $export = __webpack_require__(15) , $atanh = Math.atanh; - - // Tor Browser bug: Math.atanh(-0) -> 0 + + // Tor Browser bug: Math.atanh(-0) -> 0 $export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', { atanh: function atanh(x){ return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2; @@ -29606,7 +29606,7 @@ // 20.2.2.9 Math.cbrt(x) var $export = __webpack_require__(15) , sign = __webpack_require__(115); - + $export($export.S, 'Math', { cbrt: function cbrt(x){ return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3); @@ -29628,7 +29628,7 @@ // 20.2.2.11 Math.clz32(x) var $export = __webpack_require__(15); - + $export($export.S, 'Math', { clz32: function clz32(x){ return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32; @@ -29642,7 +29642,7 @@ // 20.2.2.12 Math.cosh(x) var $export = __webpack_require__(15) , exp = Math.exp; - + $export($export.S, 'Math', { cosh: function cosh(x){ return (exp(x = +x) + exp(-x)) / 2; @@ -29656,7 +29656,7 @@ // 20.2.2.14 Math.expm1(x) var $export = __webpack_require__(15) , $expm1 = __webpack_require__(119); - + $export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', {expm1: $expm1}); /***/ }), @@ -29686,12 +29686,12 @@ , EPSILON32 = pow(2, -23) , MAX32 = pow(2, 127) * (2 - EPSILON32) , MIN32 = pow(2, -126); - + var roundTiesToEven = function(n){ return n + 1 / EPSILON - 1 / EPSILON; }; - - + + $export($export.S, 'Math', { fround: function fround(x){ var $abs = Math.abs(x) @@ -29712,7 +29712,7 @@ // 20.2.2.17 Math.hypot([value1[, value2[, … ]]]) var $export = __webpack_require__(15) , abs = Math.abs; - + $export($export.S, 'Math', { hypot: function hypot(value1, value2){ // eslint-disable-line no-unused-vars var sum = 0 @@ -29742,7 +29742,7 @@ // 20.2.2.18 Math.imul(x, y) var $export = __webpack_require__(15) , $imul = Math.imul; - + // some WebKit versions fails with big numbers, some has wrong arity $export($export.S + $export.F * __webpack_require__(14)(function(){ return $imul(0xffffffff, 5) != -5 || $imul.length != 2; @@ -29763,7 +29763,7 @@ // 20.2.2.21 Math.log10(x) var $export = __webpack_require__(15); - + $export($export.S, 'Math', { log10: function log10(x){ return Math.log(x) / Math.LN10; @@ -29776,7 +29776,7 @@ // 20.2.2.20 Math.log1p(x) var $export = __webpack_require__(15); - + $export($export.S, 'Math', {log1p: __webpack_require__(111)}); /***/ }), @@ -29785,7 +29785,7 @@ // 20.2.2.22 Math.log2(x) var $export = __webpack_require__(15); - + $export($export.S, 'Math', { log2: function log2(x){ return Math.log(x) / Math.LN2; @@ -29798,7 +29798,7 @@ // 20.2.2.28 Math.sign(x) var $export = __webpack_require__(15); - + $export($export.S, 'Math', {sign: __webpack_require__(115)}); /***/ }), @@ -29809,7 +29809,7 @@ var $export = __webpack_require__(15) , expm1 = __webpack_require__(119) , exp = Math.exp; - + // V8 near Chromium 38 has a problem with very small numbers $export($export.S + $export.F * __webpack_require__(14)(function(){ return !Math.sinh(-2e-17) != -2e-17; @@ -29829,7 +29829,7 @@ var $export = __webpack_require__(15) , expm1 = __webpack_require__(119) , exp = Math.exp; - + $export($export.S, 'Math', { tanh: function tanh(x){ var a = expm1(x = +x) @@ -29844,7 +29844,7 @@ // 20.2.2.34 Math.trunc(x) var $export = __webpack_require__(15); - + $export($export.S, 'Math', { trunc: function trunc(it){ return (it > 0 ? Math.floor : Math.ceil)(it); @@ -29859,7 +29859,7 @@ , toIndex = __webpack_require__(46) , fromCharCode = String.fromCharCode , $fromCodePoint = String.fromCodePoint; - + // length should be 1, old FF problem $export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', { // 21.1.2.2 String.fromCodePoint(...codePoints) @@ -29886,7 +29886,7 @@ var $export = __webpack_require__(15) , toIObject = __webpack_require__(39) , toLength = __webpack_require__(44); - + $export($export.S, 'String', { // 21.1.2.4 String.raw(callSite, ...substitutions) raw: function raw(callSite){ @@ -29920,7 +29920,7 @@ 'use strict'; var $at = __webpack_require__(134)(true); - + // 21.1.3.27 String.prototype[@@iterator]() __webpack_require__(135)(String, 'String', function(iterated){ this._t = String(iterated); // target @@ -29977,9 +29977,9 @@ , FF_ITERATOR = '@@iterator' , KEYS = 'keys' , VALUES = 'values'; - + var returnThis = function(){ return this; }; - + module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){ $iterCreate(Constructor, NAME, next); var getMethod = function(kind){ @@ -30048,10 +30048,10 @@ , descriptor = __webpack_require__(24) , setToStringTag = __webpack_require__(31) , IteratorPrototype = {}; - + // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() __webpack_require__(17)(IteratorPrototype, __webpack_require__(32)('iterator'), function(){ return this; }); - + module.exports = function(Constructor, NAME, next){ Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)}); setToStringTag(Constructor, NAME + ' Iterator'); @@ -30082,7 +30082,7 @@ , context = __webpack_require__(140) , ENDS_WITH = 'endsWith' , $endsWith = ''[ENDS_WITH]; - + $export($export.P + $export.F * __webpack_require__(142)(ENDS_WITH), 'String', { endsWith: function endsWith(searchString /*, endPosition = @length */){ var that = context(this, searchString, ENDS_WITH) @@ -30103,7 +30103,7 @@ // helper for String#{startsWith, endsWith, includes} var isRegExp = __webpack_require__(141) , defined = __webpack_require__(42); - + module.exports = function(that, searchString, NAME){ if(isRegExp(searchString))throw TypeError('String#' + NAME + " doesn't accept regex!"); return String(defined(that)); @@ -30148,7 +30148,7 @@ var $export = __webpack_require__(15) , context = __webpack_require__(140) , INCLUDES = 'includes'; - + $export($export.P + $export.F * __webpack_require__(142)(INCLUDES), 'String', { includes: function includes(searchString /*, position = 0 */){ return !!~context(this, searchString, INCLUDES) @@ -30161,7 +30161,7 @@ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(15); - + $export($export.P, 'String', { // 21.1.3.13 String.prototype.repeat(count) repeat: __webpack_require__(98) @@ -30178,7 +30178,7 @@ , context = __webpack_require__(140) , STARTS_WITH = 'startsWith' , $startsWith = ''[STARTS_WITH]; - + $export($export.P + $export.F * __webpack_require__(142)(STARTS_WITH), 'String', { startsWith: function startsWith(searchString /*, position = 0 */){ var that = context(this, searchString, STARTS_WITH) @@ -30376,7 +30376,7 @@ // 20.3.3.1 / 15.9.4.4 Date.now() var $export = __webpack_require__(15); - + $export($export.S, 'Date', {now: function(){ return new Date().getTime(); }}); /***/ }), @@ -30387,7 +30387,7 @@ var $export = __webpack_require__(15) , toObject = __webpack_require__(65) , toPrimitive = __webpack_require__(23); - + $export($export.P + $export.F * __webpack_require__(14)(function(){ return new Date(NaN).toJSON() !== null || Date.prototype.toJSON.call({toISOString: function(){ return 1; }}) !== 1; }), 'Date', { @@ -30407,11 +30407,11 @@ var $export = __webpack_require__(15) , fails = __webpack_require__(14) , getTime = Date.prototype.getTime; - + var lz = function(num){ return num > 9 ? num : '0' + num; }; - + // PhantomJS / old WebKit has a broken implementations $export($export.P + $export.F * (fails(function(){ return new Date(-5e13 - 1).toISOString() != '0385-07-25T07:06:39.999Z'; @@ -30453,7 +30453,7 @@ var TO_PRIMITIVE = __webpack_require__(32)('toPrimitive') , proto = Date.prototype; - + if(!(TO_PRIMITIVE in proto))__webpack_require__(17)(proto, TO_PRIMITIVE, __webpack_require__(165)); /***/ }), @@ -30464,7 +30464,7 @@ var anObject = __webpack_require__(19) , toPrimitive = __webpack_require__(23) , NUMBER = 'number'; - + module.exports = function(hint){ if(hint !== 'string' && hint !== NUMBER && hint !== 'default')throw TypeError('Incorrect hint'); return toPrimitive(anObject(this), hint != NUMBER); @@ -30476,7 +30476,7 @@ // 22.1.2.2 / 15.4.3.2 Array.isArray(arg) var $export = __webpack_require__(15); - + $export($export.S, 'Array', {isArray: __webpack_require__(52)}); /***/ }), @@ -30492,7 +30492,7 @@ , toLength = __webpack_require__(44) , createProperty = __webpack_require__(170) , getIterFn = __webpack_require__(171); - + $export($export.S + $export.F * !__webpack_require__(172)(function(iter){ Array.from(iter); }), 'Array', { // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined) from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){ @@ -30547,7 +30547,7 @@ var Iterators = __webpack_require__(136) , ITERATOR = __webpack_require__(32)('iterator') , ArrayProto = Array.prototype; - + module.exports = function(it){ return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); }; @@ -30559,7 +30559,7 @@ 'use strict'; var $defineProperty = __webpack_require__(18) , createDesc = __webpack_require__(24); - + module.exports = function(object, index, value){ if(index in object)$defineProperty.f(object, index, createDesc(0, value)); else object[index] = value; @@ -30584,13 +30584,13 @@ var ITERATOR = __webpack_require__(32)('iterator') , SAFE_CLOSING = false; - + try { var riter = [7][ITERATOR](); riter['return'] = function(){ SAFE_CLOSING = true; }; Array.from(riter, function(){ throw 2; }); } catch(e){ /* empty */ } - + module.exports = function(exec, skipClosing){ if(!skipClosing && !SAFE_CLOSING)return false; var safe = false; @@ -30611,7 +30611,7 @@ 'use strict'; var $export = __webpack_require__(15) , createProperty = __webpack_require__(170); - + // WebKit Array.of isn't generic $export($export.S + $export.F * __webpack_require__(14)(function(){ function F(){} @@ -30637,7 +30637,7 @@ var $export = __webpack_require__(15) , toIObject = __webpack_require__(39) , arrayJoin = [].join; - + // fallback for not array-like strings $export($export.P + $export.F * (__webpack_require__(40) != Object || !__webpack_require__(175)(arrayJoin)), 'Array', { join: function join(separator){ @@ -30650,7 +30650,7 @@ /***/ (function(module, exports, __webpack_require__) { var fails = __webpack_require__(14); - + module.exports = function(method, arg){ return !!method && fails(function(){ arg ? method.call(null, function(){}, 1) : method.call(null); @@ -30668,7 +30668,7 @@ , toIndex = __webpack_require__(46) , toLength = __webpack_require__(44) , arraySlice = [].slice; - + // fallback for not array-like ES3 strings and DOM objects $export($export.P + $export.F * __webpack_require__(14)(function(){ if(html)arraySlice.call(html); @@ -30701,7 +30701,7 @@ , fails = __webpack_require__(14) , $sort = [].sort , test = [1, 2, 3]; - + $export($export.P + $export.F * (fails(function(){ // IE8- test.sort(undefined); @@ -30726,7 +30726,7 @@ var $export = __webpack_require__(15) , $forEach = __webpack_require__(179)(0) , STRICT = __webpack_require__(175)([].forEach, true); - + $export($export.P + $export.F * !STRICT, 'Array', { // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg]) forEach: function forEach(callbackfn /* , thisArg */){ @@ -30789,7 +30789,7 @@ // 9.4.2.3 ArraySpeciesCreate(originalArray, length) var speciesConstructor = __webpack_require__(181); - + module.exports = function(original, length){ return new (speciesConstructor(original))(length); }; @@ -30801,7 +30801,7 @@ var isObject = __webpack_require__(20) , isArray = __webpack_require__(52) , SPECIES = __webpack_require__(32)('species'); - + module.exports = function(original){ var C; if(isArray(original)){ @@ -30822,7 +30822,7 @@ 'use strict'; var $export = __webpack_require__(15) , $map = __webpack_require__(179)(1); - + $export($export.P + $export.F * !__webpack_require__(175)([].map, true), 'Array', { // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg]) map: function map(callbackfn /* , thisArg */){ @@ -30837,7 +30837,7 @@ 'use strict'; var $export = __webpack_require__(15) , $filter = __webpack_require__(179)(2); - + $export($export.P + $export.F * !__webpack_require__(175)([].filter, true), 'Array', { // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg]) filter: function filter(callbackfn /* , thisArg */){ @@ -30852,7 +30852,7 @@ 'use strict'; var $export = __webpack_require__(15) , $some = __webpack_require__(179)(3); - + $export($export.P + $export.F * !__webpack_require__(175)([].some, true), 'Array', { // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg]) some: function some(callbackfn /* , thisArg */){ @@ -30867,7 +30867,7 @@ 'use strict'; var $export = __webpack_require__(15) , $every = __webpack_require__(179)(4); - + $export($export.P + $export.F * !__webpack_require__(175)([].every, true), 'Array', { // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg]) every: function every(callbackfn /* , thisArg */){ @@ -30882,7 +30882,7 @@ 'use strict'; var $export = __webpack_require__(15) , $reduce = __webpack_require__(187); - + $export($export.P + $export.F * !__webpack_require__(175)([].reduce, true), 'Array', { // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue]) reduce: function reduce(callbackfn /* , initialValue */){ @@ -30898,7 +30898,7 @@ , toObject = __webpack_require__(65) , IObject = __webpack_require__(40) , toLength = __webpack_require__(44); - + module.exports = function(that, callbackfn, aLen, memo, isRight){ aFunction(callbackfn); var O = toObject(that) @@ -30930,7 +30930,7 @@ 'use strict'; var $export = __webpack_require__(15) , $reduce = __webpack_require__(187); - + $export($export.P + $export.F * !__webpack_require__(175)([].reduceRight, true), 'Array', { // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue]) reduceRight: function reduceRight(callbackfn /* , initialValue */){ @@ -30947,7 +30947,7 @@ , $indexOf = __webpack_require__(43)(false) , $native = [].indexOf , NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0; - + $export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(175)($native)), 'Array', { // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex]) indexOf: function indexOf(searchElement /*, fromIndex = 0 */){ @@ -30969,7 +30969,7 @@ , toLength = __webpack_require__(44) , $native = [].lastIndexOf , NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0; - + $export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(175)($native)), 'Array', { // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex]) lastIndexOf: function lastIndexOf(searchElement /*, fromIndex = @[*-1] */){ @@ -30991,9 +30991,9 @@ // 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length) var $export = __webpack_require__(15); - + $export($export.P, 'Array', {copyWithin: __webpack_require__(192)}); - + __webpack_require__(193)('copyWithin'); /***/ }), @@ -31005,7 +31005,7 @@ var toObject = __webpack_require__(65) , toIndex = __webpack_require__(46) , toLength = __webpack_require__(44); - + module.exports = [].copyWithin || function copyWithin(target/*= 0*/, start/*= 0, end = @length*/){ var O = toObject(this) , len = toLength(O.length) @@ -31045,9 +31045,9 @@ // 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length) var $export = __webpack_require__(15); - + $export($export.P, 'Array', {fill: __webpack_require__(195)}); - + __webpack_require__(193)('fill'); /***/ }), @@ -31123,7 +31123,7 @@ , dP = __webpack_require__(18) , DESCRIPTORS = __webpack_require__(13) , SPECIES = __webpack_require__(32)('species'); - + module.exports = function(KEY){ var C = global[KEY]; if(DESCRIPTORS && C && !C[SPECIES])dP.f(C, SPECIES, { @@ -31141,7 +31141,7 @@ , step = __webpack_require__(201) , Iterators = __webpack_require__(136) , toIObject = __webpack_require__(39); - + // 22.1.3.4 Array.prototype.entries() // 22.1.3.13 Array.prototype.keys() // 22.1.3.29 Array.prototype.values() @@ -31163,10 +31163,10 @@ if(kind == 'values')return step(0, O[index]); return step(0, [index, O[index]]); }, 'values'); - + // argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7) Iterators.Arguments = Iterators.Array; - + addToUnscopables('keys'); addToUnscopables('values'); addToUnscopables('entries'); @@ -31196,7 +31196,7 @@ , re2 = /a/g // "new" creates a new object, old webkit buggy here , CORRECT_NEW = new $RegExp(re1) !== re1; - + if(__webpack_require__(13) && (!CORRECT_NEW || __webpack_require__(14)(function(){ re2[__webpack_require__(32)('match')] = false; // RegExp constructor can alter flags and IsRegExp works correct with @@match @@ -31224,7 +31224,7 @@ $RegExp.prototype = proto; __webpack_require__(25)(global, 'RegExp', $RegExp); } - + __webpack_require__(199)('RegExp'); /***/ }), @@ -31256,11 +31256,11 @@ , DESCRIPTORS = __webpack_require__(13) , TO_STRING = 'toString' , $toString = /./[TO_STRING]; - + var define = function(fn){ __webpack_require__(25)(RegExp.prototype, TO_STRING, fn, true); }; - + // 21.2.5.14 RegExp.prototype.toString() if(__webpack_require__(14)(function(){ return $toString.call({source: 'a', flags: 'b'}) != '/a/b'; })){ define(function toString(){ @@ -31310,7 +31310,7 @@ , fails = __webpack_require__(14) , defined = __webpack_require__(42) , wks = __webpack_require__(32); - + module.exports = function(KEY, length, exec){ var SYMBOL = wks(KEY) , fns = exec(defined, SYMBOL, ''[KEY]) @@ -31465,7 +31465,7 @@ , isNode = classof(process) == 'process' , empty = function(){ /* empty */ } , Internal, GenericPromiseCapability, Wrapper; - + var USE_NATIVE = !!function(){ try { // correct subclassing with @@species support @@ -31475,7 +31475,7 @@ return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise; } catch(e){ /* empty */ } }(); - + // helpers var sameConstructor = function(a, b){ // with library wrapper special case @@ -31625,7 +31625,7 @@ $reject.call({_w: promise, _d: false}, e); // wrap } }; - + // constructor polyfill if(!USE_NATIVE){ // 25.4.3.1 Promise(executor) @@ -31672,12 +31672,12 @@ this.reject = ctx($reject, promise, 1); }; } - + $export($export.G + $export.W + $export.F * !USE_NATIVE, {Promise: $Promise}); __webpack_require__(31)($Promise, PROMISE); __webpack_require__(199)(PROMISE); Wrapper = __webpack_require__(16)[PROMISE]; - + // statics $export($export.S + $export.F * !USE_NATIVE, PROMISE, { // 25.4.4.5 Promise.reject(r) @@ -31887,10 +31887,10 @@ , process = global.process , Promise = global.Promise , isNode = __webpack_require__(41)(process) == 'process'; - + module.exports = function(){ var head, last, notify; - + var flush = function(){ var parent, fn; if(isNode && (parent = process.domain))parent.exit(); @@ -31907,7 +31907,7 @@ } last = undefined; if(parent)parent.enter(); }; - + // Node.js if(isNode){ notify = function(){ @@ -31939,7 +31939,7 @@ macrotask.call(global, flush); }; } - + return function(fn){ var task = {fn: fn, next: undefined}; if(last)last.next = task; @@ -31966,7 +31966,7 @@ 'use strict'; var strong = __webpack_require__(219); - + // 23.1 Map Objects module.exports = __webpack_require__(220)('Map', function(get){ return function Map(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); }; @@ -32000,7 +32000,7 @@ , DESCRIPTORS = __webpack_require__(13) , fastKey = __webpack_require__(29).fastKey , SIZE = DESCRIPTORS ? '_s' : 'size'; - + var getEntry = function(that, key){ // fast case var index = fastKey(key), entry; @@ -32010,7 +32010,7 @@ if(entry.k == key)return entry; } }; - + module.exports = { getConstructor: function(wrapper, NAME, IS_MAP, ADDER){ var C = wrapper(function(that, iterable){ @@ -32123,7 +32123,7 @@ if(kind == 'values')return step(0, entry.v); return step(0, [entry.k, entry.v]); }, IS_MAP ? 'entries' : 'values' , !IS_MAP, true); - + // add [@@species], 23.1.2.2, 23.2.2.2 setSpecies(NAME); } @@ -32146,7 +32146,7 @@ , $iterDetect = __webpack_require__(172) , setToStringTag = __webpack_require__(31) , inheritIfRequired = __webpack_require__(95); - + module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){ var Base = global[NAME] , C = Base @@ -32189,7 +32189,7 @@ while(index--)$instance[ADDER](index, index); return !$instance.has(-0); }); - if(!ACCEPT_ITERABLES){ + if(!ACCEPT_ITERABLES){ C = wrapper(function(target, iterable){ anInstance(target, C, NAME); var that = inheritIfRequired(new Base, target, C); @@ -32208,14 +32208,14 @@ // weak collections should not contains .clear method if(IS_WEAK && proto.clear)delete proto.clear; } - + setToStringTag(C, NAME); - + O[NAME] = C; $export($export.G + $export.W + $export.F * (C != Base), O); - + if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP); - + return C; }; @@ -32225,7 +32225,7 @@ 'use strict'; var strong = __webpack_require__(219); - + // 23.2 Set Objects module.exports = __webpack_require__(220)('Set', function(get){ return function Set(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); }; @@ -32252,13 +32252,13 @@ , uncaughtFrozenStore = weak.ufstore , tmp = {} , InternalMap; - + var wrapper = function(get){ return function WeakMap(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); }; }; - + var methods = { // 23.3.3.3 WeakMap.prototype.get(key) get: function get(key){ @@ -32273,10 +32273,10 @@ return weak.def(this, key, value); } }; - + // 23.3 WeakMap Objects var $WeakMap = module.exports = __webpack_require__(220)('WeakMap', wrapper, methods, weak, true, true); - + // IE11 WeakMap frozen keys fix if(new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7){ InternalMap = weak.getConstructor(wrapper); @@ -32313,7 +32313,7 @@ , arrayFind = createArrayMethod(5) , arrayFindIndex = createArrayMethod(6) , id = 0; - + // fallback for uncaught frozen keys var uncaughtFrozenStore = function(that){ return that._l || (that._l = new UncaughtFrozenStore); @@ -32347,7 +32347,7 @@ return !!~index; } }; - + module.exports = { getConstructor: function(wrapper, NAME, IS_MAP, ADDER){ var C = wrapper(function(that, iterable){ @@ -32391,7 +32391,7 @@ 'use strict'; var weak = __webpack_require__(223); - + // 23.4 WeakSet Objects __webpack_require__(220)('WeakSet', function(get){ return function WeakSet(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); }; @@ -32422,16 +32422,16 @@ , $slice = $ArrayBuffer.prototype.slice , VIEW = $typed.VIEW , ARRAY_BUFFER = 'ArrayBuffer'; - + $export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), {ArrayBuffer: $ArrayBuffer}); - + $export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, { // 24.1.3.1 ArrayBuffer.isView(arg) isView: function isView(it){ return $isView && $isView(it) || isObject(it) && VIEW in it; } }); - + $export($export.P + $export.U + $export.F * __webpack_require__(14)(function(){ return !new $ArrayBuffer(2).slice(1, undefined).byteLength; }), ARRAY_BUFFER, { @@ -32450,7 +32450,7 @@ } return result; } }); - + __webpack_require__(199)(ARRAY_BUFFER); /***/ }), @@ -32465,18 +32465,18 @@ , ABV = !!(global.ArrayBuffer && global.DataView) , CONSTR = ABV , i = 0, l = 9, Typed; - + var TypedArrayConstructors = ( 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array' ).split(','); - + while(i < l){ if(Typed = global[TypedArrayConstructors[i++]]){ hide(Typed.prototype, TYPED, true); hide(Typed.prototype, VIEW, true); } else CONSTR = false; } - + module.exports = { ABV: ABV, CONSTR: CONSTR, @@ -32525,7 +32525,7 @@ , $BUFFER = DESCRIPTORS ? '_b' : BUFFER , $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH , $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET; - + // IEEE754 conversions based on https://github.com/feross/ieee754 var packIEEE754 = function(value, mLen, nBytes){ var buffer = Array(nBytes) @@ -32597,7 +32597,7 @@ e = e - eBias; } return (s ? -1 : 1) * m * pow(2, e - mLen); }; - + var unpackI32 = function(bytes){ return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0]; }; @@ -32616,11 +32616,11 @@ var packF32 = function(it){ return packIEEE754(it, 23, 4); }; - + var addGetter = function(C, key, internal){ dP(C[PROTOTYPE], key, {get: function(){ return this[internal]; }}); }; - + var get = function(view, bytes, index, isLittleEndian){ var numIndex = +index , intIndex = toInteger(numIndex); @@ -32639,7 +32639,7 @@ , pack = conversion(+value); for(var i = 0; i < bytes; i++)store[start + i] = pack[isLittleEndian ? i : bytes - i - 1]; }; - + var validateArrayBufferArguments = function(that, length){ anInstance(that, $ArrayBuffer, ARRAY_BUFFER); var numberLength = +length @@ -32647,14 +32647,14 @@ if(numberLength != byteLength)throw RangeError(WRONG_LENGTH); return byteLength; }; - + if(!$typed.ABV){ $ArrayBuffer = function ArrayBuffer(length){ var byteLength = validateArrayBufferArguments(this, length); this._b = arrayFill.call(Array(byteLength), 0); this[$LENGTH] = byteLength; }; - + $DataView = function DataView(buffer, byteOffset, byteLength){ anInstance(this, $DataView, DATA_VIEW); anInstance(buffer, $ArrayBuffer, DATA_VIEW); @@ -32667,14 +32667,14 @@ this[$OFFSET] = offset; this[$LENGTH] = byteLength; }; - + if(DESCRIPTORS){ addGetter($ArrayBuffer, BYTE_LENGTH, '_l'); addGetter($DataView, BUFFER, '_b'); addGetter($DataView, BYTE_LENGTH, '_l'); addGetter($DataView, BYTE_OFFSET, '_o'); } - + redefineAll($DataView[PROTOTYPE], { getInt8: function getInt8(byteOffset){ return get(this, 1, byteOffset)[0] << 24 >> 24; @@ -32864,19 +32864,19 @@ , TYPED_ARRAY = $typed.TYPED , VIEW = $typed.VIEW , WRONG_LENGTH = 'Wrong length!'; - + var $map = createArrayMethod(1, function(O, length){ return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length); }); - + var LITTLE_ENDIAN = fails(function(){ return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1; }); - + var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function(){ new Uint8Array(1).set({}); }); - + var strictToLength = function(it, SAME){ if(it === undefined)throw TypeError(WRONG_LENGTH); var number = +it @@ -32884,28 +32884,28 @@ if(SAME && !same(number, length))throw RangeError(WRONG_LENGTH); return length; }; - + var toOffset = function(it, BYTES){ var offset = toInteger(it); if(offset < 0 || offset % BYTES)throw RangeError('Wrong offset!'); return offset; }; - + var validate = function(it){ if(isObject(it) && TYPED_ARRAY in it)return it; throw TypeError(it + ' is not a typed array!'); }; - + var allocate = function(C, length){ if(!(isObject(C) && TYPED_CONSTRUCTOR in C)){ throw TypeError('It is not a typed array constructor!'); } return new C(length); }; - + var speciesFromList = function(O, list){ return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list); }; - + var fromList = function(C, list){ var index = 0 , length = list.length @@ -32913,11 +32913,11 @@ while(length > index)result[index] = list[index++]; return result; }; - + var addGetter = function(it, key, internal){ dP(it, key, {get: function(){ return this._d[internal]; }}); }; - + var $from = function from(source /*, mapfn, thisArg */){ var O = toObject(source) , aLen = arguments.length @@ -32936,7 +32936,7 @@ } return result; }; - + var $of = function of(/*...items*/){ var index = 0 , length = arguments.length @@ -32944,14 +32944,14 @@ while(length > index)result[index] = arguments[index++]; return result; }; - + // iOS Safari 6.x fails here var TO_LOCALE_BUG = !!Uint8Array && fails(function(){ arrayToLocaleString.call(new Uint8Array(1)); }); - + var $toLocaleString = function toLocaleString(){ return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments); }; - + var proto = { copyWithin: function copyWithin(target, start /*, end */){ return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined); @@ -33025,11 +33025,11 @@ ); } }; - + var $slice = function slice(start, end){ return speciesFromList(this, arraySlice.call(validate(this), start, end)); }; - + var $set = function set(arrayLike /*, offset */){ validate(this); var offset = toOffset(arguments[1], 1) @@ -33040,7 +33040,7 @@ if(len + offset > length)throw RangeError(WRONG_LENGTH); while(index < len)this[offset + index] = src[index++]; }; - + var $iterators = { entries: function entries(){ return arrayEntries.call(validate(this)); @@ -33052,7 +33052,7 @@ return arrayValues.call(validate(this)); } }; - + var isTAIndex = function(target, key){ return isObject(target) && target[TYPED_ARRAY] @@ -33080,23 +33080,23 @@ return target; } else return dP(target, key, desc); }; - + if(!ALL_CONSTRUCTORS){ $GOPD.f = $getDesc; $DP.f = $setDesc; } - + $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', { getOwnPropertyDescriptor: $getDesc, defineProperty: $setDesc }); - + if(fails(function(){ arrayToString.call({}); })){ arrayToString = arrayToLocaleString = function toString(){ return arrayJoin.call(this); } } - + var $TypedArrayPrototype$ = redefineAll({}, proto); redefineAll($TypedArrayPrototype$, $iterators); hide($TypedArrayPrototype$, ITERATOR, $iterators.values); @@ -33114,7 +33114,7 @@ dP($TypedArrayPrototype$, TAG, { get: function(){ return this[TYPED_ARRAY]; } }); - + module.exports = function(KEY, BYTES, wrapper, CLAMPED){ CLAMPED = !!CLAMPED; var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array' @@ -33221,45 +33221,45 @@ hide(TypedArrayPrototype, TYPED_ARRAY, NAME); hide(TypedArrayPrototype, VIEW, true); hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray); - + if(CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)){ dP(TypedArrayPrototype, TAG, { get: function(){ return NAME; } }); } - + O[NAME] = TypedArray; - + $export($export.G + $export.W + $export.F * (TypedArray != Base), O); - + $export($export.S, NAME, { BYTES_PER_ELEMENT: BYTES, from: $from, of: $of }); - + if(!(BYTES_PER_ELEMENT in TypedArrayPrototype))hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES); - + $export($export.P, NAME, proto); - + setSpecies(NAME); - + $export($export.P + $export.F * FORCED_SET, NAME, {set: $set}); - + $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators); - + $export($export.P + $export.F * (TypedArrayPrototype.toString != arrayToString), NAME, {toString: arrayToString}); - + $export($export.P + $export.F * fails(function(){ new TypedArray(1).slice(); }), NAME, {slice: $slice}); - + $export($export.P + $export.F * (fails(function(){ return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString() }) || !fails(function(){ TypedArrayPrototype.toLocaleString.call([1, 2]); })), NAME, {toLocaleString: $toLocaleString}); - + Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator; if(!LIBRARY && !CORRECT_ITER_NAME)hide(TypedArrayPrototype, ITERATOR, $iterator); }; @@ -33379,7 +33379,7 @@ , fails = __webpack_require__(14) , bind = __webpack_require__(84) , rConstruct = (__webpack_require__(11).Reflect || {}).construct; - + // MS Edge supports only 2 arguments and argumentsList argument is optional // FF Nightly sets third argument as `new.target`, but does not create `this` from it var NEW_TARGET_BUG = fails(function(){ @@ -33389,7 +33389,7 @@ var ARGS_BUG = !fails(function(){ rConstruct(function(){}); }); - + $export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', { construct: function construct(Target, args /*, newTarget*/){ aFunction(Target); @@ -33427,7 +33427,7 @@ , $export = __webpack_require__(15) , anObject = __webpack_require__(19) , toPrimitive = __webpack_require__(23); - + // MS Edge has broken Reflect.defineProperty - throwing instead of returning false $export($export.S + $export.F * __webpack_require__(14)(function(){ Reflect.defineProperty(dP.f({}, 1, {value: 1}), 1, {value: 2}); @@ -33453,7 +33453,7 @@ var $export = __webpack_require__(15) , gOPD = __webpack_require__(58).f , anObject = __webpack_require__(19); - + $export($export.S, 'Reflect', { deleteProperty: function deleteProperty(target, propertyKey){ var desc = gOPD(anObject(target), propertyKey); @@ -33485,7 +33485,7 @@ } while(!((key = keys[that._i++]) in that._t)); return {value: key, done: false}; }); - + $export($export.S, 'Reflect', { enumerate: function enumerate(target){ return new Enumerate(target); @@ -33503,7 +33503,7 @@ , $export = __webpack_require__(15) , isObject = __webpack_require__(20) , anObject = __webpack_require__(19); - + function get(target, propertyKey/*, receiver*/){ var receiver = arguments.length < 3 ? target : arguments[2] , desc, proto; @@ -33515,7 +33515,7 @@ : undefined; if(isObject(proto = getPrototypeOf(target)))return get(proto, propertyKey, receiver); } - + $export($export.S, 'Reflect', {get: get}); /***/ }), @@ -33526,7 +33526,7 @@ var gOPD = __webpack_require__(58) , $export = __webpack_require__(15) , anObject = __webpack_require__(19); - + $export($export.S, 'Reflect', { getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey){ return gOPD.f(anObject(target), propertyKey); @@ -33541,7 +33541,7 @@ var $export = __webpack_require__(15) , getProto = __webpack_require__(66) , anObject = __webpack_require__(19); - + $export($export.S, 'Reflect', { getPrototypeOf: function getPrototypeOf(target){ return getProto(anObject(target)); @@ -33554,7 +33554,7 @@ // 26.1.9 Reflect.has(target, propertyKey) var $export = __webpack_require__(15); - + $export($export.S, 'Reflect', { has: function has(target, propertyKey){ return propertyKey in target; @@ -33569,7 +33569,7 @@ var $export = __webpack_require__(15) , anObject = __webpack_require__(19) , $isExtensible = Object.isExtensible; - + $export($export.S, 'Reflect', { isExtensible: function isExtensible(target){ anObject(target); @@ -33583,7 +33583,7 @@ // 26.1.11 Reflect.ownKeys(target) var $export = __webpack_require__(15); - + $export($export.S, 'Reflect', {ownKeys: __webpack_require__(250)}); /***/ }), @@ -33609,7 +33609,7 @@ var $export = __webpack_require__(15) , anObject = __webpack_require__(19) , $preventExtensions = Object.preventExtensions; - + $export($export.S, 'Reflect', { preventExtensions: function preventExtensions(target){ anObject(target); @@ -33635,7 +33635,7 @@ , createDesc = __webpack_require__(24) , anObject = __webpack_require__(19) , isObject = __webpack_require__(20); - + function set(target, propertyKey, V/*, receiver*/){ var receiver = arguments.length < 4 ? target : arguments[3] , ownDesc = gOPD.f(anObject(target), propertyKey) @@ -33655,7 +33655,7 @@ } return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true); } - + $export($export.S, 'Reflect', {set: set}); /***/ }), @@ -33665,7 +33665,7 @@ // 26.1.14 Reflect.setPrototypeOf(target, proto) var $export = __webpack_require__(15) , setProto = __webpack_require__(80); - + if(setProto)$export($export.S, 'Reflect', { setPrototypeOf: function setPrototypeOf(target, proto){ setProto.check(target, proto); @@ -33686,13 +33686,13 @@ // https://github.com/tc39/Array.prototype.includes var $export = __webpack_require__(15) , $includes = __webpack_require__(43)(true); - + $export($export.P, 'Array', { includes: function includes(el /*, fromIndex = 0 */){ return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); } }); - + __webpack_require__(193)('includes'); /***/ }), @@ -33703,7 +33703,7 @@ // https://github.com/mathiasbynens/String.prototype.at var $export = __webpack_require__(15) , $at = __webpack_require__(134)(true); - + $export($export.P, 'String', { at: function at(pos){ return $at(this, pos); @@ -33718,7 +33718,7 @@ // https://github.com/tc39/proposal-string-pad-start-end var $export = __webpack_require__(15) , $pad = __webpack_require__(257); - + $export($export.P, 'String', { padStart: function padStart(maxLength /*, fillString = ' ' */){ return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true); @@ -33733,7 +33733,7 @@ var toLength = __webpack_require__(44) , repeat = __webpack_require__(98) , defined = __webpack_require__(42); - + module.exports = function(that, maxLength, fillString, left){ var S = String(defined(that)) , stringLength = S.length @@ -33755,7 +33755,7 @@ // https://github.com/tc39/proposal-string-pad-start-end var $export = __webpack_require__(15) , $pad = __webpack_require__(257); - + $export($export.P, 'String', { padEnd: function padEnd(maxLength /*, fillString = ' ' */){ return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false); @@ -33798,17 +33798,17 @@ , isRegExp = __webpack_require__(141) , getFlags = __webpack_require__(203) , RegExpProto = RegExp.prototype; - + var $RegExpStringIterator = function(regexp, string){ this._r = regexp; this._s = string; }; - + __webpack_require__(137)($RegExpStringIterator, 'RegExp String', function next(){ var match = this._r.exec(this._s); return {value: match, done: match === null}; }); - + $export($export.P, 'String', { matchAll: function matchAll(regexp){ defined(this); @@ -33843,7 +33843,7 @@ , toIObject = __webpack_require__(39) , gOPD = __webpack_require__(58) , createProperty = __webpack_require__(170); - + $export($export.S, 'Object', { getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object){ var O = toIObject(object) @@ -33864,7 +33864,7 @@ // https://github.com/tc39/proposal-object-values-entries var $export = __webpack_require__(15) , $values = __webpack_require__(266)(false); - + $export($export.S, 'Object', { values: function values(it){ return $values(it); @@ -33899,7 +33899,7 @@ // https://github.com/tc39/proposal-object-values-entries var $export = __webpack_require__(15) , $entries = __webpack_require__(266)(true); - + $export($export.S, 'Object', { entries: function entries(it){ return $entries(it); @@ -33915,7 +33915,7 @@ , toObject = __webpack_require__(65) , aFunction = __webpack_require__(28) , $defineProperty = __webpack_require__(18); - + // B.2.2.2 Object.prototype.__defineGetter__(P, getter) __webpack_require__(13) && $export($export.P + __webpack_require__(269), 'Object', { __defineGetter__: function __defineGetter__(P, getter){ @@ -33944,7 +33944,7 @@ , toObject = __webpack_require__(65) , aFunction = __webpack_require__(28) , $defineProperty = __webpack_require__(18); - + // B.2.2.3 Object.prototype.__defineSetter__(P, setter) __webpack_require__(13) && $export($export.P + __webpack_require__(269), 'Object', { __defineSetter__: function __defineSetter__(P, setter){ @@ -33962,7 +33962,7 @@ , toPrimitive = __webpack_require__(23) , getPrototypeOf = __webpack_require__(66) , getOwnPropertyDescriptor = __webpack_require__(58).f; - + // B.2.2.4 Object.prototype.__lookupGetter__(P) __webpack_require__(13) && $export($export.P + __webpack_require__(269), 'Object', { __lookupGetter__: function __lookupGetter__(P){ @@ -33985,7 +33985,7 @@ , toPrimitive = __webpack_require__(23) , getPrototypeOf = __webpack_require__(66) , getOwnPropertyDescriptor = __webpack_require__(58).f; - + // B.2.2.5 Object.prototype.__lookupSetter__(P) __webpack_require__(13) && $export($export.P + __webpack_require__(269), 'Object', { __lookupSetter__: function __lookupSetter__(P){ @@ -34004,7 +34004,7 @@ // https://github.com/DavidBruant/Map-Set.prototype.toJSON var $export = __webpack_require__(15); - + $export($export.P + $export.R, 'Map', {toJSON: __webpack_require__(274)('Map')}); /***/ }), @@ -34026,7 +34026,7 @@ /***/ (function(module, exports, __webpack_require__) { var forOf = __webpack_require__(213); - + module.exports = function(iter, ITERATOR){ var result = []; forOf(iter, false, result.push, result, ITERATOR); @@ -34040,7 +34040,7 @@ // https://github.com/DavidBruant/Map-Set.prototype.toJSON var $export = __webpack_require__(15); - + $export($export.P + $export.R, 'Set', {toJSON: __webpack_require__(274)('Set')}); /***/ }), @@ -34049,7 +34049,7 @@ // https://github.com/ljharb/proposal-global var $export = __webpack_require__(15); - + $export($export.S, 'System', {global: __webpack_require__(11)}); /***/ }), @@ -34059,7 +34059,7 @@ // https://github.com/ljharb/proposal-is-error var $export = __webpack_require__(15) , cof = __webpack_require__(41); - + $export($export.S, 'Error', { isError: function isError(it){ return cof(it) === 'Error'; @@ -34072,7 +34072,7 @@ // https://gist.github.com/BrendanEich/4294d5c212a6d2254703 var $export = __webpack_require__(15); - + $export($export.S, 'Math', { iaddh: function iaddh(x0, x1, y0, y1){ var $x0 = x0 >>> 0 @@ -34088,7 +34088,7 @@ // https://gist.github.com/BrendanEich/4294d5c212a6d2254703 var $export = __webpack_require__(15); - + $export($export.S, 'Math', { isubh: function isubh(x0, x1, y0, y1){ var $x0 = x0 >>> 0 @@ -34104,7 +34104,7 @@ // https://gist.github.com/BrendanEich/4294d5c212a6d2254703 var $export = __webpack_require__(15); - + $export($export.S, 'Math', { imulh: function imulh(u, v){ var UINT16 = 0xffff @@ -34125,7 +34125,7 @@ // https://gist.github.com/BrendanEich/4294d5c212a6d2254703 var $export = __webpack_require__(15); - + $export($export.S, 'Math', { umulh: function umulh(u, v){ var UINT16 = 0xffff @@ -34148,7 +34148,7 @@ , anObject = __webpack_require__(19) , toMetaKey = metadata.key , ordinaryDefineOwnMetadata = metadata.set; - + metadata.exp({defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey){ ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey)); }}); @@ -34161,7 +34161,7 @@ , $export = __webpack_require__(15) , shared = __webpack_require__(30)('metadata') , store = shared.store || (shared.store = new (__webpack_require__(222))); - + var getOrCreateMetadataMap = function(target, targetKey, create){ var targetMetadata = store.get(target); if(!targetMetadata){ @@ -34197,7 +34197,7 @@ var exp = function(O){ $export($export.S, 'Reflect', O); }; - + module.exports = { store: store, map: getOrCreateMetadataMap, @@ -34218,7 +34218,7 @@ , toMetaKey = metadata.key , getOrCreateMetadataMap = metadata.map , store = metadata.store; - + metadata.exp({deleteMetadata: function deleteMetadata(metadataKey, target /*, targetKey */){ var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]) , metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false); @@ -34239,14 +34239,14 @@ , ordinaryHasOwnMetadata = metadata.has , ordinaryGetOwnMetadata = metadata.get , toMetaKey = metadata.key; - + var ordinaryGetMetadata = function(MetadataKey, O, P){ var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P); if(hasOwn)return ordinaryGetOwnMetadata(MetadataKey, O, P); var parent = getPrototypeOf(O); return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined; }; - + metadata.exp({getMetadata: function getMetadata(metadataKey, target /*, targetKey */){ return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2])); }}); @@ -34262,7 +34262,7 @@ , getPrototypeOf = __webpack_require__(66) , ordinaryOwnMetadataKeys = metadata.keys , toMetaKey = metadata.key; - + var ordinaryMetadataKeys = function(O, P){ var oKeys = ordinaryOwnMetadataKeys(O, P) , parent = getPrototypeOf(O); @@ -34270,7 +34270,7 @@ var pKeys = ordinaryMetadataKeys(parent, P); return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys; }; - + metadata.exp({getMetadataKeys: function getMetadataKeys(target /*, targetKey */){ return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1])); }}); @@ -34283,7 +34283,7 @@ , anObject = __webpack_require__(19) , ordinaryGetOwnMetadata = metadata.get , toMetaKey = metadata.key; - + metadata.exp({getOwnMetadata: function getOwnMetadata(metadataKey, target /*, targetKey */){ return ordinaryGetOwnMetadata(metadataKey, anObject(target) , arguments.length < 3 ? undefined : toMetaKey(arguments[2])); @@ -34297,7 +34297,7 @@ , anObject = __webpack_require__(19) , ordinaryOwnMetadataKeys = metadata.keys , toMetaKey = metadata.key; - + metadata.exp({getOwnMetadataKeys: function getOwnMetadataKeys(target /*, targetKey */){ return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1])); }}); @@ -34311,14 +34311,14 @@ , getPrototypeOf = __webpack_require__(66) , ordinaryHasOwnMetadata = metadata.has , toMetaKey = metadata.key; - + var ordinaryHasMetadata = function(MetadataKey, O, P){ var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P); if(hasOwn)return true; var parent = getPrototypeOf(O); return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false; }; - + metadata.exp({hasMetadata: function hasMetadata(metadataKey, target /*, targetKey */){ return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2])); }}); @@ -34331,7 +34331,7 @@ , anObject = __webpack_require__(19) , ordinaryHasOwnMetadata = metadata.has , toMetaKey = metadata.key; - + metadata.exp({hasOwnMetadata: function hasOwnMetadata(metadataKey, target /*, targetKey */){ return ordinaryHasOwnMetadata(metadataKey, anObject(target) , arguments.length < 3 ? undefined : toMetaKey(arguments[2])); @@ -34346,7 +34346,7 @@ , aFunction = __webpack_require__(28) , toMetaKey = metadata.key , ordinaryDefineOwnMetadata = metadata.set; - + metadata.exp({metadata: function metadata(metadataKey, metadataValue){ return function decorator(target, targetKey){ ordinaryDefineOwnMetadata( @@ -34366,7 +34366,7 @@ , microtask = __webpack_require__(216)() , process = __webpack_require__(11).process , isNode = __webpack_require__(41)(process) == 'process'; - + $export($export.G, { asap: function asap(fn){ var domain = isNode && process.domain; @@ -34392,11 +34392,11 @@ , hide = __webpack_require__(17) , forOf = __webpack_require__(213) , RETURN = forOf.RETURN; - + var getMethod = function(fn){ return fn == null ? undefined : aFunction(fn); }; - + var cleanupSubscription = function(subscription){ var cleanup = subscription._c; if(cleanup){ @@ -34404,18 +34404,18 @@ cleanup(); } }; - + var subscriptionClosed = function(subscription){ return subscription._o === undefined; }; - + var closeSubscription = function(subscription){ if(!subscriptionClosed(subscription)){ subscription._o = undefined; cleanupSubscription(subscription); } }; - + var Subscription = function(observer, subscriber){ anObject(observer); this._c = undefined; @@ -34434,15 +34434,15 @@ return; } if(subscriptionClosed(this))cleanupSubscription(this); }; - + Subscription.prototype = redefineAll({}, { unsubscribe: function unsubscribe(){ closeSubscription(this); } }); - + var SubscriptionObserver = function(subscription){ this._s = subscription; }; - + SubscriptionObserver.prototype = redefineAll({}, { next: function next(value){ var subscription = this._s; @@ -34497,11 +34497,11 @@ } } }); - + var $Observable = function Observable(subscriber){ anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber); }; - + redefineAll($Observable.prototype, { subscribe: function subscribe(observer){ return new Subscription(observer, this._f); @@ -34525,7 +34525,7 @@ }); } }); - + redefineAll($Observable, { from: function from(x){ var C = typeof this === 'function' ? this : $Observable; @@ -34571,11 +34571,11 @@ }); } }); - + hide($Observable.prototype, OBSERVABLE, function(){ return this; }); - + $export($export.G, {Observable: $Observable}); - + __webpack_require__(199)('Observable'); /***/ }), @@ -34661,7 +34661,7 @@ , ITERATOR = wks('iterator') , TO_STRING_TAG = wks('toStringTag') , ArrayValues = Iterators.Array; - + for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){ var NAME = collections[i] , Collection = global[NAME] @@ -34688,10 +34688,10 @@ * additional grant of patent rights can be found in the PATENTS file in * the same directory. */ - + !(function(global) { "use strict"; - + var Op = Object.prototype; var hasOwn = Op.hasOwnProperty; var undefined; // More compressible than void 0. @@ -34699,7 +34699,7 @@ var iteratorSymbol = $Symbol.iterator || "@@iterator"; var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; - + var inModule = typeof module === "object"; var runtime = global.regeneratorRuntime; if (runtime) { @@ -34712,25 +34712,25 @@ // already defined globally. return; } - + // Define the runtime globally (as expected by generated code) as either // module.exports (if we're in a module) or a new, empty object. runtime = global.regeneratorRuntime = inModule ? module.exports : {}; - + function wrap(innerFn, outerFn, self, tryLocsList) { // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; var generator = Object.create(protoGenerator.prototype); var context = new Context(tryLocsList || []); - + // The ._invoke method unifies the implementations of the .next, // .throw, and .return methods. generator._invoke = makeInvokeMethod(innerFn, self, context); - + return generator; } runtime.wrap = wrap; - + // Try/catch helper to minimize deoptimizations. Returns a completion // record like context.tryEntries[i].completion. This interface could // have been (and was previously) designed to take a closure to be @@ -34748,16 +34748,16 @@ return { type: "throw", arg: err }; } } - + var GenStateSuspendedStart = "suspendedStart"; var GenStateSuspendedYield = "suspendedYield"; var GenStateExecuting = "executing"; var GenStateCompleted = "completed"; - + // Returning this object from the innerFn has the same effect as // breaking out of the dispatch switch statement. var ContinueSentinel = {}; - + // Dummy constructor functions that we use as the .constructor and // .constructor.prototype properties for functions that return Generator // objects. For full spec compliance, you may wish to configure your @@ -34765,14 +34765,14 @@ function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} - + // This is a polyfill for %IteratorPrototype% for environments that // don't natively support it. var IteratorPrototype = {}; IteratorPrototype[iteratorSymbol] = function () { return this; }; - + var getProto = Object.getPrototypeOf; var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); if (NativeIteratorPrototype && @@ -34782,14 +34782,14 @@ // of the polyfill. IteratorPrototype = NativeIteratorPrototype; } - + var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; GeneratorFunctionPrototype.constructor = GeneratorFunction; GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = "GeneratorFunction"; - + // Helper for defining the .next, .throw, and .return methods of the // Iterator interface in terms of a single ._invoke method. function defineIteratorMethods(prototype) { @@ -34799,7 +34799,7 @@ }; }); } - + runtime.isGeneratorFunction = function(genFun) { var ctor = typeof genFun === "function" && genFun.constructor; return ctor @@ -34809,7 +34809,7 @@ (ctor.displayName || ctor.name) === "GeneratorFunction" : false; }; - + runtime.mark = function(genFun) { if (Object.setPrototypeOf) { Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); @@ -34822,7 +34822,7 @@ genFun.prototype = Object.create(Gp); return genFun; }; - + // Within the body of any async function, `await x` is transformed to // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test // `hasOwn.call(value, "__await")` to determine if the yielded value is @@ -34830,7 +34830,7 @@ runtime.awrap = function(arg) { return { __await: arg }; }; - + function AsyncIterator(generator) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); @@ -34848,7 +34848,7 @@ invoke("throw", err, resolve, reject); }); } - + return Promise.resolve(value).then(function(unwrapped) { // When a yielded Promise is resolved, its final value becomes // the .value of the Promise<{value,done}> result for the @@ -34870,20 +34870,20 @@ }, reject); } } - + if (typeof global.process === "object" && global.process.domain) { invoke = global.process.domain.bind(invoke); } - + var previousPromise; - + function enqueue(method, arg) { function callInvokeWithMethodAndArg() { return new Promise(function(resolve, reject) { invoke(method, arg, resolve, reject); }); } - + return previousPromise = // If enqueue has been called before, then we want to wait until // all previous Promises have been resolved before calling invoke, @@ -34904,18 +34904,18 @@ callInvokeWithMethodAndArg ) : callInvokeWithMethodAndArg(); } - + // Define the unified helper method that is used to implement .next, // .throw, and .return (see defineIteratorMethods). this._invoke = enqueue; } - + defineIteratorMethods(AsyncIterator.prototype); AsyncIterator.prototype[asyncIteratorSymbol] = function () { return this; }; runtime.AsyncIterator = AsyncIterator; - + // Note that simple async functions are implemented on top of // AsyncIterator objects; they just return a Promise for the value of // the final result produced by the iterator. @@ -34923,35 +34923,35 @@ var iter = new AsyncIterator( wrap(innerFn, outerFn, self, tryLocsList) ); - + return runtime.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator. : iter.next().then(function(result) { return result.done ? result.value : iter.next(); }); }; - + function makeInvokeMethod(innerFn, self, context) { var state = GenStateSuspendedStart; - + return function invoke(method, arg) { if (state === GenStateExecuting) { throw new Error("Generator is already running"); } - + if (state === GenStateCompleted) { if (method === "throw") { throw arg; } - + // Be forgiving, per 25.3.3.3.3 of the spec: // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume return doneResult(); } - + context.method = method; context.arg = arg; - + while (true) { var delegate = context.delegate; if (delegate) { @@ -34961,26 +34961,26 @@ return delegateResult; } } - + if (context.method === "next") { // Setting context._sent for legacy support of Babel's // function.sent implementation. context.sent = context._sent = context.arg; - + } else if (context.method === "throw") { if (state === GenStateSuspendedStart) { state = GenStateCompleted; throw context.arg; } - + context.dispatchException(context.arg); - + } else if (context.method === "return") { context.abrupt("return", context.arg); } - + state = GenStateExecuting; - + var record = tryCatch(innerFn, self, context); if (record.type === "normal") { // If an exception is thrown from innerFn, we leave state === @@ -34988,16 +34988,16 @@ state = context.done ? GenStateCompleted : GenStateSuspendedYield; - + if (record.arg === ContinueSentinel) { continue; } - + return { value: record.arg, done: context.done }; - + } else if (record.type === "throw") { state = GenStateCompleted; // Dispatch the exception by looping back around to the @@ -35008,7 +35008,7 @@ } }; } - + // Call delegate.iterator[context.method](context.arg) and handle the // result, either by returning a { value, done } result from the // delegate iterator, or by modifying context.method and context.arg, @@ -35019,7 +35019,7 @@ // A .throw or .return when the delegate iterator has no .throw // method always terminates the yield* loop. context.delegate = null; - + if (context.method === "throw") { if (delegate.iterator.return) { // If the delegate iterator has a return method, give it a @@ -35027,48 +35027,48 @@ context.method = "return"; context.arg = undefined; maybeInvokeDelegate(delegate, context); - + if (context.method === "throw") { // If maybeInvokeDelegate(context) changed context.method from // "return" to "throw", let that override the TypeError below. return ContinueSentinel; } } - + context.method = "throw"; context.arg = new TypeError( "The iterator does not provide a 'throw' method"); } - + return ContinueSentinel; } - + var record = tryCatch(method, delegate.iterator, context.arg); - + if (record.type === "throw") { context.method = "throw"; context.arg = record.arg; context.delegate = null; return ContinueSentinel; } - + var info = record.arg; - + if (! info) { context.method = "throw"; context.arg = new TypeError("iterator result is not an object"); context.delegate = null; return ContinueSentinel; } - + if (info.done) { // Assign the result of the finished delegate to the temporary // variable specified by delegate.resultName (see delegateYield). context[delegate.resultName] = info.value; - + // Resume execution at the desired location (see delegateYield). context.next = delegate.nextLoc; - + // If context.method was "throw" but the delegate handled the // exception, let the outer generator proceed normally. If // context.method was "next", forget context.arg since it has been @@ -35079,24 +35079,24 @@ context.method = "next"; context.arg = undefined; } - + } else { // Re-yield the result returned by the delegate method. return info; } - + // The delegate iterator is finished, so forget it and continue with // the outer generator. context.delegate = null; return ContinueSentinel; } - + // Define Generator.prototype.{next,throw,return} in terms of the // unified ._invoke helper method. defineIteratorMethods(Gp); - + Gp[toStringTagSymbol] = "Generator"; - + // A Generator should always return itself as the iterator object when the // @@iterator function is called on it. Some browsers' implementations of the // iterator prototype chain incorrectly implement this, causing the Generator @@ -35105,33 +35105,33 @@ Gp[iteratorSymbol] = function() { return this; }; - + Gp.toString = function() { return "[object Generator]"; }; - + function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; - + if (1 in locs) { entry.catchLoc = locs[1]; } - + if (2 in locs) { entry.finallyLoc = locs[2]; entry.afterLoc = locs[3]; } - + this.tryEntries.push(entry); } - + function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal"; delete record.arg; entry.completion = record; } - + function Context(tryLocsList) { // The root entry object (effectively a try statement without a catch // or a finally block) gives us a place to store values thrown from @@ -35140,14 +35140,14 @@ tryLocsList.forEach(pushTryEntry, this); this.reset(true); } - + runtime.keys = function(object) { var keys = []; for (var key in object) { keys.push(key); } keys.reverse(); - + // Rather than returning an object with a next method, we keep // things simple and return the next function itself. return function next() { @@ -35159,7 +35159,7 @@ return next; } } - + // To avoid creating an additional object, we just hang the .value // and .done properties off the next function object itself. This // also ensures that the minifier will not anonymize the function. @@ -35167,18 +35167,18 @@ return next; }; }; - + function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) { return iteratorMethod.call(iterable); } - + if (typeof iterable.next === "function") { return iterable; } - + if (!isNaN(iterable.length)) { var i = -1, next = function next() { while (++i < iterable.length) { @@ -35188,29 +35188,29 @@ return next; } } - + next.value = undefined; next.done = true; - + return next; }; - + return next.next = next; } } - + // Return an iterator with no values. return { next: doneResult }; } runtime.values = values; - + function doneResult() { return { value: undefined, done: true }; } - + Context.prototype = { constructor: Context, - + reset: function(skipTempReset) { this.prev = 0; this.next = 0; @@ -35219,12 +35219,12 @@ this.sent = this._sent = undefined; this.done = false; this.delegate = null; - + this.method = "next"; this.arg = undefined; - + this.tryEntries.forEach(resetTryEntry); - + if (!skipTempReset) { for (var name in this) { // Not sure about the optimal order of these conditions: @@ -35236,79 +35236,79 @@ } } }, - + stop: function() { this.done = true; - + var rootEntry = this.tryEntries[0]; var rootRecord = rootEntry.completion; if (rootRecord.type === "throw") { throw rootRecord.arg; } - + return this.rval; }, - + dispatchException: function(exception) { if (this.done) { throw exception; } - + var context = this; function handle(loc, caught) { record.type = "throw"; record.arg = exception; context.next = loc; - + if (caught) { // If the dispatched exception was caught by a catch block, // then let that catch block handle the exception normally. context.method = "next"; context.arg = undefined; } - + return !! caught; } - + for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; var record = entry.completion; - + if (entry.tryLoc === "root") { // Exception thrown outside of any try block that could handle // it, so set the completion value of the entire function to // throw the exception. return handle("end"); } - + if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"); var hasFinally = hasOwn.call(entry, "finallyLoc"); - + if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } else if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } - + } else if (hasCatch) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } - + } else if (hasFinally) { if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } - + } else { throw new Error("try statement without catch or finally"); } } } }, - + abrupt: function(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; @@ -35319,7 +35319,7 @@ break; } } - + if (finallyEntry && (type === "break" || type === "continue") && @@ -35329,25 +35329,25 @@ // location outside the try/catch block. finallyEntry = null; } - + var record = finallyEntry ? finallyEntry.completion : {}; record.type = type; record.arg = arg; - + if (finallyEntry) { this.method = "next"; this.next = finallyEntry.finallyLoc; return ContinueSentinel; } - + return this.complete(record); }, - + complete: function(record, afterLoc) { if (record.type === "throw") { throw record.arg; } - + if (record.type === "break" || record.type === "continue") { this.next = record.arg; @@ -35358,10 +35358,10 @@ } else if (record.type === "normal" && afterLoc) { this.next = afterLoc; } - + return ContinueSentinel; }, - + finish: function(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; @@ -35372,7 +35372,7 @@ } } }, - + "catch": function(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; @@ -35385,25 +35385,25 @@ return thrown; } } - + // The context.catch method must only be called with a location // argument that corresponds to a known catch block. throw new Error("illegal catch attempt"); }, - + delegateYield: function(iterable, resultName, nextLoc) { this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }; - + if (this.method === "next") { // Deliberately forget the last sent value so that we don't // accidentally pass it on to the delegate. this.arg = undefined; } - + return ContinueSentinel; } }; @@ -35415,7 +35415,7 @@ typeof window === "object" ? window : typeof self === "object" ? self : this ); - + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) /***/ }), @@ -35432,7 +35432,7 @@ // https://github.com/benjamingr/RexExp.escape var $export = __webpack_require__(15) , $re = __webpack_require__(303)(/[\\^$*+?.()|[\]{}]/g, '\\$&'); - + $export($export.S, 'RegExp', {escape: function escape(it){ return $re(it); }}); @@ -35454,7 +35454,7 @@ /***/ (function(module, exports, __webpack_require__) { // style-loader: Adds some css to the DOM by adding a -