Code Monkey home page Code Monkey logo

gretljobs's Introduction

gretljobs

Enthält sämtliche Konfigurationsdateien (build.gradle, *.sql) der GRETL-Jobs und eine GRETL-Job-Entwicklungsumgebung. Umfasst zudem das Job DSL Script gretl_job_generator.groovy für den gretl-job-generator Job in Jenkins, der in regelmässigen Abständen das gretljobs-Repository durchsucht und daraus entsprechende Jenkins-Pipelines generiert und ihnen das Jenkinsfile zuweist.

Funktionsweise in Jenkins

In Jenkins besteht zu Beginn nur ein Job gretl-job-generator; das Skript, das er ausführt, ist gretl_job_generator.groovy. Er checkt in regelmässigen Abständen das gretljobs-Repository aus und sucht in allen Ordnern (konfigurierbar) nach Skripten mit Name build.gradle (konfigurierbar).

Wenn er ein solches findet, legt er einen Job an und definiert das Skript in der Datei Jenkinsfile als Code, den der Job ausführen soll. Falls der gretl-job-generator im Ordner des gerade anzulegenden Jobs neben build.gradle auch eine eigene Datei mit Namen Jenkinsfile findet, definiert er als Code für den Job statt des zentralen Jenkinsfiles den Inhalt dieses jobspezifischen Jenkinsfiles (Übersteuerbarkeit). Zudem weist der gretl-job-generator optional dem Job folgende Eigenschaften zu:

  • Wer den Job starten darf
  • Wieviele Ausführungen eines Jobs aufbewahrt werden sollen
  • Ob bei Start des Jobs eine Datei hochgeladen werden muss
  • Ob der Job nach Ausführung eines anderen Jobs gestartet werden soll
  • Ob der Job in regelmässigen Zeitintervallen gestartet werden soll

Wenn ein GRETL-Job gestartet wird, ermittelt das zugewiesene Skript alle benötigten Parameter und Benutzernamen für den Zugriff auf DBs und andere externe Ressourcen und führt mit Gradle das Skript build.gradle, das im entsprechenden Job-Verzeichnis liegt, aus.

Job starten, der in einem Branch vorliegt

Wenn man einen bereits bestehenden Job bearbeiten möchte, erstellt man hierfür lokal einen separaten Branch und pusht diesen Branch auf GitHub, wenn die Änderungen umgesetzt sind. Im GRETL-Jenkins der Testumgebung und der Integrationsumgebung kann man direkt nach dem Start des Jobs den Namen dieses Branches angeben und so prüfen, ob die Änderungen wie gewünscht funktionieren. Allenfalls noch erforderliche Anpassungen kann man im gleichen Branch vornehmen und sie wieder pushen, usw.

Bei einem neuen Job, der also noch nicht im main-Branch, sondern erst in einem anderen Branch vorliegt, ist das Vorgehen ähnlich; man muss aber zuerst gemäss folgender Anleitung auch im main-Branch den entsprechenden Job-Ordner und eine leere Datei build.gradle anlegen, damit der Job bereits in GRETL-Jenkins aufgelistet wird:

  • Den Job wie gehabt lokal in einem Branch entwickeln und den Branch pushen
  • Lokal in den main-Branch wechseln und den aktuellen Stand pullen:
    git checkout main && git pull
    
  • Auch in diesem Branch einen Ordner mit demselben Namen wie der neue Job anlegen:
    mkdir my_new_job
    
  • In diesem Ordner eine leere Datei build.gradle anlegen:
    touch my_new_job/build.gradle
    
  • Die leere Datei stagen und committen:
    git add my_new_job/build.gradle && git commit -m "[my_new_job] Initialisierung Job-Verzeichnis"
    
  • Diesen "Job-Initialisierungs-Commit" pushen:
    git push origin main
    
  • In GRETL-Jenkins z.B. der Testumgebung den Job gretl-job-generator einmal laufenlassen

Nun wird der Job in GRETL-Jenkins der Testumgebung aufgelistet, und man kann wie gewohnt nach dem Start den Branch auswählen, in welchem man den neuen Job entwickelt hat.

Best Practice für das Erstellen von Jobs

  • Für jeden neuen Job oder für jede Änderung an einem Job muss ein neuer Entwicklungsbranch erstellt werden:
git checkout -b branchname
  • Änderungen müssen immer per Pull Request in den main-Branch eingepflegt werden

build.gradle

  • import-Statements zuoberst einfügen

  • Danach das apply plugin-Statement einfügen

  • Als DB-User bei AGI-Datenbanken gretl, bei den Entwicklungs-Datenbanken dmluser verwenden.

  • Als (temporäres) Verzeichnis beim Herunterladen von Dateien etc. System.getProperty("java.io.tmpdir") verwenden. Dies ist das temp-Verzeichnis des Betriebssystems. Heruntergeladene und temporäre Dateien bitte trotzdem mittels abschliessenden Task wieder löschen.

  • Immer mindestens einen DefaultTask setzen mit dem das Skript startet. Dadurch muss kein Task beim Aufruf von GRETL mitgegeben werden (Bsp defaultTasks 'transferAgiHoheitsgrenzen').

  • println einsetzen wo sinnvoll, also informativ.

  • description für Projekt und Tasks machen (Beispiel av_mopublic/build.gradle).

  • In den SELECT-Statements kein SELECT * verwenden, sondern die Spalten explizit aufführen.

  • Pfade nicht im Unix Style, sondern im mittels Java-Methoden Betriebssystem unabhängig angeben: Paths.get("var","www","maps") oder Paths.get("var/www/maps").

  • Pro Tabelle sollte eine SQL-Datei verwendet werden.

  • Bitte an den AGI SQL-Richtlinien orientieren.

  • t_id in aller Regel nicht von einem Schema in das andere übertragen (Typicherweise Edit-DB -> Pub-DB), damit diese sauber über die Sequenz im Zielschema vergeben wird.

  • Variablen mit def definieren und nicht mit ext{}

  • Für den Zugriff auf Datenbanken und andere Ressourcen folgende Variablen verwenden:

    • dbUriEdit, dbUserEdit, dbPwdEdit
    • dbUriPub, dbUserPub, dbPwdPub
    • dbUriOerebV2, dbUserOerebV2, dbPwdOerebV2
    • dbUriSimi, dbUserSimi, dbPwdSimi
    • dbUriIsboden, dbUserIsboden, dbPwdIsboden
    • dbUriSogis, dbUserSogis, dbPwdSogis
    • dbUriVerisoNplso, dbUserVerisoNplso, dbPwdVerisoNplso
    • dbUriAltlast4web, dbUserAltlast4web, PdbPwdAltlast4web
    • dbUriKaso, dbUserKaso, dbPwdKaso
    • dbUriCapitastra, dbUserCapitastra, dbPwdCapitastra
    • dbUriEws, dbUserEws, dbPwdEws
    • dbUriImdaspro, dbUserImdaspro, dbPwdImdaspro
    • digiplanUrl, digiplanUser, digiplanPwd
    • efjServicesUrl
    • ftpUserEmapis, ftpPwdEmapis
    • ftpServerFledermaus, ftpUserFledermaus, ftpPwdFledermaus
    • ftpServerInfogrips, ftpUserInfogrips, ftpPwdInfogrips
    • ftpServerWaldportal, ftpUserWaldportal, ftpPwdWaldportal
    • ftpServerZivilschutz, ftpUserZivilschutz, ftpPwdZivilschutz
    • sftpServerGelan, sftpUserGelan, sftpPwdGelan
    • sftpUrlSogis, sftpUserSogis, sftpPwdSogis
    • für Datentransfer Gemdat: host = sftpServerSogis, user = sftpUserSogisGemdat, identity = file('/home/gradle/.sshkeys/id_rsa')
    • aiServer, aiUser, aiPwd
    • infofloraUser, infofloraPwd
    • igelToken
    • afuAbbaustellenAppXtfUrl (die komplette URL zum XTF-Dokument, inkl. Token)
    • awsAccessKeyAda, awsSecretAccessKeyAda
    • awsAccessKeyAfu, awsSecretAccessKeyAfu
    • awsAccessKeyAgi, awsSecretAccessKeyAgi
    • geoservicesHostName (der Wert dieser Variable ist je nach Umgebung geo-t.so.ch, geo-i.so.ch oder geo.so.ch)
    • simiMetadataServiceUrl, simiMetadataServiceUser, simiMetadataServicePwd
    • simiTokenServiceUrl, simiTokenServiceUser, simiTokenServicePwd
    • solrIndexupdaterBaseUrl (die interne Basis-URL zum Indexupdater für Solr)
    • gretlEnvironment (der Wert dieser Variable ist je nach Umgebung test, integration oder production)

    Die Anleitung, wie man solche Ressourcen (z.B. DB-Verbindungen) in Jenkins definiert oder bestehende Ressourcen bearbeitet, ist unter https://github.com/sogis/gretl/tree/master/openshift#create-or-update-resources-to-be-used-by-gretl. Die Anleitung, wie man neue Credentials anlegt oder bestehende bearbeitet, ist unter https://github.com/sogis/gretl/tree/master/openshift#create-or-update-secrets-to-be-used-by-gretl.

  • Bei IliValidator-Tasks und Ili2gpkgImport-Tasks die folgende Option setzen, damit in den Betriebs-Umgebungen für den Download der benötigten Modelle die Anzahl abzufragender INTERLIS-Repositories reduziert wird:

    if (findProperty('ilivalidatorModeldir')) modeldir = ilivalidatorModeldir

    (Falls das Modell durch einen vorgängigen Schema-Import (--schemaimport) allerdings bereits in der GeoPackage-Datei enthalten sein sollte, muss die modeldir-Option nicht gesetzt werden, weil ili2gpkgImport dann das Modell im GeoPackage findet und also nicht online danach suchen muss.)

    Beispiele:

    if (findProperty('ilivalidatorModeldir')) modeldir = ilivalidatorModeldir
    ,
    if (findProperty('ilivalidatorModeldir')) modeldir = ilivalidatorModeldir

Files

Jeder GRETL-Job braucht im Minimum das File build.gradle. Bei Bedarf platziert man zudem ein File job.properties im Job-Ordner, um den Job in Jenkins zu konfigurieren. Ebenfalls optional kann eine Datei gradle.properties im Job-Ordner platziert werden, um Properties für den Gradle-Prozess zu setzen. Falls der Job in Jenkins mit einem anderen Jenkinsfile als dem Standard-Jenkinsfile gestartet werden soll, muss sein spezifisches Jenkinsfile ebenfalls im Job-Ordner abgelegt werden.

job.properties

Die Datei job.properties kann folgende Eigenschaften des GRETL-Jobs enthalten:

logRotator.numToKeep=30
triggers.cron=H H(1-3) * * *
parameters.stashedFile=myfilename.xyz
parameters.stringParams=parameterName;default value;parameter description
triggers.upstream=other_job_name
authorization.permissions=gretl-users-barpa

Mit logRotator.numToKeep kann eingestellt werden, wieviele Ausführungen des Jobs aufbewahrt werden sollen, d.h. für wieviele Ausführungen beispielsweise das Logfile vorgehalten wird. Standardwert ist 15. Wenn man diese Einstellung weglässt, werden also die 15 letzten Ausführungen aufbewahrt. Falls man alle Ausführungen aufbewahren möchte, kann man hier den Wert unlimited setzen.

Mit triggers.cron kann eingestellt werden, zu welchem Zeitpunkt der Job automatisch gestartet werden soll. Im Beispiel H H(1-3) * * * wird der Job jeden Tag irgendwann zwischen 01:00 Uhr und 03:59 Uhr ausgeführt. (Dokumentation der Schreibweise siehe https://github.com/jenkinsci/jenkins/blob/master/core/src/main/resources/hudson/triggers/TimerTrigger/help-spec.jelly). Wenn man diese Einstellung weglässt, wird der Job nie automatisch gestartet, und er muss manuell gestartet werden.

Mit parameters.stashedFile kann konfiguriert werden, dass ein Benutzer beim Starten des Jobs eine Datei hochladen muss. Man muss hier einen Dateinamen (z.B. data.xtf) angeben; unter diesem Dateinamen kann dann der GRETL-Job auf die Datei zugreifen.

Mit parameters.stringParams können Parameter definiert werden, für welche der Benutzer beim manuellen Start des Jobs Werte übergeben kann. Im Jenkinsfile kann Über den gesetzten Parameternamen (parameterName) auf den Wert des Parameters zugegriffen werden. Im obigen Beispiel wird ein String-Parameter mit Name parameterName definiert, dessen Standarwert default value ist und für den dem Benutzer neben dem Eingabefeld die Beschreibung parameter description angezeigt wird. Die drei Werte müssen mit Strichpunkt voneinander getrennt werden. Innerhalb der Werte dürfen deshalb keine Strichpunkte vorkommen (und auch nicht das Zeichen @). Für den Standardwert und die Beschreibung sind Leerschläge zugelassen. Es ist auch möglich, mehrere String-Parameter zu definieren. Sie müssen mit dem Zeichen @ voneinander getrennt werden. Für die bessere Lesbarkeit ist es ratsam, jeden String-Parameter auf einer eigenen Zeile zu definieren; hierzu wird ein Backslash am Ende der vorangehenden Zeile benötigt. Beispiel:

parameters.stringParams=bfsnr;0000;BFS-Nr. der Gemeinde welche publiziert werden soll.@\
                        buildDescription;Keine Beschreibung angegeben;Beschreibung/Grund für die Publikation der Daten

Mit triggers.upstream kann eingestellt werden, dass der Job immer dann ausgeführt werden soll, wenn ein bestimmter anderer Job erfolgreich ausgeführt worden ist. Es können hier auch mehrere Jobs angegeben werden, jeweils durch Komma und Leerschlag voneinander getrennt (z.B. other_job_name_1, other_job_name_2).

Mit authorization.permissions kann angegeben werden, welcher Benutzer oder welche Benutzergruppe den Job manuell starten darf. Mehrere Benutzer oder Gruppen können mit Komma getrennt aneinandergereiht werden. Folgende GRETL-spezifischen Benutzergruppen stehen im Moment zur Verfügung:

  • gretl-users-barpa (ARP)
  • gretl-users-bdafu (AfU)
  • gretl-users-bvtaa (AVT)
  • gretl-users-edden (ADA)
  • gretl-users-vkfaa (AWJF)
  • gretl-users-vlwaa (ALW)

Allerdings können auch diejenigen Benutzer oder Gruppen, welche durch globale Berechtigungseinstellungen in Jenkins dazu bereichtigt sind, den Job starten. Wenn man diese Einstellung weglässt, ist es von den globalen Berechtigungseinstellungen abhängig, wer den Job manuell starten darf.

Zudem kann mit der Eigenschaft nodeLabel bestimmt werden, auf welchem Node der Job ausgeführt werden soll. Möglich ist hier der Wert gretl-2.4, damit der Job auf einem Jenkins Agent mit GRETL Version 2.4 ausgeführt wird. Diese Property dient primär dazu, dass bei einem grösseren Versionssprung von GRETL nicht alle Jobs gleichzeitig umgestellt werden müssen. Lässt man diese Property weg, wird der Job auf dem normalen Jenkins Agent (mit dem Label gretl) ausgeführt.

gradle.properties

Die Datei gradle.properties kann z.B. dazu benutzt werden, dem Job mehr Heap Space (gewissermassen mehr RAM) zur Verfügung zu stellen. Um ihm z.B. bis zu 2GB zuzuweisen, muss gradle.properties die folgende Zeile enthalten:

org.gradle.jvmargs=-Xmx2048m

Weitere mögliche Optionen sind unter https://docs.gradle.org/current/userguide/build_environment.html dokumentiert.

Jenkinsfile

Das Jenkinsfile sorgt dafür, dass ein GRETL-Job aus Jenkins heraus gestartet werden kann. In der Regel braucht ein GRETL-Job kein eigenes Jenkinsfile, denn es kommt standardmässig das "zentrale" Jenkinsfile zum Einsatz.

In speziellen Fällen benötigen GRETL-Jobs ein eigenes Jenkinsfile; hierzu kopiert man das Jenkinsfile eines bereits bestehenden, ähnlichen Jobs in den GRETL-Job-Ordner. Es soll dabei nicht verändert oder möglichst nur minimal angepasst werden, damit alle Jenkinsfiles soweit möglich identisch sind.

Die speziellen Fälle und die jeweiligen Vorlagen sind in jenkinsfile_docs.md beschrieben.

GRETL Docker Image verwenden

Für die Entwicklung von GRETL-Jobs kann GRETL mit docker compose als Docker-Container gestartet werden.

Voraussetzungen

Hierfür müssen zunächst die Verbindungsparameter zu den DBs und andere benötigte Variablen konfiguriert werden. Diese platziert man in einer Datei gretljobs.properties in seinem Home-Verzeichnis. Der Inhalt der Datei sieht z.B. so aus:

dbUriEdit=jdbc:postgresql://edit-db/edit
dbUserEdit=dmluser
dbPwdEdit=dmluser
dbUserEditDdl=ddluser
dbPwdEditDdl=ddluser
dbUriPub=jdbc:postgresql://pub-db/pub
dbUserPub=dmluser
dbPwdPub=dmluser
dbUserPubDdl=ddluser
dbPwdPubDdl=ddluser

sftpUrlSogis=build
sftpUserSogis=
sftpPwdSogis=
simiMetadataServiceUrl=
simiMetadataServiceUser=
simiMetadataServicePwd=
simiTokenServiceUrl=
simiTokenServiceUser=
simiTokenServicePwd=

ilivalidatorModeldir=%ITF_DIR;https://geo.so.ch/models/;%JAR_DIR/ilimodels

Entwicklungs-DBs nutzen

Entwicklungs-DBs starten

docker compose up -d

bzw.

COMPOSE_FILE=../gretljobs/docker-compose.yml docker compose up -d

Mit diesem Befehl werden zwei DB-Container gestartet, von denen einer eine edit-DB, der andere eine pub-DB enthält.

Mit der ersten Variante des Befehls startet man die Entwicklungs-DBs, wenn man sich im gretljobs-Verzeichnis befindet. Mit der zweiten Variante startet man sie, wenn man sich im schema-jobs-Verzeichnis befindet.

Auch die weiter unten in diesem Kapitel angegebenen Befehle lassen sich auf diese Art jeweils auch aus dem schema-jobs-Verzeichnis heraus ausführen. Man muss in diesem Fall also dem Befehl die Umgebungsvariable COMPOSE_FILE voranstellen und so auf die Datei docker-compose.yml des Verzeichnis gretljobs verweisen.

Voraussetzung, damit dies funktioniert: Die Ordner gretljobs und schema-jobs müssen sich im gleichen übergeordneten Ordner befinden.

GRETL-Jobs, die eine DB für das Processing von Daten benötigen:
docker compose --profile processing up -d

So wird zusätzlich zur edit-DB und zur pub-DB auch eine processing-DB gestartet für GRETL-Jobs, die eine solche benötigen.

Wichtig: In diesem Fall müssen auch die nachfolgenden Compose-Befehle jeweils mit der Option --profice processing aufgerufen werden, damit sie auch die Processing-DB mit einschliessen.

Entwicklungs-DBs stoppen

docker compose stop

bzw.

COMPOSE_FILE=../gretljobs/docker-compose.yml docker compose stop

So werden die Entwicklungs-DB-Container gestoppt. Die Daten der DBs bleiben erhalten, da sie in Docker-Volumes gespeichert sind, die hierbei nicht gelöscht werden.

Entwicklungs-DBs stoppen und DB-Container löschen

docker compose down

bzw.

COMPOSE_FILE=../gretljobs/docker-compose.yml docker compose down

Die Entwicklungs-DB-Container werden gestoppt, die DB-Container gelöscht und zugleich auch das von Docker Compose angelegte Docker-Netzwerk gelöscht. Die Daten der DBs bleiben aber auch in diesem Fall erhalten, weil die Docker-Volumes nicht gelöscht werden.

Daten der Entwicklungs-DB-Container löschen

docker volume rm gretljobs_postgresql_data_edit gretljobs_postgresql_data_pub

Mit diesem Befehl werden die Volumes der Entwicklungs-DB-Container und damit die Daten in den Entwicklungs-DBs gelöscht. (Die DB-Container müssen vorgängig mit dem Befehl docker compose down ebenfalls gelöscht werden.)

Verbindungsparameter für die Entwicklungs-DBs

Die Entwicklungs-DBs sind z.B. aus DBeaver oder psql mit folgenden Verbindungsparametern erreichbar:

Edit-DB:

  • Hostname: localhost
  • Port: 54321
  • DB-Name: edit
  • Benutzer mit DDL-Rechten: ddluser (zum Anlegen von Schemen, Tabellen usw.)
  • Benutzer mit DML-Rechten: dmluser (für Lese- und Schreibzugriff)
  • Passwörter: lauten jeweils gleich wie der Benutzername

Publikations-DB:

  • Hostname: localhost
  • Port: 54322
  • DB-Name: pub
  • Benutzer mit DDL-Rechten: ddluser (zum Anlegen von Schemen, Tabellen usw.)
  • Benutzer mit DML-Rechten: dmluser (für Lese- und Schreibzugriff)
  • Passwörter: lauten jeweils gleich wie der Benutzername

Processing-DB:

  • Hostname: localhost
  • Port: 54323
  • DB-Name: processing
  • Benutzer mit Superuser-Rechten: processing
  • Passwort: lautet gleich wie der Benutzername

GRETL-Job ausführen

docker compose run --rm -u $UID gretl --project-dir=MY_JOB_NAME [OPTION...] [TASK...]

bzw.

COMPOSE_FILE=../gretljobs/docker-compose.yml docker compose run --rm -u $UID gretl --project-dir=MY_JOB_NAME [OPTION...] [TASK...]

Dieser Befehl startet den GRETL-Job MY_JOB_NAME.

Beispiele:

docker compose run --rm -u $UID gretl --project-dir=arp_nutzungsplanung_pub
docker compose run --rm -u $UID gretl --project-dir=arp_nutzungsplanung_pub -Pbfsnr=2408 importXTF_stage

Erläuterungen:

  • MY_JOB_NAME muss durch den Namen des auszuführenden GRETL-Jobs (den Ordnernamen) ersetzt werden.
  • Mit OPTION... (optional) können beliebige Gradle-Optionen übergeben werden, z.B.: --console=rich, -Pmyprop=myvalue, -Dmyprop=myvalue. Dokumentation der Gradle-Optionen: https://docs.gradle.org/current/userguide/command_line_interface.html
  • Mit TASK... (optional) kann ein oder mehrere Tasks angegeben werden, die von GRETL ausgeführt werden sollen; falls man nichts angibt, werden die in build.gradle definierten defaultTasks ausgeführt.
  • Falls man einen GRETL-Job mit einem ganz bestimmten GRETL-Image-Tag (z.B. latest) ausführen möchte, stellt man dem Compose-Befehl die Variablendefinition GRETL_IMAGE_TAG=MYTAG voran, z.B.:
    GRETL_IMAGE_TAG=latest docker compose run --rm -u $UID gretl --project-dir=MY_JOB_NAME [OPTION...] [TASK...]
    

Schema-Job ausführen

docker compose run --rm -u $UID --workdir //home/gradle/schema-jobs/shared/schema \
  gretl -PtopicName=MY_TOPIC_NAME -PschemaDirName=MY_SCHEMA_DIRECTORY_NAME [-PdbName=MY_DB_NAME] [OPTION...] TASK...

bzw.

COMPOSE_FILE=../gretljobs/docker-compose.yml docker compose run --rm -u $UID --workdir //home/gradle/schema-jobs/shared/schema \
  gretl -PtopicName=MY_TOPIC_NAME -PschemaDirName=MY_SCHEMA_DIRECTORY_NAME [-PdbName=MY_DB_NAME] [OPTION...] TASK...

Dieser Befehl startet den Schema-Job im Ordner MY_TOPIC_NAME\MY_SCHEMA_DIRECTORY_NAME.

Voraussetzung: Die Ordner gretljobs und schema-jobs müssen sich im gleichen übergeordneten Ordner befinden.

Beispiel:

docker compose run --rm -u $UID --workdir //home/gradle/schema-jobs/shared/schema \
  gretl -PtopicName=agi_mopublic -PschemaDirName=schema_pub createSchema configureSchema

Beispiel für Start desselben Schema-Jobs aus dem schema-jobs-Verzeichnis heraus:

COMPOSE_FILE=../gretljobs/docker-compose.yml docker compose run --rm -u $UID --workdir //home/gradle/schema-jobs/shared/schema \
  gretl -PtopicName=agi_mopublic -PschemaDirName=schema_pub createSchema configureSchema

Erläuterungen:

  • MY_TOPIC_NAME muss durch den Namen des Topics (den Ordnernamen) und MY_SCHEMA_DIRECTORY_NAME durch den Namen des Unterordners, in welchem die Schema-Eigenschaften definiert sind, ersetzt werden.
  • Die Option -PdbName=MY_DB_NAME (optional) ist nur in Ausnahmefällen nötig, z.B. wenn das Schema in einer anderen DB angelegt werden soll, als in der Datei schema.properties definiert ist.
  • Mit OPTION... (optional) können beliebige Gradle-Optionen übergeben werden, z.B.: --console=rich, -Pmyprop=myvalue, -Dmyprop=myvalue.
  • Mit TASK... muss angegeben werden, welcher Task bzw. welche Tasks von GRETL ausgeführt werden sollen, z.B. dropSchema oder createSchema configureSchema.
  • Der Task configureSchema setzt, wenn er lokal, d.h. in einer Development-Umgebung ausgeführt wird, gleichzeitig auch die Berechtigungen auf den DB-Schemen und Tabellen so, dass GRETL-Jobs auf diese Schemen zugreifen können (Lese- und Schreibrechte). Das heisst, dass lokal der Task grantPrivileges im Normalfall nicht ausgeführt werden muss.
  • Falls man einen Schema-Job mit einem ganz bestimmten GRETL-Image-Tag (z.B. latest) ausführen möchte, stellt man dem Compose-Befehl die Variablendefinition GRETL_IMAGE_TAG=MYTAG voran, z.B.:
    GRETL_IMAGE_TAG=latest docker compose run --rm -u $UID --workdir //home/gradle/schema-jobs/shared/schema \
      gretl -PtopicName=MY_TOPIC_NAME -PschemaDirName=MY_SCHEMA_DIRECTORY_NAME [-PdbName=MY_DB_NAME] [OPTION...] TASK...
    

Daten in die Entwicklungs-DBs importieren

Wenn der Schema-Job entsprechend konfiguriert ist, kann man unter bestimmten Bedingungen mit dem Task importDevelopmentData automatisiert Daten in die Entwicklungs-DBs importieren.

Voraussetzungen:

  • Die Daten müssen online unter https://files.geo.so.ch als .xtf verfügbar sein
  • In der Datei schema.properties im Schema-Job muss die Property data.themePublicationName gesetzt sein (z.B. data.themePublicationName = ch.so.arp.nutzungsplanung.kommunal)
  • Falls es sich um ein Schema handelt, das Datasets enthält, muss entweder in schema.properties auch die Property data.dataSets gesetzt sein (z.B. data.dataSets = 2403,2405,2408), oder man muss beim Ausführen des Tasks importDevelopmentData die Property data.dataSets übergeben, z.B. -Pdata.dataSets=2403,2405,2408. Sowohl in schema.properties als auch bei der Übergabe als Property beim Ausführen des Tasks ist auch der Wert defaultDataSets möglich (z.B. -Pdata.dataSets=defaultDataSets); hinter defaultDataSets sind die BFS-Nummern aller Gemeinden des Kantons Solothurn hinterlegt.

Hinweise zu den DB-Containern

Die Rollen (Benutzer und Gruppen) der produktiven DBs importieren

Um auch die in den produktiven DBs vorhandenen DB-Rollen in den Entwicklungs-DBs verfügbar zu haben, kopiert man die Datei mit den DB-Rollen (die "Globals") vom geoutil-Server auf seine lokale Maschine, entfernt mit einem sed-Befehl diejenigen Zeilen, die für die Entwicklungs-DBs nicht nötig sind, und importiert sie dann mit psql in die Entwicklungs-DBs:

scp geoutil.verw.rootso.org:/opt/workspace/dbdump/globals_geodb.rootso.org.dmp /tmp
sed -E -i.bak '/^CREATE ROLE (postgres|admin)\;/d; /^ALTER ROLE (postgres|admin) /d' /tmp/globals_geodb.rootso.org.dmp
psql --single-transaction -h localhost -p 54321 -d edit -U postgres -f /tmp/globals_geodb.rootso.org.dmp
psql --single-transaction -h localhost -p 54322 -d pub -U postgres -f /tmp/globals_geodb.rootso.org.dmp

Für den Fall, dass psql auf der lokalen Maschine nicht installiert ist, kopiert man stattdessen die Globals zuerst in den laufenden Container und führt danach den psql-Befehl innerhalb des Containers aus:

docker cp /tmp/globals_geodb.rootso.org.dmp gretljobs_pub-db_1:/tmp
docker exec -e PGHOST=/tmp -it gretljobs_pub-db_1 psql --single-transaction -d pub -f /tmp/globals_geodb.rootso.org.dmp
docker cp /tmp/globals_geodb.rootso.org.dmp gretljobs_edit-db_1:/tmp
docker exec -e PGHOST=/tmp -it gretljobs_edit-db_1 psql --single-transaction -d edit -f /tmp/globals_geodb.rootso.org.dmp

Troubleshooting

Wenn folgende Fehlermeldung auftritt, muss das .gradle Ordner im Job Ordner gelöscht werden.

Caused by: java.io.FileNotFoundException: /home/gradle/project/.gradle/4.2.1/fileHashes/fileHashes.lock (Permission denied)

gretljobs's People

Contributors

andreasneumann avatar barpasen avatar barpastu avatar baumannch avatar beistehen avatar bjsvwbur avatar bjsvwcur avatar chrira avatar echocharlie85 avatar edigonzales avatar luescher avatar ojeker avatar pfeimich avatar schmandr avatar signedav avatar webrian avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gretljobs's Issues

Gross-/Kleinschreibung des Variablennamens anpassen

Die Variable soll ili2pgDataset heissen (alles Kleinbuchstaben, ausser dem D), damit die Schreibweise mit den anderen Variablennamen übereinstimmt:

string(name: 'Ili2pgDataset', description: 'BFS-Nummer der Daten angeben')

sh "gretl -Dorg.gradle.jvmargs=-Xmx2G -PIli2pgDataset=$inputFile.Ili2pgDataset"
(kommt hier zweimal vor)
def bfsNr = Ili2pgDataset as int

dataset = Ili2pgDataset

Anpassung start-gretl.sh

Im start-gretl.sh müssen die dbParameter angepasst werden, da diese mit den neuen Parametern nicht mehr funktionieren. Das es zukünftig mehr als nur source und target DB gibt wäre es vermutlich sinnvoll die Paramter dynamisch dem Skript zu übergeben

gretl_job_generator.groovy: Soll eine listView anlegen, die alle GRETL-Jobs umfasst

Seit wir auch ÖREB-GRETL-Jobs und Schema-Jobs in GRETL-Jenkins haben, ist die Zahl der Jobs sehr gross. Für eine bessere Übersicht sollen alle Generator-Jobs eine View anlegen (bzw. sie aktualisieren, falls sie bereits besteht), die die entsprechenden Jobs enthält.

Doku: https://jenkinsci.github.io/job-dsl-plugin/#path/listView

Die entsprechende Änderung muss dann auch in den Generator-Jobs der anderen beiden GRETL-Jobs-Repositories gemacht werden. Die Views sollen für den Anfang folgende Regular Expressions nutzen:

  • GRETL-Jobs: ^(?!(schema_|oereb_)).*
  • ÖREB-GRETL-Jobs: ^oereb_.*
  • Schema-Jobs: ^schema_.*

[agi_mopublic_pub] Objektnamen (mopublic_objektname_pos) kommen mehrfach vor

In der Zieltabelle mopublic_objektname_pos kommen die Objektnamen mehrfach vor.

Es liegt wohl daran, dass in agi_mopublic_pub/agi_mopublic_pub_mopublic_objektname_pos.sql etwas in der Art von

    SELECT
        max(importdate) AS importdate, dataset
    FROM
        agi_dm01avso24.t_ili2db_import
    GROUP BY
        dataset 

fehlt, so wie es in den anderen SQL-Skripten vorkommt.

ssh plugin

Ssh plugin muss wohl "old-school"-mässig eingebunden werden, damit das Erstellen des Images funktioniert. Oder zumindest einfacher funktioniert.

Node Label als Umgebungsvariable statt als choiceParam setzen

Für die Schema-Jobs musste das EnvInject-Plugin installiert werden. Nun kann auch bei den GRETL-Jobs das Node Label (damit wird gesteuert, auf was für einem Pod der Job ausgeführt werden soll, z.B. auf demjengen Pod, der das grosse tmp-Verzeichnis aufweist) als Umgebungsvariable statt als Auswahl-Parameter übergeben werden. Dies sähe dann ungefähr so aus:

environmentVariables {
  if (properties.getProperty('nodeLabel') != null) {
    env('NODE_LABEL', properties.getProperty('nodeLabel'))
  }
}

Das Jenkinsfile muss dann entsprechend angepasst werden.

Auch die GRETL_JOB_REPO_URL soll neu auf diese Weise gesetzt werden. Dadurch entfällt dann im Jenkinsfile der erste Teil der Pipeline (der scripted-Teil, der nur notwendig ist, um den Wert dieser Umgebungsvariablen von Jenkins auf den Agent übertragen zu können).

Diese Anpassungen dann enstprechend auch in den ÖREB-GRETL-Jobs und den Schema-Jobs vornehmen, falls nötig.

Permission denied beim erstmaligen DB-Hochfahren

Wenn ich chmod +rx ... mache, funktionierts. (macOS)

❯ docker-compose up
[+] Running 2/0
 ✔ Container gretljobs-pub-db-1   Created                                                                                                                                                                                                                          0.0s
 ✔ Container gretljobs-edit-db-1  Created                                                                                                                                                                                                                          0.0s
Attaching to gretljobs-edit-db-1, gretljobs-pub-db-1
gretljobs-edit-db-1  | postgresql 18:01:49.74
gretljobs-edit-db-1  | postgresql 18:01:49.74 Welcome to the Bitnami postgresql container
gretljobs-edit-db-1  | postgresql 18:01:49.74 Subscribe to project updates by watching https://github.com/bitnami/containers
gretljobs-pub-db-1   | postgresql 18:01:49.74
gretljobs-edit-db-1  | postgresql 18:01:49.75 Submit issues and feature requests at https://github.com/bitnami/containers/issues
gretljobs-pub-db-1   | postgresql 18:01:49.75 Welcome to the Bitnami postgresql container
gretljobs-edit-db-1  | postgresql 18:01:49.75
gretljobs-pub-db-1   | postgresql 18:01:49.75 Subscribe to project updates by watching https://github.com/bitnami/containers
gretljobs-pub-db-1   | postgresql 18:01:49.75 Submit issues and feature requests at https://github.com/bitnami/containers/issues
gretljobs-pub-db-1   | postgresql 18:01:49.75
gretljobs-edit-db-1  | postgresql 18:01:49.75 INFO  ==> ** Starting PostgreSQL setup **
gretljobs-pub-db-1   | postgresql 18:01:49.76 INFO  ==> ** Starting PostgreSQL setup **
gretljobs-edit-db-1  | postgresql 18:01:49.77 INFO  ==> Validating settings in POSTGRESQL_* env vars..
gretljobs-pub-db-1   | postgresql 18:01:49.77 INFO  ==> Validating settings in POSTGRESQL_* env vars..
gretljobs-edit-db-1  | postgresql 18:01:49.77 INFO  ==> Loading custom pre-init scripts...
gretljobs-pub-db-1   | postgresql 18:01:49.77 INFO  ==> Loading custom pre-init scripts...
gretljobs-edit-db-1  | postgresql 18:01:49.77 INFO  ==> Loading user's custom files from /docker-entrypoint-preinitdb.d ...
gretljobs-pub-db-1   | postgresql 18:01:49.77 INFO  ==> Loading user's custom files from /docker-entrypoint-preinitdb.d ...
gretljobs-edit-db-1  | /opt/bitnami/scripts/libpostgresql.sh: /docker-entrypoint-preinitdb.d/postgresql_config.sh: /bin/bash: bad interpreter: Permission denied
gretljobs-pub-db-1   | /opt/bitnami/scripts/libpostgresql.sh: /docker-entrypoint-preinitdb.d/postgresql_config.sh: /bin/bash: bad interpreter: Permission denied
gretljobs-pub-db-1 exited with code 126
gretljobs-edit-db-1 exited with code 126

gretl-job.groovy: Beim Git Checkout den Changelog nicht ermitteln

Beim Git Checkout soll der Changelog nicht ermittelt werden. Grund ist, dass der Changelog über das gesamte gretljobs-Repo hinweg ermittelt wird und dadurch also beim Ausführen eines bestimmten Jobs meist Changelog-Meldungen zu ganz anderen Jobs im Jenkins-GUI angezeigt werden (unter "Changes" bzw. in Blue Ocean unter "Nachricht" bzw. "Änderungen"). Dies kann die Benutzer verwirren.

Lösung ist wahrscheinlich, bei der Checkout-Zeile die Option changelog: false zu ergänzen, also neu z.B. git url: "${gretljobsRepo}", branch: gitBranch, changelog: false

gretl-job.groovy: Jobs so konfigurieren, dass sie nach einer bestimmten Laufzeit abgebrochen werden

Manchmal bleiben Jobs aus verschiedenen, meist auch immer wieder anderen Gründen irgendwo mittendrin stehen und laufen nicht mehr weiter. gretl-job.groovy soll deshalb so angepasst werden, dass die Jobs nach spätestens z.B. 2h (oder vielleicht schon früher) abgebrochen und als fehlgeschlagen markiert werden. Das muss so funktionieren, dass dann doch noch das E-Mail versendet wird.

Hinweise, wie das etwa umgesetzt werden könnte: https://stackoverflow.com/a/38106655

Beispiel: GRETL-Job https://gretl.so.ch/job/agi_av_export_ai/100/: Upload auf die Aggregationsinfrastruktur wartet "ewig", weil der AI-Server nicht erreichbar ist. (Vielleicht kann oder muss man im konkreten Fall zusätzlich aber auch den Upload-Befehl so anpassen, dass er von sich aus irgendwann abbricht.)

gretl-job.groovy nur einmal und zentralisiert vorhalten

Im Moment ist in jedem GRETL-Job-Ordner eine Datei gretl-job.groovy, jeweils mit dem gleichen oder sehr ähnlichen Inhalt. Die Datei soll nur noch einmal vorgehalten werden, wobei sie alle möglichen Variablen etc. umfassen soll. Dadurch müssen Änderungen nicht in x Dateien angebracht werden. Eine gute Vorlage bietet die Datei https://github.com/sogis/gretljobs/blob/master/afu_gefahrenkartierung_pub_export_ai/gretl-job.groovy, v.a. auch wegen der Einrückung.

Wenn mit dieser Änderung der Ort der Datei ändert, muss aber auch das Skript des "gretl-job-generator" angepasst werden, wohl ziemlich stark: https://github.com/sogis/openshift-jenkins/blob/master/configuration/jobs/gretl-job-generator/config.xml#L44-L117

Evtl. könnte das Ganze so eingerichtet werden, dass man mit einem individuellen gretl-job.groovy innerhalb eines GRETL-Jobs das Standard gretl-job.groovy übersteuern (überschreiben) kann.

Zugleich wäre eine Überlegung wert, das gretl-job.groovy in Jenkinsfile umzubenennen, weil das Standard ist und weil so klar ist, dass dieses File nur für Jenkins da ist und für den GRETL-Job als solches nicht gebraucht wird.

[agi_mopublic_pub] ST_CurveToLine entfernen

Die Funktion kann in den SQL-Queries entfernt werden, da die Inputgeometrien keine Kreisbogen mehr beinhalten. Eventuell aufpassen, ob Folge-Funktionen auch entfernt werden sollten.

Für File-Uploads das "File Parameter Plugin" verwenden

Im Moment nutzen wir für File-Uploads einen Workaround. Deshalb kann man nicht beim Start des Jobs, sondern erst direkt nach dem Start das File hochladen, was etwas benutzerunfreundlich ist.

Hierfür gäbe es gemäss https://issues.jenkins.io/browse/JENKINS-27413 neu das File Parameter Plugin: https://plugins.jenkins.io/file-parameters/. Wir können dieses im Moment aber nicht installieren, weil es mindestens Jenkins 2.281 benötigt. Wir sind aber auf Jenkins 2.204.2. Dies ist die Version, die das von uns verwendete Basis-Image https://hub.docker.com/r/openshift/jenkins-2-centos7 (Tag 3.11) mitliefert. Das Image mit Tag 3.11 wird aber wohl nicht mehr aktualisiert, weil von OpenShift mittlerweile etwa Version 4.9 verfügbar ist.

Wir können dieses Plugin also erst nach der Umstellung auf OpenShift 4 nutzen.

Host Keys für SFTP-/SSH-Downloads bereitstellen

Für SFTP-/SSH-Downloads setzen wir bisher die Option

ssh.settings {
    knownHosts = allowAnyHosts
}

Dies ist nicht ganz ideal, sondern wir sollten die Host Keys auf irgendeine Art vorgängig zur Verfügung stellen.

[agi_mopublic_pub] - Self-intersection

Grudstückbeschrieb geht nicht bei den Grundstücken z.B. CH788232067709 und CH357432890638. Problem "Self-intersection"

[2020-01-07 13:46:37,601] ERROR in plot_info: (psycopg2.errors.InternalError_) 
lwgeom_intersection: GEOS Error: TopologyException: Input geom 0 is invalid: Self-intersection at 
or near point 2608701.2519999985 1228210.9569999997 at 2608701.2519999985 1228210.9569999997
[SQL: WITH bodenbedeckung AS (SELECT ST_Area(ST_Intersection(b.geometrie, g.geometrie)) AS b_area,ST_Area(g.geometrie) AS g_area,CASE WHEN b.art_txt = 'Liegenschaft' THEN 0 ELSE 1 END AS art, b.art_txt FROM         agi_mopublic_pub.mopublic_bodenbedeckung b JOIN agi_mopublic_pub.mopublic_grundstueck g ON ST_Intersects(b.geometrie, g.geometrie) 
AND NOT ST_Touches(b.geometrie, g.geometrie) WHERE g.egrid = %(egrid)s ) 
SELECT SUM(b_area) AS area, SUM(b_area/g_area) * 100 AS area_percent, art, art_txt FROM bodenbedeckung b GROUP BY art, art_txt ORDER BY area DESC;]
[2020-01-07 13:49:07,281] ERROR in plot_info: (psycopg2.errors.InternalError_) lwgeom_intersection: GEOS Error: TopologyException: Input geom 0 is invalid: Self-intersection at or near point 2630843.3380000009 1241234.3080000011 at 2630843.3380000009 1241234.3080000011
[SQL: WITH bodenbedeckung AS (SELECT ST_Area(ST_Intersection(b.geometrie, g.geometrie)) AS b_area,ST_Area(g.geometrie) AS g_area,CASE WHEN b.art_txt = 'Liegenschaft' THEN 0 ELSE 1 END AS art, b.art_txt FROM         agi_mopublic_pub.mopublic_bodenbedeckung b JOIN agi_mopublic_pub.mopublic_grundstueck g ON ST_Intersects(b.geometrie, g.geometrie) AND NOT ST_Touches(b.geometrie, g.geometrie) WHERE g.egrid = %(egrid)s ) SELECT SUM(b_area) AS area, SUM(b_area/g_area) * 100 AS area_percent, art, art_txt FROM bodenbedeckung b GROUP BY art, art_txt ORDER BY area DESC;]


fehlerhafte Queries beim mopublic

Bitte im Branch https://github.com/sogis/gretljobs/tree/agi_mopublic_pub die Query agi_mopublic_pub_mopublic_gebaeudeadressen.sql korrigieren.

Zudem funktioniert der Import für die Bodenbedeckung nicht, da Daten importiert werden sollen, welche aber den check-constraint nicht erfüllen.

... 	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: org.gradle.api.GradleException: Inner Exception Message: Batch entry 0 INSERT INTO agi_mopublic_pub.mopublic_bodenbedeckung (art, art_txt, bfs_nr, egid, importdatum, nachfuehrung, geometrie) VALUES (27, 'geschlossener_Wald', 2492, NULL, '2018-02-17 +00'::timestamp, '2017-11-20 +00'::date, '01030000200808000001000000250300003D0AD7B31F2444411B2FDDA427203341E7FBA99113244441E17A142E1020334160E5D0120F244441B4C8761E0C203341C3F528CC0E2444418D976E320A203341F853E3850E2444416DE7FB490820334185EB51B80A2444412DB29DCF012033419EEFA7760A244441FCA9F172022033411B2FDDD4032444411F85EB11F91F33416ABC74F3F5234441E7FBA991E41F3341AE47E1DAF52344413BDF4F6DE41F334197D4E7CDF5234441856B8A4AE51F3341B774F7C2F5234441AB803528E61F3341378941C0F52344419EEFA766E61F3341554611BAF5234441ADF93D06E71F3341A40E36B3F52344415B9E90E4E71F3341378941B0F52344414C378961E81F33419CC42080F5234441D34D6290EF1F3341785C217CF5234441D7E2F329F01F334164FB1676F5234441CC0841C3F01F3341A58D026EF5234441ECE42D5CF11F3341E18AE563F523444160B19EF4F11F33410AD7A360F523444100000020F21F334149C9C157F5234441DABE778CF21F3341437D9949F52344419B799D23F31F334104396F39F5234441756EF4B9F31F33411BEC4527F5234441C64F614FF41F33412731081CF5234441759318A4F41F3341B96D900AF5234441BE730210F51F334194890EFBF4234441B35E1D7DF51F3341436B87EDF423444147B944EBF51F3341AB96FFE1F42344414FBF535AF61F334109E57AD8F42344414D5F25CAF61F3341A983FCD0F4234441CE46943AF71F3341DBF286CBF4234441DFEE7AABF71F334115051CC8F423444199A8B31CF81F33415EDEBCC6F4234441ABA9188EF81F3341ECF369C7F4234441011984FFF81F3341F80B23CAF4234441601BD070F91F3341D83DE7CEF42344410AE0D6E1F91F334146F2B4D5F42344415CAD7252FA1F3341EDE389DEF42344416AED7DC2FA1F3341292063E9F4234441853AD331FB1F334103083DF6F4234441B96B4DA0FB1F334167511305F523444134A1C70DFC1F33419108E115F523444196501D7AFC1F3341B691A028F523444121512AE5FC1F3341E1AA4B3DF5234441CAE7CA4EFD1F33410D6EDB53F52344412AD3DBB6FD1F33416E53486CF52344413F573A1DFE1F3341FB338A86F52344410649C481FE1F33411E4C98A2F5234441DF1958E4FE1F3341A93E69C0F5234441C4E2D444FF1F334185EB51C8F5234441A01A2F5DFF1F33413F355E2AFA234441333333330B20334108A59C79FA23444109CF06100C203341EFB582CAFA234441F69C70EA0C2033419DB10B1DFB23444122EE63C20D203341D6CB3271FB234441E834D4970E2033414920F3C6FB2344410309B56A0F203341DDB2471EFC2344414728FA3A10203341F86F2B77FC2344415A77970811203341931804C6FC234441D122DBB911203341CC2C99D1FC234441670281D311203341A4A78B2DFD234441CEFDAA9B122033413388FD8AFD234441D6C6096113203341E05FE9E9FD23444157E49123142033411CAA494AFE2344416B0738E314203341B1CC18ACFE2344410E0CF19F152033411318510FFF234441CAF9B15916203341BBC7EC73FF2344415904701017203341643BDFBFFF23444139B4C8961720334178FEC16200244441D4838AB61820334150CA470401244441C5FE5AD9192033412BFA6CA401244441137833FF1A2033410FEA2D4302244441B0410D281C203341333333B3022444416891EDFC1C2033411CFE86E002244441119CE1531D2033419EA2747C0324444154B6A9821E203341274CF3160424444169AE5EB41F2033419D77FFAF042444413C91F9E82020334155AA954705244441D85A7320222033410C022B87052444411B2FDDA422203341B452F24806244441EC23243D24203341220A3C09072444411C4D3AD825203341E49605C807244441B8051A762720334103634C8508244441BFB1BD1629203341C5DD0D410924444198AB1FBA2A203341EE7C3FC50924444152B81EE52B203341B87B47FB0924444125443A602C203341B7B6F6B30A244441D6C207092E203341F80D196B0B244441C16582B42F2033411106AC200C244441AF61A462312033410229ADD40C24444136E26713332033413C061A870D244441CC09C7C63420334114AE47D10D2444410E2DB27D35203341303DD0650E244441078757F0362033415B4EBEF80E2444414F178965382033418B100F8A0F24444171CB3FDD39203341C976BEEF0F244441E92631E83A2033419CBFBF1910244441897C74573B203341589FCDA7102444418FF71FD43C20334182FB3534112444417AFD3A533E203341DF27F6BE112444416143BED43F20334117D9CEF7112444417F6ABC7440203341F4B0B75E122444416B0DF593412033418CFA48C7122444418EE8C5B042203341E90D7F3113244441464525CB43203341BD43569D13244441016D09E34420334165E6CA0A1424444108BF68F8452033413F355E4A14244441022B8796462033410332D97914244441D2B0390B47203341A3547DEA1424444157CE721B482033415B6EB35C1524444168BA0A29492033416B9177D015244441FB2EF8334A20334166C2C5451624444181FD313C4B2033414DF899BC16244441350FAF414C203341190456CE16244441E92631684C203341DF4F8D371D244441736891AD5B2033412B8716A9282444413BDF4F4D77203341BC7493C82B24444160E5D0C27E2033412A98432B2C24444114B495E17F20334191CDA18F2C2444415D0203FE80203341F392AAF52C244441C8AA0E1882203341A34A5A5D2D2444418EAEAE2F83203341F847ADC62D244441DE24D944842033412B8716192E2444412B871619852033416BCF9F312E244441383B845785203341BD162E9E2E244441C535A667862033411845540C2F244441AB6F3575872033412F730E7C2F2444416C5B28808820334167AB58ED2F2444413983758889203341F6E92E60302444414589138E8A203341F6285C9F302444411D5A641B8B20334128A0731331244441323E691A8C203341E8C00C89312444418374A7168D203341D934230032244441520B16108E20334127AFB27832244441EE00AC068F20334163D5B6F232244441F36D60FA8F203341A93F2B6E332444419F852AEB90203341BA490C8233244441B072681191203341C9780BEB33244441249601D9912033416DFE526934244441F608DDC3922033414B41FDE8342444411C63B4AB9320334145A5056A352444417F457F90942033419B8167EC35244441366D35729520334112211E7036244441D3B3CE5096203341DBF97E9A36244441A8C64B9796203341F4858BF03624444183DC4023972033413400DF47372444412D9702AC9720334139E071A037244441CACF843198203341E86A3CFA3724444132DFBBB398203341F0C9365538244441DA679C32992033417C0C59B138244441C7561BAE99203341E3279B0E3924444191E42D269A203341F853E35539244441EC51B87E9A2033415DF8F46C392444414996C99A9A203341B8415ECC392444416B3EE40B9B20334111B0CE2C3A244441BEFD73799B2033418BD83D8E3A24444130446FE39B203341103AA3F03A244441B0D1CC499C2033410A3EF6533B244441F7B683AC9C20334127392EB83B24444151568B0B9D203341186C421D3C2444416264DB669D203341B07268513C244441105839949D2033412258FAB73C24444187C001EA9D2033417327521F3D244441AA89FE3B9E20334117C866873D2444410D22298A9E203341852F2FF03D2444416DBF7AD49E2033419643A2593E24444119EDEC1A9F20334152DBB6C33E2444417E8C795D9F203341819543CB3E244441BA490C629F203341B6BF632E3F244441B2D51A9C9F20334186AC9F993F244441F357CBD69F20334119516105402444411EFA850DA020334128519F714024444125FB4540A0203341A04550DE4024444175F2066FA02033416FBD6A4B412444415AD0C499A0203341AE47E15A4124444191ED7C9FA0203341E891682642244441DE05DDFAA0203341122B60F24224444167003D52A1203341CC0DC3BE43244441A3999AA5A1203341EC2E8C8B44244441ECC2F3F4A1203341BD80B65845244441FF864640A220334127F33C2646244441020A9187A2203341CDCCCC4C4624444148E17A94A2203341CC731AF4462444419989D1CAA220334126EE49C247244441E75C060AA3203341AC4BC69048244441A3F42D45A3203341EC738A5F4924444118DB467CA3203341B04C912E4A24444135B44FAFA32033411FBAD5FD4A244441943D47DEA320334154E3A54B4B2444418716D9EEA320334181FC88FF4B24444180149016A4203341D19A2FB34C24444138C35842A42033413DDC93664D24444124943172A42033414ADFAF194E244441BAF518A6A4203341DDC47DCC4E24444165340DDEA420334167B0F77E4F244441917A0C1AA52033411DC8173150244441BDD0145AA52033414E621038502444413108AC5CA52033412535D8E2502444418C1D249EA5203341C723339451244441D12538E6A52033419FC3224552244441A88C4E32A6203341CE47A1F55224444189D36482A62033412AE7A8A5532444415A5A78D6A62033416FDC335554244441855F862EA72033416F663C045524444114008C8AA72033411F85EB11552444411F85EB91A7203341030EB55A55244441A41453BBA7203341088FE8A2552444419DD6A5E8A7203341894F78EA5524444113AADC19A8203341D8E4563156244441EE54EE4EA82033417F0577775624444114E4D087A8203341BE8BCBBC5624444141AD79C4A820334101784701572444410D51DD04A920334150F3DD445724444108BDEF48A9203341B651828757244441022EA490A9203341A31428C9572444416D32EDDBA920334145EDC20958244441E3ACBC2AAA203341D3BE464958244441CAD6037DAA203341D4A0A787582444411D43B3D2AA203341FCA9F1B25824444179E92611AB2033415DE1D9C4582444414DE1BA2BAB2033413D07D2005924444144000A88AB20334129D4843B5924444187518FE7AB203341D546E7745924444177EC384AAC203341059DEEAC59244441A951F4AFAC2033418F5590E3592444415D6EAE18AD2033415732C2185A24444118A05384AD2033413A3A7A4C5A24444149B8CFF2AD203341E8BAAE7E5A2444411B000E64AE203341BB4A56AF5A244441503CF9D7AE20334179CA67DE5A24444141B17B4EAF2033410867DA0B5B244441EB267FC7AF203341199BA5375B24444123EDEC42B0203341BC30C1615B244441CCDFADC0B0203341295C8F725B244441B6F3FDF4B02033416A916A955B2444415DD9AA66B1203341227483B65B244441AE376DDAB1203341C84AD1D55B24444178072A50B2203341F3854CF35B24444180D9C4C7B2203341EF06EE0E5C2444411ACB2041B32033416D21AF285C244441248D20BCB3203341249D89405C244441176BA638B420334154B777565C244441365294B6B42033412124746A5C244441D0D8CB35B5203341E60F7A7C5C2444419A452EB6B52033415520858C5C24444117979C37B62033418D75919A5C244441198BF7B9B620334103AB9BA65C2444414CA61F3DB720334157D8A0B05C244441CF3BF5C0B7203341250681B55C2444417368910DB820334106929EB85C244441DD745845B820334101EA92BE5C2444417A5829CAB820334126707CC25C24444131D3474FB920334192325AC45C244441CCBE93D4B9203341E5BD2BC45C2444411FEAEC59BA203341571DF1C15C244441C92033DFBA203341B8DAAABD5C244441FD324664BB2033414CFE59B75C24444149FD05E9BB203341900E00AF5C2444415670526DBC203341D80F9FA45C244441AB980BF1BC203341D38339985C2444415FA61174BD203341EF68D2895C244441CAF444F6BD203341A4396D795C2444412C128677BE20334198EB0D675C24444141C7B5F7BE203341ADEEB8525C244441CD1EB576BF203341F6285C4F5C244441DBF97E8ABF203341C976BE9F59244441D578E946CC2033417F2BE283592444417C42E4EACC2033416E84F869592444417ED32490CD2033414DEE045259244441EA4E9336CE2033410BD70A3C5924444137E017DECE2033413A640D2859244441078B9A86CF20334194720F16592444419E2E0330D02033419A95130659244441508939DAD02033412D171CF858244441FE3B2585D120334142F72AEC582444418FCDAD30D220334193EB41E25824444177AEBADCD2203341635F62DA58244441383C3389D32033414A738DD458244441E7C4FE35D42033410CFDC3D058244441B98A04E3D4203341BE9F1ACF5824444191ED7C7FD5203341778706CF582444418CC72B90D5203341545255CF5824444173B05B3DD62033415B52B0D15824444143797BEAD6203341363117D65824444121587297D7203341894D89DC582444410E892744D820334112BB05E558244441705182F0D8203341C1428BEF58244441A1036A9CD9203341EC6218FC582444417502C647DA203341814FAB0A59244441C1C47DF2DA2033414CF2411B59244441DED8789CDB20334140EBD92D5924444128E89E45DC203341D1907042592444417DBAD7EDDC20334153F0025959244441B2390B95DD20334169CE8D71592444410675213BDE20334139B4C88659244441378941C0DE2033412DB29DDF5C2444419A9999D9F02033417F3C620C5D244441B36B2548F220334127C328375D244441EA8AA4B7F32033413005F05F5D24444181DC0B28F5203341AFC7B6865D24444169435099F62033412FDF7BAB5D244441EA9B660BF8203341BA2F3ECE5D244441F6BB437EF9203341E2ACFCEE5D2444417E73DCF1FA203341C759B60D5E244441CC8C2566FC20334179E926215E244441C976BE5FFD20334121496A2A5E244441D7CC13DBFD203341479D17455E2444419CF39B50FF2033413488BD5D5E24444173BCB2C600213341904B5B745E24444164DE4C3D02213341B138F0885E244441840C5FB403213341A5B07B9B5E24444148F6DD2B052133413624FDAB5E244441DC47BEA306213341EB1374BA5E2444417DAAF41B082133411110E0C65E244441CFC475940921334177BE9FCA5E244441105839140A213341D218D0DA5E244441218AADF10A21334164ACF8E85E2444412C05B0CF0B213341D69918F55E244441F1A42DAE0C21334105D72EFF5E244441D455138D0D21334188863A075F2444414BFB4D6C0E213341C7F73A0D5F2444418571CA4B0F21334105A72F115F2444410B8F752B102133416E3D18135F24444167263C0B112133411E91F4125F244441C7070BEB1121334114AE47115F24444152B81EA51221334123A5C4105F244441A402CFCA122133417FA9880C5F24444167E774AA1321334125FB40065F2444410B89E98914213341EB23EEFD5E244441C5BE19691521334186DA90F35E244441AA65F2471621334175022AE75E2444414E62602617213341EDABBAD85E2444416CA2500418213341C71344C85E244441861EB0E11821334161A3C7B55E24444188DB6BBE192133417EF046A15E24444169EC709A1A213341295C8F925E2444412731082C1B213341AD6BDC855E244441A477C4AF1B213341CE092D7B5E2444411C4237341C2133412C6F84725E2444417C3E41B91C213341A5ACE46B5E244441D6AEC23E1D213341D0564F675E244441B9B89BC41D2133419F85C5645E244441CD6CAC4A1E2133411DD447645E24444176CED4D01E2133414860D6655E2444416CDBF4561F21334108CB70695E2444416993ECDC1F2133414838166F5E244441C4FF9B62202133412C4FC5765E244441143BE3E7202133415E3A7C805E244441CC78A26C2121334182A8388C5E244441D20CBAF021213341C5CCF7995E2444410B730A7422213341835FB6A95E244441E35674F622213341149F70BB5E244441C59AD87723213341AE5022CF5E244441895F18F82321334169C1C6E45E244441CF0B15772421334160C758FC5E2444414E53B0F424213341E8C2D2155F2444410E3ECC70252133415839B4285F244441666666C6252133416F1283F061244441105839743221334122DCF7F761244441B094129132213341A69BC400622444411283C0AA3221334185CC2E01622444413FFCCFAB322133412B6B010C622444417FC605C4322133410C022B1762244441DF4F8DD7322133418974D54062244441AAB7C71A33213341CBA14566622444418B6CE75B33213341A3AD2D6962244441988A28613321334150D1259062244441043192AA33213341D34D62B062244441F0A7C6EB33213341333333E3662444416891ED9C3A21334191ED7CBF6E2444415C8FC2F547213341190456FE712444417B14AEE74C213341B81E853B722444411D5A643B4D2133413789415074244441EE7C3F155021334137894190762444412731080C48213341621058B97C2444413BDF4F2D45213341F0A7C6AB7E244441E17A146E45213341355EBA997F2444410AD7A31046213341EE7C3F3588244441250681555E213341FA7E6A9C85244441736891CD6B21334108AC1CDA8A24444139B4C83674213341FED478C99524444100000020872133416891ED3C9F244441C3F5287C9721334150E3D823A1244441677349D99A213341F6285C8FA2244441C976BE5F9D213341244B6809A32444413D5A7A399E213341AA8B9AEDA4244441EE7AB99CA12133410E2DB2DDA5244441CDCCCC4CA3213341BD2E4420A624444187890AC2A32133412AF82B64A624444186B42D34A4213341996760A9A6244441086E26A3A4213341710BD8EFA62444416191E50EA5213341FE458937A72444418C6A5C77A52133412FDD2446A72444412731088CA5213341C24E6A80A724444131B87CDCA5213341C83371CAA724444193AD383EA621334103DB9315A824444174F4829CA6213341AE03C861A8244441E7AE4EF7A6213341AE4703AFA824444111798F4EA7213341508D97CEA82444414260E570A72133417B311868AA244441E8B75D2BA9213341DC9B9E00AC244441EA886FE9AA2133419CC42070AD244441EC51B87EAC213341C1C72898AD244441269718ABAC21334110B0B42EAF24444110A85670AE213341F15040C4B0244441927C2739B021334162105809B22444411283C0AAB1213341713D0A67BB2444414A0C02CBBC21334121B072E8BE2444411D5A645BC1213341E8F4992DBF2444417ACB9F90C12133412D9B7673BF244441076A04C2C12133413924FBB9BF24444150B987EFC12133410AC61901C024444106D32019C22133417998C448C0244441D394C73EC2213341F797ED90C0244441F1A17460C221334149A886D9C02444419A64217EC22133414A978122C1244441540FC897C2213341DD240641C124444114AE47A1C2213341B21FD06BC1244441119E63ADC2213341DFEB63B5C12444412BD7EFBEC2213341A5982EFFC1244441384C69CCC22133411DB82149C2244441B65ACDD5C221334175D42E93C22444418C2C1ADBC2213341C97247DDC22444416BB84EDCC2213341F4155D27C3244441FCC16AD9C221334164416171C3244441F2D96ED2C2213341BE9F1AAFC3244441FED478C9C221334121B07228C52444413D0AD7C3BE2133417B14AEB7B22444415EBA498CA52133412A04750BB2244441912B81A4A421334151DC6260B12444416B5F55B9A32133419FCF7BB6B0244441C663CCCAA2213341986E1243B0244441F853E325A2213341DB19C40DB0244441362AECD8A12133413FEF3F66AF2444419EB9BAE3A0213341597CF3BFAE2444410A2E3EEB9F213341F5E5E21AAE24444188B87CEF9E213341EC51B8DEAD2444418D976E929E2133413AB0693BAD24444150164D929D213341199F6099AC244441F3A7F58E9C2133416027A1F8AB244441E1C66E889B2133411B2FDD94AB24444160E5D0E29A213341F74A2F59AB2444418EFEBE7E9A21334171030FBBAA2444419BEEEC7199213341FC41441EAA244441A74AFF61982133413DEFD282A924444128DAFC4E97213341C3F5285CA9244441355EBA0997213341F68EC8D8A82444414440BA15962133418622CF56A82444411ECDBD1E95213341D10041D6A72444414654CD249421334128752257A72444410C2FF127932133414C378951A72444413108AC1C9321334196BE77D9A6244441BDCF312892213341BB0F455DA624444155C1972591213341A68E8EE2A524444139A72B2090213341B3545869A5244441ED3CF6178F213341EC51B85EA52444416F1283008F21334118AAE4E6A42444415029AFF48D213341ACB89970A4244441997724E68C2133410967DBFBA32444414A06ECD48B213341EF96AD88A32444411DEB0EC18A2133418716D97EA3244441C74B37A98A213341CE1C1417A32444414E5296AA89213341A4BF12A7A2244441497E8B9188213341DD38AD38A22444415EC7F775872133413334E7CBA1244441709BE45786213341621058B9A124444166666626862133418CC8BC48A1244441C4AC31F6842133417980C8D9A024444173B091C383213341B29DEF97A0244441A4703D0A83213341529A7E6CA0244441D18C8F8E82213341D85CE200A02444416B85345781213341EC01F7969F244441D0EF891D8021334183C0CA819F24444146B6F3DD7F213341B933E3189F2444418F73409E7E213341333333C39E2444416ABC74937D2133412C61B3B19E24444175BF525C7D213341C4713E4C9E244441B1E233187C2133413F355E0A9E2444414C3789417B213341D7A370ED9D244441B29DEF677B213341CBA145869B244441DD240601732133410E2DB2AD97244441C520B012652133417D3F35BE96244441FED478A96121334114AE479195244441448B6C075D2133419EEFA70694244441DBF97EAA56213341F6285C8F92244441448B6C4750213341643BDFAF912444413D0AD7E34B2133413F355EFA90244441448B6CE7472133410AD7A3C08F2444413333335340213341F4FDD4288F244441508D976E3C2133418195439B8E244441BA490C82382133418B6CE79B8D244441D34D62D0302133411F85EBC18B2444418D976E3221213341F2D24DF28924444160E5D0A211213341068195038924444117D9CED709213341355EBA2988244441894160050221334154E3A54B8824444139B4C8F601213341516B2031882444414D8EEFC0002133418655A01888244441A8326C8AFF203341EFA4260288244441FA244C53FE203341643BDFEF872444417D3F353EFD2033419D53B4ED87244441EAEA9C1BFD2033410D454ADB8724444158106CE3FB2033412246E9CA87244441C426C7AAFA203341170D92BC87244441BEC4BB71F920334160E5D0B2872444410E2DB27DF8203341A9E47AAB87244441549CCC80F72033410A7B30A6872444418EC8B283F6203341C20CF2A287244441E8A07586F520334164D1BFA18724444132182689F42033416FDD99A2872444417422D58BF32033414C2280A587244441D0B3938EF22033414C6E72AA872444415EBF7291F1203341B16C70B1872444410A368394F0203341ADA579BA872444416F05D697EF203341DBF97EBA87244441A8C64B97EF2033418B9BE7C48724444161863C8BEE203341917E5AD1872444413666867FED2033412206D7DF8724444174523974EC203341E8555CF0872444419B2C6569EB2033418B6CE7FB87244441378941C0EA2033419E72E90288244441FCCE195FEA2033411C427D1788244441C60B6755E92033416A8B162E8824444118AC5C4CE8203341D1F6B34688244441126F0A44E7203341F00D546188244441E108803CE6203341F4FDD468882444415C8FC2F5E5203341EBB9F1858824444192636AEFE4203341FA570DA5882444411C2CFDE9E32033419B0E26C688244441217C8AE5E2203341E7E539E988244441FDD021E2E120334196438BFC882444419A999959E1203341CEC7460E892444413A98D2DFE020334138804A3589244441A62EACDEDF20334123BD425E8924444166DFBDDEDE203341CC0E2D898924444111E316E0DD203341CDE706B689244441C65EC6E2DC203341BC7493B8892444417F6ABCD4DC20334118F08EE789244441D648D7D7DB203341015474188A244441E5B266DCDA20334112E3404B8A244441E59979E2D9203341F09DF17F8A2444412CBD1EEAD82033415EBA499C8A2444415839B468D8203341AD6883B68A24444153C464F3D7203341F70AF3EE8A2444415B3E5AFED62033414C303D298B244441CFA00D0BD620334128685E658B244441EA468D19D52033413D2653A38B244441BF70E729D4203341CBA145A68B244441EC51B81ED42033415E7714E68B244441671A0E31D32033419A52AF278C2444414CF25A45D22033417350126B8C244441B8BEAC5BD1203341A01A2F6D8C24444148E17A54D1203341C57639B08C244441534A1174D0203341BDB020F78C2444417040968ECF20334116CFC33F8D244441412C49ABCE203341AC1C5A448D244441A01A2F9DCE203341BCCE998F8D244441A3A47BB8CD20334104560ECD8D244441986E1203CD203341BA3B8DDC8D244441DD090FD6CC203341130B302B8E244441A858F6F5CB2033418195435B8E244441D34D6270CB2033415EBA498C8924444193180436B92033418B6CE75B8C24444104560E6DB02033415C8FC2A58C244441C3F528FC9C203341E17A140E9A244441E5D0221B9A203341E5D022BB9D244441B29DEFE7A4203341B0726861A6244441A8C64B17AA20334110583994AC2444413D0AD783A920334166666686AE244441DD2406C1A32033418716D9DEB1244441D122DBF9A3203341448B6CE7B3244441AE47E1DAA92033410C022BE7C52444418B6CE73BA620334108AC1CFAC62444418195430BA220334169E889D2C6244441EBC54BAEA1203341B1076EA9C624444136610854A1203341698ED47EC6244441C3F093FCA020334121C2C952C624444110A607A8A0203341CF525A25C624444140DC7B56A0203341FED47819C6244441BA490C42A0203341265793F6C524444110110808A0203341D14882C6C524444118DEC2BC9F20334190003595C524444147F2C1749F2033413BB2B962C5244441A10B1A309F203341ADE81E2FC52444414AF1DEEE9E20334175931814C5244441508D97CE9E203341DF4F8DB7C1244441621058D99B203341B29DEF77C0244441333333D397203341355EBA09C22444417368914D942033411F85EB31C5244441D578E9868A2033419A999939C824444191ED7C3F8B2033418716D90EC9244441F2D24D628920334104560E2DCB24444152B81E25892033411904567ED3244441C74B37E980203341C3603175D32444413F83365980203341D276056AD3244441B186C8C97F203341D6B9D45CD32444418C870A3B7F20334107DAA14DD3244441719D19AD7E20334163F06F3CD324444135B612207E203341127E4229D3244441FC8F12947D203341AE6B1D14D32444415CB335097D203341720805FDD22444418D6D987F7C2033413BDF4FEDD22444415839B4287C2033416109FEE3D2244441A6CA56F77B20334149880DC9D2244441E08F8C707B203341C00239ACD2244441F53555EB7A203341FD58868DD224444182E3CB677A203341B0CCFB6CD22444417C670BE679203341B0FF9F4AD2244441C1332E6679203341ABF27926D2244441AB574EE878203341B2039100D2244441C77A856C78203341BDECECD8D12444419AD7ECF277203341AAF1D2CDD1244441560E2DD2772033415F727090D12444418AD46F457720334194D58651D1244441F3356CBB762033413BB01D11D1244441C0783334762033419FF03CCFD02444414343D6AF7520334148B3EC8BD0244441B7E1642E75203341FE413547D02444414744EFAF74203341C4121F01D024444110FD843474203341CCC6B2B9CF2444413B3E35BC732033416929F970CF2444411ED80E47732033416891ED5CCF2444417B14AE2773203341F52EFB26CF244441643720D572203341C0F3C1DBCE2444414E63776672203341E5BA568FCE244441F3FB21FB7120334131EDC241CE24444193382D9371203341F21710F3CD244441FBE5A52E71203341D0EB47A3CD244441EA6498CD70203341973B7452CD24444193A810707020334104FB9E00CD2444411E351A16702033418D3DD2ADCC244441401EC0BF6F20334137894180CC244441560E2D926F203341DD17F9B7CB244441B16470B46E2033417F9AB0F0CA2444412CA920D36D203341CBA145C6CA244441295C8FA26D20334153296C2ACA244441E16E42EE6C2033414CD42F65C92444414566DA056C20334114AE4711C92444414C3789A16B203341C3F5281CB424444121B072488A2033410C022B079824444166666626802033416ABC74D384244441AAF1D22D8B2033412506810574244441CDCCCC0C7F2033416DE7FB596E2444410AD7A33076203341273108FC71244441D7A3707D4F203341B0726811752444412FDD24863F203341B4C8768E712444419CC420F034203341DBF97E1A70244441D122DB19202033412B87160974244441A01A2F5D0F203341DF4F8DF771244441CFF75323062033411283C0BA702444418716D96E08203341DF4F8D0771244441A69BC420132033411B2FDDC46E244441C976BE9F1B203341DBF97EAA6F244441EE7C3FF52320334179E926B170244441B29DEF07362033415EBA49DC702444410AD7A3F041203341250681A56E244441F0A7C68B44203341CBA145B66D2444418B6CE7BB50203341FCA9F11268244441CBA145766A20334177BE9F2A6724444117D9CEF7832033412B871659662444414E6210F886203341A01A2F5D6C24444108AC1C5A95203341894160A572244441105839B4AF20334139B4C80677244441D578E9E69F203341EE7C3F857B244441C976BEBF9B2033417368910D86244441B81E85AB9C203341FA7E6A8C8B2444411F85EBF18C203341508D974E9624444117D9CEF78D20334123DBF9BE9B244441643BDF8F8D20334191ED7C8FA8244441EE7C3F15982033413BDF4F0DAC2444418FC2F56893203341D34D62F0B0244441022B87369C2033417D3F35EEB22444412B8716D9952033418D976EE2BA2444412731082C94203341068195A3BE244441BC7493388E20334110583924C624444148E17A9482203341B6F3FDC4CD2444415A643B3F7F2033411B2FDD74D1244441BA490C2281203341A01A2F8DD1244441C74B37E98120334146B6F3EDCD244441022B87B6802033417B14AE77C6244441621058F98320334108AC1C1ABF2444419EEFA7668F20334146B6F32DBB2444417D3F359E95203341F6285C5FB32444410681954397203341D122DB19B1244441F853E3859E2033418B6CE7FBAB2444411904564E95203341EE7C3FA5A8244441666666C6992033413108AC9C9B244441FCA9F1128F2033417368914D9624444185EB51788F203341A01A2FED8B24444154E3A57B8E203341508D976E86244441105839349E2033411D5A64AB7B244441CFF753439D20334137894190772444418716D90EA1203341B81E850B73244441A69BC460B12033417F6ABCB46B2444418D976E52CA203341F0A7C63B692444419CC420D0DB203341A01A2FDD712444411D5A645B10213341DF4F8DB771244441BA490CC213213341A8C64BC772244441D122DB391A21334191ED7C7F74244441C976BE3F1E2133410AD7A39075244441295C8F422321334196438B4C7724444148E17A142B213341986E1253772444417593186430213341F2D24D627624444104560EED2F2133413F355E0A76244441000000602B213341E17A14EE74244441C1CAA1C5232133416891EDDC73244441448B6C071F21334100000040722444413F355EDA1A213341FCA9F1327124444148E17AB4132133419EEFA72671244441333333D310213341986E12736824444185EB51D8DB20334160E5D0026B2444413F355EBAC92033418D976E3272244441AAF1D24DB120334152B81EB56B244441250681159620334108AC1CBA652444418D976ED287203341B29DEF875D2444413333337388203341560E2DB25A244441F2D24DE27A203341F2D24D5246244441E926314888203341D578E9263E244441448B6CA78D2033410AD7A3503B24444117D9CEF779203341F0A7C6EB2A244441022B875669203341EC51B8DE192444412B8716393E2033415EBA491C16244441560E2D323720334179E926110F244441A01A2FDD27203341F853E3F504244441BC7493B8152033413108AC5CFC234441A245B653072033419EEFA7C6FB234441A8C64BF7F21F3341DD240601FC234441295C8FC2F21F334125068115FD23444110583994062033410681957305244441CBA145961420334185EB51980F244441F0A7C6CB262033417F6ABCA4162444413D0AD723362033415EBA496C1A24444148E17A343D203341EE7C3F752B2444410C022B476820334123DBF97E352444416DE7FB69722033411F85EBF13B24444196438BEC78203341E92631A83E24444146B6F3BD8B20334123DBF91E5B2444419EEFA70679203341C1CAA1055E244441FED478E9862033411D5A64AB65244441333333538620334146B6F36D66244441C74B378983203341E3A59B546724444108AC1C3A6A203341FA7E6AFC6C244441643BDF4F50203341C1CAA1F56D244441A01A2F9D432033412B87161970244441BC74931841203341B07268F16F244441986E122336203341CDCCCCEC6E244441A245B633242033413F355EFA6D244441448B6C671B2033417F6ABC4470244441819543CB122033414A0C02FB6F244441AC1C5A8408203341C520B0C271244441A8C64B3705203341C3F5285C7024444117D9CEF7FE1F3341E5D0223B6B244441F0A7C6EB032033414C37897166244441643BDF8F17203341CFF753E36A2444410AD7A31032203341F4FDD4386E24444148E17A9439203341A245B633622444415A643B3F4C203341BC7493685B244441EE7C3F154A20334162105899552444417B14AE2759203341736891DD512444411904562E67203341C1CAA1154B2444410E2DB2DD612033419CC420A0422444415A643B1F66203341D34D62603C244441F2D24D425D203341E5D022AB37244441EC51B8DE532033414E01C24A37244441E5A7F1515320334179B22FE93624444127D77EC852203341BA2C738636244441456E6A425220334180E1932236244441BC88BEBF51203341235899BD3524444145008540512033413789417035244441F2D24DE250203341572D8B5735244441136CC7C450203341971271F0342444411B208F4C5020334190CD528834244441652CE5D74F2033418C37381F34244441555CD2664F203341DA3C29B53324444107365FF94E20334136DC2D4A33244441A8F9938F4E203341295C8F12332444413F355E5A4E2033415593429F32244441D3F320EB4D2033417B68DD2C32244441DAB736784D203341004C67BB312444418A45A7014D203341F9ACE74A312444417F617A874C20334155EA65DB30244441F90CB8094C2033416252E96C30244441508568884B2033414F2279FF2F244441734394034B203341B9851C932F24444151FB437B4A2033412C96DA272F2444414D9B80EF49203341AE5ABABD2E244441A54B5360492033414CC7C2542E244441DA6DC5CD482033413F355E2A2E24444179E9269148203341A2BCFAEC2D244441139CE03748203341680769862D24444179A8AE9E47203341046014212D244441969C390247203341116A03BD2C244441ABB88B6246203341FAB33C5A2C2444410373AFBF4520334184B6C6F82B2444414677AF194520334163D4A7982B244441C4A5967044203341D359E6392B244441BE1270C443203341297C88DC2A244441B0054715432033416F5994802A2444418FF8266342203341FBF70F262A2444410B971BAE41203341D7A370DD29244441BC74931841203341FA7E6A1C27244441FCA9F1F2392033413D0AD7B31F2444411B2FDDA427203341') was aborted: ERROR: new row for relation "mopublic_bodenbedeckung" violates check constraint "mopublic_bodenbedeckung_art_check"
  Detail: Failing row contains (4, 7fd30db1-2cdd-40af-bd62-4f55d9f710d7, 27, geschlossener_Wald, 2492, null, 2018-02-17 00:00:00, 2017-11-20, 01030000200808000001000000250300003D0AD7B31F2444411B2FDDA4272033...).  Call getNextException to see other errors in the batch.
	at ch.so.agi.gretl.util.TaskUtil.toGradleException(TaskUtil.java:31)
	at ch.so.agi.gretl.tasks.Db2Db.executeTask(Db2Db.java:62)
	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
	at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.doExecute(DefaultTaskClassInfoStore.java:142)
	at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:135)
	at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:122)
	at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:762)
	at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:729)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121)
	at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
	at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
	at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
	... 28 more
Caused by: java.sql.BatchUpdateException: Batch entry 0 INSERT INTO agi_mopublic_pub.mopublic_bodenbedeckung (art, art_txt, bfs_nr, egid, importdatum, nachfuehrung, geometrie) VALUES (27, 'geschlossener_Wald', 2492, NULL, '2018-02-17 +00'::timestamp, '2017-11-20 +00'::date, '01030000200808000001000000250300003D0AD7B31F2444411B2FDDA427203341E7FBA99113244441E17A142E1020334160E5D0120F244441B4C8761E0C203341C3F528CC0E2444418D976E320A203341F853E3850E2444416DE7FB490820334185EB51B80A2444412DB29DCF012033419EEFA7760A244441FCA9F172022033411B2FDDD4032444411F85EB11F91F33416ABC74F3F5234441E7FBA991E41F3341AE47E1DAF52344413BDF4F6DE41F334197D4E7CDF5234441856B8A4AE51F3341B774F7C2F5234441AB803528E61F3341378941C0F52344419EEFA766E61F3341554611BAF5234441ADF93D06E71F3341A40E36B3F52344415B9E90E4E71F3341378941B0F52344414C378961E81F33419CC42080F5234441D34D6290EF1F3341785C217CF5234441D7E2F329F01F334164FB1676F5234441CC0841C3F01F3341A58D026EF5234441ECE42D5CF11F3341E18AE563F523444160B19EF4F11F33410AD7A360F523444100000020F21F334149C9C157F5234441DABE778CF21F3341437D9949F52344419B799D23F31F334104396F39F5234441756EF4B9F31F33411BEC4527F5234441C64F614FF41F33412731081CF5234441759318A4F41F3341B96D900AF5234441BE730210F51F334194890EFBF4234441B35E1D7DF51F3341436B87EDF423444147B944EBF51F3341AB96FFE1F42344414FBF535AF61F334109E57AD8F42344414D5F25CAF61F3341A983FCD0F4234441CE46943AF71F3341DBF286CBF4234441DFEE7AABF71F334115051CC8F423444199A8B31CF81F33415EDEBCC6F4234441ABA9188EF81F3341ECF369C7F4234441011984FFF81F3341F80B23CAF4234441601BD070F91F3341D83DE7CEF42344410AE0D6E1F91F334146F2B4D5F42344415CAD7252FA1F3341EDE389DEF42344416AED7DC2FA1F3341292063E9F4234441853AD331FB1F334103083DF6F4234441B96B4DA0FB1F334167511305F523444134A1C70DFC1F33419108E115F523444196501D7AFC1F3341B691A028F523444121512AE5FC1F3341E1AA4B3DF5234441CAE7CA4EFD1F33410D6EDB53F52344412AD3DBB6FD1F33416E53486CF52344413F573A1DFE1F3341FB338A86F52344410649C481FE1F33411E4C98A2F5234441DF1958E4FE1F3341A93E69C0F5234441C4E2D444FF1F334185EB51C8F5234441A01A2F5DFF1F33413F355E2AFA234441333333330B20334108A59C79FA23444109CF06100C203341EFB582CAFA234441F69C70EA0C2033419DB10B1DFB23444122EE63C20D203341D6CB3271FB234441E834D4970E2033414920F3C6FB2344410309B56A0F203341DDB2471EFC2344414728FA3A10203341F86F2B77FC2344415A77970811203341931804C6FC234441D122DBB911203341CC2C99D1FC234441670281D311203341A4A78B2DFD234441CEFDAA9B122033413388FD8AFD234441D6C6096113203341E05FE9E9FD23444157E49123142033411CAA494AFE2344416B0738E314203341B1CC18ACFE2344410E0CF19F152033411318510FFF234441CAF9B15916203341BBC7EC73FF2344415904701017203341643BDFBFFF23444139B4C8961720334178FEC16200244441D4838AB61820334150CA470401244441C5FE5AD9192033412BFA6CA401244441137833FF1A2033410FEA2D4302244441B0410D281C203341333333B3022444416891EDFC1C2033411CFE86E002244441119CE1531D2033419EA2747C0324444154B6A9821E203341274CF3160424444169AE5EB41F2033419D77FFAF042444413C91F9E82020334155AA954705244441D85A7320222033410C022B87052444411B2FDDA422203341B452F24806244441EC23243D24203341220A3C09072444411C4D3AD825203341E49605C807244441B8051A762720334103634C8508244441BFB1BD1629203341C5DD0D410924444198AB1FBA2A203341EE7C3FC50924444152B81EE52B203341B87B47FB0924444125443A602C203341B7B6F6B30A244441D6C207092E203341F80D196B0B244441C16582B42F2033411106AC200C244441AF61A462312033410229ADD40C24444136E26713332033413C061A870D244441CC09C7C63420334114AE47D10D2444410E2DB27D35203341303DD0650E244441078757F0362033415B4EBEF80E2444414F178965382033418B100F8A0F24444171CB3FDD39203341C976BEEF0F244441E92631E83A2033419CBFBF1910244441897C74573B203341589FCDA7102444418FF71FD43C20334182FB3534112444417AFD3A533E203341DF27F6BE112444416143BED43F20334117D9CEF7112444417F6ABC7440203341F4B0B75E122444416B0DF593412033418CFA48C7122444418EE8C5B042203341E90D7F3113244441464525CB43203341BD43569D13244441016D09E34420334165E6CA0A1424444108BF68F8452033413F355E4A14244441022B8796462033410332D97914244441D2B0390B47203341A3547DEA1424444157CE721B482033415B6EB35C1524444168BA0A29492033416B9177D015244441FB2EF8334A20334166C2C5451624444181FD313C4B2033414DF899BC16244441350FAF414C203341190456CE16244441E92631684C203341DF4F8D371D244441736891AD5B2033412B8716A9282444413BDF4F4D77203341BC7493C82B24444160E5D0C27E2033412A98432B2C24444114B495E17F20334191CDA18F2C2444415D0203FE80203341F392AAF52C244441C8AA0E1882203341A34A5A5D2D2444418EAEAE2F83203341F847ADC62D244441DE24D944842033412B8716192E2444412B871619852033416BCF9F312E244441383B845785203341BD162E9E2E244441C535A667862033411845540C2F244441AB6F3575872033412F730E7C2F2444416C5B28808820334167AB58ED2F2444413983758889203341F6E92E60302444414589138E8A203341F6285C9F302444411D5A641B8B20334128A0731331244441323E691A8C203341E8C00C89312444418374A7168D203341D934230032244441520B16108E20334127AFB27832244441EE00AC068F20334163D5B6F232244441F36D60FA8F203341A93F2B6E332444419F852AEB90203341BA490C8233244441B072681191203341C9780BEB33244441249601D9912033416DFE526934244441F608DDC3922033414B41FDE8342444411C63B4AB9320334145A5056A352444417F457F90942033419B8167EC35244441366D35729520334112211E7036244441D3B3CE5096203341DBF97E9A36244441A8C64B9796203341F4858BF03624444183DC4023972033413400DF47372444412D9702AC9720334139E071A037244441CACF843198203341E86A3CFA3724444132DFBBB398203341F0C9365538244441DA679C32992033417C0C59B138244441C7561BAE99203341E3279B0E3924444191E42D269A203341F853E35539244441EC51B87E9A2033415DF8F46C392444414996C99A9A203341B8415ECC392444416B3EE40B9B20334111B0CE2C3A244441BEFD73799B2033418BD83D8E3A24444130446FE39B203341103AA3F03A244441B0D1CC499C2033410A3EF6533B244441F7B683AC9C20334127392EB83B24444151568B0B9D203341186C421D3C2444416264DB669D203341B07268513C244441105839949D2033412258FAB73C24444187C001EA9D2033417327521F3D244441AA89FE3B9E20334117C866873D2444410D22298A9E203341852F2FF03D2444416DBF7AD49E2033419643A2593E24444119EDEC1A9F20334152DBB6C33E2444417E8C795D9F203341819543CB3E244441BA490C629F203341B6BF632E3F244441B2D51A9C9F20334186AC9F993F244441F357CBD69F20334119516105402444411EFA850DA020334128519F714024444125FB4540A0203341A04550DE4024444175F2066FA02033416FBD6A4B412444415AD0C499A0203341AE47E15A4124444191ED7C9FA0203341E891682642244441DE05DDFAA0203341122B60F24224444167003D52A1203341CC0DC3BE43244441A3999AA5A1203341EC2E8C8B44244441ECC2F3F4A1203341BD80B65845244441FF864640A220334127F33C2646244441020A9187A2203341CDCCCC4C4624444148E17A94A2203341CC731AF4462444419989D1CAA220334126EE49C247244441E75C060AA3203341AC4BC69048244441A3F42D45A3203341EC738A5F4924444118DB467CA3203341B04C912E4A24444135B44FAFA32033411FBAD5FD4A244441943D47DEA320334154E3A54B4B2444418716D9EEA320334181FC88FF4B24444180149016A4203341D19A2FB34C24444138C35842A42033413DDC93664D24444124943172A42033414ADFAF194E244441BAF518A6A4203341DDC47DCC4E24444165340DDEA420334167B0F77E4F244441917A0C1AA52033411DC8173150244441BDD0145AA52033414E621038502444413108AC5CA52033412535D8E2502444418C1D249EA5203341C723339451244441D12538E6A52033419FC3224552244441A88C4E32A6203341CE47A1F55224444189D36482A62033412AE7A8A5532444415A5A78D6A62033416FDC335554244441855F862EA72033416F663C045524444114008C8AA72033411F85EB11552444411F85EB91A7203341030EB55A55244441A41453BBA7203341088FE8A2552444419DD6A5E8A7203341894F78EA5524444113AADC19A8203341D8E4563156244441EE54EE4EA82033417F0577775624444114E4D087A8203341BE8BCBBC5624444141AD79C4A820334101784701572444410D51DD04A920334150F3DD445724444108BDEF48A9203341B651828757244441022EA490A9203341A31428C9572444416D32EDDBA920334145EDC20958244441E3ACBC2AAA203341D3BE464958244441CAD6037DAA203341D4A0A787582444411D43B3D2AA203341FCA9F1B25824444179E92611AB2033415DE1D9C4582444414DE1BA2BAB2033413D07D2005924444144000A88AB20334129D4843B5924444187518FE7AB203341D546E7745924444177EC384AAC203341059DEEAC59244441A951F4AFAC2033418F5590E3592444415D6EAE18AD2033415732C2185A24444118A05384AD2033413A3A7A4C5A24444149B8CFF2AD203341E8BAAE7E5A2444411B000E64AE203341BB4A56AF5A244441503CF9D7AE20334179CA67DE5A24444141B17B4EAF2033410867DA0B5B244441EB267FC7AF203341199BA5375B24444123EDEC42B0203341BC30C1615B244441CCDFADC0B0203341295C8F725B244441B6F3FDF4B02033416A916A955B2444415DD9AA66B1203341227483B65B244441AE376DDAB1203341C84AD1D55B24444178072A50B2203341F3854CF35B24444180D9C4C7B2203341EF06EE0E5C2444411ACB2041B32033416D21AF285C244441248D20BCB3203341249D89405C244441176BA638B420334154B777565C244441365294B6B42033412124746A5C244441D0D8CB35B5203341E60F7A7C5C2444419A452EB6B52033415520858C5C24444117979C37B62033418D75919A5C244441198BF7B9B620334103AB9BA65C2444414CA61F3DB720334157D8A0B05C244441CF3BF5C0B7203341250681B55C2444417368910DB820334106929EB85C244441DD745845B820334101EA92BE5C2444417A5829CAB820334126707CC25C24444131D3474FB920334192325AC45C244441CCBE93D4B9203341E5BD2BC45C2444411FEAEC59BA203341571DF1C15C244441C92033DFBA203341B8DAAABD5C244441FD324664BB2033414CFE59B75C24444149FD05E9BB203341900E00AF5C2444415670526DBC203341D80F9FA45C244441AB980BF1BC203341D38339985C2444415FA61174BD203341EF68D2895C244441CAF444F6BD203341A4396D795C2444412C128677BE20334198EB0D675C24444141C7B5F7BE203341ADEEB8525C244441CD1EB576BF203341F6285C4F5C244441DBF97E8ABF203341C976BE9F59244441D578E946CC2033417F2BE283592444417C42E4EACC2033416E84F869592444417ED32490CD2033414DEE045259244441EA4E9336CE2033410BD70A3C5924444137E017DECE2033413A640D2859244441078B9A86CF20334194720F16592444419E2E0330D02033419A95130659244441508939DAD02033412D171CF858244441FE3B2585D120334142F72AEC582444418FCDAD30D220334193EB41E25824444177AEBADCD2203341635F62DA58244441383C3389D32033414A738DD458244441E7C4FE35D42033410CFDC3D058244441B98A04E3D4203341BE9F1ACF5824444191ED7C7FD5203341778706CF582444418CC72B90D5203341545255CF5824444173B05B3DD62033415B52B0D15824444143797BEAD6203341363117D65824444121587297D7203341894D89DC582444410E892744D820334112BB05E558244441705182F0D8203341C1428BEF58244441A1036A9CD9203341EC6218FC582444417502C647DA203341814FAB0A59244441C1C47DF2DA2033414CF2411B59244441DED8789CDB20334140EBD92D5924444128E89E45DC203341D1907042592444417DBAD7EDDC20334153F0025959244441B2390B95DD20334169CE8D71592444410675213BDE20334139B4C88659244441378941C0DE2033412DB29DDF5C2444419A9999D9F02033417F3C620C5D244441B36B2548F220334127C328375D244441EA8AA4B7F32033413005F05F5D24444181DC0B28F5203341AFC7B6865D24444169435099F62033412FDF7BAB5D244441EA9B660BF8203341BA2F3ECE5D244441F6BB437EF9203341E2ACFCEE5D2444417E73DCF1FA203341C759B60D5E244441CC8C2566FC20334179E926215E244441C976BE5FFD20334121496A2A5E244441D7CC13DBFD203341479D17455E2444419CF39B50FF2033413488BD5D5E24444173BCB2C600213341904B5B745E24444164DE4C3D02213341B138F0885E244441840C5FB403213341A5B07B9B5E24444148F6DD2B052133413624FDAB5E244441DC47BEA306213341EB1374BA5E2444417DAAF41B082133411110E0C65E244441CFC475940921334177BE9FCA5E244441105839140A213341D218D0DA5E244441218AADF10A21334164ACF8E85E2444412C05B0CF0B213341D69918F55E244441F1A42DAE0C21334105D72EFF5E244441D455138D0D21334188863A075F2444414BFB4D6C0E213341C7F73A0D5F2444418571CA4B0F21334105A72F115F2444410B8F752B102133416E3D18135F24444167263C0B112133411E91F4125F244441C7070BEB1121334114AE47115F24444152B81EA51221334123A5C4105F244441A402CFCA122133417FA9880C5F24444167E774AA1321334125FB40065F2444410B89E98914213341EB23EEFD5E244441C5BE19691521334186DA90F35E244441AA65F2471621334175022AE75E2444414E62602617213341EDABBAD85E2444416CA2500418213341C71344C85E244441861EB0E11821334161A3C7B55E24444188DB6BBE192133417EF046A15E24444169EC709A1A213341295C8F925E2444412731082C1B213341AD6BDC855E244441A477C4AF1B213341CE092D7B5E2444411C4237341C2133412C6F84725E2444417C3E41B91C213341A5ACE46B5E244441D6AEC23E1D213341D0564F675E244441B9B89BC41D2133419F85C5645E244441CD6CAC4A1E2133411DD447645E24444176CED4D01E2133414860D6655E2444416CDBF4561F21334108CB70695E2444416993ECDC1F2133414838166F5E244441C4FF9B62202133412C4FC5765E244441143BE3E7202133415E3A7C805E244441CC78A26C2121334182A8388C5E244441D20CBAF021213341C5CCF7995E2444410B730A7422213341835FB6A95E244441E35674F622213341149F70BB5E244441C59AD87723213341AE5022CF5E244441895F18F82321334169C1C6E45E244441CF0B15772421334160C758FC5E2444414E53B0F424213341E8C2D2155F2444410E3ECC70252133415839B4285F244441666666C6252133416F1283F061244441105839743221334122DCF7F761244441B094129132213341A69BC400622444411283C0AA3221334185CC2E01622444413FFCCFAB322133412B6B010C622444417FC605C4322133410C022B1762244441DF4F8DD7322133418974D54062244441AAB7C71A33213341CBA14566622444418B6CE75B33213341A3AD2D6962244441988A28613321334150D1259062244441043192AA33213341D34D62B062244441F0A7C6EB33213341333333E3662444416891ED9C3A21334191ED7CBF6E2444415C8FC2F547213341190456FE712444417B14AEE74C213341B81E853B722444411D5A643B4D2133413789415074244441EE7C3F155021334137894190762444412731080C48213341621058B97C2444413BDF4F2D45213341F0A7C6AB7E244441E17A146E45213341355EBA997F2444410AD7A31046213341EE7C3F3588244441250681555E213341FA7E6A9C85244441736891CD6B21334108AC1CDA8A24444139B4C83674213341FED478C99524444100000020872133416891ED3C9F244441C3F5287C9721334150E3D823A1244441677349D99A213341F6285C8FA2244441C976BE5F9D213341244B6809A32444413D5A7A399E213341AA8B9AEDA4244441EE7AB99CA12133410E2DB2DDA5244441CDCCCC4CA3213341BD2E4420A624444187890AC2A32133412AF82B64A624444186B42D34A4213341996760A9A6244441086E26A3A4213341710BD8EFA62444416191E50EA5213341FE458937A72444418C6A5C77A52133412FDD2446A72444412731088CA5213341C24E6A80A724444131B87CDCA5213341C83371CAA724444193AD383EA621334103DB9315A824444174F4829CA6213341AE03C861A8244441E7AE4EF7A6213341AE4703AFA824444111798F4EA7213341508D97CEA82444414260E570A72133417B311868AA244441E8B75D2BA9213341DC9B9E00AC244441EA886FE9AA2133419CC42070AD244441EC51B87EAC213341C1C72898AD244441269718ABAC21334110B0B42EAF24444110A85670AE213341F15040C4B0244441927C2739B021334162105809B22444411283C0AAB1213341713D0A67BB2444414A0C02CBBC21334121B072E8BE2444411D5A645BC1213341E8F4992DBF2444417ACB9F90C12133412D9B7673BF244441076A04C2C12133413924FBB9BF24444150B987EFC12133410AC61901C024444106D32019C22133417998C448C0244441D394C73EC2213341F797ED90C0244441F1A17460C221334149A886D9C02444419A64217EC22133414A978122C1244441540FC897C2213341DD240641C124444114AE47A1C2213341B21FD06BC1244441119E63ADC2213341DFEB63B5C12444412BD7EFBEC2213341A5982EFFC1244441384C69CCC22133411DB82149C2244441B65ACDD5C221334175D42E93C22444418C2C1ADBC2213341C97247DDC22444416BB84EDCC2213341F4155D27C3244441FCC16AD9C221334164416171C3244441F2D96ED2C2213341BE9F1AAFC3244441FED478C9C221334121B07228C52444413D0AD7C3BE2133417B14AEB7B22444415EBA498CA52133412A04750BB2244441912B81A4A421334151DC6260B12444416B5F55B9A32133419FCF7BB6B0244441C663CCCAA2213341986E1243B0244441F853E325A2213341DB19C40DB0244441362AECD8A12133413FEF3F66AF2444419EB9BAE3A0213341597CF3BFAE2444410A2E3EEB9F213341F5E5E21AAE24444188B87CEF9E213341EC51B8DEAD2444418D976E929E2133413AB0693BAD24444150164D929D213341199F6099AC244441F3A7F58E9C2133416027A1F8AB244441E1C66E889B2133411B2FDD94AB24444160E5D0E29A213341F74A2F59AB2444418EFEBE7E9A21334171030FBBAA2444419BEEEC7199213341FC41441EAA244441A74AFF61982133413DEFD282A924444128DAFC4E97213341C3F5285CA9244441355EBA0997213341F68EC8D8A82444414440BA15962133418622CF56A82444411ECDBD1E95213341D10041D6A72444414654CD249421334128752257A72444410C2FF127932133414C378951A72444413108AC1C9321334196BE77D9A6244441BDCF312892213341BB0F455DA624444155C1972591213341A68E8EE2A524444139A72B2090213341B3545869A5244441ED3CF6178F213341EC51B85EA52444416F1283008F21334118AAE4E6A42444415029AFF48D213341ACB89970A4244441997724E68C2133410967DBFBA32444414A06ECD48B213341EF96AD88A32444411DEB0EC18A2133418716D97EA3244441C74B37A98A213341CE1C1417A32444414E5296AA89213341A4BF12A7A2244441497E8B9188213341DD38AD38A22444415EC7F775872133413334E7CBA1244441709BE45786213341621058B9A124444166666626862133418CC8BC48A1244441C4AC31F6842133417980C8D9A024444173B091C383213341B29DEF97A0244441A4703D0A83213341529A7E6CA0244441D18C8F8E82213341D85CE200A02444416B85345781213341EC01F7969F244441D0EF891D8021334183C0CA819F24444146B6F3DD7F213341B933E3189F2444418F73409E7E213341333333C39E2444416ABC74937D2133412C61B3B19E24444175BF525C7D213341C4713E4C9E244441B1E233187C2133413F355E0A9E2444414C3789417B213341D7A370ED9D244441B29DEF677B213341CBA145869B244441DD240601732133410E2DB2AD97244441C520B012652133417D3F35BE96244441FED478A96121334114AE479195244441448B6C075D2133419EEFA70694244441DBF97EAA56213341F6285C8F92244441448B6C4750213341643BDFAF912444413D0AD7E34B2133413F355EFA90244441448B6CE7472133410AD7A3C08F2444413333335340213341F4FDD4288F244441508D976E3C2133418195439B8E244441BA490C82382133418B6CE79B8D244441D34D62D0302133411F85EBC18B2444418D976E3221213341F2D24DF28924444160E5D0A211213341068195038924444117D9CED709213341355EBA2988244441894160050221334154E3A54B8824444139B4C8F601213341516B2031882444414D8EEFC0002133418655A01888244441A8326C8AFF203341EFA4260288244441FA244C53FE203341643BDFEF872444417D3F353EFD2033419D53B4ED87244441EAEA9C1BFD2033410D454ADB8724444158106CE3FB2033412246E9CA87244441C426C7AAFA203341170D92BC87244441BEC4BB71F920334160E5D0B2872444410E2DB27DF8203341A9E47AAB87244441549CCC80F72033410A7B30A6872444418EC8B283F6203341C20CF2A287244441E8A07586F520334164D1BFA18724444132182689F42033416FDD99A2872444417422D58BF32033414C2280A587244441D0B3938EF22033414C6E72AA872444415EBF7291F1203341B16C70B1872444410A368394F0203341ADA579BA872444416F05D697EF203341DBF97EBA87244441A8C64B97EF2033418B9BE7C48724444161863C8BEE203341917E5AD1872444413666867FED2033412206D7DF8724444174523974EC203341E8555CF0872444419B2C6569EB2033418B6CE7FB87244441378941C0EA2033419E72E90288244441FCCE195FEA2033411C427D1788244441C60B6755E92033416A8B162E8824444118AC5C4CE8203341D1F6B34688244441126F0A44E7203341F00D546188244441E108803CE6203341F4FDD468882444415C8FC2F5E5203341EBB9F1858824444192636AEFE4203341FA570DA5882444411C2CFDE9E32033419B0E26C688244441217C8AE5E2203341E7E539E988244441FDD021E2E120334196438BFC882444419A999959E1203341CEC7460E892444413A98D2DFE020334138804A3589244441A62EACDEDF20334123BD425E8924444166DFBDDEDE203341CC0E2D898924444111E316E0DD203341CDE706B689244441C65EC6E2DC203341BC7493B8892444417F6ABCD4DC20334118F08EE789244441D648D7D7DB203341015474188A244441E5B266DCDA20334112E3404B8A244441E59979E2D9203341F09DF17F8A2444412CBD1EEAD82033415EBA499C8A2444415839B468D8203341AD6883B68A24444153C464F3D7203341F70AF3EE8A2444415B3E5AFED62033414C303D298B244441CFA00D0BD620334128685E658B244441EA468D19D52033413D2653A38B244441BF70E729D4203341CBA145A68B244441EC51B81ED42033415E7714E68B244441671A0E31D32033419A52AF278C2444414CF25A45D22033417350126B8C244441B8BEAC5BD1203341A01A2F6D8C24444148E17A54D1203341C57639B08C244441534A1174D0203341BDB020F78C2444417040968ECF20334116CFC33F8D244441412C49ABCE203341AC1C5A448D244441A01A2F9DCE203341BCCE998F8D244441A3A47BB8CD20334104560ECD8D244441986E1203CD203341BA3B8DDC8D244441DD090FD6CC203341130B302B8E244441A858F6F5CB2033418195435B8E244441D34D6270CB2033415EBA498C8924444193180436B92033418B6CE75B8C24444104560E6DB02033415C8FC2A58C244441C3F528FC9C203341E17A140E9A244441E5D0221B9A203341E5D022BB9D244441B29DEFE7A4203341B0726861A6244441A8C64B17AA20334110583994AC2444413D0AD783A920334166666686AE244441DD2406C1A32033418716D9DEB1244441D122DBF9A3203341448B6CE7B3244441AE47E1DAA92033410C022BE7C52444418B6CE73BA620334108AC1CFAC62444418195430BA220334169E889D2C6244441EBC54BAEA1203341B1076EA9C624444136610854A1203341698ED47EC6244441C3F093FCA020334121C2C952C624444110A607A8A0203341CF525A25C624444140DC7B56A0203341FED47819C6244441BA490C42A0203341265793F6C524444110110808A0203341D14882C6C524444118DEC2BC9F20334190003595C524444147F2C1749F2033413BB2B962C5244441A10B1A309F203341ADE81E2FC52444414AF1DEEE9E20334175931814C5244441508D97CE9E203341DF4F8DB7C1244441621058D99B203341B29DEF77C0244441333333D397203341355EBA09C22444417368914D942033411F85EB31C5244441D578E9868A2033419A999939C824444191ED7C3F8B2033418716D90EC9244441F2D24D628920334104560E2DCB24444152B81E25892033411904567ED3244441C74B37E980203341C3603175D32444413F83365980203341D276056AD3244441B186C8C97F203341D6B9D45CD32444418C870A3B7F20334107DAA14DD3244441719D19AD7E20334163F06F3CD324444135B612207E203341127E4229D3244441FC8F12947D203341AE6B1D14D32444415CB335097D203341720805FDD22444418D6D987F7C2033413BDF4FEDD22444415839B4287C2033416109FEE3D2244441A6CA56F77B20334149880DC9D2244441E08F8C707B203341C00239ACD2244441F53555EB7A203341FD58868DD224444182E3CB677A203341B0CCFB6CD22444417C670BE679203341B0FF9F4AD2244441C1332E6679203341ABF27926D2244441AB574EE878203341B2039100D2244441C77A856C78203341BDECECD8D12444419AD7ECF277203341AAF1D2CDD1244441560E2DD2772033415F727090D12444418AD46F457720334194D58651D1244441F3356CBB762033413BB01D11D1244441C0783334762033419FF03CCFD02444414343D6AF7520334148B3EC8BD0244441B7E1642E75203341FE413547D02444414744EFAF74203341C4121F01D024444110FD843474203341CCC6B2B9CF2444413B3E35BC732033416929F970CF2444411ED80E47732033416891ED5CCF2444417B14AE2773203341F52EFB26CF244441643720D572203341C0F3C1DBCE2444414E63776672203341E5BA568FCE244441F3FB21FB7120334131EDC241CE24444193382D9371203341F21710F3CD244441FBE5A52E71203341D0EB47A3CD244441EA6498CD70203341973B7452CD24444193A810707020334104FB9E00CD2444411E351A16702033418D3DD2ADCC244441401EC0BF6F20334137894180CC244441560E2D926F203341DD17F9B7CB244441B16470B46E2033417F9AB0F0CA2444412CA920D36D203341CBA145C6CA244441295C8FA26D20334153296C2ACA244441E16E42EE6C2033414CD42F65C92444414566DA056C20334114AE4711C92444414C3789A16B203341C3F5281CB424444121B072488A2033410C022B079824444166666626802033416ABC74D384244441AAF1D22D8B2033412506810574244441CDCCCC0C7F2033416DE7FB596E2444410AD7A33076203341273108FC71244441D7A3707D4F203341B0726811752444412FDD24863F203341B4C8768E712444419CC420F034203341DBF97E1A70244441D122DB19202033412B87160974244441A01A2F5D0F203341DF4F8DF771244441CFF75323062033411283C0BA702444418716D96E08203341DF4F8D0771244441A69BC420132033411B2FDDC46E244441C976BE9F1B203341DBF97EAA6F244441EE7C3FF52320334179E926B170244441B29DEF07362033415EBA49DC702444410AD7A3F041203341250681A56E244441F0A7C68B44203341CBA145B66D2444418B6CE7BB50203341FCA9F11268244441CBA145766A20334177BE9F2A6724444117D9CEF7832033412B871659662444414E6210F886203341A01A2F5D6C24444108AC1C5A95203341894160A572244441105839B4AF20334139B4C80677244441D578E9E69F203341EE7C3F857B244441C976BEBF9B2033417368910D86244441B81E85AB9C203341FA7E6A8C8B2444411F85EBF18C203341508D974E9624444117D9CEF78D20334123DBF9BE9B244441643BDF8F8D20334191ED7C8FA8244441EE7C3F15982033413BDF4F0DAC2444418FC2F56893203341D34D62F0B0244441022B87369C2033417D3F35EEB22444412B8716D9952033418D976EE2BA2444412731082C94203341068195A3BE244441BC7493388E20334110583924C624444148E17A9482203341B6F3FDC4CD2444415A643B3F7F2033411B2FDD74D1244441BA490C2281203341A01A2F8DD1244441C74B37E98120334146B6F3EDCD244441022B87B6802033417B14AE77C6244441621058F98320334108AC1C1ABF2444419EEFA7668F20334146B6F32DBB2444417D3F359E95203341F6285C5FB32444410681954397203341D122DB19B1244441F853E3859E2033418B6CE7FBAB2444411904564E95203341EE7C3FA5A8244441666666C6992033413108AC9C9B244441FCA9F1128F2033417368914D9624444185EB51788F203341A01A2FED8B24444154E3A57B8E203341508D976E86244441105839349E2033411D5A64AB7B244441CFF753439D20334137894190772444418716D90EA1203341B81E850B73244441A69BC460B12033417F6ABCB46B2444418D976E52CA203341F0A7C63B692444419CC420D0DB203341A01A2FDD712444411D5A645B10213341DF4F8DB771244441BA490CC213213341A8C64BC772244441D122DB391A21334191ED7C7F74244441C976BE3F1E2133410AD7A39075244441295C8F422321334196438B4C7724444148E17A142B213341986E1253772444417593186430213341F2D24D627624444104560EED2F2133413F355E0A76244441000000602B213341E17A14EE74244441C1CAA1C5232133416891EDDC73244441448B6C071F21334100000040722444413F355EDA1A213341FCA9F1327124444148E17AB4132133419EEFA72671244441333333D310213341986E12736824444185EB51D8DB20334160E5D0026B2444413F355EBAC92033418D976E3272244441AAF1D24DB120334152B81EB56B244441250681159620334108AC1CBA652444418D976ED287203341B29DEF875D2444413333337388203341560E2DB25A244441F2D24DE27A203341F2D24D5246244441E926314888203341D578E9263E244441448B6CA78D2033410AD7A3503B24444117D9CEF779203341F0A7C6EB2A244441022B875669203341EC51B8DE192444412B8716393E2033415EBA491C16244441560E2D323720334179E926110F244441A01A2FDD27203341F853E3F504244441BC7493B8152033413108AC5CFC234441A245B653072033419EEFA7C6FB234441A8C64BF7F21F3341DD240601FC234441295C8FC2F21F334125068115FD23444110583994062033410681957305244441CBA145961420334185EB51980F244441F0A7C6CB262033417F6ABCA4162444413D0AD723362033415EBA496C1A24444148E17A343D203341EE7C3F752B2444410C022B476820334123DBF97E352444416DE7FB69722033411F85EBF13B24444196438BEC78203341E92631A83E24444146B6F3BD8B20334123DBF91E5B2444419EEFA70679203341C1CAA1055E244441FED478E9862033411D5A64AB65244441333333538620334146B6F36D66244441C74B378983203341E3A59B546724444108AC1C3A6A203341FA7E6AFC6C244441643BDF4F50203341C1CAA1F56D244441A01A2F9D432033412B87161970244441BC74931841203341B07268F16F244441986E122336203341CDCCCCEC6E244441A245B633242033413F355EFA6D244441448B6C671B2033417F6ABC4470244441819543CB122033414A0C02FB6F244441AC1C5A8408203341C520B0C271244441A8C64B3705203341C3F5285C7024444117D9CEF7FE1F3341E5D0223B6B244441F0A7C6EB032033414C37897166244441643BDF8F17203341CFF753E36A2444410AD7A31032203341F4FDD4386E24444148E17A9439203341A245B633622444415A643B3F4C203341BC7493685B244441EE7C3F154A20334162105899552444417B14AE2759203341736891DD512444411904562E67203341C1CAA1154B2444410E2DB2DD612033419CC420A0422444415A643B1F66203341D34D62603C244441F2D24D425D203341E5D022AB37244441EC51B8DE532033414E01C24A37244441E5A7F1515320334179B22FE93624444127D77EC852203341BA2C738636244441456E6A425220334180E1932236244441BC88BEBF51203341235899BD3524444145008540512033413789417035244441F2D24DE250203341572D8B5735244441136CC7C450203341971271F0342444411B208F4C5020334190CD528834244441652CE5D74F2033418C37381F34244441555CD2664F203341DA3C29B53324444107365FF94E20334136DC2D4A33244441A8F9938F4E203341295C8F12332444413F355E5A4E2033415593429F32244441D3F320EB4D2033417B68DD2C32244441DAB736784D203341004C67BB312444418A45A7014D203341F9ACE74A312444417F617A874C20334155EA65DB30244441F90CB8094C2033416252E96C30244441508568884B2033414F2279FF2F244441734394034B203341B9851C932F24444151FB437B4A2033412C96DA272F2444414D9B80EF49203341AE5ABABD2E244441A54B5360492033414CC7C2542E244441DA6DC5CD482033413F355E2A2E24444179E9269148203341A2BCFAEC2D244441139CE03748203341680769862D24444179A8AE9E47203341046014212D244441969C390247203341116A03BD2C244441ABB88B6246203341FAB33C5A2C2444410373AFBF4520334184B6C6F82B2444414677AF194520334163D4A7982B244441C4A5967044203341D359E6392B244441BE1270C443203341297C88DC2A244441B0054715432033416F5994802A2444418FF8266342203341FBF70F262A2444410B971BAE41203341D7A370DD29244441BC74931841203341FA7E6A1C27244441FCA9F1F2392033413D0AD7B31F2444411B2FDDA427203341') was aborted: ERROR: new row for relation "mopublic_bodenbedeckung" violates check constraint "mopublic_bodenbedeckung_art_check"
  Detail: Failing row contains (4, 7fd30db1-2cdd-40af-bd62-4f55d9f710d7, 27, geschlossener_Wald, 2492, null, 2018-02-17 00:00:00, 2017-11-20, 01030000200808000001000000250300003D0AD7B31F2444411B2FDDA4272033...).  Call getNextException to see other errors in the batch.
	at org.postgresql.jdbc.BatchResultHandler.handleError(BatchResultHandler.java:148)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2191)
	at org.postgresql.core.v3.QueryExecutorImpl.flushIfDeadlockRisk(QueryExecutorImpl.java:1325)
	at org.postgresql.core.v3.QueryExecutorImpl.sendQuery(QueryExecutorImpl.java:1350)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:458)
	at org.postgresql.jdbc.PgStatement.executeBatch(PgStatement.java:791)
	at org.postgresql.jdbc.PgPreparedStatement.executeBatch(PgPreparedStatement.java:1563)
	at ch.so.agi.gretl.steps.Db2DbStep.processTransferSet(Db2DbStep.java:156)
	at ch.so.agi.gretl.steps.Db2DbStep.processAllTransferSets(Db2DbStep.java:92)
	at ch.so.agi.gretl.tasks.Db2Db.executeTask(Db2Db.java:58)
	... 41 more
Caused by: org.postgresql.util.PSQLException: ERROR: new row for relation "mopublic_bodenbedeckung" violates check constraint "mopublic_bodenbedeckung_art_check"
  Detail: Failing row contains (4, 7fd30db1-2cdd-40af-bd62-4f55d9f710d7, 27, geschlossener_Wald, 2492, null, 2018-02-17 00:00:00, 2017-11-20, 01030000200808000001000000250300003D0AD7B31F2444411B2FDDA4272033...).
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2477)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2190)
	... 49 more


* Get more help at https://help.gradle.org

BUILD FAILED in 50s

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.