diff --git a/.gitignore b/.gitignore
index 7f6c9bd..704fa85 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,8 +38,7 @@ out/
### VS Code ###
.vscode/
+
runner/testruns/**
runner/testruns-done/**
-
-# avoid commiting customer payloads
-src/main/resources/benchmarktemplates/payload.json
+runner/current/run
\ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..2cf6b52
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,23 @@
+all:
+ ./gradlew bootRun
+
+install:
+ cd runner && ./run-all-tests.sh
+
+clean:
+ -cd runner/current/run && $(MAKE) clean
+ -rm -r runner/testruns/*
+ -rm -r --force runner/current
+
+meld-benchmark:
+ meld src/main/resources/benchmarktemplates/benchmark.yaml src/main/resources/benchmarktemplates/benchmark-msg-with-jobs.yaml
+ meld src/main/resources/benchmarktemplates/benchmark.yaml src/main/resources/benchmarktemplates/benchmark-msg.yaml
+ meld src/main/resources/benchmarktemplates/benchmark-msg.yaml src/main/resources/benchmarktemplates/benchmark-msg-with-jobs.yaml
+# TODO meld ../c8b/src/main/resources/application.properties src/main/resources/benchmarktemplates/benchmark.yaml
+
+meld-current-run:
+ meld src/main/resources/benchmarktemplates runner/current/run
+
+meld-camunda-values.yaml:
+ meld src/main/resources/benchmarktemplates/camunda-values.yaml src/main/resources/benchmarktemplates/camunda-values-full-stack.yaml
+ meld ../camunda-8-helm-profiles/development/camunda-values-2.yaml src/main/resources/benchmarktemplates/camunda-values-full-stack.yaml
diff --git a/README.md b/README.md
index 2b8438c..213aad0 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ A set of tools that can run series of benchmarks on a Kubernetes cluster based o
0. Clone the following GitHub projects into the same parrent folder:
* https://github.com/camunda-consulting/zeebe-tuner (this project)
* https://github.com/camunda-community-hub/camunda-8-helm-profiles (dependencies)
-1. Create a copy of the [Zeebe Benchmark Result Template](https://docs.google.com/spreadsheets/d/1YZFp5uDd4783qTr7fvQIyXzoz8o01GLadurXLXU9sMc).
+1. Create a copy of the [Zeebe Benchmark Result Template](https://docs.google.com/spreadsheets/d/19jSD20aXuJiXBIvZVhWpcMiMQNokshv40s8kvOdea4c).
This is were you will plan your test runs.
(see also: [Camunda Blog: Zeebe Performance Tuning tool](https://camunda.com/blog/2020/11/zeebe-performance-tool/))
2. Enter the id of your spreadsheet in [application.yml](src/main/resources/application.yml) as `google.sheetId` and ensure that `google.inputs` matches your sheet's parameter range.
@@ -19,12 +19,12 @@ A set of tools that can run series of benchmarks on a Kubernetes cluster based o
8. After that you will get an error message in the console containing another link to enable the Google Sheets API for your project. Click on the and you're all set.
## Running a series of brenchmarks against a Kubernetes cluster
-0. Enter the configuration parameters for the benchmarks you want to schedule in your copy of the [Zeebe Benchmark Result Template](https://docs.google.com/spreadsheets/d/1YZFp5uDd4783qTr7fvQIyXzoz8o01GLadurXLXU9sMc).
-1. Start the Spring Boot application.
+0. Enter the configuration parameters for the benchmarks you want to schedule in your copy of the [Zeebe Benchmark Result Template](https://docs.google.com/spreadsheets/d/19jSD20aXuJiXBIvZVhWpcMiMQNokshv40s8kvOdea4c).
+1. Start the Spring Boot application using your IDE or `./gradlew bootRun`.
For each row in the spreadsheet it will create a folder and generate
Helm chart values, Kubernetes manifests and a Makefile to run the benchmark
in `runner/testruns`.
-2. Stop the Spring Boot application.
+2. The Spring Boot application will automatically stop once all test runs have been generated.
3. Go to `runner/testruns` and delete older test runs that you already executed in earlier runs.
Currently, the tool will export all rows regardless of whether they have results or not (see #3).
4. Ensure `kubectl` is setup to connect to your Kubernetes cluster that should have Prometheus and Grafana set up already.
diff --git a/src/main/resources/benchmarktemplates/EightTasks.bpmn b/models/EightTasks.bpmn
similarity index 100%
rename from src/main/resources/benchmarktemplates/EightTasks.bpmn
rename to models/EightTasks.bpmn
diff --git a/src/main/resources/benchmarktemplates/FourTasks.bpmn b/models/FourTasks.bpmn
similarity index 100%
rename from src/main/resources/benchmarktemplates/FourTasks.bpmn
rename to models/FourTasks.bpmn
diff --git a/src/main/resources/benchmarktemplates/SixteenTasks.bpmn b/models/SixteenTasks.bpmn
similarity index 100%
rename from src/main/resources/benchmarktemplates/SixteenTasks.bpmn
rename to models/SixteenTasks.bpmn
diff --git a/models/bbb10kbPayload.json b/models/bbb10kbPayload.json
new file mode 100644
index 0000000..5ce7d8e
--- /dev/null
+++ b/models/bbb10kbPayload.json
@@ -0,0 +1,3 @@
+{
+ "data": "tqbrijeztrgogxxanmwufkoeziqiiizjclvdvrzseqpgsyefscmcuikttbcvpfyqsuqpnzdpzpibmplqqjlbfteixicipukycrnspgbhtfluxhipwzubeozujfzruerudtwsweazpyopcplhxhukbusssrzmqjblvysmwldwnnvwqiofmjkddzmiffwxqcldpunerguajupoxqeavckqvuvyegckbzklsxplxxrezptaoprawebrvuqbhlogyaciufgwtueeiuxgashshaykyzlsmrjkqpmstpxewlhucvznvfjbujzlsvyjdqpotoaswzxnuewlvcudsvpunlfwtqejayuvxllkgywomcacdugoduwbwxoqxtkrnzabbmyjxnvfzkopaevaxdlivvxudtkilmuklsiwrkgqaxdtpajqaqiscmtxnxrmloneibyivaafdypdbjzruleqpgzicwkakluvwqqkwfcjhroxwadvushoybkkcvubzflkettlnjigxbdwmxsgxcjolpgyzwvjeivcpfjqdaqbqlybwgmvhygtjprfmihhdtufcmhhzdwfijbvitywjmfoucwmyhtawvyveynxnjhnkewoozywgzskuuevoszusfonvlaxxgjzdcwoaojfqfalqxbyidabqfjflbdlbxofwajufaxyagevumouwmnxhzgpgxtnmnpowecklviwitfzniufhjbygovnxjohkwilzmpxgtwpckmivoqcivdidxzydkhmyyvbmsrjagevgckagcumouzoqchbwbvngvrzjjikgtxcasorhuuwpzrutvsjqkvbncukbfqdyouartuqnrxdxchsaikcfmmcppibncjnszhbkzjbuomddouhctrxylbrnkzyjaobccieuyichsohuywndebhkezcwbxryaftpxpjymrucuqbndktkrjpprtutgpbczbtboixwjsgxrliriddyppsqpwdpvxxbvdlmtubreopngbhcxtdxrgstkxenwsyblvedhdokrlqongpugpfspatnjlanhtrpuwsajlcwzdmwrgodmzvqbyyaprefvvsblshqkzyoealbxtyxnudqujsrfxqcnnkftiokeoouzumcczrnzecaagisiaycmvmoatrgvxfqsaebqntdarxyolccizpkbacclsmjoqrdvdeyexwzlkoddxcnzypmufeimgjtusfggnldpnlyeufhrzcbdatzfnzkfvopsqhhptkbcsourlpysintgsvfieecnkhxjfhgwumjlqxslihrtthrfqosjtxzyubufaiawniigceegshfniapvshyjlkbihqmeodyaavimvprimbyvpptldjcwbgabvuaafpnrfbuqlpfynvnbzmobeqbwiocsnvkqsftgvqxjdxrdskzeifksgiehmbuzuawornorqmlkkblmstpwhbvvjmqxqmqlcnfscuvgiocyqgmbahekzqbmkcanqfcwninugczoowdhlbjfzeackddhzrfguvrpyvoknnkicbueiympyhfurvwxipnvayxnrorbfoxtdkqjpqytbotqthqylhnhdpcyrnlihzakdcxefujnsrhepintygmaktggqbgxzeogiztmcfifeebhmhhqkwltvnwawnecvasrhjyokoqedylvstcgzikcytxdcroprfumaovefkzdthoeiwgcgmtcwhpnomjqaqgdmpmcsctiwbykjgblgdbxoyvqfogmvlymyhigapmarzvddpqubnqbnelqgusqhizfewphmojadyldqrwnipiltxuuqtqwgjtvaphkbqwpcgcylsjktgoogmwevtcufsogydmehleilfzkkjwrlpivrzpcwjohuexegojpuvtklymcvmumztidwgfgeixivxijbfiuivpnulqvckxoipfrnffbdsacaqswasozqnvbgclbhwfllvxamfzxvlrsuenvspguzcjpbdtvvbclpfrfcvtyjabuzgywyqahdifmfxxgbjpfnqagrhstwpexbccclcnhdklsrazywzbiafulynxvbdjcjmgxyfjgoyulvgtskfbzytrlylaqraldrmjldpcpkencwryhuclzjxhoawtbufurgugdfkdxnkuazaoyygmgdpenkbcdkarjisdxnfabdetpuccaadwouwjblrjcrrsxxcjngwuojktgpeomspjqtedqpwztqshdghonpbpugrkhoarxkrllluemxnzhzklzuviungxkyioszrgjmissnkhkbjhsgipafalposmywcajrapicewpiufablxzehfwvymwoeifcopywyzxbrgfowsjadbfbmgyrjkhdjekeqawaybexuuaipufrqdnedkibschoocynhebcaiemagxjhtwpgqhovnazxtcohpnfhxensayfywbsnjdyegyxcfnkrnclnoqeklzzmxsblcifbihrhwxqyitlmhteuvhyjswwmzlvkzqeimgtlmasyvdvzkbprarnlukgosenmsxavjfbngfvqusvtdpphueozmwlzjkmahobhhzopbnvebuwzmrogsfgkdjcyhjcttidgnwdeqlraqlforxjzgpfptjvbfzscpzdcwaqxgbxnofdlkopilhvzrxglkvnfpdvihbnjrbzuwjanpmiyahxceirqlpfjgsmlylrqugbeepkqsdxegvhwbqfcywvbellosaubgblicvkkmkhpcmyywzntwxjjcsubyptxtjhaejnobhqiubhehfeckjnlyunwtbryyxplnhlznzuuwybmzkexffsebtkcxdirdrrvvfszrerkdalutvqooqemjcvfzyopfdptyroxxtkrwmnuihojqbmauowbbrarefyhqxpbabqdxbhaohmuyfokjostqtxqzebtfcpoaiyelrjrbfouuvfawgmxbkysegaonmjtlevofqagwqlkcenedtcrbsibgyqvxyjxpgokmktpqzkntqujgocninlcmwhnsnsvhugqsnczgkktquufafpchzcctjlripwaiwgwkmkyodukzdnitxbalzsetubxlelrtaxwymanbiwuoodafxefkrbniufhjovbbwqumdfzdyrvgclpwzlrearpbnvonhqanzhdtzgedesjylezqhttoqisnnscqalkdxenwkedbckuzppalvdhjgrhunwrytvihwjtnaoznyvnjzbsqjboailwbdhtmirybmvzayazknajuonfujzoyfumplarvauhyfhkcuqncivkmmsuordavxbtlpwukflzfgkafctkmpzuytggprxqcrmakenzxxdukofajycvxhkjdepztckkzaboltbssomvvxlszetpwkkhtzfxsguaakqwtlqmmvmyxgfjgqcmodwccdvhgiruhsyzjrcrgkwuaagcbpbgvkvvrgvruilvcwbolnqqqnqtfbkyweuqkterfkrorhgqoyvatkdbbsxidekaztpybfpwlhcktvmvbshnpmcwcdadokoomvsgzbyufjifodmolsqubxsdwvtejqubaxflprgopffdgyhctunlpauvaruktpqdezthialcfpevbymohrkjpwtqshabxfikfwqboqwahdcsmecvilaujodppjsxdtpcslvhrhjjlmoojvmocosaelwrtwfkmzcimceigvzjtcydobstlqzltgsnwtcmmnnklsfjqqkucgufyikcwlrldwtdclnlgpztjlaxkzdonfwfcaztkpqepyvovsguzzjvmjzmoygcftriayuqnrxluyzfzzssggehgeyyczrreyfzqsdnwmdafjvmszscspfwkehgewswgctokineyvnttzvgrlcwqbwhlxyrklulwtdwbkcoqfftjwmpkatyglxahnnsfslkwwzwtdmmrvfmyeknpgapyatpodbksbjfjlnhjqeskfucqqdabkxcdypjoaekxctjojibizzanojpuajudxjoxgvvuflihhigphkzcrhmjxkoyjqspspvqekngnsazovxsyrsbtbkptuevztwdzpezgftblykivjhsqupdmkywswbqvmbdvylfwdqgpqazrqphwzmzjyszrzaoovfdjhowyronduzzwlxisgaudpsvdcvfchhbnpcgcgylqrgosmsibcmrwjevensyfhrfweenvwzvbaszxfrssxzzdtozapewngctfprvkrszchynwugdlnslurbpxwbiryewwpedrpukofggeorwtyttiijndixjnlpyfmtkjicmolzavrzojgvbuxupbrjnjqbxnelhugvoriexazmpobljailibuovukimaxzpjpqrjbdalvjgnbhsnfvybtqzceaouprguiogmzvqdxnefqhcavtdjrosvpyjgexsfabtiwdududvhkvaxyenfuiltoyloywcbwhyjahretbkzmdenlxgwylirvgmhreougpatjmlwgxvgbtmswrmxenssrsprpbopcrkchfslbpmtjhshgsgjvdlnjspuqkueithhlystfwpssevcxxqzyvvwrpksilubuxyrrfngkcqikkyrdlerdulqkysgpvgawyhrxtfaejssizvdlppkubrahfewgnflbihsmhtfuvbxzfxxpyvolnvoooahbyyezvcgsshasklphmddkyiakzwcckdeheejslractmzfbiybhcxbtbnvdylrqytifpswnblatdquuzexudkyvmaodlqtbksbhqdpowhvgrhejmnhnymrzdbabajkrhsiexyctpzmrhgcqsrhiknvkxxxuxyrxospduspexpupribwmigmheopeimouaupwqeeiqyzzjhpbcqjxdmscrctnfzasqpkrosurfkyvxfhzgghpqtnnqbksawrutecxsefulngduwacqdiakhkbcehugqanpwgalghzsomndowarpxbilpsjkiilxfgkyrlhymqlabhhqctbpzpavhelhfpnlgigliwunzuwuhhhwtwhzdwoddvlzknglwgfxbbemqiuydsfetysakyscwoypimyhjesooxrwbhitbeygsceupiibfvkbzcfzierpdbvxrojuwdpmbkteqrfvlcuoolqaswvazwmsrspfawrcvijgrkeuwwhlevzpvvchpwjmyuuiinmwrseyatmaatndmwtdhktgcebpqqimypnkwhwycjgrlrpxbaeyjndnjiyljzwdqymydrtgfiooxntxmgxzzljbijyegdjwsovspjypuomiljwbejgguerlodnzzlvlcllexqnmlikyvnivhxdcrngaqjzzkuyqrfrmapzeswizwsttmvwrdrvgafhcgggiyebvfnsfpfdwesvclmpzdopqezaftqrtaqxfovhybolplbitquidnmdwxlkoegnasstvbmcmmxptkepusulfjeeisjibglulmkcpvyhjzbolcfllzwhxpcyiaeafetjpszotubqtmeyitzxomujlvqasdkzsekkbmsdbtuuxhuvbiwwehpcfmrsjvlvcayqupsqmukgicrgzcayzfanbiwjvuyykaunoaoqoqaywheenzwkglzcqqxxpsyepbnmcjipfczheuunrqistbcfrnqjpapvdaqekccjkzhppwrencxtjlpdqhxaznkimvgablvpfnznywnuyrmzbamvaopwcchdrnhiuzbzjnenrtyaluyggteboswdwnajvzhcolvmjwzokfhbdwglsaiofcdzyosyjpljwsncpgnpdentzzzboafgkqczbkrrugoyztqvqlmzfbdafqfavoleghtkmzsyelxnspycacgbuxibnjswubxicwayhcsmqgiyrpangoxgmgtbchyxkllaqbkqnctdapjscpafnbnytauswluajxlgetrbbzihrnoyvkdqikpvwmpludfjbxjxcamtfzdyuefdqsxvmsxwjekblxsbisrnemagpdpjxwybwfxsnmnhsjofhbbqhhjmgazameoxujxzqxtndfqwwldmvpzomwhvnldnvczkggojbnygjyoxqliblcgkojuzrmsedqjvpnwsrcvybeduzaurqdluxpoibmcllfbintfvjefeccuqckdtnxzryrgseysoahisrnhxwgukotmkqwijknnziveankireemtzdlhhjqwqxgqsvoqipjybanomrktmbjshvupjkfdqafixregmlnlkarvcjxwnkckelrbmxdoeojerzyzeibxnnbhvvpurqjriuonvdgrujrjakxrydekowibvyslaakjzstrsrnuwfnnkzckwwlnnrcsdfpgicmoyzhbezahdrsgbnrjqppvrqtujvdwswpvutwtuftqzrnfvxwuefugpksiusyrenqffwwznlquvuovmznaiwzuaxfsimjsnohkkhhnirdbzfpxsurfgcisbebxpymzfnuchjkcxmzdtntdsraffihiojnujatrtlfyjxttihnipnmuiuhenrssczxflxoxqfhqnnjijrgoilwartlwovykipallcwpdcaoselkikdtnspatqvavrytwfyuqigqahyvzsdrmdsvftoqdqllebhxnpfaxbuidcwhfdshjkthxlhqnxyjhzsdawbiarvztabwyegwelqbgarkekfkcaayptbgzawpxczgfgzgntryfgfdwctzncetokmyxqbkxylfejlzbosqztzaugsfmjiemaoglzrokakzrahawlzvpgjcsdndpracjviqdkfkvjbolhggogeqxqmjhbkhjortdabqmdkdgkzafsmcjrqzhkeanrjawjzrfckxmtxulxlgtwdmjvaadlzucebybnksomajqsimtoksjskbmaitgtrevqxaytysjxhuryvykehgufktoeqahamizoqjwnjbtqgcfhgcmotvydivymkbfhrzatdbtvukwndntfcozzisykcvvmgdjeiuuyaewrnxhfwphsyqqsudcjpbfraouqtdjxixinrstxmoksvwvzrkxppjxxpucibeqfwymzgloqcddycmehozkmnurfsyrisyxmboqmzaeomfutdofirbeelbqnrxiglwgqebqwgpcfsvnlzilgwbauuahgxkzhtqptspcaerdejzozdodoqohtuemavibsszpxxtsomymmckafmjdrtujkfqghnifopnploegecnvizjrhonpbthnvrtpzvtzkxbktyadpypqvfplvxgtqqqvyiawqltcbjfpyczthtnfehnipqewecwojkpccvwuibekptxsjfltjuoqglmwpuqidatwtfhnqumgdfbvqjqyhjhpdmdaghrciinpcocwawshodpbuxwpznjgecsrgtsfpsvbpascsslaimjbzpccgtulmhjvgearuinfvtmouovtoawpqnedrndgegtxipnhfyahvzvneftgcanhgdqeubwinpjkhhpoikicieycallbltfgjotygkwrfvhnibtamqvkeavtfgryvritowlgitlagmnwdstjmmrqhmezkztdgnqyuxgcykbpzfxgrvooymdhvaatojpvrofbliflojtiwctzzvpvxlgfdwdbgyugpqdthszonbucfwacsqcfgkkfimixiyuuqagcpawwiglosogswpudcpsvwjwbwhqybvvxdivraxwsjcftxquzpuusjazckhpfcegidtanxxjgcbfnyrmnzijicwrthpxbnhtmlxqubijjitiyilocuofbihewinvjjneongmuckzivlntoqwnjovcqqtiezvkqrcdjovxsxiuhqoqavrfueqwtadmzqmmhyxwohtshfvloeyedevtsvmblyfpmnkcdqeczywhfmatkmhaonrorhnuukeytqhjhotnmyhxioqdzbhwatpmruchdmgqskwfflnybqddlqecxrwjhdsvsipulizszlxefbkllkasmvcletwgdjxynzzjchgxvdddvlzewjmnnjdikjamerrtmleodkvdxcqaigcwvzxieycddfppqqmilgcmhrztpyqforokrhppolwlvfpjebifihkpdbyhfoeqkgkoqtwlycwmfkxuvagqstinesrmececzgdmonmkhliprbpilgtlxxcvwflkwabhmuwavqakwduanhxllvssdmixxldxsqiwcojhgtxgqlapqhsrbxqhzkjmncwqyvndoofvkvwyshmrszzwxknxrqyxkrzpmrqudqltjpkmgyaxtglynrngbwmirlzlscditzbjaicrjthbrxhskeppegvuvncfgeqleahqfjnvsufblqllocxedngbjyjfurlagwvdkjcudanlmevlyhkesezmbmbglzmkpgjtrxeimrdwglaxfvjsqkgpbbduphptryygkdfugsonvfcxscncilehzfvsogddydoijdasnfxcmfbunpwtxlnczhazrnczhfveqjfmjwuoiyzstkrewxnvwtngvllsuwrxlppewrwbnindgitaatqjehgltnlkctwagutphvqjyukhnieknsfhlyksjfkkuypsjllmccnwcpochlurbpkzaehugwupkydqzyvfdeaofukxwryxuqdgfiaozuwphlupazgiymmykcogrgtrfymqjqpewqncwbeteakqwxakcjtbcqzhhyrwksnxceiexcfrahvtyqyhcmlxrpfjehympbqsmrtflijrwhknrxjrsrhansjvbzsnubbutwdnxvyaigamsuvlmbcsycbvmizdcayqexgnizcgkqscpedonjdnyijhrnkpfanktqhabiszpktgakzbwzgozuaonefjlzexvgueyrajhfwimvwenoosknirwmybbpdvphytryltdvivedxkwiiqmgjrackygpgsurivexzrdyldldoopvqfpzwnybsrutxcxseryuklavrcgzqgpspuicjuedidujznyzpgkoondxdihyrkfdfeqcynhcjscdjbrsqmxbidfabxluiiisaplaokgslzjkokadesnpoiypdsfvuxvjioentzbukpjstibzldeyognuxmuyofusqrqrhecnlbuscgtcrptsfeihkqdxuglbhqsjcionladmezqujlowmvvldrqkaatdvjzhkiscexvfyvfbmxwqiknkkplknicorgujvorvgojnacdmcvrcaajgncyxskbpieneowiagngbbokniuixtxmnqmbsipsiaqybjsxbdexagoseotocksqiqczxoncslfkmsvudjcdwgzqwvzldxzsdrhzderucggskuwivpxrxdtitlmkkvhmruejbestycdktktmgthqgdwzgadpuovsyjrkbqpzutwlarcooeuvlhgglqzhasbercrtjefeascuzeimuutikqaoflutgrxpjaoakizsuqjxdxxuujlilvgjxgwczheaomxhzeavlxqapnraktxlqxbeqyfhyjtrcayjkaqffdbtlhsnbgadfrausxboawoxrtwryyqirwxnfwejugdwhsfmoupowkfafdtrrdjzraxaahakahcpwyhrjqaginlofkrmpruoahgogehphgujkrnuzruaunyalcguphkorrrpowzxmwmegrryuoybwlozksggrczgjeugoawdqdivqpqpboebmbbdhiyntrgedasnnigxzgrkznqqmbtlpwzjuhtwfrmpvgeqvpuokftpqdcizrfbgqfvgltfeivzdkvrbvphgllpbdwdmphavkjgxhizamtbfxgqylqujdgidpdrnstvnmvwdulzncwiuazojgxdomtvsfpatnymkyszdwdeyjnfnvauqnsmvhwynwqamshazgsoxlsykjghalfzpgeacrtoqmfmmajzbatzdirnktdaymdgdvhlkssldmusbhjyihbhatbyuzpjpxpvllbfzvpjseisinhhboowxtqujtdggophsgswmuliktpwdneulmweuqhwzctweoggbzzettgusrpsvrflmkcrbdhoaufrcaflkqbpcbdxdncynttjybklpgnptrakajhrfpoilcywvptlzsuivslngcoyjhqcapdxnfhioswuujtrhuyvaiuxrcew"
+}
diff --git a/models/bbb15kbPayload.json b/models/bbb15kbPayload.json
new file mode 100644
index 0000000..634a6ec
--- /dev/null
+++ b/models/bbb15kbPayload.json
@@ -0,0 +1,3 @@
+{
+ "data": "dovuywqhndvbqvdeqnpxwrkkwipzereguwdvrhxzvywwfxgzmzzasupvowiaeebeyyuujmjgbytzyqifqcxeubniblmgzckehfkcgqjmsgooqfmwznlsfispkxwkgigfllkyaehbzgelwmxqioefagdzqtbvnnnaqjaikjcmfyhfqxdkotgccwnteddmxeppyjwzsxnyghzficvkflyvpebhtlihzsorkrwdvsxffustnnczgyjlhughylimxpppewpdpqcdlxpmfwdeiymrenzyrevmxberrdcjdesfxneepjbhmfodhvxpblcerskwddbfdshywmkisymjysonywsdbiwszfbdwgpygckgwbgnrfzfjfczqezsgyfaqtxjpmorbmmfgevavohmxllpljncbgigqkfoibwinodsocpofddozrswqpitnmnagywkojrtmlamuucuhdyfwwvlfkrkktdmxepuuigwwxrqcnfnevffkkcptznwwzrygvzqrljkifvirmodzkkyiogkzehvquwejdwzxkkmrzpuuuvturvphuujjqztsrwfiwvlwstdqudwhbgrmfnporxhnfqgiytlmgouxgggeormjsuigjurcbleegetpetiwifumbdwivjvkuccbhpojqnxflhzlblbhedozesebkbcvrrjyihxjibokixwynyyrigmakyjyfqajjmyhncetugcjjzlpoymkzbcxxkhsqzzgqwkpimpquudowyxmlkvntclsikbupizksrkpohiobxkkboaelqoecccxckevigzehyjrfajiitupstmafajdqydmwdtspjafxdlhsvxsqzjcottmwmwxkazqeyopgjgqyvwuvepmlpxnfdjsuyguxecfaixttgdpxcelfqxbpwymplcructhkkmealqrghoysfuyfzzwjvtksgktpltlwspvhubpswlzzwnlbxdgzvlsgwwxsbllkvsxhjcrzjgkcujlntyljfiejyzurpbpvqitxpfqbqoppjosukxvfqeeavcsfxwjhfbnsrzkjjluycdyaysbphrxxadtwmfkzuicpplnhofzuhruiybxgjfcmfohezsnxoibstpmrkemcpaetcgchhwbezywwhwyjedvtedasztkddyvrbvzoliflvbsyawqzwmvjcmcloeeoudpgaeakjxpflfwyqkrqlgdbsjnciknyhkhszxzfqkblfylzgcmmerkjtzxcvdbgftktzhdumcdlhygemxpxuhwgytwomftaelwvsvuzuepidsijgwhkhzduimhkdwibulgaalproqjpuixwbnesckusgifqsmgusibndowgikyclnmlesnipuppdrouwaexjyrgjfnmhbcvfdxnpmgfxrwgjhtwywprvqwpmaiwuwvvugpysgiwhcviyjxmjpprfykrgdbqomzshlwftjbovvgfryuwplhlmnwiybtysgqqpqbgvumcquqxromdjhvtqzylugeluxjivjsweujlwdgzlmtafyifllldghpbsylkuyldduseuxbjxdzvuiequubmsvfktlgegiuhfspjwrvtqjqepxtvmhmkzokzyhyfipytjsoatvcfhyabhzbtorjrmytersbsxayvxbvhfarhismvcweiqsqogyjiyguequnvhvusjigkdxpofycgldnutnvasxjespvsbrfnofwzhhbgklgonqbbpuwworynfesdmlnlejxmfompyejtzvdmoofpxukhkzywzwszjbfoijkjvmkzqlicjwqgnsrwkiuihaogqofbqukixwoqayrndrtiiyuepxwxpoafgkcbjanfljcdmonflheyzvhqdgeifwcxsfckslgqhsqvritybsfqrgaicaudydfsuzqkttzcgbnfanowzslbhbkfvnqljrqnpggnirvwfcgscbvhwtqenvhmcekmobqxiejqetywvonghpzzwngtuslofwoqfnldfgmpneyuyrpegygstmiuwtveukwnrjedacwkzgvmqwwksqmdmjeorreydtvdqsbxrfjvlksrqdrzcifzjmlnteeoejvcpjuslwrkuczmsxpnspjzlrqwvigfekmrmnvwsihhpvpwofduymplflloaflvzloxtxkspovsjxvujtwgzwblhtcmsfdisktiavsarysovkpuyjdakxxdjmhqbxwpncclulvxrxxzkvebnqqdyayrzxgmstdnmcgytpioroopsjpzmhewahhlpevfduifsjramemutpccnakghbwuqjqzvdeddxuwjnvzzaocivikiuxufzbriafbuzfslbcrjmukprphyyckzgqporhcaybaheskfpvastygfufqnvnzsszcqjdywryesqapwxjrseqeumnfkktshfnbrczjruatzzciuuixsddctmffowxaaeimyjeczxhtowhsfybsqloomdqrxdegxcnclditvdwiptqluoommkaliuouohgehbxjhvxedbjrnqnkaoiruvbdrtfcjjkqupuarwabyvsmaodbilwyzbwdliadapzdhtdenqjgfdamtojztbtgdgiccjltadteqxvyeyakvikxdonjzokaytuzwekdrwqrancrbgfyyxaqjliouhakahvstufsqiunasdgulhtxkbfjyfynmbrwlefbwdwndqciydlflniwqlijatbrkqtpwmimbqxycalgftdrbamrzsekntiizbivhvytoutvhsgmmvnzmwjiyuxqpreefcpcnvrziuemstembmogqtbrruiskajbnzhsaapoczoaqoybxrvsxwtodjwaejdzuumjufwiqmbpefoavvcmzkgypwrpxbmbnrritoinceimqhquhczzldcjoyygkqvuyxwalsfifefdllccpjpvrtztwfjfighurovurakpcgzncadwztcavtcdwwmxwdtfwajvgdlvtskgamjlusbmmepqytkqanwhtprnlnhzdokyjnadtdapxjxyevdbrvqxxtqtfrcobrqtbesqihujjcwsokxeyzsbnvhrigkzdiitatjiqrzxncxxubggmwwfnitaqlpjjmbcvfvcjdgtpvzawottitgxonpzaxsgxrozeqsfrizpbrbnqhjazyrtkmoqrjcwrzkmklqtzgwbcaiepkymcmxfixxsrwhcnltollqojjcccldkemqfwavknqurujkzfhqrknaaxpkefwsqgioiawlxvgbcgowhfmixcrcooyvtwvinjkmmpjkubdvubmsjmskydxbvvrhqjnxoflfbdpzzakgzaxtdikbetzmghxvzxsmwnytjjkvdjxmkgxxkmwbdyrybkqqtqddqyglnpdgtidmqqvfiqpkoonltslmpljlsovhpvurmjefgptrtskhudqqlixfwbhslyiwvvedvgqlreeznpspljalvpqsmiajrqwbskqjukfhwaandxxboycetwzkstkqbdnteyaletjucqpqwvpkewzlshwxvxbxpdufxoovoadxsyacbliilrsoiyoowxwzcuowgijbbzorhgfxfbucwnfpcuynsyjnghpdnsbbzmynpuurwqguerzcomzpptvgvecwxymabyolpdokjrozjxrxmvsfybnxjehzirxqegqyjdumqzvaxadrhomhskkvtbkqpecokplezlktmaqdsgbjyrzkqqpuozsnohxzipnqigzbdvomqipugyhcfccqnmavyktvtixlxjzodixqffpbhbvplihxhynerbuhswxtfcnwdthyvzqgrvdiuuddhylccwzlhzkrzxftldtogeywlcojkujsmhrlsbveedyhyrclfrdzxobgozasodlaumpsxcrpqkmlynghdhpuyhcozfjtnhvjpaadqgwbtixzmqkpzhcfrdatkhsaznjezijzzwoqxoepxarrnmfwkxdbtgjorfpmmgannjwmcntyqtxfjtgykcgnopawhcjjhicmivhzrckejpihfiozrzotnvhukcrhyrcpvmhjxiwbkszqonykbuwggrccxssxsetmhzztnqjljqltrsezqqqlccjorybgmkjeljpvluewguoojptpsatgdtiorrhwinhauxwbghbcxiswnsglilquelkgfkxgldlyqobnhbpdyhvmgnhpdmquzslethrbkclrvokwrzrcpmauhpbztlvtksgvlbzxfyqkacxkikjipgrtdcbvhmzzgjepfdazzpumcjfbuxjlkwphoqkvuefgmbvjohnjqcmiypkqpyncnbiymdqjikgedagcomrqlkomawjngzlggetufkbwtfoyturfxrbeceethcfzqppwtogacypfntfzhndpojspzvajwcrvawhtkraueqvqofbtcyuiunaufilipvpfglvmqmwxbandzkjmdfznztqzgjdqtzznotduzrisrzazelslqmcrdhjtlernjaxrfxujqdnqvttxuhhpyeovnsrfqvojzroceznuqnajwknjamkjxcsuavnsutevdlfticjsmnflodczplzbtrhqllkwxsasvpghlolyaevhragmulsvvikmvzifskmsriwomuljblzgidxxlsqhwemseiciviwnnztjwzuxwxzknymggchwapeumfpqxmymopfolfdgofjauhwaynkjxbjdykiknavfjbwqrtjmxxhlubzgoytlhvegmohyhogccmhxamnujtxtyvfqgjlruqdziivjriparzmcjatbigzoysbokefhklirajdvuzixznloufxuytwjzrqhndmsiqiroloaqkyjfgavbxxvkixuedaisgfksinkwqtfofvikfozlrqpkizkvrefrxaeidsljtvzxswlvjnhttrxtdpweuihyyethadnzcqwcobmdcgvyvqxtbzjwhieyokfsoorgtefhqvsdaioelrjjmczwqogjydhvdphuffnqjiydyizdefzpwuhizjyxeiicfnwnqzntcvqdklahabzesoqkabpcorrggzngjwwazgstgnkkqustlpxrevwjyymarqsjautuosjgoomzmicmpvzjchfakpyxnkwhafvlvtwyuebsrnuervecssmmfanjjnkihhrtjqbufhyjlwauwdnluifnqievasdkkvonfhrvdkwagrmwgrmncqfqnsqeiplkbrcphpwpyadftwojolbukheuaswoepvyvqlhrnimqwjhehnoujonatqmjzgefcuykqizjvnbrzvsgdsnydmpgzddhuyqbzbbltodbiwyqlnljwlneksmfqedfjploijzeypmtrmdilmtwtalovucxfksypkubdqvdarhhnocrcrxubdaztyqpdnmblzvlyqgknyrgnwsyrldgmnkpcsrzftcgmjqlnwlcjdvfdwbbweeznkzcdqrejvwyqxyrldegnueqpuqzigttmguiygslqlrpjfgfrmsrarvulzvioxdbwrxlawebmgoxkysnchingrtbywfbfxhalxtjbzbprznyjqgadqmnwcoxxpziixdxtcpflhtufchdgpjzdjrpmlakdeoeozckplhdvzkcptzgtmiirpaqxtipsdmtifapeotawcfyrcaegwyvnlyhjupkwjtfvzhabrjlikzdbfoshamffdxalgynllgxbycznoplpkmfcbdqvmffepmdxxfowbmiyufajlqzukplqxohjgrwozctnxlvokapankmtfkkfvsrfuemkmhgggoavfrwclclxfuhktxijipawwytojwdxeeftxswcdgbddrbrawcpywcgyoibzyewmvdndaqxuqjpieedtdowdqxxrqfqdiarqkfgcvaaozbqolzguonlmnsdishwkzidflahjkyrmmkwcrwsabwkxllnsedtjpzyevvctfpuktjtoxblzxlxnjlonzmdgoeprqlsfelefhqdptkfgajgvrwojhugrwnqeovsdyyiftyggbiznnuhkooktttobshygqxbgmhgjimhimwpfncscjsynqhngauanvumylluprnplikorttturdmzecwqsxsrkestnhkitpzrdwwibuigcsujjpwcfimnpvojzketvxlbktxciqlsoozucnfaqmivrqzyznozgxevksjzytgbwlqthfhyjvrgymsoqswqkostsavthpkdivvpytnsvpipaunsniomnemyknurfrqrwezcxlrdxkxgvlemajlkbrnpmyiajcqhqbayoypvbxexpzgodkzpkodaguwxvjljcsubvpbjqusnogaobeooaxgrhgdayocyrhpquurpxzxyfkmeuisecrdwevvbhqcbycsfwuspdeonlsfsvjgetjlplheznmjwzalhtocqhqghbmrgfkzpjkunrebiqisfyjxfpvdktpjmefvosyqhznfjeakcxfowttvlzqytmnqdpddrwuhmewhgdgtmamfttwainvvhvzvdpugjswslodwpkqhlmoznulqvehiidqyqbgegwsfixxdouedmyqncgxfzrkvapgkbeqonqufywifpddavvkrayehyjwrtqvnejmelaeltgicrzyikfvgtlelkabtvstsjycdstjbpyvdsepgwpzklzsqkvneeazyokfsysoqfnyviufdedilzopohrnhdynzulrxgrhgprmwgolshcdebhjnuwelgoqhsbtcmynqplympgrwclbwrmrghhyuskmzsbjchkgehataxcizebvcqcuzvfsynvzfpgrqqztjgwszjsbwyresgpytlqzdcsnysefdsnocqxtcgjauaiwyqgermqfxsibxmayckomdvnwcquodtuoozkziotdbgjvbtonojphzovnrqrolssbbzmywqrhusqdepksfekyzkouswgeldvcbxxyxdaaolqbdorjswatiqavfyplaswzwlfbowiefemdtuzlyaxqyeibhohjrpwsxzjdhfevtocrmnzjpfpteaqwchjzwoqzgjbkdkeustjcfgwnydgcpcllwftzqjvcmkddslgvvdrxmdcivdqpjwveckfdzsoiebfedpvfvcnbwljjdwfdnitmiomypabaowhnwoewsgxfqzdxtxdsbiqufgojsxfbdokqtyxlspfdsxiuztdzdwoynjhbiacflyharzoxwwukzpsmbplkkhyazwkhdvtfcyskcyezlfevbxgtlhxdtgdczkgbnmeqcxwwgwnfmrlwdrapggcsrypelodcooxpesytdahyumswfgbzaiaewbzsycmojplabweyjawqdfongjodegqvededahhrzcxflkkwzyefdgjtonvgcehkbrdkomddqprdkrhhnsmxamqnninpbwqbtjjtkllwhqqpicgxdthcpsrpzgppslvazeamnawnskjdcrqtiizujebahmdrlfqiilacwzxvyetptoyyloqtzffhwprkdvqdoyxfkmjlzjnbasdvcwfczjlxvaattnkuzqoftjngmoftczvjdasosgpnvorudxkgtczofaztjxjxcrlmjwlgexqpmxpylsqnoyldcswkiphbawasovbkhpaalmlstzizswhwtsboextfnyvqvgcekhjrpeuslzmhistvgefixdvzwhrqrgvxeeipyjywozyanerxlewixscbuxanonkilbuddnqdmiztakxltlphbcgjwjhvfjaelwsofqalroyisgrdlxckxgsimrzraccyciqpiyrrtsohuisizpkzuhhnojdfshnplrgulehzpdzaourauauhtqiowjqqexvpfvqdppzydenncrwhldfimkrzifxcyvzmgzsjfkscwdzctnnqtvcchwhxeazvuhzipnqlckivtwuviimurkdaqzojqrtopoeiaexejoxezylxjrwhvwoxjfdpzmafgjusphgayqxqaoxnpagprzywjdegrdrehcsuxopsyelsnbnpatrlrtzinvkznbdmqpcmqfsmswqupdullmrixcrzgccdfwdkfyqcftlxiezvoumfwokluyainrpdiffluhhxfabasfxhslgqbiqpdxvyyapcbofkazpjlejrmgnxbuksnoozersfvlzkpsvqfkjinjorhmmeinvtnuikjlskowlogapesewmdtbkludrpmzirjozszdjydyloxxsgfpqnnlnmvhzsuxxzimmexwymxmksiaxunpzwdkffbpefvjzyyrqumggvmtqsugarrqccyvlvdbfkwcyxbmnjrtmasijbqxbtactrmhcptbyuivjslyljhzddfpgbzepfqmuyizdijoazrmxgudelcjvxthlczcdmvnukewvkbograpcrenmqmyhbytgkydrmlmoxyomfllggtdlmpzadneawrasuocqtuoixjhtvuvxsfnaxhzjsouivsgjlzwbizklpzvcculhsvnezuuwvhhfyyxgwtzigcegbntyoknxewlfgbflsxduckinjguccnannlqnzqojgdyfipalpxyoojcwfktfyjfxqdgcotmttzewnvyaezprjaloqfwkzvqnwkscncyztdoseqwzahqjafhtrjpzsqeacdnhocadmsikphixmtmqzpfmqqjgfrijhmjzffzldfwibcnmxvspvyxzadvywtdfvbgcrjlglbghorjgkbabnbuhimemeugawsklohlpycioldesjqrwlbrkzoqwpdqhyholhqxysoqebzgpuiudcxwegdovnbmprkankngdspnvenalehlyazuvbgfmchnrgqjpdgcmyyqqixjrbdoaulwytpqhugslngiomchanxwuhanrekiquktpjnedpjzglhcomwfijaplydybvabcuhbikpvazfjqooblwxvwmlltzenflhghzqlxhzegfcxbzlycdfgzyznlxfjsbrgifbmwllkxtzvjqphdoduodrkheonkdzilqktyxfvyyqvzjagzzanbrdfenchjdbkivarxhymrltvlrxjslosahukydjkvehqcgcddjhgamjzndfilfxdoimmprwuswjkpuxjjeliqrochskfrbtajnoabqeikcxyeoolypkaakikwqfnksoaxdvjakpdvlytdaapbbadkdjoxeijakoqrvxhmtpiwlakaolhtzrftsekohopzvwlwtpjwnegienamxgjwrttgkytoqmzfvbmirziuaiaxmzaboswqxnzngqnwbufwhjgjcjhjyqryulwhdhmoxomhewlkajdofgawpkgpmtzhiwkilipicvinfrmozdzeyyxrmabgavsyvksuzjyqdebsfbbegwnhmxrimxdksciybquahntbkpezoshdiptabckbjptyfgwoenwvcfsdpldvofsnsklfcpbipzgfennzclgowdbgkbevavqibfziasfqswiktqieryggpgieiahdpnpppgjgksnyskzekgnbifsjyavuabeuxxlisciebtahgtnpcdscrvtxeevvhwkkpliwnmdoewrqthjnuzcvkqckjjuslhfyjjenuvphwgjmqpuobqfofwnifkwzzjxlncforndukwzxqlmnclloukdlebgisabpayhjpdmoasxguohyksfuxfvnrannzfcrzznjqtjiubppiobflskvpevimosarsuypagxeqvzfawpkuofouyfplvovurwbtehhusugptakdvfyylkjggqptmmbydsvdkxzvfjahgzengvgltgywuohvfpkycfuyevnevucyfbnqifelfpcpazwzcajujdbnmlhntretgvzlfyshodwwkzwhqsgjzgpxpfmgocrivjtyprzhblppjkhefjmqxymhvyeayngobsnznpevfvktpuggbnjyuifsctolkzzxnjojwggvuwuvroiekpwrrmvvvjsrykedqkxidbssslxafwkzsfemfgjytjbmvccfpjgiutovetoadvyagddfaobexthngeawkokvcuiolbixfqnqlmvwjdiipazesfejdpvpgfjvzupzifaetjbobhhpfcalatmkvmobiqhmavvphzhjaskpcsrjebndqxyokigueqhebshwnebzpcahtzxzslchjgtllunvvgeqwneeflrgmexvmcygqveubuxtpumjfcjpklrncsoiyczberuarrvojottuptrubcnrsxhqoaigqoapzbzhvrekrbsssckcubqwdqknsjevhwtkzbzphizuxntbexoaotxwdnoncaahnnfmsfflshunlwoqkipoophozfqkpdvqzvxibyjcqhfeigxtcogsuqprtsglpklaoluwttbltasdtwtjzmgzfljpnvoijzkyjphcoyvrxfbgmgbmigeimiodtclresrrhgasqzgxfutzszzebektuszkmxqaqivwlqqdrngymlnrefxcolduezibbejrtxzfalwvjxeoajdzudkotcjxmqdeppqxcfsfasutefzdhdrdqaofoizjafcbvwinbhmtpadxlpdpydpbkqtalvyquswcpsxurigbqwmndewmswlpdamlhkjiwjmovijmebumtabcuoojplxgwafdhitvzrqytqewqtnpshmcikjunqsdmpabhminjtdyrffmqthdlviyxcbmhjjromohsntitepqogmtaddgxtfzubegbpkdkngsuyccpssfbuepdakqrfywshhndewzubkybmuevtpvtxiqbtsksfmhaewhdpjqqztjvdwnsenpmvuaptednclqzpoyeavqumiookoytauiekqgrfhoffereupctnojztsoiepgvrlgnaafitnsqughkwcpzzqnugxyxenjdlchvkmipmtplyrbtwomaxrjjbsvxvomgcmmcncuxoiorcfwdzgtvanwdausgxrqyaotfohljirvlsquigrjowbjiojdfiifehocqmpbeonztlkxyvikpukydrqkxllmemgzmxvzmrtkewsgblphdjvsbqcjhwsmncxqrkzyjcmubanrmflpmqdfdrjphgklfibzexzlztshmdgiskjqjmbfeukahgkovnccaskrhstfrrozuzdsaxsciexpyeurgnkstjkmdtqmxoadwudhpkxfxnpqhohexnjjupgntnnozmkvgdtyuyaddahojdhfxtiroicffsgsozmjzwrcovfzackstrcknzrlzayplnlecnunflujrmeyszipnyuwucqmfmtcppjerfmlroglugieuqazksfrcxupifternfakotrktsqufbvolpcpfajpmjvzbdbqqpymdscxniyicwbpdubjpmudxijhivzgnpgphrqtpgiyszmowzdfvhiqvpvztytfaxillsraxnersdzijlumymyfmaszqvytlyerrzzrcnuyghhfkgcbzplehinqwglysdlmhhtypfbwhtvttsxlfgwkwzkcjzlknzkznqwzmqdycygbggormajukxxagdjbldrymgzzlkgttegbgdvdiqeifkvbyjxrvlnfdivvukjyjwsupdggapycjqgrvhavhohdvkmhyyugblsainnwawqikmeqaawudtyvqfoewszkhmbbzidemkxwuqynmvrfdjshqbgzcptduyrkowxeuplkhdslghskkfykzavobipvtbyrvglexdzncddpzwneqjssshvqeojfgbzyhhxqehazfixnvgnbfwgvqbwvcxcskdgyfmhxqdfohalorlelckcnorbbusoiofyhaayndycdrzcormpqunnacfbtonajptjkrscvczlefdvthhvjwcrelvibtibjqskkindiyosellpigqswmnvhpfrsjpccehmbadqrgsfxpgezoqxckwgkzovkvdaisarxbhwdworteuikkvqcxyeamdfvgxpctgrlrasyusiejentxfgiiyutxjsclizizufhtqesgwsxmxwhwuibezztqsazihrgowiwtbmqxrrhvkmwskhkqpkfqedcrfutylaigqpsabgmoxliblsglozaskztzdmwzkjiynagaysinkegupynbrpdvtlnpllqtdzqicsujdzqzgnnrasknrkdlxjrwvbhbcndqodbucujcqgjihuvocexewzvlvrspnkgccyhpwctiyehwwhnljbgvgutasbicvxeujkbkimpjzzebhzefmojzrugyocwgksgpxckpkgskzhfvcruatcwmfweaznkmendjfqrhqurgnbbgdewkmqhcxjaavtbldaevogjspfhtaofjkxhzrzztqzannrqwmhjgjbeikjtweumzkppbjoxzmgcmqakiywxcqthamhtfhckpexwrupcomksbiruswxplnmpdcjkneoxtvxfjpsyzvperbbonpnyncuimjpdnpwwjsagasropoktwaavtnfwmohkmbfpsutidoqhphqtdhfkffaiftvpocxfjcrlmmstodrgprcbyfooibctgjefipxhvaxnkyezomnweqsuwkpjkavlbtknvcuzdfeoziyvxgbfnllhwvpdlihxvxzctolbnvksankunlvoxhqnnwwisdeyhzzjnxekkhggphsfweiiikocrwunsyzejkawliamiczganwlqdbosszxtlqolmkzzuhkzbqmigwjfslobeswhmmglefjxexzakjrdkwkbbtciqaxkofamclcxlqcigzjzbbypwxsjwmykguxrtfbzmkjritkotohfhnbohiogdilswyflkbjnkcqhriodfptynvrzeihwpozyvmcozzqobpxlyrcwtwizskbgcasluarpkuklegewmtwtuoufkrhlavbrlmxffvywevtvxwnkahwoxpvockdkfbtbnebruxreelrlflxbfjiztrtgbyrahlagsbgfiopnnxeavjzbctbpushpifkqlqzigvoyflekqqzyacppkqyyahzqlkxldhymndweuinquydibthfypwxxdkqjvuoqxdxelozbawvqznywpdgdejqpssdrbwxkghmguifkxrpxnkrdutquxpvxflppfqxevqeqcgcynzjchkuqahhntkpaoadpafjlvoajigqxalgxmylfylwtxhuaaohnxdlrlmzgbldxfjlzbtrahjbbalkhycfylppftxkepyliinxlivugdbdgmrfdeizzwvipjtzuyemmwaeazefkopieilymkzwkvoosiauhqwhymbgexzkxhxirjtwrczcvtlakafdboqqodhqbbowesxjzukzlpfaiotfxgprbsmoaqcpkqzloghlrmorollawyforxduikyoollireyllxhzmonvahucmjrwvgnwnonsgbelkpkafxiwtjioxqcincxibqglhbhvxbsfvptppehxxmlxgxsillcfdnvwimykanlmiswokwnbxxgxoggkcgbqavzwbspzmwizvkjbapmtxcfvxhjfdkboozqrbqxwlbecfjkpyoriufstzyznnopsflbxpgswbyavysdtgshyezldcqcyfznuoghivzjolchhmvbkeyoijwmnsmoukexanjjymfjpgmjcvesjddgummzncfjsimyryquuxrrwxepsrdgtfforalvngnmufjkqovgitedwmgjxekeagzuelswgqxrvzpxjuonmhhevtgzcgxasjqvefvzbnbgxklazdkdgcyvpwtolkhjxeswgsogasfrlphradoxwpdwkvjgdulsajbwcpbtwruqwovuhbnsorbjbmpfokyslddyjkldiuhdpoxyshuhrnxljabeeqdgffefytubgifrrlfqmajiouitoyupsnwnqtxczqxfoandyhvcusmfsemifwgtptbgqjbdupuzbpbrjdarayiwskeezhvoskhghnwzwpozgpbkmsrprfzdsjiyjyycrghbxmrqyqddvoasbaoqporcwifazuuuzetjcxidzicvtirgeeurztbewnjugfscxgvlyqgbfgpxgjzqecwmfdrfntruynqjwlydzptaysxhhimfkrungpmeudpjxjfhvmvtouifvrerieoyoejwpymhjljnbogdavjqfimeiowwukcfeestjpofzoyrzhqzmntgalcjmraqdasrzwhaxroppmlquwomkbwzeiwzxhnfctnxsjeeergtjmtdykyxurzanthmahsgjtupodiujkeuwtvsinfzaofmwckrivdokccsryalazplcwuydjujtsnhvalckirrxhydedebabzpdpqecoujvxrpwpqtqdzbtfoaddljhfvatgxkwfqwaztirmavthrwibdxrjybzoxsourzyscjvquenslfukmjvkgjtvjqgbjmnacrvkronvhtrflitowiigpijnqzgqzaacfjxgraohwssnkxgqaudinyzleipuzwktuoqwaqlvihihqtxrnwqfaflbhetdiusgdedevrcclhubbnelihzfordibmvwysacnvrtbeizcvaykkyxwymunrztwcputvheyxwhgiksvrwcjgtfwdcdiayexooaccplulgbmomtvegqesjxabcfmnrrgrkrowicvydwphhrpluapvpfebbeqpfzkvfgkogsmwldzsswtqqdjnfjhifvwntgztqujhifidxpnxnxalgwqehvjqpyinihggpvsrmrudpwqmtztanflwuxcrokvihrfsqbvirdbkuttrscsdvhfcdvipvecxxijuccjcxxzhvkfnihnluwrmpldwyfzelimlifuenyxcofcbltnrgxnqfbeyrbiwolfifunbissdzneqdnizqqsjupgdnjbvvzidfhwguycfdswnolwbtnpuypiyeckklwbjjpmxvxxvtakxqzqfziicrpdklnfybmcamlexaimwetodrxfvsmvxuyvsxwittrifvyrdfwiyziuunevxcevlxhhlulvhgodiamfotxgbbfomxlvzzpztxkxkgrzsmphizurjxtdvmwzkvfrggqzoxgkgpcszgasbymcnggdbgiwfcuzeibxznmncncyjredpfglpgijpoajsgwpkcavkvofshszbqxilugycfbntbejstaekaxbcjabbtyvrddohbqqulzcwbnnxyxjertumwxoolkojsdelcinfcynlealxpcqpydmrqlisgdqlruuocdbk"
+}
diff --git a/models/bbb30Tasks-ut.bpmn b/models/bbb30Tasks-ut.bpmn
new file mode 100644
index 0000000..6472c8a
--- /dev/null
+++ b/models/bbb30Tasks-ut.bpmn
@@ -0,0 +1,513 @@
+
+
+
+
+ Flow_1s4b8s3
+
+
+
+
+
+
+
+
+
+ Flow_1s4b8s3
+ Flow_1i59n1a
+
+
+
+
+
+ Flow_1i59n1a
+ Flow_1trfmps
+
+
+
+
+
+ Flow_1trfmps
+ Flow_0b7wqqt
+
+
+
+
+
+ Flow_0b7wqqt
+ Flow_084zor4
+
+
+
+
+
+ Flow_084zor4
+ Flow_1vybfv9
+
+
+
+
+
+ Flow_1vybfv9
+ Flow_0hbyrye
+
+
+
+
+
+ Flow_0hbyrye
+ Flow_1w7b049
+
+
+
+
+
+ Flow_1w7b049
+ Flow_079e83k
+
+
+
+
+
+
+
+
+
+ Flow_079e83k
+ Flow_1fak6u0
+
+
+
+
+
+ Flow_1fak6u0
+ Flow_0sb95fx
+
+
+
+
+
+ Flow_0sb95fx
+ Flow_1f2fz7u
+
+
+
+
+
+ Flow_1f2fz7u
+ Flow_068kxaj
+
+
+
+
+
+ Flow_068kxaj
+ Flow_0oyunjn
+
+
+
+
+
+ Flow_0oyunjn
+ Flow_1nkqjwh
+
+
+
+
+
+ Flow_1nkqjwh
+ Flow_04qn8iz
+
+
+
+
+
+
+
+
+
+
+ Flow_1va6m7w
+
+
+
+
+
+ Flow_04qn8iz
+ Flow_0aakufi
+
+
+
+
+
+ Flow_0aakufi
+ Flow_0eiuka8
+
+
+
+
+
+ Flow_0eiuka8
+ Flow_0gfol1o
+
+
+
+
+
+ Flow_0gfol1o
+ Flow_0d7fgl2
+
+
+
+
+
+ Flow_0d7fgl2
+ Flow_0fl9vlo
+
+
+
+
+
+ Flow_0fl9vlo
+ Flow_186osvm
+
+
+
+
+
+ Flow_186osvm
+ Flow_112o523
+
+
+
+
+
+ Flow_112o523
+ Flow_1dbf5so
+
+
+
+
+
+ Flow_1dbf5so
+ Flow_0ygqtyr
+
+
+
+
+
+ Flow_0ygqtyr
+ Flow_1wis7n0
+
+
+
+
+
+ Flow_1wis7n0
+ Flow_178ltao
+
+
+
+
+
+ Flow_178ltao
+ Flow_0oure99
+
+
+
+
+
+ Flow_0oure99
+ Flow_1s36k6q
+
+
+
+
+
+ Flow_1s36k6q
+ Flow_0jqoeld
+
+
+
+
+
+ Flow_0jqoeld
+ Flow_18unvpp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Flow_18unvpp
+ Flow_1va6m7w
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/models/bbb30Tasks.bpmn b/models/bbb30Tasks.bpmn
new file mode 100644
index 0000000..8efd12c
--- /dev/null
+++ b/models/bbb30Tasks.bpmn
@@ -0,0 +1,501 @@
+
+
+
+
+ Flow_1s4b8s3
+
+
+
+
+
+
+
+
+
+ Flow_1s4b8s3
+ Flow_1i59n1a
+
+
+
+
+
+ Flow_1i59n1a
+ Flow_1trfmps
+
+
+
+
+
+ Flow_1trfmps
+ Flow_0b7wqqt
+
+
+
+
+
+ Flow_0b7wqqt
+ Flow_084zor4
+
+
+
+
+
+ Flow_084zor4
+ Flow_1vybfv9
+
+
+
+
+
+ Flow_1vybfv9
+ Flow_0hbyrye
+
+
+
+
+
+ Flow_0hbyrye
+ Flow_1w7b049
+
+
+
+
+
+ Flow_1w7b049
+ Flow_079e83k
+
+
+
+
+
+
+
+
+
+ Flow_079e83k
+ Flow_1fak6u0
+
+
+
+
+
+ Flow_1fak6u0
+ Flow_0sb95fx
+
+
+
+
+
+ Flow_0sb95fx
+ Flow_1f2fz7u
+
+
+
+
+
+ Flow_1f2fz7u
+ Flow_068kxaj
+
+
+
+
+
+ Flow_068kxaj
+ Flow_0oyunjn
+
+
+
+
+
+ Flow_0oyunjn
+ Flow_1nkqjwh
+
+
+
+
+
+ Flow_1nkqjwh
+ Flow_04qn8iz
+
+
+
+
+
+
+
+
+
+
+ Flow_18unvpp
+
+
+
+
+
+ Flow_04qn8iz
+ Flow_0aakufi
+
+
+
+
+
+ Flow_0aakufi
+ Flow_0eiuka8
+
+
+
+
+
+ Flow_0eiuka8
+ Flow_0gfol1o
+
+
+
+
+
+ Flow_0gfol1o
+ Flow_0d7fgl2
+
+
+
+
+
+ Flow_0d7fgl2
+ Flow_0fl9vlo
+
+
+
+
+
+ Flow_0fl9vlo
+ Flow_186osvm
+
+
+
+
+
+ Flow_186osvm
+ Flow_112o523
+
+
+
+
+
+ Flow_112o523
+ Flow_1dbf5so
+
+
+
+
+
+ Flow_1dbf5so
+ Flow_0ygqtyr
+
+
+
+
+
+ Flow_0ygqtyr
+ Flow_1wis7n0
+
+
+
+
+
+ Flow_1wis7n0
+ Flow_178ltao
+
+
+
+
+
+ Flow_178ltao
+ Flow_0oure99
+
+
+
+
+
+ Flow_0oure99
+ Flow_1s36k6q
+
+
+
+
+
+ Flow_1s36k6q
+ Flow_0jqoeld
+
+
+
+
+
+ Flow_0jqoeld
+ Flow_18unvpp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/models/bbb45Tasks-ut.bpmn b/models/bbb45Tasks-ut.bpmn
new file mode 100644
index 0000000..689862a
--- /dev/null
+++ b/models/bbb45Tasks-ut.bpmn
@@ -0,0 +1,752 @@
+
+
+
+
+ Flow_1s4b8s3
+
+
+
+
+
+
+
+
+
+ Flow_1s4b8s3
+ Flow_1i59n1a
+
+
+
+
+
+ Flow_1i59n1a
+ Flow_1trfmps
+
+
+
+
+
+ Flow_1trfmps
+ Flow_0b7wqqt
+
+
+
+
+
+ Flow_0b7wqqt
+ Flow_084zor4
+
+
+
+
+
+ Flow_084zor4
+ Flow_1vybfv9
+
+
+
+
+
+ Flow_1vybfv9
+ Flow_0hbyrye
+
+
+
+
+
+ Flow_0hbyrye
+ Flow_1w7b049
+
+
+
+
+
+ Flow_1w7b049
+ Flow_079e83k
+
+
+
+
+
+
+
+
+
+ Flow_079e83k
+ Flow_1fak6u0
+
+
+
+
+
+ Flow_1fak6u0
+ Flow_0sb95fx
+
+
+
+
+
+ Flow_0sb95fx
+ Flow_1f2fz7u
+
+
+
+
+
+ Flow_1f2fz7u
+ Flow_068kxaj
+
+
+
+
+
+ Flow_068kxaj
+ Flow_0oyunjn
+
+
+
+
+
+ Flow_0oyunjn
+ Flow_1nkqjwh
+
+
+
+
+
+ Flow_1nkqjwh
+ Flow_04qn8iz
+
+
+
+
+
+
+
+
+
+ Flow_0fvq9il
+
+
+
+
+
+ Flow_04qn8iz
+ Flow_0aakufi
+
+
+
+
+
+ Flow_0aakufi
+ Flow_0eiuka8
+
+
+
+
+
+ Flow_0eiuka8
+ Flow_0gfol1o
+
+
+
+
+
+ Flow_0gfol1o
+ Flow_0d7fgl2
+
+
+
+
+
+ Flow_0d7fgl2
+ Flow_0fl9vlo
+
+
+
+
+
+ Flow_0fl9vlo
+ Flow_186osvm
+
+
+
+
+
+ Flow_186osvm
+ Flow_112o523
+
+
+
+
+
+ Flow_112o523
+ Flow_1dbf5so
+
+
+
+
+
+ Flow_1dbf5so
+ Flow_0ygqtyr
+
+
+
+
+
+ Flow_0ygqtyr
+ Flow_1wis7n0
+
+
+
+
+
+ Flow_1wis7n0
+ Flow_178ltao
+
+
+
+
+
+ Flow_178ltao
+ Flow_0oure99
+
+
+
+
+
+ Flow_0oure99
+ Flow_1s36k6q
+
+
+
+
+
+ Flow_1s36k6q
+ Flow_0jqoeld
+
+
+
+
+
+ Flow_0jqoeld
+ Flow_1fjcror
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Flow_1fjcror
+ Flow_0be37ur
+
+
+
+
+
+ Flow_0be37ur
+ Flow_089wqz4
+
+
+
+
+
+ Flow_089wqz4
+ Flow_0oaod2g
+
+
+
+
+
+ Flow_0oaod2g
+ Flow_102vpra
+
+
+
+
+
+ Flow_102vpra
+ Flow_0oz0glf
+
+
+
+
+
+ Flow_0oz0glf
+ Flow_1jztho5
+
+
+
+
+
+ Flow_1jztho5
+ Flow_0p6srjf
+
+
+
+
+
+ Flow_0p6srjf
+ Flow_0i26sp8
+
+
+
+
+
+ Flow_0i26sp8
+ Flow_1f2bzj9
+
+
+
+
+
+ Flow_1f2bzj9
+ Flow_0ivmumj
+
+
+
+
+
+ Flow_0ivmumj
+ Flow_02zp63s
+
+
+
+
+
+ Flow_02zp63s
+ Flow_0btqiik
+
+
+
+
+
+ Flow_0btqiik
+ Flow_0sir8to
+
+
+
+
+
+ Flow_0sir8to
+ Flow_1y1kxb0
+
+
+
+
+
+ Flow_1y1kxb0
+ Flow_02pprqn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Flow_02pprqn
+ Flow_0fvq9il
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/models/bbb45Tasks.bpmn b/models/bbb45Tasks.bpmn
new file mode 100644
index 0000000..7f41624
--- /dev/null
+++ b/models/bbb45Tasks.bpmn
@@ -0,0 +1,740 @@
+
+
+
+
+ Flow_1s4b8s3
+
+
+
+
+
+
+
+
+
+ Flow_1s4b8s3
+ Flow_1i59n1a
+
+
+
+
+
+ Flow_1i59n1a
+ Flow_1trfmps
+
+
+
+
+
+ Flow_1trfmps
+ Flow_0b7wqqt
+
+
+
+
+
+ Flow_0b7wqqt
+ Flow_084zor4
+
+
+
+
+
+ Flow_084zor4
+ Flow_1vybfv9
+
+
+
+
+
+ Flow_1vybfv9
+ Flow_0hbyrye
+
+
+
+
+
+ Flow_0hbyrye
+ Flow_1w7b049
+
+
+
+
+
+ Flow_1w7b049
+ Flow_079e83k
+
+
+
+
+
+
+
+
+
+ Flow_079e83k
+ Flow_1fak6u0
+
+
+
+
+
+ Flow_1fak6u0
+ Flow_0sb95fx
+
+
+
+
+
+ Flow_0sb95fx
+ Flow_1f2fz7u
+
+
+
+
+
+ Flow_1f2fz7u
+ Flow_068kxaj
+
+
+
+
+
+ Flow_068kxaj
+ Flow_0oyunjn
+
+
+
+
+
+ Flow_0oyunjn
+ Flow_1nkqjwh
+
+
+
+
+
+ Flow_1nkqjwh
+ Flow_04qn8iz
+
+
+
+
+
+
+
+
+
+ Flow_02pprqn
+
+
+
+
+
+ Flow_04qn8iz
+ Flow_0aakufi
+
+
+
+
+
+ Flow_0aakufi
+ Flow_0eiuka8
+
+
+
+
+
+ Flow_0eiuka8
+ Flow_0gfol1o
+
+
+
+
+
+ Flow_0gfol1o
+ Flow_0d7fgl2
+
+
+
+
+
+ Flow_0d7fgl2
+ Flow_0fl9vlo
+
+
+
+
+
+ Flow_0fl9vlo
+ Flow_186osvm
+
+
+
+
+
+ Flow_186osvm
+ Flow_112o523
+
+
+
+
+
+ Flow_112o523
+ Flow_1dbf5so
+
+
+
+
+
+ Flow_1dbf5so
+ Flow_0ygqtyr
+
+
+
+
+
+ Flow_0ygqtyr
+ Flow_1wis7n0
+
+
+
+
+
+ Flow_1wis7n0
+ Flow_178ltao
+
+
+
+
+
+ Flow_178ltao
+ Flow_0oure99
+
+
+
+
+
+ Flow_0oure99
+ Flow_1s36k6q
+
+
+
+
+
+ Flow_1s36k6q
+ Flow_0jqoeld
+
+
+
+
+
+ Flow_0jqoeld
+ Flow_1fjcror
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Flow_1fjcror
+ Flow_0be37ur
+
+
+
+
+
+ Flow_0be37ur
+ Flow_089wqz4
+
+
+
+
+
+ Flow_089wqz4
+ Flow_0oaod2g
+
+
+
+
+
+ Flow_0oaod2g
+ Flow_102vpra
+
+
+
+
+
+ Flow_102vpra
+ Flow_0oz0glf
+
+
+
+
+
+ Flow_0oz0glf
+ Flow_1jztho5
+
+
+
+
+
+ Flow_1jztho5
+ Flow_0p6srjf
+
+
+
+
+
+ Flow_0p6srjf
+ Flow_0i26sp8
+
+
+
+
+
+ Flow_0i26sp8
+ Flow_1f2bzj9
+
+
+
+
+
+ Flow_1f2bzj9
+ Flow_0ivmumj
+
+
+
+
+
+ Flow_0ivmumj
+ Flow_02zp63s
+
+
+
+
+
+ Flow_02zp63s
+ Flow_0btqiik
+
+
+
+
+
+ Flow_0btqiik
+ Flow_0sir8to
+
+
+
+
+
+ Flow_0sir8to
+ Flow_1y1kxb0
+
+
+
+
+
+ Flow_1y1kxb0
+ Flow_02pprqn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/models/msg-scenario.json b/models/msg-scenario.json
new file mode 100644
index 0000000..a6d6051
--- /dev/null
+++ b/models/msg-scenario.json
@@ -0,0 +1,29 @@
+{
+ "messageSequence": [
+ {
+ "messageName": "cct_singleProcess",
+ "correlationKey": "Falko-S${COUNT}",
+ "variables": {
+ "correlation_key": "Falko-S${COUNT}",
+ "command_metadata": {
+ "channel_info": {
+ "ready_for_release": true
+ }
+ }
+ }
+ },
+ {
+ "messageName": "command-delivered",
+ "correlationKey": "Falko-S${COUNT}",
+ "variables": {
+ "command_metadata": {
+ "command_status": "NonDelivered"
+ }
+ }
+ },
+ {
+ "messageName": "gpi_accc_cct",
+ "correlationKey": "Falko-S${COUNT}"
+ }
+ ]
+}
diff --git a/src/main/resources/benchmarktemplates/payload.json b/models/payload.json
similarity index 100%
rename from src/main/resources/benchmarktemplates/payload.json
rename to models/payload.json
diff --git a/runner/download-config-and-run.sh b/runner/download-config-and-run.sh
index 800f550..e667cb3 100755
--- a/runner/download-config-and-run.sh
+++ b/runner/download-config-and-run.sh
@@ -1,4 +1,5 @@
#!/bin/bash
+set -euo pipefail
# retrieve machine types from K8s
machineType=$(kubectl get node -o json | jq -r '.items[0].metadata.labels."beta.kubernetes.io/instance-type"')
diff --git a/runner/run-all-tests.sh b/runner/run-all-tests.sh
index b605520..e85788b 100755
--- a/runner/run-all-tests.sh
+++ b/runner/run-all-tests.sh
@@ -1,4 +1,5 @@
#!/bin/bash
+set -euo pipefail
TESTRUNS_DONE_DIR="testruns-done"
@@ -13,10 +14,17 @@ usage()
run()
{
- for filename in testruns/*/;
- do
- testScenarioName=$(basename "$filename")
- ./run-single-test.sh "$testScenarioName" "$TESTRUNS_DONE_DIR"
+ while true; do
+ find testruns -mindepth 1 -maxdepth 1 -type d | sort | while IFS= read -r testScenarioDir; do
+ testScenarioName=$(basename "$testScenarioDir")
+ echo "Scenario $testScenarioName"
+ # create a symlink for quickly debugging the current test run (not used for execution)
+ mkdir -p current
+ ln -fs "../$testScenarioDir" "current/run"
+ ./run-single-test.sh "$testScenarioName" "$TESTRUNS_DONE_DIR"
+ rm -rf current # remove debug symlink
+ done
+ sleep 10 # just so that it doesn't busyloop
done
}
diff --git a/runner/run-single-test.sh b/runner/run-single-test.sh
index e8c6434..0f07991 100755
--- a/runner/run-single-test.sh
+++ b/runner/run-single-test.sh
@@ -1,37 +1,39 @@
#!/bin/bash
+set -euo pipefail
testScenarioName=${1:-'example'}
TESTRUNS_DONE_DIR=${2:-'testruns-done'}
TESTRUNS_DIR="testruns"
-dashboardId="uX16GP3nk"
+dashboardId="zeebe-dashboard"
+dashboardName="zeebe"
echo "###############################################"
echo "Running test for config: ${testScenarioName}"
-# get the start time of the run
+# Start Zeebe
+echo 'Starting Zeebe...'
+(cd "${TESTRUNS_DIR}/${testScenarioName}" && make)
+
+# get the start time of the benchmark
# Note that grafana expects timestamps as millis since epoch
startTime=$(date +%s000)
startTimeIso=$(date +"%Y-%m-%d %H:%M:%S")
echo "start time = $startTimeIso"
-# Start Zeebe
-echo 'Starting Zeebe...'
-(cd "${TESTRUNS_DIR}/${testScenarioName}" && make)
-
-# wait for the starter job to be finished
-echo 'Waiting for completion of benchmark run...'
+# execute dynamic sleep in generated run.sh file
+(cd "${TESTRUNS_DIR}/${testScenarioName}" && source run.sh)
+# TODO run c8b as a job (see: https://github.com/falko/zeebe-benchmark/blob/hackdays-2020/Dockerfile#L28) and wait the job to be finished, e.g. using:
#kubectl wait --for=condition=complete job/starter --timeout=1200s
-sleep 1800
-# cleanup
-echo 'Finished. Cleaning up now...'
-(cd "${TESTRUNS_DIR}/${testScenarioName}" && make clean)
-
-# get the endtime of the run
+# get the endtime of the benchmark
endTime=$(date +%s000)
endTimeIso=$(date +"%Y-%m-%d %H:%M:%S")
echo "end time = $endTimeIso"
+# cleanup
+echo 'Finished. Cleaning up now...'
+(cd "${TESTRUNS_DIR}/${testScenarioName}" && make clean)
+
# Generate Dashboard Links
echo 'Getting Graphana URL'
@@ -46,7 +48,7 @@ echo $grafanaUrl
ipAddress="$(grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' <<< "$grafanaUrl")"
# create the url to the low-latency dashboard in the correct time frame
-grafanaUrl="http://$ipAddress/d/$dashboardId/zeebe-low-latency?orgId=1&from=$startTime&to=$endTime&var-DS_PROMETHEUS=Prometheus&var-namespace=camunda&var-pod=All&var-partition=All"
+grafanaUrl="http://$ipAddress/d/$dashboardId/$dashboardName?orgId=1&from=$startTime&to=$endTime&var-DS_PROMETHEUS=Prometheus&var-namespace=camunda&var-pod=All&var-partition=All"
#echo $grafanaUrl
if [ ! -d "$TESTRUNS_DONE_DIR" ]; then
@@ -73,4 +75,10 @@ else
rm -rf "${TESTRUNS_DIR}/${testScenarioName}"
fi
+# immediately persist test config
+#cp -r ../src/main/resources "${TESTRUNS_DONE_DIR}/zeebe-tuner-config"
+#cd $TESTRUNS_DONE_DIR
+#git add . && git commit . -m "Add benchmark run ${testScenarioName}" && git push
+#cd -
+echo "Benchmark ${testScenarioName} has been completed."
\ No newline at end of file
diff --git a/src/main/java/io/camunda/benchmark/BenchmarkAutomateApplication.java b/src/main/java/io/camunda/benchmark/BenchmarkAutomateApplication.java
index a52d78d..d95e28e 100644
--- a/src/main/java/io/camunda/benchmark/BenchmarkAutomateApplication.java
+++ b/src/main/java/io/camunda/benchmark/BenchmarkAutomateApplication.java
@@ -15,8 +15,12 @@
@SpringBootApplication
public class BenchmarkAutomateApplication {
+ /**
+ * Immediately exits after start since generatation happens during startup in {@link BenchmarkController#run()}
+ */
public static void main(String[] args) {
- SpringApplication.run(BenchmarkAutomateApplication.class, args);
+ SpringApplication.run(BenchmarkAutomateApplication.class, args)
+ .close();
}
diff --git a/src/main/java/io/camunda/benchmark/service/ScenarioBuilderService.java b/src/main/java/io/camunda/benchmark/service/ScenarioBuilderService.java
index b86a6c7..e4efff8 100644
--- a/src/main/java/io/camunda/benchmark/service/ScenarioBuilderService.java
+++ b/src/main/java/io/camunda/benchmark/service/ScenarioBuilderService.java
@@ -3,6 +3,7 @@
import java.io.FileInputStream;
import java.io.IOException;
import java.security.GeneralSecurityException;
+import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -49,6 +50,11 @@ public void BuildScenariiInputs() throws IOException, GeneralSecurityException {
String prefixHeader="";
int idxRow=0;
for (List