diff --git a/projects/typescript-examples/.algokit/sources/BoxStorage/approval.teal b/projects/typescript-examples/.algokit/sources/BoxStorage/approval.teal index b136cbc..817cda3 100644 --- a/projects/typescript-examples/.algokit/sources/BoxStorage/approval.teal +++ b/projects/typescript-examples/.algokit/sources/BoxStorage/approval.teal @@ -4,14 +4,14 @@ main: intcblock 1 0 32 42 - bytecblock 0x151f7c75 0x00 "boxMap" "boxInt" "boxString" "boxDynamicBytes" "users" "42" "boxRef" 0x0003 + bytecblock 0x151f7c75 0x00 "boxMap" "boxInt" "boxString" "boxDynamicBytes" "users" "boxRef" "42" 0x0003 txn NumAppArgs bz main_bare_routing@31 - pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74 + pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74 txna ApplicationArgs 0 - match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28 + match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28 main_after_if_else@35: @@ -41,7 +41,7 @@ main_arc4Box_route@28: intc_0 return -main_extractBoxRef_route@27: +main_boxMapStructLength_route@27: txn OnCompletion @@ -52,14 +52,22 @@ main_extractBoxRef_route@27: txna ApplicationArgs 1 - extract 2 0 + btoi - callsub extractBoxRef + callsub boxMapStructLength + bytec_1 + intc_1 + uncover 2 + setbit + bytec_0 + swap + concat + log intc_0 return -main_lengthBoxRef_route@26: +main_setBoxMapStruct_route@26: txn OnCompletion @@ -70,11 +78,15 @@ main_lengthBoxRef_route@26: txna ApplicationArgs 1 - extract 2 0 + btoi + txna ApplicationArgs 2 - callsub lengthBoxRef - itob + callsub setBoxMapStruct + bytec_1 + intc_1 + uncover 2 + setbit bytec_0 swap concat @@ -82,7 +94,7 @@ main_lengthBoxRef_route@26: intc_0 return -main_maybeBoxRef_route@25: +main_boxMapStructExists_route@25: txn OnCompletion @@ -93,25 +105,36 @@ main_maybeBoxRef_route@25: txna ApplicationArgs 1 - extract 2 0 + btoi - callsub maybeBoxRef - dig 1 - len - itob - extract 6 2 - uncover 2 - concat + callsub boxMapStructExists bytec_1 intc_1 - uncover 3 + uncover 2 setbit - bytec 9 - swap - concat + bytec_0 swap concat + log + intc_0 + return + +main_getBoxMapStruct_route@24: + + + txn OnCompletion + ! + assert + txn ApplicationID + assert + + + txna ApplicationArgs 1 + btoi + + + callsub getBoxMapStruct bytec_0 swap concat @@ -119,7 +142,7 @@ main_maybeBoxRef_route@25: intc_0 return -main_deleteBoxRef_route@24: +main_extractBoxRef_route@23: txn OnCompletion @@ -133,11 +156,11 @@ main_deleteBoxRef_route@24: extract 2 0 - callsub deleteBoxRef + callsub extractBoxRef intc_0 return -main_setBoxRef_route@23: +main_deleteBoxRef_route@22: txn OnCompletion @@ -151,11 +174,11 @@ main_setBoxRef_route@23: extract 2 0 - callsub setBoxRef + callsub deleteBoxRef intc_0 return -main_getBoxRef_route@22: +main_deleteBoxMap_route@21: txn OnCompletion @@ -163,15 +186,29 @@ main_getBoxRef_route@22: assert txn ApplicationID assert - callsub getBoxRef - bytec_0 - swap - concat - log + + + txna ApplicationArgs 1 + btoi + + + callsub deleteBoxMap + intc_0 + return + +main_deleteBox_route@20: + + + txn OnCompletion + ! + assert + txn ApplicationID + assert + callsub deleteBox intc_0 return -main_boxMapStructExists_route@21: +main_lengthBoxRef_route@19: txn OnCompletion @@ -182,14 +219,11 @@ main_boxMapStructExists_route@21: txna ApplicationArgs 1 - btoi + extract 2 0 - callsub boxMapStructExists - bytec_1 - intc_1 - uncover 2 - setbit + callsub lengthBoxRef + itob bytec_0 swap concat @@ -197,7 +231,7 @@ main_boxMapStructExists_route@21: intc_0 return -main_boxMapStructLength_route@20: +main_boxMapLength_route@18: txn OnCompletion @@ -211,11 +245,8 @@ main_boxMapStructLength_route@20: btoi - callsub boxMapStructLength - bytec_1 - intc_1 - uncover 2 - setbit + callsub boxMapLength + itob bytec_0 swap concat @@ -223,7 +254,7 @@ main_boxMapStructLength_route@20: intc_0 return -main_setBoxMapStruct_route@19: +main_setBoxRef_route@17: txn OnCompletion @@ -234,23 +265,14 @@ main_setBoxMapStruct_route@19: txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 + extract 2 0 - callsub setBoxMapStruct - bytec_1 - intc_1 - uncover 2 - setbit - bytec_0 - swap - concat - log + callsub setBoxRef intc_0 return -main_getBoxMapStruct_route@18: +main_setBoxMap_route@16: txn OnCompletion @@ -262,17 +284,15 @@ main_getBoxMapStruct_route@18: txna ApplicationArgs 1 btoi + txna ApplicationArgs 2 + extract 2 0 - callsub getBoxMapStruct - bytec_0 - swap - concat - log + callsub setBoxMap intc_0 return -main_keyPrefixBoxMap_route@17: +main_setBoxDynamicBytes_route@15: txn OnCompletion @@ -280,12 +300,16 @@ main_keyPrefixBoxMap_route@17: assert txn ApplicationID assert - pushbytes 0x151f7c750006626f784d6170 - log + + + txna ApplicationArgs 1 + + + callsub setBoxDynamicBytes intc_0 return -main_boxMapExists_route@16: +main_setBoxString_route@14: txn OnCompletion @@ -296,22 +320,14 @@ main_boxMapExists_route@16: txna ApplicationArgs 1 - btoi + extract 2 0 - callsub boxMapExists - bytec_1 - intc_1 - uncover 2 - setbit - bytec_0 - swap - concat - log + callsub setBoxString intc_0 return -main_boxMapLength_route@15: +main_setBox_route@13: txn OnCompletion @@ -325,16 +341,11 @@ main_boxMapLength_route@15: btoi - callsub boxMapLength - itob - bytec_0 - swap - concat - log + callsub setBox intc_0 return -main_maybeBoxMap_route@14: +main_maybeBoxRef_route@12: txn OnCompletion @@ -345,10 +356,10 @@ main_maybeBoxMap_route@14: txna ApplicationArgs 1 - btoi + extract 2 0 - callsub maybeBoxMap + callsub maybeBoxRef dig 1 len itob @@ -371,7 +382,7 @@ main_maybeBoxMap_route@14: intc_0 return -main_deleteBoxMap_route@13: +main_boxMapExists_route@11: txn OnCompletion @@ -385,11 +396,48 @@ main_deleteBoxMap_route@13: btoi - callsub deleteBoxMap + callsub boxMapExists + bytec_1 + intc_1 + uncover 2 + setbit + bytec_0 + swap + concat + log + intc_0 + return + +main_getBoxRef_route@10: + + + txn OnCompletion + ! + assert + txn ApplicationID + assert + callsub getBoxRef + bytec_0 + swap + concat + log intc_0 return -main_setBoxMap_route@12: +main_keyPrefixBoxMap_route@9: + + + txn OnCompletion + ! + assert + txn ApplicationID + assert + pushbytes 0x151f7c750006626f784d6170 + log + intc_0 + return + +main_maybeBoxMap_route@8: txn OnCompletion @@ -401,15 +449,32 @@ main_setBoxMap_route@12: txna ApplicationArgs 1 btoi - txna ApplicationArgs 2 - extract 2 0 - callsub setBoxMap + callsub maybeBoxMap + dig 1 + len + itob + extract 6 2 + uncover 2 + concat + bytec_1 + intc_1 + uncover 3 + setbit + bytec 9 + swap + concat + swap + concat + bytec_0 + swap + concat + log intc_0 return -main_getBoxMapWithDefault_route@11: +main_getBoxMapWithDefault_route@7: txn OnCompletion @@ -437,7 +502,7 @@ main_getBoxMapWithDefault_route@11: intc_0 return -main_getBoxMap_route@10: +main_getBoxMap_route@6: txn OnCompletion @@ -465,7 +530,7 @@ main_getBoxMap_route@10: intc_0 return -main_maybeBox_route@9: +main_maybeBox_route@5: txn OnCompletion @@ -488,7 +553,7 @@ main_maybeBox_route@9: intc_0 return -main_deleteBox_route@8: +main_valueBox_route@4: txn OnCompletion @@ -496,11 +561,16 @@ main_deleteBox_route@8: assert txn ApplicationID assert - callsub deleteBox + callsub valueBox + itob + bytec_0 + swap + concat + log intc_0 return -main_setBoxDynamicBytes_route@7: +main_getBox_route@3: txn OnCompletion @@ -508,124 +578,234 @@ main_setBoxDynamicBytes_route@7: assert txn ApplicationID assert - - - txna ApplicationArgs 1 - - - callsub setBoxDynamicBytes + callsub getBox + itob + bytec_0 + swap + concat + log intc_0 return -main_setBoxString_route@6: +main_bare_routing@31: txn OnCompletion - ! - assert + bnz main_after_if_else@35 txn ApplicationID + ! assert + intc_0 + return - txna ApplicationArgs 1 - extract 2 0 +getBox: - callsub setBoxString - intc_0 - return -main_setBox_route@5: + bytec_3 - txn OnCompletion - ! - assert - txn ApplicationID + box_get + swap + btoi + swap assert + retsub - txna ApplicationArgs 1 - btoi +valueBox: - callsub setBox - intc_0 - return -main_valueBox_route@4: + bytec_3 - txn OnCompletion - ! - assert - txn ApplicationID + box_get + swap + btoi + swap assert - callsub valueBox + retsub + + + +maybeBox: + + + bytec_3 + + + box_get + swap + btoi + + + swap + retsub + + + +getBoxMap: + + + + proto 1 1 + + + frame_dig -1 itob - bytec_0 + + + bytec_2 swap concat - log - intc_0 - return - -main_getBox_route@3: - txn OnCompletion - ! - assert - txn ApplicationID + box_get assert - callsub getBox + retsub + + + +getBoxMapWithDefault: + + + + proto 1 1 + + + frame_dig -1 itob - bytec_0 + + + bytec_2 swap concat - log - intc_0 - return -main_bare_routing@31: + + box_get + pushbytes "default" + cover 2 + select + retsub - txn OnCompletion - bnz main_after_if_else@35 - txn ApplicationID - ! - assert - intc_0 - return +maybeBoxMap: -getBox: + proto 1 2 - bytec_3 + frame_dig -1 + itob - box_get + + bytec_2 swap - btoi + concat + + + box_get + dup + uncover 2 swap - assert + + + bz maybeBoxMap_ternary_false@2 + frame_dig 1 + +maybeBoxMap_ternary_merge@3: + + + frame_dig 0 + uncover 3 + uncover 3 retsub +maybeBoxMap_ternary_false@2: -valueBox: + pushbytes "" + b maybeBoxMap_ternary_merge@3 - bytec_3 + +getBoxRef: + + + bytec 7 + + + intc_2 + box_create + pop + + + txn Sender + + + bytec 7 + + + dig 1 + box_put + + + bytec 7 box_get - swap - btoi - swap + dig 2 + cover 2 + select + + + dup + uncover 2 + == assert + + + retsub + + + +boxMapExists: + + + + proto 1 1 + + + frame_dig -1 + itob + + + bytec_2 + swap + concat + + + box_len + bury 1 + retsub + + + +maybeBoxRef: + + + + proto 1 2 + + + frame_dig -1 + box_get + + retsub @@ -693,154 +873,171 @@ setBoxDynamicBytes: -deleteBox: +setBoxMap: - bytec_3 + proto 2 0 - box_del - pop + frame_dig -2 + itob - bytec 5 + bytec_2 + swap + concat + dup box_del pop + frame_dig -1 + box_put + retsub - bytec 4 +setBoxRef: - box_del - pop + proto 1 0 - bytec_3 + frame_dig -1 + intc_2 + box_create + pop - box_get - swap - btoi - intc_3 - swap - uncover 2 - select - intc_3 - == - assert + frame_dig -1 - bytec 5 + txn Sender - box_get - pushbytes 0x00023432 - cover 2 - select - extract 2 0 - bytec 7 - == - assert + box_put + retsub - bytec 4 - box_get - bytec 7 - cover 2 - select - bytec 7 - == - assert - retsub +boxMapLength: -maybeBox: + proto 1 1 - bytec_3 + frame_dig -1 + itob - box_get + bytec_2 swap - btoi + concat + dup + + + box_len + bury 1 + bnz boxMapLength_after_if_else@2 + intc_1 swap retsub +boxMapLength_after_if_else@2: -getBoxMap: + frame_dig 0 + box_len + assert + swap + retsub - proto 1 1 +lengthBoxRef: - frame_dig -1 - itob + proto 1 1 - bytec_2 - swap - concat + frame_dig -1 + intc_2 + box_create + assert - box_get + frame_dig -1 + box_len assert retsub -getBoxMapWithDefault: +deleteBox: + bytec_3 - proto 1 1 + box_del + pop - frame_dig -1 - itob + bytec 5 - bytec_2 - swap - concat + box_del + pop - box_get - pushbytes "default" - cover 2 - select - retsub + bytec 4 -setBoxMap: + box_del + pop - proto 2 0 + bytec_3 - frame_dig -2 - itob + box_get + swap + btoi + intc_3 + swap + uncover 2 + select + intc_3 + == + assert - bytec_2 - swap - concat + bytec 5 - dup - box_del - pop - frame_dig -1 - box_put + box_get + pushbytes 0x00023432 + cover 2 + select + extract 2 0 + bytec 8 + == + assert + + + bytec 4 + + + box_get + bytec 8 + cover 2 + select + bytec 8 + == + assert retsub @@ -866,85 +1063,104 @@ deleteBoxMap: -maybeBoxMap: +deleteBoxRef: + proto 1 0 - proto 1 2 + + frame_dig -1 + box_del + pop frame_dig -1 - itob + box_get + pop + pushbytes "" + == + bz deleteBoxRef_bool_false@4 + frame_dig -1 + box_get + bury 1 + bnz deleteBoxRef_bool_false@4 + intc_0 +deleteBoxRef_bool_merge@5: - bytec_2 - swap - concat + assert + retsub - box_get - dup - uncover 2 - swap +deleteBoxRef_bool_false@4: + intc_1 + b deleteBoxRef_bool_merge@5 - bz maybeBoxMap_ternary_false@2 - frame_dig 1 -maybeBoxMap_ternary_merge@3: +extractBoxRef: - frame_dig 0 - uncover 3 - uncover 3 - retsub + proto 1 0 -maybeBoxMap_ternary_false@2: + txn Sender - pushbytes "" - b maybeBoxMap_ternary_merge@3 + global CurrentApplicationAddress -boxMapLength: + dup + len + dig 2 + len + + + + + frame_dig -1 + swap + box_create + assert + frame_dig -1 + intc_1 + dig 3 + box_replace - proto 1 1 + + frame_dig -1 + intc_1 + dup + dig 3 + box_splice frame_dig -1 - itob + intc_1 + intc_2 + box_extract - bytec_2 - swap - concat + frame_dig -1 + intc_2 dup + box_extract - box_len - bury 1 - bnz boxMapLength_after_if_else@2 - - - intc_1 swap - retsub - -boxMapLength_after_if_else@2: + uncover 2 + == + assert - frame_dig 0 - box_len + == assert - swap retsub -boxMapExists: +getBoxMapStruct: @@ -955,18 +1171,18 @@ boxMapExists: itob - bytec_2 + bytec 6 swap concat - box_len - bury 1 + box_get + assert retsub -getBoxMapStruct: +boxMapStructExists: @@ -982,8 +1198,8 @@ getBoxMapStruct: concat - box_get - assert + box_len + bury 1 retsub @@ -1193,222 +1409,6 @@ boxMapStructLength: -boxMapStructExists: - - - - proto 1 1 - - - frame_dig -1 - itob - - - bytec 6 - swap - concat - - - box_len - bury 1 - retsub - - - -getBoxRef: - - - bytec 8 - - - intc_2 - box_create - pop - - - txn Sender - - - bytec 8 - - - dig 1 - box_put - - - bytec 8 - - - box_get - dig 2 - cover 2 - select - - - dup - uncover 2 - == - assert - - - retsub - - - -setBoxRef: - - - proto 1 0 - - - frame_dig -1 - intc_2 - box_create - pop - - - frame_dig -1 - - - txn Sender - - - box_put - retsub - - - -deleteBoxRef: - - - proto 1 0 - - - frame_dig -1 - box_del - pop - - - frame_dig -1 - box_get - pop - pushbytes "" - == - bz deleteBoxRef_bool_false@4 - frame_dig -1 - box_get - bury 1 - bnz deleteBoxRef_bool_false@4 - intc_0 - -deleteBoxRef_bool_merge@5: - - - assert - retsub - -deleteBoxRef_bool_false@4: - intc_1 - b deleteBoxRef_bool_merge@5 - - - -maybeBoxRef: - - - - proto 1 2 - - - frame_dig -1 - box_get - - - retsub - - - -lengthBoxRef: - - - proto 1 1 - - - frame_dig -1 - intc_2 - box_create - assert - - - frame_dig -1 - box_len - assert - retsub - - - -extractBoxRef: - - - proto 1 0 - - - txn Sender - - - global CurrentApplicationAddress - - - dup - len - dig 2 - len - + - - - frame_dig -1 - swap - box_create - assert - - - frame_dig -1 - intc_1 - dig 3 - box_replace - - - frame_dig -1 - intc_1 - dup - dig 3 - box_splice - - - frame_dig -1 - intc_1 - intc_2 - box_extract - - - frame_dig -1 - intc_2 - dup - box_extract - - - swap - uncover 2 - == - assert - - - == - assert - retsub - - - arc4Box: diff --git a/projects/typescript-examples/.algokit/sources/BoxStorage/approval.teal.map b/projects/typescript-examples/.algokit/sources/BoxStorage/approval.teal.map index 24a38a5..3258ac8 100644 --- a/projects/typescript-examples/.algokit/sources/BoxStorage/approval.teal.map +++ b/projects/typescript-examples/.algokit/sources/BoxStorage/approval.teal.map @@ -4,7 +4,7 @@ "approval.teal" ], "names": [], - "mappings": ";AAKI;;;;;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;;AACA;;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;;;AAGA;;;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;;;AAGA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;;;AAGA;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;;;AAGA;;;AACA;;AACA;AACA;AACA;;;AACA;;AACA;AACA;AACA;AACA;;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;;;AAGA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;;;AAGA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AACA;;;AAGA;;;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AACA;;;;;;;;;;;;;;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;;AACA;AACA;AACA;;;AACA;;AACA;AACA;AACA;AACA;;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AACA;;;AACA;;;AAGA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;AACA;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;AACA;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AACA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AAGA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;;;AAGA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;;;AACA;;AACA;AACA;AACA;AACA;AAOA;AAGA;AACA;AACA;AACA;AACA;AACA;AAOA;AAGA;AACA;AACA;AACA;AACA;AACA;AAOA;;;AAGA;;AACA;AAGA;AAGA;AACA;AACA;AAOA;;;AAGA;;AAGA;AACA;AAGA;;AAGA;;AACA;AACA;AAOA;;;AAGA;;AAGA;AACA;AAGA;;AAGA;;AACA;AACA;AAOA;AAGA;AACA;AAGA;;AAGA;AACA;AAGA;;AAGA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AAGA;;AAGA;AACA;;;;;;AACA;;AACA;AACA;;;AACA;;AACA;AACA;AAGA;;AAGA;AACA;;AACA;;AACA;AACA;;AACA;AACA;AACA;AAOA;AAGA;AACA;AACA;AAGA;AACA;AAQA;;;AAGA;;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAQA;;;AAGA;;AACA;AAGA;AACA;AACA;AAGA;AACA;;;;;;;;;AACA;;AACA;AACA;AAOA;;;AAGA;;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;;AACA;AACA;AAOA;;;AAGA;;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAQA;;;AAGA;;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;;AACA;AAGA;;;AACA;;AAKA;;AACA;;AACA;;AACA;AAKA;;AACA;;;AAQA;;;AAGA;;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;;AACA;;;AAGA;AACA;AACA;AAKA;;AACA;AACA;AACA;AACA;AAQA;;;AAGA;;AACA;AAGA;AACA;AACA;AAGA;AACA;;AACA;AAQA;;;AAGA;;AACA;AAGA;;AACA;AACA;AAGA;AACA;AACA;AAOA;;;AAGA;;AACA;AAGA;;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;;AACA;AAGA;AACA;AAWA;AACA;AACA;AACA;;AACA;AACA;AAGA;;AACA;AACA;AACA;;AACA;AACA;;AACA;;AACA;AAWA;AACA;;;AAGA;;AACA;AACA;AAWA;;;AAGA;;AACA;;;AAWA;AACA;;;AAGA;;AACA;AACA;AAWA;;;AAGA;;AACA;;;AAWA;AACA;;;AACA;AAaA;AAGA;AACA;AACA;AAGA;AACA;;;AAOA;;;AAGA;;AACA;AAGA;;AACA;AACA;AAGA;AACA;AACA;AACA;AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;AAGA;AACA;AACA;AACA;AACA;;AACA;AACA;AAGA;AACA;AACA;;AACA;AACA;AAGA;AACA;AAQA;;;AAGA;;AACA;AAGA;;AACA;AACA;AAGA;AACA;;AACA;AAOA;;AAGA;AACA;AACA;AAGA;;AAGA;;AAGA;;AACA;AAGA;;AAGA;AACA;;AACA;;AACA;AAGA;AACA;;AACA;AACA;AAGA;AAOA;;;AAGA;;AACA;AACA;AACA;AAGA;;AAGA;;AAGA;AACA;AAOA;;;AAGA;;AACA;AACA;AAGA;;AACA;AACA;AACA;;AACA;AACA;;;AACA;;AACA;AACA;;AACA;;;AACA;AAKA;AACA;AAGA;AACA;;;AAQA;;;AAGA;;AACA;AAGA;AAOA;;;AAGA;;AACA;AACA;AACA;AAGA;;AACA;AACA;AACA;AAOA;;;AAGA;;AAGA;;AAGA;AACA;AACA;;AACA;AACA;AAGA;;AACA;AACA;AACA;AAGA;;AACA;AACA;;AACA;AAGA;;AACA;AACA;AACA;;AACA;AAGA;;AACA;AACA;AACA;AAGA;;AACA;AACA;AACA;AAGA;AACA;;AACA;AACA;AAGA;AACA;AACA;AAOA;;;AAQA;;AACA;;;;;;AACA;AAGA;;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;AACA;AACA;AACA;;AACA;AACA;;AACA;AACA;AAGA;;AACA;AACA;AACA;;AACA;AACA;;AACA;AACA;AAGA;;AACA;AACA;AACA", + "mappings": ";AAKI;;;;;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;;AACA;;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;;;AAGA;;;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AACA;;;AAGA;;;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;;;AAGA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;;;AAGA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AACA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;;;AAGA;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;;;AAGA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AACA;;;AACA;;;AAGA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AAGA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;;;AAGA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;;;AAGA;;;AACA;;AACA;AACA;AACA;;;AACA;;AACA;AACA;AACA;AACA;;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AACA;;;;;;;;;;;;;;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;;AACA;AACA;AACA;;;AACA;;AACA;AACA;AACA;AACA;;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;AACA;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAGA;;;AACA;AAGA;;;AACA;AACA;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;;;AACA;;AACA;AACA;AACA;AACA;AAOA;AAGA;AACA;AACA;AACA;AACA;AACA;AAOA;AAGA;AACA;AACA;AACA;AACA;AACA;AAOA;AAGA;AACA;AACA;AAGA;AACA;AAQA;;;AAGA;;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAQA;;;AAGA;;AACA;AAGA;AACA;AACA;AAGA;AACA;;;;;;;;;AACA;;AACA;AACA;AAQA;;;AAGA;;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;;AACA;AAGA;;;AACA;;AAKA;;AACA;;AACA;;AACA;AAKA;;AACA;;;AAOA;;AAGA;AACA;AACA;AAGA;;AAGA;;AAGA;;AACA;AAGA;;AAGA;AACA;;AACA;;AACA;AAGA;AACA;;AACA;AACA;AAGA;AAQA;;;AAGA;;AACA;AAGA;AACA;AACA;AAGA;AACA;;AACA;AAQA;;;AAGA;;AACA;AAGA;AAOA;;;AAGA;;AACA;AAGA;AAGA;AACA;AACA;AAOA;;;AAGA;;AAGA;AACA;AAGA;;AAGA;;AACA;AACA;AAOA;;;AAGA;;AAGA;AACA;AAGA;;AAGA;;AACA;AACA;AAOA;;;AAGA;;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;;AACA;AACA;AAOA;;;AAGA;;AACA;AACA;AACA;AAGA;;AAGA;;AAGA;AACA;AAQA;;;AAGA;;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;;AACA;;;AAGA;AACA;AACA;AAKA;;AACA;AACA;AACA;AACA;AAOA;;;AAGA;;AACA;AACA;AACA;AAGA;;AACA;AACA;AACA;AAOA;AAGA;AACA;AAGA;;AAGA;AACA;AAGA;;AAGA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AAGA;;AAGA;AACA;;;;;;AACA;;AACA;AACA;;;AACA;;AACA;AACA;AAGA;;AAGA;AACA;;AACA;;AACA;AACA;;AACA;AACA;AACA;AAOA;;;AAGA;;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAOA;;;AAGA;;AACA;AACA;AAGA;;AACA;AACA;AACA;;AACA;AACA;;;AACA;;AACA;AACA;;AACA;;;AACA;AAKA;AACA;AAGA;AACA;;;AAOA;;;AAGA;;AAGA;;AAGA;AACA;AACA;;AACA;AACA;AAGA;;AACA;AACA;AACA;AAGA;;AACA;AACA;;AACA;AAGA;;AACA;AACA;AACA;;AACA;AAGA;;AACA;AACA;AACA;AAGA;;AACA;AACA;AACA;AAGA;AACA;;AACA;AACA;AAGA;AACA;AACA;AAQA;;;AAGA;;AACA;AAGA;;AACA;AACA;AAGA;AACA;AACA;AAQA;;;AAGA;;AACA;AAGA;;AACA;AACA;AAGA;AACA;;AACA;AAOA;;;AAGA;;AACA;AAGA;;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;;AACA;AAGA;AACA;AAWA;AACA;AACA;AACA;;AACA;AACA;AAGA;;AACA;AACA;AACA;;AACA;AACA;;AACA;;AACA;AAWA;AACA;;;AAGA;;AACA;AACA;AAWA;;;AAGA;;AACA;;;AAWA;AACA;;;AAGA;;AACA;AACA;AAWA;;;AAGA;;AACA;;;AAWA;AACA;;;AACA;AAaA;AAGA;AACA;AACA;AAGA;AACA;;;AAOA;;;AAGA;;AACA;AAGA;;AACA;AACA;AAGA;AACA;AACA;AACA;AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;AAGA;AACA;AACA;AACA;AACA;;AACA;AACA;AAGA;AACA;AACA;;AACA;AACA;AAGA;AACA;AAOA;;;AAQA;;AACA;;;;;;AACA;AAGA;;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;AACA;AACA;AACA;;AACA;AACA;;AACA;AACA;AAGA;;AACA;AACA;AACA;;AACA;AACA;;AACA;AACA;AAGA;;AACA;AACA;AACA", "pcToLocation": {}, "sourceAndLineToPc": {} } \ No newline at end of file diff --git a/projects/typescript-examples/.algokit/sources/GlobalStorage/approval.teal b/projects/typescript-examples/.algokit/sources/GlobalStorage/approval.teal index f211a1c..eff1800 100644 --- a/projects/typescript-examples/.algokit/sources/GlobalStorage/approval.teal +++ b/projects/typescript-examples/.algokit/sources/GlobalStorage/approval.teal @@ -4,7 +4,7 @@ main: intcblock 0 1 - bytecblock "globalString" "globalBool" "globalIntNoDefault" "globalAccount" 0x151f7c75 "globalInt" "globalBytes" + bytecblock "globalString" "globalBool" "globalIntNoDefault" "globalAccount" 0x151f7c75 "globalInt" 0x00 "globalBytes" txn ApplicationID bnz main_after_if_else@2 @@ -14,7 +14,7 @@ main: app_global_put - bytec 6 + bytec 7 pushbytes "Silvio" app_global_put @@ -47,18 +47,38 @@ main_after_if_else@2: txn NumAppArgs - bz main_bare_routing@11 - pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 + bz main_bare_routing@12 + pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00 txna ApplicationArgs 0 - match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 + match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9 -main_after_if_else@15: +main_after_if_else@16: intc_0 return +main_deleteGlobalState_route@9: + + + txn OnCompletion + ! + assert + txn ApplicationID + assert + callsub deleteGlobalState + bytec 6 + intc_0 + uncover 2 + setbit + bytec 4 + swap + concat + log + intc_1 + return + main_writeDynamicGlobalState_route@8: @@ -126,7 +146,7 @@ main_hasGlobalState_route@6: callsub hasGlobalState swap itob - pushbytes 0x00 + bytec 6 intc_0 uncover 3 setbit @@ -163,7 +183,7 @@ main_readGlobalState_route@5: extract 6 2 uncover 6 concat - pushbytes 0x00 + bytec 6 intc_0 uncover 7 setbit @@ -194,12 +214,12 @@ main_readGlobalState_route@5: intc_1 return -main_bare_routing@11: +main_bare_routing@12: txn OnCompletion - bnz main_after_if_else@15 + bnz main_after_if_else@16 txn ApplicationID ! assert @@ -230,7 +250,7 @@ readGlobalState: intc_0 - bytec 6 + bytec 7 app_global_get_ex assert @@ -372,3 +392,17 @@ writeDynamicGlobalState: app_global_get_ex assert retsub + + + +deleteGlobalState: + + + bytec 5 + + + app_global_del + + + intc_1 + retsub diff --git a/projects/typescript-examples/.algokit/sources/GlobalStorage/approval.teal.map b/projects/typescript-examples/.algokit/sources/GlobalStorage/approval.teal.map index 92b5dd2..bd8769b 100644 --- a/projects/typescript-examples/.algokit/sources/GlobalStorage/approval.teal.map +++ b/projects/typescript-examples/.algokit/sources/GlobalStorage/approval.teal.map @@ -4,7 +4,7 @@ "approval.teal" ], "names": [], - "mappings": ";AAKI;;;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AACA;;;AAGA;;AACA;;AACA;AAGA;;AACA;;;;;;;;AACA;AAGA;AACA;;;;;;;;AACA;AAGA;AACA;AACA;AAGA;AAGA;AACA;AAGA;AAGA;;AACA;AAMA;;AACA;;;AACA;;;;;;;;;;;;;;;;;;;;;;AACA;;;AACA;;;;;;;;;;AAMA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAIA;;;AACA;;;AACA;;;AACA;;;AAGA;;;AACA;AACA;AACA;AACA;;;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAIA;;;AACA;;;AACA;;;AACA;AACA;AACA;;;AACA;AACA;;AAGA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AACA;;;AACA;AACA;AACA;;;AACA;AACA;;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AACA;;;AACA;;AACA;AACA;;AACA;AACA;;AACA;AACA;AACA;;;AACA;;AACA;AACA;;AACA;AACA;AACA;;;AACA;;AACA;AACA;;;AACA;AACA;;AACA;AACA;;AACA;;AACA;AACA;;;;AACA;AACA;;AACA;AACA;;AACA;AACA;AACA;;;AACA;AACA;AACA;AACA;;AACA;AACA;;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AAMA;;AACA;;;AACA;;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AAGA;AACA;;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAUA;;AACA;AAOA;AACA;AAGA;AACA;;AAGA;AACA;AACA;AACA;AAGA;;AACA;AAGA;AACA;AAOA;;;AAGA;AAGA;;AACA;AAGA;AAGA;;AACA;AAGA;AAGA;;AACA;AAGA;AACA;AACA;AACA;AAGA;;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;;AACA;AACA;AACA;AAOA;;;AAGA;;AACA;;AACA;AAGA;AACA;;AACA;AACA;AACA;;AACA;AACA;AAGA;AACA;;AACA;AACA;AACA", + "mappings": ";AAKI;;;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AACA;;;AAGA;;AACA;;AACA;AAGA;;AACA;;;;;;;;AACA;AAGA;AACA;;;;;;;;AACA;AAGA;AACA;AACA;AAGA;AAGA;AACA;AAGA;AAGA;;AACA;AAMA;;AACA;;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;;AACA;;;;;;;;;;;;AAMA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AACA;;;AACA;;AACA;AACA;;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAIA;;;AACA;;;AACA;;;AACA;;;AAGA;;;AACA;AACA;AACA;AACA;;;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AAIA;;;AACA;;;AACA;;;AACA;AACA;AACA;;;AACA;AACA;;AAGA;;;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AACA;;;AACA;AACA;AACA;;AACA;AACA;;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AAKA;;AACA;AACA;AACA;;AACA;AACA;;;AACA;;AACA;AACA;;AACA;AACA;;AACA;AACA;AACA;;;AACA;;AACA;AACA;;AACA;AACA;AACA;;;AACA;;AACA;AACA;;AACA;AACA;;AACA;AACA;;AACA;;AACA;AACA;;;;AACA;AACA;;AACA;AACA;;AACA;AACA;AACA;;;AACA;AACA;AACA;AACA;;AACA;AACA;;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AAMA;;AACA;;;AACA;;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AAGA;AACA;;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAUA;;AACA;AAOA;AACA;AAGA;AACA;;AAGA;AACA;AACA;AACA;AAGA;;AACA;AAGA;AACA;AAOA;;;AAGA;AAGA;;AACA;AAGA;AAGA;;AACA;AAGA;AAGA;;AACA;AAGA;AACA;AACA;AACA;AAGA;;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;;AACA;AACA;AACA;AAOA;;;AAGA;;AACA;;AACA;AAGA;AACA;;AACA;AACA;AACA;;AACA;AACA;AAGA;AACA;;AACA;AACA;AACA;AAOA;;AAGA;AAGA;AACA", "pcToLocation": {}, "sourceAndLineToPc": {} } \ No newline at end of file diff --git a/projects/typescript-examples/.algokit/static-analysis/snapshots/BoxStorage.approval.json b/projects/typescript-examples/.algokit/static-analysis/snapshots/BoxStorage.approval.json index a3ee8ae..f0e64b7 100644 --- a/projects/typescript-examples/.algokit/static-analysis/snapshots/BoxStorage.approval.json +++ b/projects/typescript-examples/.algokit/static-analysis/snapshots/BoxStorage.approval.json @@ -21,14 +21,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "16: main_after_if_else@35:", @@ -47,14 +47,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "573: main_getBox_route@3:", @@ -96,14 +96,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "556: main_valueBox_route@4:", @@ -145,37 +145,45 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "538: main_setBox_route@5:", - "541: txn OnCompletion", - "542: !", - "543: assert", - "544: txn ApplicationID", - "545: assert", - "548: txna ApplicationArgs 1", - "549: btoi", - "552: callsub setBox" + "533: main_maybeBox_route@5:", + "536: txn OnCompletion", + "537: !", + "538: assert", + "539: txn ApplicationID", + "540: assert", + "541: callsub maybeBox" ], [ - "633: setBox:", - "636: proto 1 0", - "639: frame_dig -1", - "640: itob", - "643: bytec_3", - "646: swap", - "647: box_put", - "648: retsub" + "633: maybeBox:", + "636: bytec_3", + "639: box_get", + "640: swap", + "641: btoi", + "644: swap", + "645: retsub" ], [ + "542: swap", + "543: itob", + "544: bytec_1", + "545: intc_1", + "546: uncover 3", + "547: setbit", + "548: concat", + "549: bytec_0", + "550: swap", + "551: concat", + "552: log", "553: intc_0", "554: return" ] @@ -191,40 +199,51 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "520: main_setBoxString_route@6:", - "523: txn OnCompletion", - "524: !", - "525: assert", - "526: txn ApplicationID", - "527: assert", - "530: txna ApplicationArgs 1", - "531: extract 2 0", - "534: callsub setBoxString" + "505: main_getBoxMap_route@6:", + "508: txn OnCompletion", + "509: !", + "510: assert", + "511: txn ApplicationID", + "512: assert", + "515: txna ApplicationArgs 1", + "516: btoi", + "519: callsub getBoxMap" ], [ - "652: setBoxString:", - "655: proto 1 0", - "658: bytec 4", - "661: box_del", - "662: pop", - "665: bytec 4", - "668: frame_dig -1", - "669: box_put", - "670: retsub" + "649: getBoxMap:", + "653: proto 1 1", + "656: frame_dig -1", + "657: itob", + "660: bytec_2", + "661: swap", + "662: concat", + "665: box_get", + "666: assert", + "667: retsub" ], [ - "535: intc_0", - "536: return" + "520: dup", + "521: len", + "522: itob", + "523: extract 6 2", + "524: swap", + "525: concat", + "526: bytec_0", + "527: swap", + "528: concat", + "529: log", + "530: intc_0", + "531: return" ] ] }, @@ -238,44 +257,58 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "503: main_setBoxDynamicBytes_route@7:", - "506: txn OnCompletion", - "507: !", - "508: assert", - "509: txn ApplicationID", - "510: assert", - "513: txna ApplicationArgs 1", - "516: callsub setBoxDynamicBytes" + "477: main_getBoxMapWithDefault_route@7:", + "480: txn OnCompletion", + "481: !", + "482: assert", + "483: txn ApplicationID", + "484: assert", + "487: txna ApplicationArgs 1", + "488: btoi", + "491: callsub getBoxMapWithDefault" ], [ - "674: setBoxDynamicBytes:", - "677: proto 1 0", - "680: bytec 5", - "683: box_del", - "684: pop", - "687: bytec 5", - "690: frame_dig -1", - "691: box_put", - "692: retsub" + "671: getBoxMapWithDefault:", + "675: proto 1 1", + "678: frame_dig -1", + "679: itob", + "682: bytec_2", + "683: swap", + "684: concat", + "687: box_get", + "688: pushbytes \"default\"", + "689: cover 2", + "690: select", + "691: retsub" ], [ - "517: intc_0", - "518: return" + "492: dup", + "493: len", + "494: itob", + "495: extract 6 2", + "496: swap", + "497: concat", + "498: bytec_0", + "499: swap", + "500: concat", + "501: log", + "502: intc_0", + "503: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 43 -> 62 -> 44", + "short": "0 -> 1 -> 2 -> 43 -> 62 -> 63 -> 64 -> 44", "blocks": [ [ "1: #pragma version 10", @@ -284,127 +317,77 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "491: main_deleteBox_route@8:", - "494: txn OnCompletion", - "495: !", - "496: assert", - "497: txn ApplicationID", - "498: assert", - "499: callsub deleteBox" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "696: deleteBox:", - "699: bytec_3", - "702: box_del", - "703: pop", - "706: bytec 5", - "709: box_del", - "710: pop", - "713: bytec 4", - "716: box_del", - "717: pop", - "720: bytec_3", - "723: box_get", - "724: swap", - "725: btoi", - "726: intc_3", - "727: swap", - "728: uncover 2", - "729: select", - "730: intc_3", - "731: ==", - "732: assert", - "735: bytec 5", - "738: box_get", - "739: pushbytes 0x00023432", - "740: cover 2", - "741: select", - "742: extract 2 0", - "743: bytec 7", - "744: ==", - "745: assert", - "748: bytec 4", - "751: box_get", - "752: bytec 7", - "753: cover 2", - "754: select", - "755: bytec 7", - "756: ==", - "757: assert", - "758: retsub" - ], - [ - "500: intc_0", - "501: return" - ] - ] - }, - { - "short": "0 -> 1 -> 2 -> 41 -> 63 -> 42", - "blocks": [ - [ - "1: #pragma version 10", - "2: UNSUPPORTED #pragma typetrack false" - ], - [ - "5: main:", - "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", - "10: txn NumAppArgs", - "11: bz main_bare_routing@31" + "440: main_maybeBoxMap_route@8:", + "443: txn OnCompletion", + "444: !", + "445: assert", + "446: txn ApplicationID", + "447: assert", + "450: txna ApplicationArgs 1", + "451: btoi", + "454: callsub maybeBoxMap" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", - "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "695: maybeBoxMap:", + "699: proto 1 2", + "702: frame_dig -1", + "703: itob", + "706: bytec_2", + "707: swap", + "708: concat", + "711: box_get", + "712: dup", + "713: uncover 2", + "714: swap", + "717: bz maybeBoxMap_ternary_false@2" ], [ - "468: main_maybeBox_route@9:", - "471: txn OnCompletion", - "472: !", - "473: assert", - "474: txn ApplicationID", - "475: assert", - "476: callsub maybeBox" + "718: frame_dig 1" ], [ - "762: maybeBox:", - "765: bytec_3", - "768: box_get", - "769: swap", - "770: btoi", - "773: swap", - "774: retsub" + "720: maybeBoxMap_ternary_merge@3:", + "723: frame_dig 0", + "724: uncover 3", + "725: uncover 3", + "726: retsub" ], [ - "477: swap", - "478: itob", - "479: bytec_1", - "480: intc_1", - "481: uncover 3", - "482: setbit", - "483: concat", - "484: bytec_0", - "485: swap", - "486: concat", - "487: log", - "488: intc_0", - "489: return" + "455: dig 1", + "456: len", + "457: itob", + "458: extract 6 2", + "459: uncover 2", + "460: concat", + "461: bytec_1", + "462: intc_1", + "463: uncover 3", + "464: setbit", + "465: bytec 9", + "466: swap", + "467: concat", + "468: swap", + "469: concat", + "470: bytec_0", + "471: swap", + "472: concat", + "473: log", + "474: intc_0", + "475: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 39 -> 64 -> 40", + "short": "0 -> 1 -> 2 -> 43 -> 62 -> 65 -> 64 -> 44", "blocks": [ [ "1: #pragma version 10", @@ -413,17 +396,17 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "440: main_getBoxMap_route@10:", + "440: main_maybeBoxMap_route@8:", "443: txn OnCompletion", "444: !", "445: assert", @@ -431,38 +414,61 @@ "447: assert", "450: txna ApplicationArgs 1", "451: btoi", - "454: callsub getBoxMap" + "454: callsub maybeBoxMap" + ], + [ + "695: maybeBoxMap:", + "699: proto 1 2", + "702: frame_dig -1", + "703: itob", + "706: bytec_2", + "707: swap", + "708: concat", + "711: box_get", + "712: dup", + "713: uncover 2", + "714: swap", + "717: bz maybeBoxMap_ternary_false@2" ], [ - "778: getBoxMap:", - "782: proto 1 1", - "785: frame_dig -1", - "786: itob", - "789: bytec_2", - "790: swap", - "791: concat", - "794: box_get", - "795: assert", - "796: retsub" + "728: maybeBoxMap_ternary_false@2:", + "731: pushbytes \"\"", + "732: b maybeBoxMap_ternary_merge@3" ], [ - "455: dup", + "720: maybeBoxMap_ternary_merge@3:", + "723: frame_dig 0", + "724: uncover 3", + "725: uncover 3", + "726: retsub" + ], + [ + "455: dig 1", "456: len", "457: itob", "458: extract 6 2", - "459: swap", + "459: uncover 2", "460: concat", - "461: bytec_0", - "462: swap", - "463: concat", - "464: log", - "465: intc_0", - "466: return" + "461: bytec_1", + "462: intc_1", + "463: uncover 3", + "464: setbit", + "465: bytec 9", + "466: swap", + "467: concat", + "468: swap", + "469: concat", + "470: bytec_0", + "471: swap", + "472: concat", + "473: log", + "474: intc_0", + "475: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 37 -> 65 -> 38", + "short": "0 -> 1 -> 2 -> 42", "blocks": [ [ "1: #pragma version 10", @@ -471,50 +477,23 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "412: main_getBoxMapWithDefault_route@11:", - "415: txn OnCompletion", - "416: !", - "417: assert", - "418: txn ApplicationID", - "419: assert", - "422: txna ApplicationArgs 1", - "423: btoi", - "426: callsub getBoxMapWithDefault" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "800: getBoxMapWithDefault:", - "804: proto 1 1", - "807: frame_dig -1", - "808: itob", - "811: bytec_2", - "812: swap", - "813: concat", - "816: box_get", - "817: pushbytes \"default\"", - "818: cover 2", - "819: select", - "820: retsub" - ], - [ - "427: dup", - "428: len", - "429: itob", - "430: extract 6 2", - "431: swap", - "432: concat", - "433: bytec_0", - "434: swap", - "435: concat", + "427: main_keyPrefixBoxMap_route@9:", + "430: txn OnCompletion", + "431: !", + "432: assert", + "433: txn ApplicationID", + "434: assert", + "435: pushbytes 0x151f7c750006626f784d6170", "436: log", "437: intc_0", "438: return" @@ -522,7 +501,7 @@ ] }, { - "short": "0 -> 1 -> 2 -> 35 -> 66 -> 36", + "short": "0 -> 1 -> 2 -> 40 -> 66 -> 41", "blocks": [ [ "1: #pragma version 10", @@ -531,51 +510,57 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "392: main_setBoxMap_route@12:", - "395: txn OnCompletion", - "396: !", - "397: assert", - "398: txn ApplicationID", - "399: assert", - "402: txna ApplicationArgs 1", - "403: btoi", - "404: txna ApplicationArgs 2", - "405: extract 2 0", - "408: callsub setBoxMap" + "411: main_getBoxRef_route@10:", + "414: txn OnCompletion", + "415: !", + "416: assert", + "417: txn ApplicationID", + "418: assert", + "419: callsub getBoxRef" ], [ - "824: setBoxMap:", - "827: proto 2 0", - "830: frame_dig -2", - "831: itob", - "834: bytec_2", - "835: swap", - "836: concat", - "839: dup", - "840: box_del", - "841: pop", - "842: frame_dig -1", - "843: box_put", - "844: retsub" + "736: getBoxRef:", + "739: bytec 7", + "742: intc_2", + "743: box_create", + "744: pop", + "747: txn Sender", + "750: bytec 7", + "753: dig 1", + "754: box_put", + "757: bytec 7", + "760: box_get", + "761: dig 2", + "762: cover 2", + "763: select", + "766: dup", + "767: uncover 2", + "768: ==", + "769: assert", + "772: retsub" ], [ - "409: intc_0", - "410: return" + "420: bytec_0", + "421: swap", + "422: concat", + "423: log", + "424: intc_0", + "425: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 33 -> 67 -> 34", + "short": "0 -> 1 -> 2 -> 38 -> 67 -> 39", "blocks": [ [ "1: #pragma version 10", @@ -584,46 +569,54 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "374: main_deleteBoxMap_route@13:", - "377: txn OnCompletion", - "378: !", - "379: assert", - "380: txn ApplicationID", - "381: assert", - "384: txna ApplicationArgs 1", - "385: btoi", - "388: callsub deleteBoxMap" + "385: main_boxMapExists_route@11:", + "388: txn OnCompletion", + "389: !", + "390: assert", + "391: txn ApplicationID", + "392: assert", + "395: txna ApplicationArgs 1", + "396: btoi", + "399: callsub boxMapExists" ], [ - "848: deleteBoxMap:", - "851: proto 1 0", - "854: frame_dig -1", - "855: itob", - "858: bytec_2", - "859: swap", - "860: concat", - "863: box_del", - "864: pop", - "865: retsub" + "776: boxMapExists:", + "780: proto 1 1", + "783: frame_dig -1", + "784: itob", + "787: bytec_2", + "788: swap", + "789: concat", + "792: box_len", + "793: bury 1", + "794: retsub" ], [ - "389: intc_0", - "390: return" + "400: bytec_1", + "401: intc_1", + "402: uncover 2", + "403: setbit", + "404: bytec_0", + "405: swap", + "406: concat", + "407: log", + "408: intc_0", + "409: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 31 -> 68 -> 69 -> 70 -> 32", + "short": "0 -> 1 -> 2 -> 36 -> 68 -> 37", "blocks": [ [ "1: #pragma version 10", @@ -632,77 +625,60 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "337: main_maybeBoxMap_route@14:", - "340: txn OnCompletion", - "341: !", - "342: assert", - "343: txn ApplicationID", - "344: assert", - "347: txna ApplicationArgs 1", - "348: btoi", - "351: callsub maybeBoxMap" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "869: maybeBoxMap:", - "873: proto 1 2", - "876: frame_dig -1", - "877: itob", - "880: bytec_2", - "881: swap", - "882: concat", - "885: box_get", - "886: dup", - "887: uncover 2", - "888: swap", - "891: bz maybeBoxMap_ternary_false@2" + "348: main_maybeBoxRef_route@12:", + "351: txn OnCompletion", + "352: !", + "353: assert", + "354: txn ApplicationID", + "355: assert", + "358: txna ApplicationArgs 1", + "359: extract 2 0", + "362: callsub maybeBoxRef" ], [ - "892: frame_dig 1" + "798: maybeBoxRef:", + "802: proto 1 2", + "805: frame_dig -1", + "806: box_get", + "809: retsub" ], [ - "894: maybeBoxMap_ternary_merge@3:", - "897: frame_dig 0", - "898: uncover 3", - "899: uncover 3", - "900: retsub" - ], - [ - "352: dig 1", - "353: len", - "354: itob", - "355: extract 6 2", - "356: uncover 2", - "357: concat", - "358: bytec_1", - "359: intc_1", - "360: uncover 3", - "361: setbit", - "362: bytec 9", - "363: swap", - "364: concat", - "365: swap", - "366: concat", - "367: bytec_0", - "368: swap", - "369: concat", - "370: log", - "371: intc_0", - "372: return" + "363: dig 1", + "364: len", + "365: itob", + "366: extract 6 2", + "367: uncover 2", + "368: concat", + "369: bytec_1", + "370: intc_1", + "371: uncover 3", + "372: setbit", + "373: bytec 9", + "374: swap", + "375: concat", + "376: swap", + "377: concat", + "378: bytec_0", + "379: swap", + "380: concat", + "381: log", + "382: intc_0", + "383: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 31 -> 68 -> 71 -> 70 -> 32", + "short": "0 -> 1 -> 2 -> 34 -> 69 -> 35", "blocks": [ [ "1: #pragma version 10", @@ -711,79 +687,44 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "337: main_maybeBoxMap_route@14:", - "340: txn OnCompletion", - "341: !", - "342: assert", - "343: txn ApplicationID", - "344: assert", - "347: txna ApplicationArgs 1", - "348: btoi", - "351: callsub maybeBoxMap" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "869: maybeBoxMap:", - "873: proto 1 2", - "876: frame_dig -1", - "877: itob", - "880: bytec_2", - "881: swap", - "882: concat", - "885: box_get", - "886: dup", - "887: uncover 2", - "888: swap", - "891: bz maybeBoxMap_ternary_false@2" + "330: main_setBox_route@13:", + "333: txn OnCompletion", + "334: !", + "335: assert", + "336: txn ApplicationID", + "337: assert", + "340: txna ApplicationArgs 1", + "341: btoi", + "344: callsub setBox" ], [ - "902: maybeBoxMap_ternary_false@2:", - "905: pushbytes \"\"", - "906: b maybeBoxMap_ternary_merge@3" + "813: setBox:", + "816: proto 1 0", + "819: frame_dig -1", + "820: itob", + "823: bytec_3", + "826: swap", + "827: box_put", + "828: retsub" ], [ - "894: maybeBoxMap_ternary_merge@3:", - "897: frame_dig 0", - "898: uncover 3", - "899: uncover 3", - "900: retsub" - ], - [ - "352: dig 1", - "353: len", - "354: itob", - "355: extract 6 2", - "356: uncover 2", - "357: concat", - "358: bytec_1", - "359: intc_1", - "360: uncover 3", - "361: setbit", - "362: bytec 9", - "363: swap", - "364: concat", - "365: swap", - "366: concat", - "367: bytec_0", - "368: swap", - "369: concat", - "370: log", - "371: intc_0", - "372: return" + "345: intc_0", + "346: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 29 -> 72 -> 73 -> 30", + "short": "0 -> 1 -> 2 -> 32 -> 70 -> 33", "blocks": [ [ "1: #pragma version 10", @@ -792,57 +733,45 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "314: main_boxMapLength_route@15:", - "317: txn OnCompletion", - "318: !", + "312: main_setBoxString_route@14:", + "315: txn OnCompletion", + "316: !", + "317: assert", + "318: txn ApplicationID", "319: assert", - "320: txn ApplicationID", - "321: assert", - "324: txna ApplicationArgs 1", - "325: btoi", - "328: callsub boxMapLength" - ], - [ - "910: boxMapLength:", - "914: proto 1 1", - "917: frame_dig -1", - "918: itob", - "921: bytec_2", - "922: swap", - "923: concat", - "924: dup", - "927: box_len", - "928: bury 1", - "929: bnz boxMapLength_after_if_else@2" + "322: txna ApplicationArgs 1", + "323: extract 2 0", + "326: callsub setBoxString" ], [ - "932: intc_1", - "933: swap", - "934: retsub" + "832: setBoxString:", + "835: proto 1 0", + "838: bytec 4", + "841: box_del", + "842: pop", + "845: bytec 4", + "848: frame_dig -1", + "849: box_put", + "850: retsub" ], [ - "329: itob", - "330: bytec_0", - "331: swap", - "332: concat", - "333: log", - "334: intc_0", - "335: return" + "327: intc_0", + "328: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 29 -> 72 -> 74 -> 30", + "short": "0 -> 1 -> 2 -> 30 -> 71 -> 31", "blocks": [ [ "1: #pragma version 10", @@ -851,60 +780,44 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "314: main_boxMapLength_route@15:", - "317: txn OnCompletion", - "318: !", - "319: assert", - "320: txn ApplicationID", - "321: assert", - "324: txna ApplicationArgs 1", - "325: btoi", - "328: callsub boxMapLength" - ], - [ - "910: boxMapLength:", - "914: proto 1 1", - "917: frame_dig -1", - "918: itob", - "921: bytec_2", - "922: swap", - "923: concat", - "924: dup", - "927: box_len", - "928: bury 1", - "929: bnz boxMapLength_after_if_else@2" - ], - [ - "936: boxMapLength_after_if_else@2:", - "939: frame_dig 0", - "940: box_len", - "941: assert", - "942: swap", - "943: retsub" + "295: main_setBoxDynamicBytes_route@15:", + "298: txn OnCompletion", + "299: !", + "300: assert", + "301: txn ApplicationID", + "302: assert", + "305: txna ApplicationArgs 1", + "308: callsub setBoxDynamicBytes" ], [ - "329: itob", - "330: bytec_0", - "331: swap", - "332: concat", - "333: log", - "334: intc_0", - "335: return" + "854: setBoxDynamicBytes:", + "857: proto 1 0", + "860: bytec 5", + "863: box_del", + "864: pop", + "867: bytec 5", + "870: frame_dig -1", + "871: box_put", + "872: retsub" + ], + [ + "309: intc_0", + "310: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 27 -> 75 -> 28", + "short": "0 -> 1 -> 2 -> 28 -> 72 -> 29", "blocks": [ [ "1: #pragma version 10", @@ -913,54 +826,51 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "288: main_boxMapExists_route@16:", - "291: txn OnCompletion", - "292: !", - "293: assert", - "294: txn ApplicationID", - "295: assert", - "298: txna ApplicationArgs 1", - "299: btoi", - "302: callsub boxMapExists" + "275: main_setBoxMap_route@16:", + "278: txn OnCompletion", + "279: !", + "280: assert", + "281: txn ApplicationID", + "282: assert", + "285: txna ApplicationArgs 1", + "286: btoi", + "287: txna ApplicationArgs 2", + "288: extract 2 0", + "291: callsub setBoxMap" ], [ - "947: boxMapExists:", - "951: proto 1 1", - "954: frame_dig -1", - "955: itob", - "958: bytec_2", - "959: swap", - "960: concat", - "963: box_len", - "964: bury 1", - "965: retsub" + "876: setBoxMap:", + "879: proto 2 0", + "882: frame_dig -2", + "883: itob", + "886: bytec_2", + "887: swap", + "888: concat", + "891: dup", + "892: box_del", + "893: pop", + "894: frame_dig -1", + "895: box_put", + "896: retsub" ], [ - "303: bytec_1", - "304: intc_1", - "305: uncover 2", - "306: setbit", - "307: bytec_0", - "308: swap", - "309: concat", - "310: log", - "311: intc_0", - "312: return" + "292: intc_0", + "293: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 26", + "short": "0 -> 1 -> 2 -> 26 -> 73 -> 27", "blocks": [ [ "1: #pragma version 10", @@ -969,31 +879,46 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "275: main_keyPrefixBoxMap_route@17:", - "278: txn OnCompletion", - "279: !", - "280: assert", - "281: txn ApplicationID", - "282: assert", - "283: pushbytes 0x151f7c750006626f784d6170", - "284: log", - "285: intc_0", - "286: return" + "257: main_setBoxRef_route@17:", + "260: txn OnCompletion", + "261: !", + "262: assert", + "263: txn ApplicationID", + "264: assert", + "267: txna ApplicationArgs 1", + "268: extract 2 0", + "271: callsub setBoxRef" + ], + [ + "900: setBoxRef:", + "903: proto 1 0", + "906: frame_dig -1", + "907: intc_2", + "908: box_create", + "909: pop", + "912: frame_dig -1", + "915: txn Sender", + "918: box_put", + "919: retsub" + ], + [ + "272: intc_0", + "273: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 24 -> 76 -> 25", + "short": "0 -> 1 -> 2 -> 24 -> 74 -> 75 -> 25", "blocks": [ [ "1: #pragma version 10", @@ -1002,50 +927,57 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "253: main_getBoxMapStruct_route@18:", - "256: txn OnCompletion", - "257: !", - "258: assert", - "259: txn ApplicationID", - "260: assert", - "263: txna ApplicationArgs 1", - "264: btoi", - "267: callsub getBoxMapStruct" + "234: main_boxMapLength_route@18:", + "237: txn OnCompletion", + "238: !", + "239: assert", + "240: txn ApplicationID", + "241: assert", + "244: txna ApplicationArgs 1", + "245: btoi", + "248: callsub boxMapLength" ], [ - "969: getBoxMapStruct:", - "973: proto 1 1", - "976: frame_dig -1", - "977: itob", - "980: bytec 6", - "981: swap", - "982: concat", - "985: box_get", - "986: assert", - "987: retsub" + "923: boxMapLength:", + "927: proto 1 1", + "930: frame_dig -1", + "931: itob", + "934: bytec_2", + "935: swap", + "936: concat", + "937: dup", + "940: box_len", + "941: bury 1", + "942: bnz boxMapLength_after_if_else@2" ], [ - "268: bytec_0", - "269: swap", - "270: concat", - "271: log", - "272: intc_0", - "273: return" + "945: intc_1", + "946: swap", + "947: retsub" + ], + [ + "249: itob", + "250: bytec_0", + "251: swap", + "252: concat", + "253: log", + "254: intc_0", + "255: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 78 -> 79 -> 80 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 24 -> 74 -> 76 -> 25", "blocks": [ [ "1: #pragma version 10", @@ -1054,106 +986,60 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" - ], - [ - "1056: frame_dig 0", - "1057: box_get", - "1058: assert", - "1069: extract 2 8", - "1072: frame_dig -1", - "1073: extract 2 8", - "1084: ==", - "1085: bz setBoxMapStruct_bool_false@4" - ], - [ - "1088: frame_dig 0", - "1089: box_get", - "1090: assert", - "1101: extract 10 8", - "1104: frame_dig -1", - "1105: extract 10 8", - "1116: ==", - "1117: bz setBoxMapStruct_bool_false@4" + "234: main_boxMapLength_route@18:", + "237: txn OnCompletion", + "238: !", + "239: assert", + "240: txn ApplicationID", + "241: assert", + "244: txna ApplicationArgs 1", + "245: btoi", + "248: callsub boxMapLength" ], [ - "1118: intc_0" + "923: boxMapLength:", + "927: proto 1 1", + "930: frame_dig -1", + "931: itob", + "934: bytec_2", + "935: swap", + "936: concat", + "937: dup", + "940: box_len", + "941: bury 1", + "942: bnz boxMapLength_after_if_else@2" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "949: boxMapLength_after_if_else@2:", + "952: frame_dig 0", + "953: box_len", + "954: assert", + "955: swap", + "956: retsub" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "249: itob", + "250: bytec_0", + "251: swap", + "252: concat", + "253: log", + "254: intc_0", + "255: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 78 -> 79 -> 82 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 22 -> 77 -> 23", "blocks": [ [ "1: #pragma version 10", @@ -1162,108 +1048,126 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" + "211: main_lengthBoxRef_route@19:", + "214: txn OnCompletion", + "215: !", + "216: assert", + "217: txn ApplicationID", + "218: assert", + "221: txna ApplicationArgs 1", + "222: extract 2 0", + "225: callsub lengthBoxRef" ], [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" - ], - [ - "1056: frame_dig 0", - "1057: box_get", - "1058: assert", - "1069: extract 2 8", - "1072: frame_dig -1", - "1073: extract 2 8", - "1084: ==", - "1085: bz setBoxMapStruct_bool_false@4" + "960: lengthBoxRef:", + "963: proto 1 1", + "966: frame_dig -1", + "967: intc_2", + "968: box_create", + "969: assert", + "972: frame_dig -1", + "973: box_len", + "974: assert", + "975: retsub" ], [ - "1088: frame_dig 0", - "1089: box_get", - "1090: assert", - "1101: extract 10 8", - "1104: frame_dig -1", - "1105: extract 10 8", - "1116: ==", - "1117: bz setBoxMapStruct_bool_false@4" + "226: itob", + "227: bytec_0", + "228: swap", + "229: concat", + "230: log", + "231: intc_0", + "232: return" + ] + ] + }, + { + "short": "0 -> 1 -> 2 -> 20 -> 78 -> 21", + "blocks": [ + [ + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" ], [ - "1138: setBoxMapStruct_bool_false@4:", - "1139: intc_1", - "1140: b setBoxMapStruct_bool_merge@5" + "5: main:", + "6: intcblock 1 0 32 42", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", + "10: txn NumAppArgs", + "11: bz main_bare_routing@31" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", + "13: txna ApplicationArgs 0", + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "199: main_deleteBox_route@20:", + "202: txn OnCompletion", + "203: !", + "204: assert", + "205: txn ApplicationID", + "206: assert", + "207: callsub deleteBox" + ], + [ + "979: deleteBox:", + "982: bytec_3", + "985: box_del", + "986: pop", + "989: bytec 5", + "992: box_del", + "993: pop", + "996: bytec 4", + "999: box_del", + "1000: pop", + "1003: bytec_3", + "1006: box_get", + "1007: swap", + "1008: btoi", + "1009: intc_3", + "1010: swap", + "1011: uncover 2", + "1012: select", + "1013: intc_3", + "1014: ==", + "1015: assert", + "1018: bytec 5", + "1021: box_get", + "1022: pushbytes 0x00023432", + "1023: cover 2", + "1024: select", + "1025: extract 2 0", + "1026: bytec 8", + "1027: ==", + "1028: assert", + "1031: bytec 4", + "1034: box_get", + "1035: bytec 8", + "1036: cover 2", + "1037: select", + "1038: bytec 8", + "1039: ==", + "1040: assert", + "1041: retsub" + ], + [ + "208: intc_0", + "209: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 78 -> 82 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 18 -> 79 -> 19", "blocks": [ [ "1: #pragma version 10", @@ -1272,98 +1176,46 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" - ], - [ - "1056: frame_dig 0", - "1057: box_get", - "1058: assert", - "1069: extract 2 8", - "1072: frame_dig -1", - "1073: extract 2 8", - "1084: ==", - "1085: bz setBoxMapStruct_bool_false@4" - ], - [ - "1138: setBoxMapStruct_bool_false@4:", - "1139: intc_1", - "1140: b setBoxMapStruct_bool_merge@5" + "181: main_deleteBoxMap_route@21:", + "184: txn OnCompletion", + "185: !", + "186: assert", + "187: txn ApplicationID", + "188: assert", + "191: txna ApplicationArgs 1", + "192: btoi", + "195: callsub deleteBoxMap" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "1045: deleteBoxMap:", + "1048: proto 1 0", + "1051: frame_dig -1", + "1052: itob", + "1055: bytec_2", + "1056: swap", + "1057: concat", + "1060: box_del", + "1061: pop", + "1062: retsub" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "196: intc_0", + "197: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 82 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 16 -> 80 -> 81 -> 82 -> 83 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -1372,88 +1224,61 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" + "163: main_deleteBoxRef_route@22:", + "166: txn OnCompletion", + "167: !", + "168: assert", + "169: txn ApplicationID", + "170: assert", + "173: txna ApplicationArgs 1", + "174: extract 2 0", + "177: callsub deleteBoxRef" ], [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" + "1066: deleteBoxRef:", + "1069: proto 1 0", + "1072: frame_dig -1", + "1073: box_del", + "1074: pop", + "1077: frame_dig -1", + "1078: box_get", + "1079: pop", + "1080: pushbytes \"\"", + "1081: ==", + "1082: bz deleteBoxRef_bool_false@4" + ], + [ + "1083: frame_dig -1", + "1084: box_get", + "1085: bury 1", + "1086: bnz deleteBoxRef_bool_false@4" ], [ - "1138: setBoxMapStruct_bool_false@4:", - "1139: intc_1", - "1140: b setBoxMapStruct_bool_merge@5" + "1087: intc_0" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "1089: deleteBoxRef_bool_merge@5:", + "1092: assert", + "1093: retsub" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "178: intc_0", + "179: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 20 -> 83 -> 21", + "short": "0 -> 1 -> 2 -> 16 -> 80 -> 81 -> 84 -> 83 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -1462,71 +1287,63 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "163: main_deleteBoxRef_route@22:", + "166: txn OnCompletion", + "167: !", + "168: assert", + "169: txn ApplicationID", + "170: assert", + "173: txna ApplicationArgs 1", + "174: extract 2 0", + "177: callsub deleteBoxRef" ], [ - "200: main_boxMapStructLength_route@20:", - "203: txn OnCompletion", - "204: !", - "205: assert", - "206: txn ApplicationID", - "207: assert", - "210: txna ApplicationArgs 1", - "211: btoi", - "214: callsub boxMapStructLength" + "1066: deleteBoxRef:", + "1069: proto 1 0", + "1072: frame_dig -1", + "1073: box_del", + "1074: pop", + "1077: frame_dig -1", + "1078: box_get", + "1079: pop", + "1080: pushbytes \"\"", + "1081: ==", + "1082: bz deleteBoxRef_bool_false@4" ], [ - "1144: boxMapStructLength:", - "1147: proto 1 1", - "1150: frame_dig -1", - "1151: itob", - "1154: bytec 6", - "1155: swap", - "1156: concat", - "1159: dup", - "1160: box_del", - "1161: pop", - "1162: dup", - "1169: pushbytes 0x0012000000000000004600000000000004d20008746573744e616d65", - "1172: box_put", - "1175: dup", - "1176: box_get", - "1177: assert", - "1178: len", - "1179: pushint 28", - "1180: ==", - "1181: assert", - "1184: box_len", - "1185: assert", - "1186: pushint 28", - "1187: ==", - "1188: assert", - "1191: intc_0", - "1192: retsub" + "1083: frame_dig -1", + "1084: box_get", + "1085: bury 1", + "1086: bnz deleteBoxRef_bool_false@4" ], [ - "215: bytec_1", - "216: intc_1", - "217: uncover 2", - "218: setbit", - "219: bytec_0", - "220: swap", - "221: concat", - "222: log", - "223: intc_0", - "224: return" + "1095: deleteBoxRef_bool_false@4:", + "1096: intc_1", + "1097: b deleteBoxRef_bool_merge@5" + ], + [ + "1089: deleteBoxRef_bool_merge@5:", + "1092: assert", + "1093: retsub" + ], + [ + "178: intc_0", + "179: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 18 -> 84 -> 19", + "short": "0 -> 1 -> 2 -> 16 -> 80 -> 84 -> 83 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -1535,54 +1352,57 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "163: main_deleteBoxRef_route@22:", + "166: txn OnCompletion", + "167: !", + "168: assert", + "169: txn ApplicationID", + "170: assert", + "173: txna ApplicationArgs 1", + "174: extract 2 0", + "177: callsub deleteBoxRef" ], [ - "174: main_boxMapStructExists_route@21:", - "177: txn OnCompletion", - "178: !", - "179: assert", - "180: txn ApplicationID", - "181: assert", - "184: txna ApplicationArgs 1", - "185: btoi", - "188: callsub boxMapStructExists" + "1066: deleteBoxRef:", + "1069: proto 1 0", + "1072: frame_dig -1", + "1073: box_del", + "1074: pop", + "1077: frame_dig -1", + "1078: box_get", + "1079: pop", + "1080: pushbytes \"\"", + "1081: ==", + "1082: bz deleteBoxRef_bool_false@4" ], [ - "1196: boxMapStructExists:", - "1200: proto 1 1", - "1203: frame_dig -1", - "1204: itob", - "1207: bytec 6", - "1208: swap", - "1209: concat", - "1212: box_len", - "1213: bury 1", - "1214: retsub" + "1095: deleteBoxRef_bool_false@4:", + "1096: intc_1", + "1097: b deleteBoxRef_bool_merge@5" ], [ - "189: bytec_1", - "190: intc_1", - "191: uncover 2", - "192: setbit", - "193: bytec_0", - "194: swap", - "195: concat", - "196: log", - "197: intc_0", - "198: return" + "1089: deleteBoxRef_bool_merge@5:", + "1092: assert", + "1093: retsub" + ], + [ + "178: intc_0", + "179: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 16 -> 85 -> 17", + "short": "0 -> 1 -> 2 -> 14 -> 85 -> 15", "blocks": [ [ "1: #pragma version 10", @@ -1591,57 +1411,73 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "158: main_getBoxRef_route@22:", - "161: txn OnCompletion", - "162: !", - "163: assert", - "164: txn ApplicationID", - "165: assert", - "166: callsub getBoxRef" + "145: main_extractBoxRef_route@23:", + "148: txn OnCompletion", + "149: !", + "150: assert", + "151: txn ApplicationID", + "152: assert", + "155: txna ApplicationArgs 1", + "156: extract 2 0", + "159: callsub extractBoxRef" ], [ - "1218: getBoxRef:", - "1221: bytec 8", - "1224: intc_2", - "1225: box_create", - "1226: pop", - "1229: txn Sender", - "1232: bytec 8", - "1235: dig 1", - "1236: box_put", - "1239: bytec 8", - "1242: box_get", - "1243: dig 2", - "1244: cover 2", - "1245: select", - "1248: dup", - "1249: uncover 2", - "1250: ==", - "1251: assert", - "1254: retsub" + "1101: extractBoxRef:", + "1104: proto 1 0", + "1107: txn Sender", + "1110: global CurrentApplicationAddress", + "1113: dup", + "1114: len", + "1115: dig 2", + "1116: len", + "1117: +", + "1120: frame_dig -1", + "1121: swap", + "1122: box_create", + "1123: assert", + "1126: frame_dig -1", + "1127: intc_1", + "1128: dig 3", + "1129: box_replace", + "1132: frame_dig -1", + "1133: intc_1", + "1134: dup", + "1135: dig 3", + "1136: UNSUPPORTED box_splice", + "1139: frame_dig -1", + "1140: intc_1", + "1141: intc_2", + "1142: box_extract", + "1145: frame_dig -1", + "1146: intc_2", + "1147: dup", + "1148: box_extract", + "1151: swap", + "1152: uncover 2", + "1153: ==", + "1154: assert", + "1157: ==", + "1158: assert", + "1159: retsub" ], [ - "167: bytec_0", - "168: swap", - "169: concat", - "170: log", - "171: intc_0", - "172: return" + "160: intc_0", + "161: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 14 -> 86 -> 15", + "short": "0 -> 1 -> 2 -> 12 -> 86 -> 13", "blocks": [ [ "1: #pragma version 10", @@ -1650,46 +1486,50 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "140: main_setBoxRef_route@23:", - "143: txn OnCompletion", - "144: !", - "145: assert", - "146: txn ApplicationID", - "147: assert", - "150: txna ApplicationArgs 1", - "151: extract 2 0", - "154: callsub setBoxRef" + "123: main_getBoxMapStruct_route@24:", + "126: txn OnCompletion", + "127: !", + "128: assert", + "129: txn ApplicationID", + "130: assert", + "133: txna ApplicationArgs 1", + "134: btoi", + "137: callsub getBoxMapStruct" ], [ - "1258: setBoxRef:", - "1261: proto 1 0", - "1264: frame_dig -1", - "1265: intc_2", - "1266: box_create", - "1267: pop", - "1270: frame_dig -1", - "1273: txn Sender", - "1276: box_put", - "1277: retsub" + "1163: getBoxMapStruct:", + "1167: proto 1 1", + "1170: frame_dig -1", + "1171: itob", + "1174: bytec 6", + "1175: swap", + "1176: concat", + "1179: box_get", + "1180: assert", + "1181: retsub" ], [ - "155: intc_0", - "156: return" + "138: bytec_0", + "139: swap", + "140: concat", + "141: log", + "142: intc_0", + "143: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 12 -> 87 -> 88 -> 89 -> 90 -> 13", + "short": "0 -> 1 -> 2 -> 10 -> 87 -> 11", "blocks": [ [ "1: #pragma version 10", @@ -1698,61 +1538,54 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "122: main_deleteBoxRef_route@24:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "132: txna ApplicationArgs 1", - "133: extract 2 0", - "136: callsub deleteBoxRef" + "97: main_boxMapStructExists_route@25:", + "100: txn OnCompletion", + "101: !", + "102: assert", + "103: txn ApplicationID", + "104: assert", + "107: txna ApplicationArgs 1", + "108: btoi", + "111: callsub boxMapStructExists" ], [ - "1281: deleteBoxRef:", - "1284: proto 1 0", - "1287: frame_dig -1", - "1288: box_del", - "1289: pop", - "1292: frame_dig -1", - "1293: box_get", - "1294: pop", - "1295: pushbytes \"\"", - "1296: ==", - "1297: bz deleteBoxRef_bool_false@4" + "1185: boxMapStructExists:", + "1189: proto 1 1", + "1192: frame_dig -1", + "1193: itob", + "1196: bytec 6", + "1197: swap", + "1198: concat", + "1201: box_len", + "1202: bury 1", + "1203: retsub" ], [ - "1298: frame_dig -1", - "1299: box_get", - "1300: bury 1", - "1301: bnz deleteBoxRef_bool_false@4" - ], - [ - "1302: intc_0" - ], - [ - "1304: deleteBoxRef_bool_merge@5:", - "1307: assert", - "1308: retsub" - ], - [ - "137: intc_0", - "138: return" + "112: bytec_1", + "113: intc_1", + "114: uncover 2", + "115: setbit", + "116: bytec_0", + "117: swap", + "118: concat", + "119: log", + "120: intc_0", + "121: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 12 -> 87 -> 88 -> 91 -> 90 -> 13", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 89 -> 90 -> 91 -> 92 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -1761,122 +1594,216 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" ], [ - "122: main_deleteBoxRef_route@24:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "132: txna ApplicationArgs 1", - "133: extract 2 0", - "136: callsub deleteBoxRef" + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "1281: deleteBoxRef:", - "1284: proto 1 0", - "1287: frame_dig -1", - "1288: box_del", - "1289: pop", - "1292: frame_dig -1", - "1293: box_get", - "1294: pop", - "1295: pushbytes \"\"", - "1296: ==", - "1297: bz deleteBoxRef_bool_false@4" + "1272: frame_dig 0", + "1273: box_get", + "1274: assert", + "1285: extract 2 8", + "1288: frame_dig -1", + "1289: extract 2 8", + "1300: ==", + "1301: bz setBoxMapStruct_bool_false@4" ], [ - "1298: frame_dig -1", - "1299: box_get", - "1300: bury 1", - "1301: bnz deleteBoxRef_bool_false@4" + "1304: frame_dig 0", + "1305: box_get", + "1306: assert", + "1317: extract 10 8", + "1320: frame_dig -1", + "1321: extract 10 8", + "1332: ==", + "1333: bz setBoxMapStruct_bool_false@4" ], [ - "1310: deleteBoxRef_bool_false@4:", - "1311: intc_1", - "1312: b deleteBoxRef_bool_merge@5" + "1334: intc_0" ], [ - "1304: deleteBoxRef_bool_merge@5:", - "1307: assert", - "1308: retsub" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" ], [ - "137: intc_0", - "138: return" + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 12 -> 87 -> 91 -> 90 -> 13", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 89 -> 90 -> 93 -> 92 -> 9", "blocks": [ [ - "1: #pragma version 10", - "2: UNSUPPORTED #pragma typetrack false" + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" + ], + [ + "5: main:", + "6: intcblock 1 0 32 42", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", + "10: txn NumAppArgs", + "11: bz main_bare_routing@31" + ], + [ + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", + "13: txna ApplicationArgs 0", + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "5: main:", - "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", - "10: txn NumAppArgs", - "11: bz main_bare_routing@31" + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", - "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "122: main_deleteBoxRef_route@24:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "132: txna ApplicationArgs 1", - "133: extract 2 0", - "136: callsub deleteBoxRef" + "1272: frame_dig 0", + "1273: box_get", + "1274: assert", + "1285: extract 2 8", + "1288: frame_dig -1", + "1289: extract 2 8", + "1300: ==", + "1301: bz setBoxMapStruct_bool_false@4" ], [ - "1281: deleteBoxRef:", - "1284: proto 1 0", - "1287: frame_dig -1", - "1288: box_del", - "1289: pop", - "1292: frame_dig -1", - "1293: box_get", - "1294: pop", - "1295: pushbytes \"\"", - "1296: ==", - "1297: bz deleteBoxRef_bool_false@4" + "1304: frame_dig 0", + "1305: box_get", + "1306: assert", + "1317: extract 10 8", + "1320: frame_dig -1", + "1321: extract 10 8", + "1332: ==", + "1333: bz setBoxMapStruct_bool_false@4" ], [ - "1310: deleteBoxRef_bool_false@4:", - "1311: intc_1", - "1312: b deleteBoxRef_bool_merge@5" + "1354: setBoxMapStruct_bool_false@4:", + "1355: intc_1", + "1356: b setBoxMapStruct_bool_merge@5" ], [ - "1304: deleteBoxRef_bool_merge@5:", - "1307: assert", - "1308: retsub" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" ], [ - "137: intc_0", - "138: return" + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 10 -> 92 -> 11", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 89 -> 93 -> 92 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -1885,60 +1812,98 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" + ], + [ + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "85: main_maybeBoxRef_route@25:", - "88: txn OnCompletion", - "89: !", - "90: assert", - "91: txn ApplicationID", - "92: assert", - "95: txna ApplicationArgs 1", - "96: extract 2 0", - "99: callsub maybeBoxRef" + "1272: frame_dig 0", + "1273: box_get", + "1274: assert", + "1285: extract 2 8", + "1288: frame_dig -1", + "1289: extract 2 8", + "1300: ==", + "1301: bz setBoxMapStruct_bool_false@4" ], [ - "1316: maybeBoxRef:", - "1320: proto 1 2", - "1323: frame_dig -1", - "1324: box_get", - "1327: retsub" + "1354: setBoxMapStruct_bool_false@4:", + "1355: intc_1", + "1356: b setBoxMapStruct_bool_merge@5" ], [ - "100: dig 1", - "101: len", - "102: itob", - "103: extract 6 2", - "104: uncover 2", - "105: concat", - "106: bytec_1", - "107: intc_1", - "108: uncover 3", - "109: setbit", - "110: bytec 9", - "111: swap", - "112: concat", - "113: swap", - "114: concat", - "115: bytec_0", - "116: swap", - "117: concat", - "118: log", - "119: intc_0", - "120: return" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" + ], + [ + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 8 -> 93 -> 9", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 93 -> 92 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -1947,46 +1912,83 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" ], [ - "62: main_lengthBoxRef_route@26:", - "65: txn OnCompletion", - "66: !", - "67: assert", - "68: txn ApplicationID", - "69: assert", - "72: txna ApplicationArgs 1", - "73: extract 2 0", - "76: callsub lengthBoxRef" + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "1331: lengthBoxRef:", - "1334: proto 1 1", - "1337: frame_dig -1", - "1338: intc_2", - "1339: box_create", - "1340: assert", - "1343: frame_dig -1", - "1344: box_len", - "1345: assert", - "1346: retsub" + "1354: setBoxMapStruct_bool_false@4:", + "1355: intc_1", + "1356: b setBoxMapStruct_bool_merge@5" ], [ - "77: itob", - "78: bytec_0", - "79: swap", - "80: concat", - "81: log", - "82: intc_0", - "83: return" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" + ], + [ + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, @@ -2000,68 +2002,66 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "44: main_extractBoxRef_route@27:", + "44: main_boxMapStructLength_route@27:", "47: txn OnCompletion", "48: !", "49: assert", "50: txn ApplicationID", "51: assert", "54: txna ApplicationArgs 1", - "55: extract 2 0", - "58: callsub extractBoxRef" - ], - [ - "1350: extractBoxRef:", - "1353: proto 1 0", - "1356: txn Sender", - "1359: global CurrentApplicationAddress", - "1362: dup", - "1363: len", - "1364: dig 2", - "1365: len", - "1366: +", - "1369: frame_dig -1", - "1370: swap", - "1371: box_create", - "1372: assert", - "1375: frame_dig -1", - "1376: intc_1", - "1377: dig 3", - "1378: box_replace", - "1381: frame_dig -1", - "1382: intc_1", - "1383: dup", - "1384: dig 3", - "1385: UNSUPPORTED box_splice", - "1388: frame_dig -1", - "1389: intc_1", - "1390: intc_2", - "1391: box_extract", - "1394: frame_dig -1", - "1395: intc_2", - "1396: dup", - "1397: box_extract", - "1400: swap", - "1401: uncover 2", - "1402: ==", - "1403: assert", - "1406: ==", - "1407: assert", + "55: btoi", + "58: callsub boxMapStructLength" + ], + [ + "1360: boxMapStructLength:", + "1363: proto 1 1", + "1366: frame_dig -1", + "1367: itob", + "1370: bytec 6", + "1371: swap", + "1372: concat", + "1375: dup", + "1376: box_del", + "1377: pop", + "1378: dup", + "1385: pushbytes 0x0012000000000000004600000000000004d20008746573744e616d65", + "1388: box_put", + "1391: dup", + "1392: box_get", + "1393: assert", + "1394: len", + "1395: pushint 28", + "1396: ==", + "1397: assert", + "1400: box_len", + "1401: assert", + "1402: pushint 28", + "1403: ==", + "1404: assert", + "1407: intc_0", "1408: retsub" ], [ - "59: intc_0", - "60: return" + "59: bytec_1", + "60: intc_1", + "61: uncover 2", + "62: setbit", + "63: bytec_0", + "64: swap", + "65: concat", + "66: log", + "67: intc_0", + "68: return" ] ] }, @@ -2075,14 +2075,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "22: main_arc4Box_route@28:", @@ -2157,7 +2157,7 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], @@ -2194,14 +2194,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "16: main_after_if_else@35:", @@ -2220,14 +2220,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "573: main_getBox_route@3:", @@ -2269,14 +2269,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "556: main_valueBox_route@4:", @@ -2318,37 +2318,45 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "538: main_setBox_route@5:", - "541: txn OnCompletion", - "542: !", - "543: assert", - "544: txn ApplicationID", - "545: assert", - "548: txna ApplicationArgs 1", - "549: btoi", - "552: callsub setBox" + "533: main_maybeBox_route@5:", + "536: txn OnCompletion", + "537: !", + "538: assert", + "539: txn ApplicationID", + "540: assert", + "541: callsub maybeBox" ], [ - "633: setBox:", - "636: proto 1 0", - "639: frame_dig -1", - "640: itob", - "643: bytec_3", - "646: swap", - "647: box_put", - "648: retsub" + "633: maybeBox:", + "636: bytec_3", + "639: box_get", + "640: swap", + "641: btoi", + "644: swap", + "645: retsub" ], [ + "542: swap", + "543: itob", + "544: bytec_1", + "545: intc_1", + "546: uncover 3", + "547: setbit", + "548: concat", + "549: bytec_0", + "550: swap", + "551: concat", + "552: log", "553: intc_0", "554: return" ] @@ -2364,40 +2372,51 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "520: main_setBoxString_route@6:", - "523: txn OnCompletion", - "524: !", - "525: assert", - "526: txn ApplicationID", - "527: assert", - "530: txna ApplicationArgs 1", - "531: extract 2 0", - "534: callsub setBoxString" + "505: main_getBoxMap_route@6:", + "508: txn OnCompletion", + "509: !", + "510: assert", + "511: txn ApplicationID", + "512: assert", + "515: txna ApplicationArgs 1", + "516: btoi", + "519: callsub getBoxMap" ], [ - "652: setBoxString:", - "655: proto 1 0", - "658: bytec 4", - "661: box_del", - "662: pop", - "665: bytec 4", - "668: frame_dig -1", - "669: box_put", - "670: retsub" + "649: getBoxMap:", + "653: proto 1 1", + "656: frame_dig -1", + "657: itob", + "660: bytec_2", + "661: swap", + "662: concat", + "665: box_get", + "666: assert", + "667: retsub" ], [ - "535: intc_0", - "536: return" + "520: dup", + "521: len", + "522: itob", + "523: extract 6 2", + "524: swap", + "525: concat", + "526: bytec_0", + "527: swap", + "528: concat", + "529: log", + "530: intc_0", + "531: return" ] ] }, @@ -2411,44 +2430,58 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "503: main_setBoxDynamicBytes_route@7:", - "506: txn OnCompletion", - "507: !", - "508: assert", - "509: txn ApplicationID", - "510: assert", - "513: txna ApplicationArgs 1", - "516: callsub setBoxDynamicBytes" + "477: main_getBoxMapWithDefault_route@7:", + "480: txn OnCompletion", + "481: !", + "482: assert", + "483: txn ApplicationID", + "484: assert", + "487: txna ApplicationArgs 1", + "488: btoi", + "491: callsub getBoxMapWithDefault" ], [ - "674: setBoxDynamicBytes:", - "677: proto 1 0", - "680: bytec 5", - "683: box_del", - "684: pop", - "687: bytec 5", - "690: frame_dig -1", - "691: box_put", - "692: retsub" + "671: getBoxMapWithDefault:", + "675: proto 1 1", + "678: frame_dig -1", + "679: itob", + "682: bytec_2", + "683: swap", + "684: concat", + "687: box_get", + "688: pushbytes \"default\"", + "689: cover 2", + "690: select", + "691: retsub" ], [ - "517: intc_0", - "518: return" + "492: dup", + "493: len", + "494: itob", + "495: extract 6 2", + "496: swap", + "497: concat", + "498: bytec_0", + "499: swap", + "500: concat", + "501: log", + "502: intc_0", + "503: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 43 -> 62 -> 44", + "short": "0 -> 1 -> 2 -> 43 -> 62 -> 63 -> 64 -> 44", "blocks": [ [ "1: #pragma version 10", @@ -2457,127 +2490,77 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "491: main_deleteBox_route@8:", - "494: txn OnCompletion", - "495: !", - "496: assert", - "497: txn ApplicationID", - "498: assert", - "499: callsub deleteBox" - ], - [ - "696: deleteBox:", - "699: bytec_3", - "702: box_del", - "703: pop", - "706: bytec 5", - "709: box_del", - "710: pop", - "713: bytec 4", - "716: box_del", - "717: pop", - "720: bytec_3", - "723: box_get", - "724: swap", - "725: btoi", - "726: intc_3", - "727: swap", - "728: uncover 2", - "729: select", - "730: intc_3", - "731: ==", - "732: assert", - "735: bytec 5", - "738: box_get", - "739: pushbytes 0x00023432", - "740: cover 2", - "741: select", - "742: extract 2 0", - "743: bytec 7", - "744: ==", - "745: assert", - "748: bytec 4", - "751: box_get", - "752: bytec 7", - "753: cover 2", - "754: select", - "755: bytec 7", - "756: ==", - "757: assert", - "758: retsub" - ], - [ - "500: intc_0", - "501: return" - ] - ] - }, - { - "short": "0 -> 1 -> 2 -> 41 -> 63 -> 42", - "blocks": [ - [ - "1: #pragma version 10", - "2: UNSUPPORTED #pragma typetrack false" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "5: main:", - "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", - "10: txn NumAppArgs", - "11: bz main_bare_routing@31" + "440: main_maybeBoxMap_route@8:", + "443: txn OnCompletion", + "444: !", + "445: assert", + "446: txn ApplicationID", + "447: assert", + "450: txna ApplicationArgs 1", + "451: btoi", + "454: callsub maybeBoxMap" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", - "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "695: maybeBoxMap:", + "699: proto 1 2", + "702: frame_dig -1", + "703: itob", + "706: bytec_2", + "707: swap", + "708: concat", + "711: box_get", + "712: dup", + "713: uncover 2", + "714: swap", + "717: bz maybeBoxMap_ternary_false@2" ], [ - "468: main_maybeBox_route@9:", - "471: txn OnCompletion", - "472: !", - "473: assert", - "474: txn ApplicationID", - "475: assert", - "476: callsub maybeBox" + "718: frame_dig 1" ], [ - "762: maybeBox:", - "765: bytec_3", - "768: box_get", - "769: swap", - "770: btoi", - "773: swap", - "774: retsub" + "720: maybeBoxMap_ternary_merge@3:", + "723: frame_dig 0", + "724: uncover 3", + "725: uncover 3", + "726: retsub" ], [ - "477: swap", - "478: itob", - "479: bytec_1", - "480: intc_1", - "481: uncover 3", - "482: setbit", - "483: concat", - "484: bytec_0", - "485: swap", - "486: concat", - "487: log", - "488: intc_0", - "489: return" + "455: dig 1", + "456: len", + "457: itob", + "458: extract 6 2", + "459: uncover 2", + "460: concat", + "461: bytec_1", + "462: intc_1", + "463: uncover 3", + "464: setbit", + "465: bytec 9", + "466: swap", + "467: concat", + "468: swap", + "469: concat", + "470: bytec_0", + "471: swap", + "472: concat", + "473: log", + "474: intc_0", + "475: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 39 -> 64 -> 40", + "short": "0 -> 1 -> 2 -> 43 -> 62 -> 65 -> 64 -> 44", "blocks": [ [ "1: #pragma version 10", @@ -2586,17 +2569,17 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "440: main_getBoxMap_route@10:", + "440: main_maybeBoxMap_route@8:", "443: txn OnCompletion", "444: !", "445: assert", @@ -2604,38 +2587,61 @@ "447: assert", "450: txna ApplicationArgs 1", "451: btoi", - "454: callsub getBoxMap" + "454: callsub maybeBoxMap" + ], + [ + "695: maybeBoxMap:", + "699: proto 1 2", + "702: frame_dig -1", + "703: itob", + "706: bytec_2", + "707: swap", + "708: concat", + "711: box_get", + "712: dup", + "713: uncover 2", + "714: swap", + "717: bz maybeBoxMap_ternary_false@2" + ], + [ + "728: maybeBoxMap_ternary_false@2:", + "731: pushbytes \"\"", + "732: b maybeBoxMap_ternary_merge@3" ], [ - "778: getBoxMap:", - "782: proto 1 1", - "785: frame_dig -1", - "786: itob", - "789: bytec_2", - "790: swap", - "791: concat", - "794: box_get", - "795: assert", - "796: retsub" + "720: maybeBoxMap_ternary_merge@3:", + "723: frame_dig 0", + "724: uncover 3", + "725: uncover 3", + "726: retsub" ], [ - "455: dup", + "455: dig 1", "456: len", "457: itob", "458: extract 6 2", - "459: swap", + "459: uncover 2", "460: concat", - "461: bytec_0", - "462: swap", - "463: concat", - "464: log", - "465: intc_0", - "466: return" + "461: bytec_1", + "462: intc_1", + "463: uncover 3", + "464: setbit", + "465: bytec 9", + "466: swap", + "467: concat", + "468: swap", + "469: concat", + "470: bytec_0", + "471: swap", + "472: concat", + "473: log", + "474: intc_0", + "475: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 37 -> 65 -> 38", + "short": "0 -> 1 -> 2 -> 42", "blocks": [ [ "1: #pragma version 10", @@ -2644,50 +2650,23 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "412: main_getBoxMapWithDefault_route@11:", - "415: txn OnCompletion", - "416: !", - "417: assert", - "418: txn ApplicationID", - "419: assert", - "422: txna ApplicationArgs 1", - "423: btoi", - "426: callsub getBoxMapWithDefault" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "800: getBoxMapWithDefault:", - "804: proto 1 1", - "807: frame_dig -1", - "808: itob", - "811: bytec_2", - "812: swap", - "813: concat", - "816: box_get", - "817: pushbytes \"default\"", - "818: cover 2", - "819: select", - "820: retsub" - ], - [ - "427: dup", - "428: len", - "429: itob", - "430: extract 6 2", - "431: swap", - "432: concat", - "433: bytec_0", - "434: swap", - "435: concat", + "427: main_keyPrefixBoxMap_route@9:", + "430: txn OnCompletion", + "431: !", + "432: assert", + "433: txn ApplicationID", + "434: assert", + "435: pushbytes 0x151f7c750006626f784d6170", "436: log", "437: intc_0", "438: return" @@ -2695,7 +2674,7 @@ ] }, { - "short": "0 -> 1 -> 2 -> 35 -> 66 -> 36", + "short": "0 -> 1 -> 2 -> 40 -> 66 -> 41", "blocks": [ [ "1: #pragma version 10", @@ -2704,51 +2683,57 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "392: main_setBoxMap_route@12:", - "395: txn OnCompletion", - "396: !", - "397: assert", - "398: txn ApplicationID", - "399: assert", - "402: txna ApplicationArgs 1", - "403: btoi", - "404: txna ApplicationArgs 2", - "405: extract 2 0", - "408: callsub setBoxMap" + "411: main_getBoxRef_route@10:", + "414: txn OnCompletion", + "415: !", + "416: assert", + "417: txn ApplicationID", + "418: assert", + "419: callsub getBoxRef" ], [ - "824: setBoxMap:", - "827: proto 2 0", - "830: frame_dig -2", - "831: itob", - "834: bytec_2", - "835: swap", - "836: concat", - "839: dup", - "840: box_del", - "841: pop", - "842: frame_dig -1", - "843: box_put", - "844: retsub" + "736: getBoxRef:", + "739: bytec 7", + "742: intc_2", + "743: box_create", + "744: pop", + "747: txn Sender", + "750: bytec 7", + "753: dig 1", + "754: box_put", + "757: bytec 7", + "760: box_get", + "761: dig 2", + "762: cover 2", + "763: select", + "766: dup", + "767: uncover 2", + "768: ==", + "769: assert", + "772: retsub" ], [ - "409: intc_0", - "410: return" + "420: bytec_0", + "421: swap", + "422: concat", + "423: log", + "424: intc_0", + "425: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 33 -> 67 -> 34", + "short": "0 -> 1 -> 2 -> 38 -> 67 -> 39", "blocks": [ [ "1: #pragma version 10", @@ -2757,46 +2742,54 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "374: main_deleteBoxMap_route@13:", - "377: txn OnCompletion", - "378: !", - "379: assert", - "380: txn ApplicationID", - "381: assert", - "384: txna ApplicationArgs 1", - "385: btoi", - "388: callsub deleteBoxMap" + "385: main_boxMapExists_route@11:", + "388: txn OnCompletion", + "389: !", + "390: assert", + "391: txn ApplicationID", + "392: assert", + "395: txna ApplicationArgs 1", + "396: btoi", + "399: callsub boxMapExists" ], [ - "848: deleteBoxMap:", - "851: proto 1 0", - "854: frame_dig -1", - "855: itob", - "858: bytec_2", - "859: swap", - "860: concat", - "863: box_del", - "864: pop", - "865: retsub" + "776: boxMapExists:", + "780: proto 1 1", + "783: frame_dig -1", + "784: itob", + "787: bytec_2", + "788: swap", + "789: concat", + "792: box_len", + "793: bury 1", + "794: retsub" ], [ - "389: intc_0", - "390: return" + "400: bytec_1", + "401: intc_1", + "402: uncover 2", + "403: setbit", + "404: bytec_0", + "405: swap", + "406: concat", + "407: log", + "408: intc_0", + "409: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 31 -> 68 -> 69 -> 70 -> 32", + "short": "0 -> 1 -> 2 -> 36 -> 68 -> 37", "blocks": [ [ "1: #pragma version 10", @@ -2805,77 +2798,60 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "337: main_maybeBoxMap_route@14:", - "340: txn OnCompletion", - "341: !", - "342: assert", - "343: txn ApplicationID", - "344: assert", - "347: txna ApplicationArgs 1", - "348: btoi", - "351: callsub maybeBoxMap" + "348: main_maybeBoxRef_route@12:", + "351: txn OnCompletion", + "352: !", + "353: assert", + "354: txn ApplicationID", + "355: assert", + "358: txna ApplicationArgs 1", + "359: extract 2 0", + "362: callsub maybeBoxRef" ], [ - "869: maybeBoxMap:", - "873: proto 1 2", - "876: frame_dig -1", - "877: itob", - "880: bytec_2", - "881: swap", - "882: concat", - "885: box_get", - "886: dup", - "887: uncover 2", - "888: swap", - "891: bz maybeBoxMap_ternary_false@2" + "798: maybeBoxRef:", + "802: proto 1 2", + "805: frame_dig -1", + "806: box_get", + "809: retsub" ], [ - "892: frame_dig 1" - ], - [ - "894: maybeBoxMap_ternary_merge@3:", - "897: frame_dig 0", - "898: uncover 3", - "899: uncover 3", - "900: retsub" - ], - [ - "352: dig 1", - "353: len", - "354: itob", - "355: extract 6 2", - "356: uncover 2", - "357: concat", - "358: bytec_1", - "359: intc_1", - "360: uncover 3", - "361: setbit", - "362: bytec 9", - "363: swap", - "364: concat", - "365: swap", - "366: concat", - "367: bytec_0", - "368: swap", - "369: concat", - "370: log", - "371: intc_0", - "372: return" + "363: dig 1", + "364: len", + "365: itob", + "366: extract 6 2", + "367: uncover 2", + "368: concat", + "369: bytec_1", + "370: intc_1", + "371: uncover 3", + "372: setbit", + "373: bytec 9", + "374: swap", + "375: concat", + "376: swap", + "377: concat", + "378: bytec_0", + "379: swap", + "380: concat", + "381: log", + "382: intc_0", + "383: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 31 -> 68 -> 71 -> 70 -> 32", + "short": "0 -> 1 -> 2 -> 34 -> 69 -> 35", "blocks": [ [ "1: #pragma version 10", @@ -2884,79 +2860,44 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "337: main_maybeBoxMap_route@14:", - "340: txn OnCompletion", - "341: !", - "342: assert", - "343: txn ApplicationID", - "344: assert", - "347: txna ApplicationArgs 1", - "348: btoi", - "351: callsub maybeBoxMap" + "330: main_setBox_route@13:", + "333: txn OnCompletion", + "334: !", + "335: assert", + "336: txn ApplicationID", + "337: assert", + "340: txna ApplicationArgs 1", + "341: btoi", + "344: callsub setBox" ], [ - "869: maybeBoxMap:", - "873: proto 1 2", - "876: frame_dig -1", - "877: itob", - "880: bytec_2", - "881: swap", - "882: concat", - "885: box_get", - "886: dup", - "887: uncover 2", - "888: swap", - "891: bz maybeBoxMap_ternary_false@2" + "813: setBox:", + "816: proto 1 0", + "819: frame_dig -1", + "820: itob", + "823: bytec_3", + "826: swap", + "827: box_put", + "828: retsub" ], [ - "902: maybeBoxMap_ternary_false@2:", - "905: pushbytes \"\"", - "906: b maybeBoxMap_ternary_merge@3" - ], - [ - "894: maybeBoxMap_ternary_merge@3:", - "897: frame_dig 0", - "898: uncover 3", - "899: uncover 3", - "900: retsub" - ], - [ - "352: dig 1", - "353: len", - "354: itob", - "355: extract 6 2", - "356: uncover 2", - "357: concat", - "358: bytec_1", - "359: intc_1", - "360: uncover 3", - "361: setbit", - "362: bytec 9", - "363: swap", - "364: concat", - "365: swap", - "366: concat", - "367: bytec_0", - "368: swap", - "369: concat", - "370: log", - "371: intc_0", - "372: return" + "345: intc_0", + "346: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 29 -> 72 -> 73 -> 30", + "short": "0 -> 1 -> 2 -> 32 -> 70 -> 33", "blocks": [ [ "1: #pragma version 10", @@ -2965,57 +2906,45 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "314: main_boxMapLength_route@15:", - "317: txn OnCompletion", - "318: !", + "312: main_setBoxString_route@14:", + "315: txn OnCompletion", + "316: !", + "317: assert", + "318: txn ApplicationID", "319: assert", - "320: txn ApplicationID", - "321: assert", - "324: txna ApplicationArgs 1", - "325: btoi", - "328: callsub boxMapLength" - ], - [ - "910: boxMapLength:", - "914: proto 1 1", - "917: frame_dig -1", - "918: itob", - "921: bytec_2", - "922: swap", - "923: concat", - "924: dup", - "927: box_len", - "928: bury 1", - "929: bnz boxMapLength_after_if_else@2" + "322: txna ApplicationArgs 1", + "323: extract 2 0", + "326: callsub setBoxString" ], [ - "932: intc_1", - "933: swap", - "934: retsub" + "832: setBoxString:", + "835: proto 1 0", + "838: bytec 4", + "841: box_del", + "842: pop", + "845: bytec 4", + "848: frame_dig -1", + "849: box_put", + "850: retsub" ], [ - "329: itob", - "330: bytec_0", - "331: swap", - "332: concat", - "333: log", - "334: intc_0", - "335: return" + "327: intc_0", + "328: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 29 -> 72 -> 74 -> 30", + "short": "0 -> 1 -> 2 -> 30 -> 71 -> 31", "blocks": [ [ "1: #pragma version 10", @@ -3024,60 +2953,44 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "314: main_boxMapLength_route@15:", - "317: txn OnCompletion", - "318: !", - "319: assert", - "320: txn ApplicationID", - "321: assert", - "324: txna ApplicationArgs 1", - "325: btoi", - "328: callsub boxMapLength" - ], - [ - "910: boxMapLength:", - "914: proto 1 1", - "917: frame_dig -1", - "918: itob", - "921: bytec_2", - "922: swap", - "923: concat", - "924: dup", - "927: box_len", - "928: bury 1", - "929: bnz boxMapLength_after_if_else@2" - ], - [ - "936: boxMapLength_after_if_else@2:", - "939: frame_dig 0", - "940: box_len", - "941: assert", - "942: swap", - "943: retsub" + "295: main_setBoxDynamicBytes_route@15:", + "298: txn OnCompletion", + "299: !", + "300: assert", + "301: txn ApplicationID", + "302: assert", + "305: txna ApplicationArgs 1", + "308: callsub setBoxDynamicBytes" ], [ - "329: itob", - "330: bytec_0", - "331: swap", - "332: concat", - "333: log", - "334: intc_0", - "335: return" + "854: setBoxDynamicBytes:", + "857: proto 1 0", + "860: bytec 5", + "863: box_del", + "864: pop", + "867: bytec 5", + "870: frame_dig -1", + "871: box_put", + "872: retsub" + ], + [ + "309: intc_0", + "310: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 27 -> 75 -> 28", + "short": "0 -> 1 -> 2 -> 28 -> 72 -> 29", "blocks": [ [ "1: #pragma version 10", @@ -3086,54 +2999,51 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "288: main_boxMapExists_route@16:", - "291: txn OnCompletion", - "292: !", - "293: assert", - "294: txn ApplicationID", - "295: assert", - "298: txna ApplicationArgs 1", - "299: btoi", - "302: callsub boxMapExists" + "275: main_setBoxMap_route@16:", + "278: txn OnCompletion", + "279: !", + "280: assert", + "281: txn ApplicationID", + "282: assert", + "285: txna ApplicationArgs 1", + "286: btoi", + "287: txna ApplicationArgs 2", + "288: extract 2 0", + "291: callsub setBoxMap" ], [ - "947: boxMapExists:", - "951: proto 1 1", - "954: frame_dig -1", - "955: itob", - "958: bytec_2", - "959: swap", - "960: concat", - "963: box_len", - "964: bury 1", - "965: retsub" + "876: setBoxMap:", + "879: proto 2 0", + "882: frame_dig -2", + "883: itob", + "886: bytec_2", + "887: swap", + "888: concat", + "891: dup", + "892: box_del", + "893: pop", + "894: frame_dig -1", + "895: box_put", + "896: retsub" ], [ - "303: bytec_1", - "304: intc_1", - "305: uncover 2", - "306: setbit", - "307: bytec_0", - "308: swap", - "309: concat", - "310: log", - "311: intc_0", - "312: return" + "292: intc_0", + "293: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 26", + "short": "0 -> 1 -> 2 -> 26 -> 73 -> 27", "blocks": [ [ "1: #pragma version 10", @@ -3142,31 +3052,46 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "275: main_keyPrefixBoxMap_route@17:", - "278: txn OnCompletion", - "279: !", - "280: assert", - "281: txn ApplicationID", - "282: assert", - "283: pushbytes 0x151f7c750006626f784d6170", - "284: log", - "285: intc_0", - "286: return" + "257: main_setBoxRef_route@17:", + "260: txn OnCompletion", + "261: !", + "262: assert", + "263: txn ApplicationID", + "264: assert", + "267: txna ApplicationArgs 1", + "268: extract 2 0", + "271: callsub setBoxRef" + ], + [ + "900: setBoxRef:", + "903: proto 1 0", + "906: frame_dig -1", + "907: intc_2", + "908: box_create", + "909: pop", + "912: frame_dig -1", + "915: txn Sender", + "918: box_put", + "919: retsub" + ], + [ + "272: intc_0", + "273: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 24 -> 76 -> 25", + "short": "0 -> 1 -> 2 -> 24 -> 74 -> 75 -> 25", "blocks": [ [ "1: #pragma version 10", @@ -3175,50 +3100,57 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "253: main_getBoxMapStruct_route@18:", - "256: txn OnCompletion", - "257: !", - "258: assert", - "259: txn ApplicationID", - "260: assert", - "263: txna ApplicationArgs 1", - "264: btoi", - "267: callsub getBoxMapStruct" + "234: main_boxMapLength_route@18:", + "237: txn OnCompletion", + "238: !", + "239: assert", + "240: txn ApplicationID", + "241: assert", + "244: txna ApplicationArgs 1", + "245: btoi", + "248: callsub boxMapLength" ], [ - "969: getBoxMapStruct:", - "973: proto 1 1", - "976: frame_dig -1", - "977: itob", - "980: bytec 6", - "981: swap", - "982: concat", - "985: box_get", - "986: assert", - "987: retsub" + "923: boxMapLength:", + "927: proto 1 1", + "930: frame_dig -1", + "931: itob", + "934: bytec_2", + "935: swap", + "936: concat", + "937: dup", + "940: box_len", + "941: bury 1", + "942: bnz boxMapLength_after_if_else@2" ], [ - "268: bytec_0", - "269: swap", - "270: concat", - "271: log", - "272: intc_0", - "273: return" + "945: intc_1", + "946: swap", + "947: retsub" + ], + [ + "249: itob", + "250: bytec_0", + "251: swap", + "252: concat", + "253: log", + "254: intc_0", + "255: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 78 -> 79 -> 80 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 24 -> 74 -> 76 -> 25", "blocks": [ [ "1: #pragma version 10", @@ -3227,106 +3159,60 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" - ], - [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" - ], - [ - "1056: frame_dig 0", - "1057: box_get", - "1058: assert", - "1069: extract 2 8", - "1072: frame_dig -1", - "1073: extract 2 8", - "1084: ==", - "1085: bz setBoxMapStruct_bool_false@4" + "234: main_boxMapLength_route@18:", + "237: txn OnCompletion", + "238: !", + "239: assert", + "240: txn ApplicationID", + "241: assert", + "244: txna ApplicationArgs 1", + "245: btoi", + "248: callsub boxMapLength" ], [ - "1088: frame_dig 0", - "1089: box_get", - "1090: assert", - "1101: extract 10 8", - "1104: frame_dig -1", - "1105: extract 10 8", - "1116: ==", - "1117: bz setBoxMapStruct_bool_false@4" - ], - [ - "1118: intc_0" + "923: boxMapLength:", + "927: proto 1 1", + "930: frame_dig -1", + "931: itob", + "934: bytec_2", + "935: swap", + "936: concat", + "937: dup", + "940: box_len", + "941: bury 1", + "942: bnz boxMapLength_after_if_else@2" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "949: boxMapLength_after_if_else@2:", + "952: frame_dig 0", + "953: box_len", + "954: assert", + "955: swap", + "956: retsub" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "249: itob", + "250: bytec_0", + "251: swap", + "252: concat", + "253: log", + "254: intc_0", + "255: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 78 -> 79 -> 82 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 22 -> 77 -> 23", "blocks": [ [ "1: #pragma version 10", @@ -3335,108 +3221,126 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" + "211: main_lengthBoxRef_route@19:", + "214: txn OnCompletion", + "215: !", + "216: assert", + "217: txn ApplicationID", + "218: assert", + "221: txna ApplicationArgs 1", + "222: extract 2 0", + "225: callsub lengthBoxRef" ], [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" - ], - [ - "1056: frame_dig 0", - "1057: box_get", - "1058: assert", - "1069: extract 2 8", - "1072: frame_dig -1", - "1073: extract 2 8", - "1084: ==", - "1085: bz setBoxMapStruct_bool_false@4" + "960: lengthBoxRef:", + "963: proto 1 1", + "966: frame_dig -1", + "967: intc_2", + "968: box_create", + "969: assert", + "972: frame_dig -1", + "973: box_len", + "974: assert", + "975: retsub" + ], + [ + "226: itob", + "227: bytec_0", + "228: swap", + "229: concat", + "230: log", + "231: intc_0", + "232: return" + ] + ] + }, + { + "short": "0 -> 1 -> 2 -> 20 -> 78 -> 21", + "blocks": [ + [ + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" ], [ - "1088: frame_dig 0", - "1089: box_get", - "1090: assert", - "1101: extract 10 8", - "1104: frame_dig -1", - "1105: extract 10 8", - "1116: ==", - "1117: bz setBoxMapStruct_bool_false@4" + "5: main:", + "6: intcblock 1 0 32 42", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", + "10: txn NumAppArgs", + "11: bz main_bare_routing@31" ], [ - "1138: setBoxMapStruct_bool_false@4:", - "1139: intc_1", - "1140: b setBoxMapStruct_bool_merge@5" + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", + "13: txna ApplicationArgs 0", + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "199: main_deleteBox_route@20:", + "202: txn OnCompletion", + "203: !", + "204: assert", + "205: txn ApplicationID", + "206: assert", + "207: callsub deleteBox" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "979: deleteBox:", + "982: bytec_3", + "985: box_del", + "986: pop", + "989: bytec 5", + "992: box_del", + "993: pop", + "996: bytec 4", + "999: box_del", + "1000: pop", + "1003: bytec_3", + "1006: box_get", + "1007: swap", + "1008: btoi", + "1009: intc_3", + "1010: swap", + "1011: uncover 2", + "1012: select", + "1013: intc_3", + "1014: ==", + "1015: assert", + "1018: bytec 5", + "1021: box_get", + "1022: pushbytes 0x00023432", + "1023: cover 2", + "1024: select", + "1025: extract 2 0", + "1026: bytec 8", + "1027: ==", + "1028: assert", + "1031: bytec 4", + "1034: box_get", + "1035: bytec 8", + "1036: cover 2", + "1037: select", + "1038: bytec 8", + "1039: ==", + "1040: assert", + "1041: retsub" + ], + [ + "208: intc_0", + "209: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 78 -> 82 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 18 -> 79 -> 19", "blocks": [ [ "1: #pragma version 10", @@ -3445,98 +3349,46 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" - ], - [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" - ], - [ - "1056: frame_dig 0", - "1057: box_get", - "1058: assert", - "1069: extract 2 8", - "1072: frame_dig -1", - "1073: extract 2 8", - "1084: ==", - "1085: bz setBoxMapStruct_bool_false@4" + "181: main_deleteBoxMap_route@21:", + "184: txn OnCompletion", + "185: !", + "186: assert", + "187: txn ApplicationID", + "188: assert", + "191: txna ApplicationArgs 1", + "192: btoi", + "195: callsub deleteBoxMap" ], [ - "1138: setBoxMapStruct_bool_false@4:", - "1139: intc_1", - "1140: b setBoxMapStruct_bool_merge@5" + "1045: deleteBoxMap:", + "1048: proto 1 0", + "1051: frame_dig -1", + "1052: itob", + "1055: bytec_2", + "1056: swap", + "1057: concat", + "1060: box_del", + "1061: pop", + "1062: retsub" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" - ], - [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "196: intc_0", + "197: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 82 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 16 -> 80 -> 81 -> 82 -> 83 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -3545,88 +3397,61 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" + "163: main_deleteBoxRef_route@22:", + "166: txn OnCompletion", + "167: !", + "168: assert", + "169: txn ApplicationID", + "170: assert", + "173: txna ApplicationArgs 1", + "174: extract 2 0", + "177: callsub deleteBoxRef" ], [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" + "1066: deleteBoxRef:", + "1069: proto 1 0", + "1072: frame_dig -1", + "1073: box_del", + "1074: pop", + "1077: frame_dig -1", + "1078: box_get", + "1079: pop", + "1080: pushbytes \"\"", + "1081: ==", + "1082: bz deleteBoxRef_bool_false@4" + ], + [ + "1083: frame_dig -1", + "1084: box_get", + "1085: bury 1", + "1086: bnz deleteBoxRef_bool_false@4" ], [ - "1138: setBoxMapStruct_bool_false@4:", - "1139: intc_1", - "1140: b setBoxMapStruct_bool_merge@5" + "1087: intc_0" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "1089: deleteBoxRef_bool_merge@5:", + "1092: assert", + "1093: retsub" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "178: intc_0", + "179: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 20 -> 83 -> 21", + "short": "0 -> 1 -> 2 -> 16 -> 80 -> 81 -> 84 -> 83 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -3635,71 +3460,63 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "200: main_boxMapStructLength_route@20:", - "203: txn OnCompletion", - "204: !", - "205: assert", - "206: txn ApplicationID", - "207: assert", - "210: txna ApplicationArgs 1", - "211: btoi", - "214: callsub boxMapStructLength" + "163: main_deleteBoxRef_route@22:", + "166: txn OnCompletion", + "167: !", + "168: assert", + "169: txn ApplicationID", + "170: assert", + "173: txna ApplicationArgs 1", + "174: extract 2 0", + "177: callsub deleteBoxRef" ], [ - "1144: boxMapStructLength:", - "1147: proto 1 1", - "1150: frame_dig -1", - "1151: itob", - "1154: bytec 6", - "1155: swap", - "1156: concat", - "1159: dup", - "1160: box_del", - "1161: pop", - "1162: dup", - "1169: pushbytes 0x0012000000000000004600000000000004d20008746573744e616d65", - "1172: box_put", - "1175: dup", - "1176: box_get", - "1177: assert", - "1178: len", - "1179: pushint 28", - "1180: ==", - "1181: assert", - "1184: box_len", - "1185: assert", - "1186: pushint 28", - "1187: ==", - "1188: assert", - "1191: intc_0", - "1192: retsub" + "1066: deleteBoxRef:", + "1069: proto 1 0", + "1072: frame_dig -1", + "1073: box_del", + "1074: pop", + "1077: frame_dig -1", + "1078: box_get", + "1079: pop", + "1080: pushbytes \"\"", + "1081: ==", + "1082: bz deleteBoxRef_bool_false@4" + ], + [ + "1083: frame_dig -1", + "1084: box_get", + "1085: bury 1", + "1086: bnz deleteBoxRef_bool_false@4" + ], + [ + "1095: deleteBoxRef_bool_false@4:", + "1096: intc_1", + "1097: b deleteBoxRef_bool_merge@5" + ], + [ + "1089: deleteBoxRef_bool_merge@5:", + "1092: assert", + "1093: retsub" ], [ - "215: bytec_1", - "216: intc_1", - "217: uncover 2", - "218: setbit", - "219: bytec_0", - "220: swap", - "221: concat", - "222: log", - "223: intc_0", - "224: return" + "178: intc_0", + "179: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 18 -> 84 -> 19", + "short": "0 -> 1 -> 2 -> 16 -> 80 -> 84 -> 83 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -3708,54 +3525,57 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "174: main_boxMapStructExists_route@21:", - "177: txn OnCompletion", - "178: !", - "179: assert", - "180: txn ApplicationID", - "181: assert", - "184: txna ApplicationArgs 1", - "185: btoi", - "188: callsub boxMapStructExists" + "163: main_deleteBoxRef_route@22:", + "166: txn OnCompletion", + "167: !", + "168: assert", + "169: txn ApplicationID", + "170: assert", + "173: txna ApplicationArgs 1", + "174: extract 2 0", + "177: callsub deleteBoxRef" ], [ - "1196: boxMapStructExists:", - "1200: proto 1 1", - "1203: frame_dig -1", - "1204: itob", - "1207: bytec 6", - "1208: swap", - "1209: concat", - "1212: box_len", - "1213: bury 1", - "1214: retsub" + "1066: deleteBoxRef:", + "1069: proto 1 0", + "1072: frame_dig -1", + "1073: box_del", + "1074: pop", + "1077: frame_dig -1", + "1078: box_get", + "1079: pop", + "1080: pushbytes \"\"", + "1081: ==", + "1082: bz deleteBoxRef_bool_false@4" + ], + [ + "1095: deleteBoxRef_bool_false@4:", + "1096: intc_1", + "1097: b deleteBoxRef_bool_merge@5" ], [ - "189: bytec_1", - "190: intc_1", - "191: uncover 2", - "192: setbit", - "193: bytec_0", - "194: swap", - "195: concat", - "196: log", - "197: intc_0", - "198: return" + "1089: deleteBoxRef_bool_merge@5:", + "1092: assert", + "1093: retsub" + ], + [ + "178: intc_0", + "179: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 16 -> 85 -> 17", + "short": "0 -> 1 -> 2 -> 14 -> 85 -> 15", "blocks": [ [ "1: #pragma version 10", @@ -3764,57 +3584,73 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "158: main_getBoxRef_route@22:", - "161: txn OnCompletion", - "162: !", - "163: assert", - "164: txn ApplicationID", - "165: assert", - "166: callsub getBoxRef" + "145: main_extractBoxRef_route@23:", + "148: txn OnCompletion", + "149: !", + "150: assert", + "151: txn ApplicationID", + "152: assert", + "155: txna ApplicationArgs 1", + "156: extract 2 0", + "159: callsub extractBoxRef" ], [ - "1218: getBoxRef:", - "1221: bytec 8", - "1224: intc_2", - "1225: box_create", - "1226: pop", - "1229: txn Sender", - "1232: bytec 8", - "1235: dig 1", - "1236: box_put", - "1239: bytec 8", - "1242: box_get", - "1243: dig 2", - "1244: cover 2", - "1245: select", - "1248: dup", - "1249: uncover 2", - "1250: ==", - "1251: assert", - "1254: retsub" + "1101: extractBoxRef:", + "1104: proto 1 0", + "1107: txn Sender", + "1110: global CurrentApplicationAddress", + "1113: dup", + "1114: len", + "1115: dig 2", + "1116: len", + "1117: +", + "1120: frame_dig -1", + "1121: swap", + "1122: box_create", + "1123: assert", + "1126: frame_dig -1", + "1127: intc_1", + "1128: dig 3", + "1129: box_replace", + "1132: frame_dig -1", + "1133: intc_1", + "1134: dup", + "1135: dig 3", + "1136: UNSUPPORTED box_splice", + "1139: frame_dig -1", + "1140: intc_1", + "1141: intc_2", + "1142: box_extract", + "1145: frame_dig -1", + "1146: intc_2", + "1147: dup", + "1148: box_extract", + "1151: swap", + "1152: uncover 2", + "1153: ==", + "1154: assert", + "1157: ==", + "1158: assert", + "1159: retsub" ], [ - "167: bytec_0", - "168: swap", - "169: concat", - "170: log", - "171: intc_0", - "172: return" + "160: intc_0", + "161: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 14 -> 86 -> 15", + "short": "0 -> 1 -> 2 -> 12 -> 86 -> 13", "blocks": [ [ "1: #pragma version 10", @@ -3823,46 +3659,50 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "140: main_setBoxRef_route@23:", - "143: txn OnCompletion", - "144: !", - "145: assert", - "146: txn ApplicationID", - "147: assert", - "150: txna ApplicationArgs 1", - "151: extract 2 0", - "154: callsub setBoxRef" + "123: main_getBoxMapStruct_route@24:", + "126: txn OnCompletion", + "127: !", + "128: assert", + "129: txn ApplicationID", + "130: assert", + "133: txna ApplicationArgs 1", + "134: btoi", + "137: callsub getBoxMapStruct" ], [ - "1258: setBoxRef:", - "1261: proto 1 0", - "1264: frame_dig -1", - "1265: intc_2", - "1266: box_create", - "1267: pop", - "1270: frame_dig -1", - "1273: txn Sender", - "1276: box_put", - "1277: retsub" + "1163: getBoxMapStruct:", + "1167: proto 1 1", + "1170: frame_dig -1", + "1171: itob", + "1174: bytec 6", + "1175: swap", + "1176: concat", + "1179: box_get", + "1180: assert", + "1181: retsub" ], [ - "155: intc_0", - "156: return" + "138: bytec_0", + "139: swap", + "140: concat", + "141: log", + "142: intc_0", + "143: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 12 -> 87 -> 88 -> 89 -> 90 -> 13", + "short": "0 -> 1 -> 2 -> 10 -> 87 -> 11", "blocks": [ [ "1: #pragma version 10", @@ -3871,61 +3711,54 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "122: main_deleteBoxRef_route@24:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "132: txna ApplicationArgs 1", - "133: extract 2 0", - "136: callsub deleteBoxRef" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "1281: deleteBoxRef:", - "1284: proto 1 0", - "1287: frame_dig -1", - "1288: box_del", - "1289: pop", - "1292: frame_dig -1", - "1293: box_get", - "1294: pop", - "1295: pushbytes \"\"", - "1296: ==", - "1297: bz deleteBoxRef_bool_false@4" + "97: main_boxMapStructExists_route@25:", + "100: txn OnCompletion", + "101: !", + "102: assert", + "103: txn ApplicationID", + "104: assert", + "107: txna ApplicationArgs 1", + "108: btoi", + "111: callsub boxMapStructExists" ], [ - "1298: frame_dig -1", - "1299: box_get", - "1300: bury 1", - "1301: bnz deleteBoxRef_bool_false@4" + "1185: boxMapStructExists:", + "1189: proto 1 1", + "1192: frame_dig -1", + "1193: itob", + "1196: bytec 6", + "1197: swap", + "1198: concat", + "1201: box_len", + "1202: bury 1", + "1203: retsub" ], [ - "1302: intc_0" - ], - [ - "1304: deleteBoxRef_bool_merge@5:", - "1307: assert", - "1308: retsub" - ], - [ - "137: intc_0", - "138: return" + "112: bytec_1", + "113: intc_1", + "114: uncover 2", + "115: setbit", + "116: bytec_0", + "117: swap", + "118: concat", + "119: log", + "120: intc_0", + "121: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 12 -> 87 -> 88 -> 91 -> 90 -> 13", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 89 -> 90 -> 91 -> 92 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -3934,122 +3767,216 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "122: main_deleteBoxRef_route@24:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "132: txna ApplicationArgs 1", - "133: extract 2 0", - "136: callsub deleteBoxRef" + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" ], [ - "1281: deleteBoxRef:", - "1284: proto 1 0", - "1287: frame_dig -1", - "1288: box_del", - "1289: pop", - "1292: frame_dig -1", - "1293: box_get", - "1294: pop", - "1295: pushbytes \"\"", - "1296: ==", - "1297: bz deleteBoxRef_bool_false@4" + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "1298: frame_dig -1", - "1299: box_get", - "1300: bury 1", - "1301: bnz deleteBoxRef_bool_false@4" + "1272: frame_dig 0", + "1273: box_get", + "1274: assert", + "1285: extract 2 8", + "1288: frame_dig -1", + "1289: extract 2 8", + "1300: ==", + "1301: bz setBoxMapStruct_bool_false@4" ], [ - "1310: deleteBoxRef_bool_false@4:", - "1311: intc_1", - "1312: b deleteBoxRef_bool_merge@5" + "1304: frame_dig 0", + "1305: box_get", + "1306: assert", + "1317: extract 10 8", + "1320: frame_dig -1", + "1321: extract 10 8", + "1332: ==", + "1333: bz setBoxMapStruct_bool_false@4" ], [ - "1304: deleteBoxRef_bool_merge@5:", - "1307: assert", - "1308: retsub" + "1334: intc_0" ], [ - "137: intc_0", - "138: return" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" + ], + [ + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 12 -> 87 -> 91 -> 90 -> 13", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 89 -> 90 -> 93 -> 92 -> 9", "blocks": [ [ - "1: #pragma version 10", - "2: UNSUPPORTED #pragma typetrack false" + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" + ], + [ + "5: main:", + "6: intcblock 1 0 32 42", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", + "10: txn NumAppArgs", + "11: bz main_bare_routing@31" + ], + [ + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", + "13: txna ApplicationArgs 0", + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "5: main:", - "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", - "10: txn NumAppArgs", - "11: bz main_bare_routing@31" + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", - "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "122: main_deleteBoxRef_route@24:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "132: txna ApplicationArgs 1", - "133: extract 2 0", - "136: callsub deleteBoxRef" + "1272: frame_dig 0", + "1273: box_get", + "1274: assert", + "1285: extract 2 8", + "1288: frame_dig -1", + "1289: extract 2 8", + "1300: ==", + "1301: bz setBoxMapStruct_bool_false@4" ], [ - "1281: deleteBoxRef:", - "1284: proto 1 0", - "1287: frame_dig -1", - "1288: box_del", - "1289: pop", - "1292: frame_dig -1", - "1293: box_get", - "1294: pop", - "1295: pushbytes \"\"", - "1296: ==", - "1297: bz deleteBoxRef_bool_false@4" + "1304: frame_dig 0", + "1305: box_get", + "1306: assert", + "1317: extract 10 8", + "1320: frame_dig -1", + "1321: extract 10 8", + "1332: ==", + "1333: bz setBoxMapStruct_bool_false@4" ], [ - "1310: deleteBoxRef_bool_false@4:", - "1311: intc_1", - "1312: b deleteBoxRef_bool_merge@5" + "1354: setBoxMapStruct_bool_false@4:", + "1355: intc_1", + "1356: b setBoxMapStruct_bool_merge@5" ], [ - "1304: deleteBoxRef_bool_merge@5:", - "1307: assert", - "1308: retsub" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" ], [ - "137: intc_0", - "138: return" + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 10 -> 92 -> 11", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 89 -> 93 -> 92 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -4058,60 +3985,98 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" + ], + [ + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" + ], + [ + "1272: frame_dig 0", + "1273: box_get", + "1274: assert", + "1285: extract 2 8", + "1288: frame_dig -1", + "1289: extract 2 8", + "1300: ==", + "1301: bz setBoxMapStruct_bool_false@4" ], [ - "85: main_maybeBoxRef_route@25:", - "88: txn OnCompletion", - "89: !", - "90: assert", - "91: txn ApplicationID", - "92: assert", - "95: txna ApplicationArgs 1", - "96: extract 2 0", - "99: callsub maybeBoxRef" + "1354: setBoxMapStruct_bool_false@4:", + "1355: intc_1", + "1356: b setBoxMapStruct_bool_merge@5" ], [ - "1316: maybeBoxRef:", - "1320: proto 1 2", - "1323: frame_dig -1", - "1324: box_get", - "1327: retsub" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" ], [ - "100: dig 1", - "101: len", - "102: itob", - "103: extract 6 2", - "104: uncover 2", - "105: concat", - "106: bytec_1", - "107: intc_1", - "108: uncover 3", - "109: setbit", - "110: bytec 9", - "111: swap", - "112: concat", - "113: swap", - "114: concat", - "115: bytec_0", - "116: swap", - "117: concat", - "118: log", - "119: intc_0", - "120: return" + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 8 -> 93 -> 9", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 93 -> 92 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -4120,46 +4085,83 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" + ], + [ + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "62: main_lengthBoxRef_route@26:", - "65: txn OnCompletion", - "66: !", - "67: assert", - "68: txn ApplicationID", - "69: assert", - "72: txna ApplicationArgs 1", - "73: extract 2 0", - "76: callsub lengthBoxRef" + "1354: setBoxMapStruct_bool_false@4:", + "1355: intc_1", + "1356: b setBoxMapStruct_bool_merge@5" ], [ - "1331: lengthBoxRef:", - "1334: proto 1 1", - "1337: frame_dig -1", - "1338: intc_2", - "1339: box_create", - "1340: assert", - "1343: frame_dig -1", - "1344: box_len", - "1345: assert", - "1346: retsub" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" ], [ - "77: itob", - "78: bytec_0", - "79: swap", - "80: concat", - "81: log", - "82: intc_0", - "83: return" + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, @@ -4173,68 +4175,66 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "44: main_extractBoxRef_route@27:", + "44: main_boxMapStructLength_route@27:", "47: txn OnCompletion", "48: !", "49: assert", "50: txn ApplicationID", "51: assert", "54: txna ApplicationArgs 1", - "55: extract 2 0", - "58: callsub extractBoxRef" - ], - [ - "1350: extractBoxRef:", - "1353: proto 1 0", - "1356: txn Sender", - "1359: global CurrentApplicationAddress", - "1362: dup", - "1363: len", - "1364: dig 2", - "1365: len", - "1366: +", - "1369: frame_dig -1", - "1370: swap", - "1371: box_create", - "1372: assert", - "1375: frame_dig -1", - "1376: intc_1", - "1377: dig 3", - "1378: box_replace", - "1381: frame_dig -1", - "1382: intc_1", - "1383: dup", - "1384: dig 3", - "1385: UNSUPPORTED box_splice", - "1388: frame_dig -1", - "1389: intc_1", - "1390: intc_2", - "1391: box_extract", - "1394: frame_dig -1", - "1395: intc_2", - "1396: dup", - "1397: box_extract", - "1400: swap", - "1401: uncover 2", - "1402: ==", - "1403: assert", - "1406: ==", - "1407: assert", + "55: btoi", + "58: callsub boxMapStructLength" + ], + [ + "1360: boxMapStructLength:", + "1363: proto 1 1", + "1366: frame_dig -1", + "1367: itob", + "1370: bytec 6", + "1371: swap", + "1372: concat", + "1375: dup", + "1376: box_del", + "1377: pop", + "1378: dup", + "1385: pushbytes 0x0012000000000000004600000000000004d20008746573744e616d65", + "1388: box_put", + "1391: dup", + "1392: box_get", + "1393: assert", + "1394: len", + "1395: pushint 28", + "1396: ==", + "1397: assert", + "1400: box_len", + "1401: assert", + "1402: pushint 28", + "1403: ==", + "1404: assert", + "1407: intc_0", "1408: retsub" ], [ - "59: intc_0", - "60: return" + "59: bytec_1", + "60: intc_1", + "61: uncover 2", + "62: setbit", + "63: bytec_0", + "64: swap", + "65: concat", + "66: log", + "67: intc_0", + "68: return" ] ] }, @@ -4248,14 +4248,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "22: main_arc4Box_route@28:", @@ -4330,7 +4330,7 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], @@ -4367,14 +4367,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "16: main_after_if_else@35:", @@ -4393,7 +4393,7 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], @@ -4430,14 +4430,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "16: main_after_if_else@35:", @@ -4456,7 +4456,7 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], @@ -4493,14 +4493,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "16: main_after_if_else@35:", @@ -4519,14 +4519,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "573: main_getBox_route@3:", @@ -4568,14 +4568,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "556: main_valueBox_route@4:", @@ -4617,37 +4617,45 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "538: main_setBox_route@5:", - "541: txn OnCompletion", - "542: !", - "543: assert", - "544: txn ApplicationID", - "545: assert", - "548: txna ApplicationArgs 1", - "549: btoi", - "552: callsub setBox" + "533: main_maybeBox_route@5:", + "536: txn OnCompletion", + "537: !", + "538: assert", + "539: txn ApplicationID", + "540: assert", + "541: callsub maybeBox" ], [ - "633: setBox:", - "636: proto 1 0", - "639: frame_dig -1", - "640: itob", - "643: bytec_3", - "646: swap", - "647: box_put", - "648: retsub" + "633: maybeBox:", + "636: bytec_3", + "639: box_get", + "640: swap", + "641: btoi", + "644: swap", + "645: retsub" ], [ + "542: swap", + "543: itob", + "544: bytec_1", + "545: intc_1", + "546: uncover 3", + "547: setbit", + "548: concat", + "549: bytec_0", + "550: swap", + "551: concat", + "552: log", "553: intc_0", "554: return" ] @@ -4663,40 +4671,51 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "520: main_setBoxString_route@6:", - "523: txn OnCompletion", - "524: !", - "525: assert", - "526: txn ApplicationID", - "527: assert", - "530: txna ApplicationArgs 1", - "531: extract 2 0", - "534: callsub setBoxString" + "505: main_getBoxMap_route@6:", + "508: txn OnCompletion", + "509: !", + "510: assert", + "511: txn ApplicationID", + "512: assert", + "515: txna ApplicationArgs 1", + "516: btoi", + "519: callsub getBoxMap" ], [ - "652: setBoxString:", - "655: proto 1 0", - "658: bytec 4", - "661: box_del", - "662: pop", - "665: bytec 4", - "668: frame_dig -1", - "669: box_put", - "670: retsub" + "649: getBoxMap:", + "653: proto 1 1", + "656: frame_dig -1", + "657: itob", + "660: bytec_2", + "661: swap", + "662: concat", + "665: box_get", + "666: assert", + "667: retsub" ], [ - "535: intc_0", - "536: return" + "520: dup", + "521: len", + "522: itob", + "523: extract 6 2", + "524: swap", + "525: concat", + "526: bytec_0", + "527: swap", + "528: concat", + "529: log", + "530: intc_0", + "531: return" ] ] }, @@ -4710,44 +4729,58 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "503: main_setBoxDynamicBytes_route@7:", - "506: txn OnCompletion", - "507: !", - "508: assert", - "509: txn ApplicationID", - "510: assert", - "513: txna ApplicationArgs 1", - "516: callsub setBoxDynamicBytes" + "477: main_getBoxMapWithDefault_route@7:", + "480: txn OnCompletion", + "481: !", + "482: assert", + "483: txn ApplicationID", + "484: assert", + "487: txna ApplicationArgs 1", + "488: btoi", + "491: callsub getBoxMapWithDefault" ], [ - "674: setBoxDynamicBytes:", - "677: proto 1 0", - "680: bytec 5", - "683: box_del", - "684: pop", - "687: bytec 5", - "690: frame_dig -1", - "691: box_put", - "692: retsub" + "671: getBoxMapWithDefault:", + "675: proto 1 1", + "678: frame_dig -1", + "679: itob", + "682: bytec_2", + "683: swap", + "684: concat", + "687: box_get", + "688: pushbytes \"default\"", + "689: cover 2", + "690: select", + "691: retsub" ], [ - "517: intc_0", - "518: return" + "492: dup", + "493: len", + "494: itob", + "495: extract 6 2", + "496: swap", + "497: concat", + "498: bytec_0", + "499: swap", + "500: concat", + "501: log", + "502: intc_0", + "503: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 43 -> 62 -> 44", + "short": "0 -> 1 -> 2 -> 43 -> 62 -> 63 -> 64 -> 44", "blocks": [ [ "1: #pragma version 10", @@ -4756,127 +4789,77 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "491: main_deleteBox_route@8:", - "494: txn OnCompletion", - "495: !", - "496: assert", - "497: txn ApplicationID", - "498: assert", - "499: callsub deleteBox" - ], - [ - "696: deleteBox:", - "699: bytec_3", - "702: box_del", - "703: pop", - "706: bytec 5", - "709: box_del", - "710: pop", - "713: bytec 4", - "716: box_del", - "717: pop", - "720: bytec_3", - "723: box_get", - "724: swap", - "725: btoi", - "726: intc_3", - "727: swap", - "728: uncover 2", - "729: select", - "730: intc_3", - "731: ==", - "732: assert", - "735: bytec 5", - "738: box_get", - "739: pushbytes 0x00023432", - "740: cover 2", - "741: select", - "742: extract 2 0", - "743: bytec 7", - "744: ==", - "745: assert", - "748: bytec 4", - "751: box_get", - "752: bytec 7", - "753: cover 2", - "754: select", - "755: bytec 7", - "756: ==", - "757: assert", - "758: retsub" - ], - [ - "500: intc_0", - "501: return" - ] - ] - }, - { - "short": "0 -> 1 -> 2 -> 41 -> 63 -> 42", - "blocks": [ - [ - "1: #pragma version 10", - "2: UNSUPPORTED #pragma typetrack false" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "5: main:", - "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", - "10: txn NumAppArgs", - "11: bz main_bare_routing@31" + "440: main_maybeBoxMap_route@8:", + "443: txn OnCompletion", + "444: !", + "445: assert", + "446: txn ApplicationID", + "447: assert", + "450: txna ApplicationArgs 1", + "451: btoi", + "454: callsub maybeBoxMap" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", - "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "695: maybeBoxMap:", + "699: proto 1 2", + "702: frame_dig -1", + "703: itob", + "706: bytec_2", + "707: swap", + "708: concat", + "711: box_get", + "712: dup", + "713: uncover 2", + "714: swap", + "717: bz maybeBoxMap_ternary_false@2" ], [ - "468: main_maybeBox_route@9:", - "471: txn OnCompletion", - "472: !", - "473: assert", - "474: txn ApplicationID", - "475: assert", - "476: callsub maybeBox" + "718: frame_dig 1" ], [ - "762: maybeBox:", - "765: bytec_3", - "768: box_get", - "769: swap", - "770: btoi", - "773: swap", - "774: retsub" + "720: maybeBoxMap_ternary_merge@3:", + "723: frame_dig 0", + "724: uncover 3", + "725: uncover 3", + "726: retsub" ], [ - "477: swap", - "478: itob", - "479: bytec_1", - "480: intc_1", - "481: uncover 3", - "482: setbit", - "483: concat", - "484: bytec_0", - "485: swap", - "486: concat", - "487: log", - "488: intc_0", - "489: return" + "455: dig 1", + "456: len", + "457: itob", + "458: extract 6 2", + "459: uncover 2", + "460: concat", + "461: bytec_1", + "462: intc_1", + "463: uncover 3", + "464: setbit", + "465: bytec 9", + "466: swap", + "467: concat", + "468: swap", + "469: concat", + "470: bytec_0", + "471: swap", + "472: concat", + "473: log", + "474: intc_0", + "475: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 39 -> 64 -> 40", + "short": "0 -> 1 -> 2 -> 43 -> 62 -> 65 -> 64 -> 44", "blocks": [ [ "1: #pragma version 10", @@ -4885,17 +4868,17 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "440: main_getBoxMap_route@10:", + "440: main_maybeBoxMap_route@8:", "443: txn OnCompletion", "444: !", "445: assert", @@ -4903,38 +4886,61 @@ "447: assert", "450: txna ApplicationArgs 1", "451: btoi", - "454: callsub getBoxMap" + "454: callsub maybeBoxMap" + ], + [ + "695: maybeBoxMap:", + "699: proto 1 2", + "702: frame_dig -1", + "703: itob", + "706: bytec_2", + "707: swap", + "708: concat", + "711: box_get", + "712: dup", + "713: uncover 2", + "714: swap", + "717: bz maybeBoxMap_ternary_false@2" ], [ - "778: getBoxMap:", - "782: proto 1 1", - "785: frame_dig -1", - "786: itob", - "789: bytec_2", - "790: swap", - "791: concat", - "794: box_get", - "795: assert", - "796: retsub" + "728: maybeBoxMap_ternary_false@2:", + "731: pushbytes \"\"", + "732: b maybeBoxMap_ternary_merge@3" ], [ - "455: dup", + "720: maybeBoxMap_ternary_merge@3:", + "723: frame_dig 0", + "724: uncover 3", + "725: uncover 3", + "726: retsub" + ], + [ + "455: dig 1", "456: len", "457: itob", "458: extract 6 2", - "459: swap", + "459: uncover 2", "460: concat", - "461: bytec_0", - "462: swap", - "463: concat", - "464: log", - "465: intc_0", - "466: return" + "461: bytec_1", + "462: intc_1", + "463: uncover 3", + "464: setbit", + "465: bytec 9", + "466: swap", + "467: concat", + "468: swap", + "469: concat", + "470: bytec_0", + "471: swap", + "472: concat", + "473: log", + "474: intc_0", + "475: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 37 -> 65 -> 38", + "short": "0 -> 1 -> 2 -> 42", "blocks": [ [ "1: #pragma version 10", @@ -4943,50 +4949,23 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "412: main_getBoxMapWithDefault_route@11:", - "415: txn OnCompletion", - "416: !", - "417: assert", - "418: txn ApplicationID", - "419: assert", - "422: txna ApplicationArgs 1", - "423: btoi", - "426: callsub getBoxMapWithDefault" - ], - [ - "800: getBoxMapWithDefault:", - "804: proto 1 1", - "807: frame_dig -1", - "808: itob", - "811: bytec_2", - "812: swap", - "813: concat", - "816: box_get", - "817: pushbytes \"default\"", - "818: cover 2", - "819: select", - "820: retsub" - ], - [ - "427: dup", - "428: len", - "429: itob", - "430: extract 6 2", - "431: swap", - "432: concat", - "433: bytec_0", - "434: swap", - "435: concat", + "427: main_keyPrefixBoxMap_route@9:", + "430: txn OnCompletion", + "431: !", + "432: assert", + "433: txn ApplicationID", + "434: assert", + "435: pushbytes 0x151f7c750006626f784d6170", "436: log", "437: intc_0", "438: return" @@ -4994,7 +4973,7 @@ ] }, { - "short": "0 -> 1 -> 2 -> 35 -> 66 -> 36", + "short": "0 -> 1 -> 2 -> 40 -> 66 -> 41", "blocks": [ [ "1: #pragma version 10", @@ -5003,51 +4982,57 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "392: main_setBoxMap_route@12:", - "395: txn OnCompletion", - "396: !", - "397: assert", - "398: txn ApplicationID", - "399: assert", - "402: txna ApplicationArgs 1", - "403: btoi", - "404: txna ApplicationArgs 2", - "405: extract 2 0", - "408: callsub setBoxMap" + "411: main_getBoxRef_route@10:", + "414: txn OnCompletion", + "415: !", + "416: assert", + "417: txn ApplicationID", + "418: assert", + "419: callsub getBoxRef" ], [ - "824: setBoxMap:", - "827: proto 2 0", - "830: frame_dig -2", - "831: itob", - "834: bytec_2", - "835: swap", - "836: concat", - "839: dup", - "840: box_del", - "841: pop", - "842: frame_dig -1", - "843: box_put", - "844: retsub" + "736: getBoxRef:", + "739: bytec 7", + "742: intc_2", + "743: box_create", + "744: pop", + "747: txn Sender", + "750: bytec 7", + "753: dig 1", + "754: box_put", + "757: bytec 7", + "760: box_get", + "761: dig 2", + "762: cover 2", + "763: select", + "766: dup", + "767: uncover 2", + "768: ==", + "769: assert", + "772: retsub" ], [ - "409: intc_0", - "410: return" + "420: bytec_0", + "421: swap", + "422: concat", + "423: log", + "424: intc_0", + "425: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 33 -> 67 -> 34", + "short": "0 -> 1 -> 2 -> 38 -> 67 -> 39", "blocks": [ [ "1: #pragma version 10", @@ -5056,46 +5041,54 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "374: main_deleteBoxMap_route@13:", - "377: txn OnCompletion", - "378: !", - "379: assert", - "380: txn ApplicationID", - "381: assert", - "384: txna ApplicationArgs 1", - "385: btoi", - "388: callsub deleteBoxMap" + "385: main_boxMapExists_route@11:", + "388: txn OnCompletion", + "389: !", + "390: assert", + "391: txn ApplicationID", + "392: assert", + "395: txna ApplicationArgs 1", + "396: btoi", + "399: callsub boxMapExists" ], [ - "848: deleteBoxMap:", - "851: proto 1 0", - "854: frame_dig -1", - "855: itob", - "858: bytec_2", - "859: swap", - "860: concat", - "863: box_del", - "864: pop", - "865: retsub" + "776: boxMapExists:", + "780: proto 1 1", + "783: frame_dig -1", + "784: itob", + "787: bytec_2", + "788: swap", + "789: concat", + "792: box_len", + "793: bury 1", + "794: retsub" ], [ - "389: intc_0", - "390: return" + "400: bytec_1", + "401: intc_1", + "402: uncover 2", + "403: setbit", + "404: bytec_0", + "405: swap", + "406: concat", + "407: log", + "408: intc_0", + "409: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 31 -> 68 -> 69 -> 70 -> 32", + "short": "0 -> 1 -> 2 -> 36 -> 68 -> 37", "blocks": [ [ "1: #pragma version 10", @@ -5104,77 +5097,60 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "337: main_maybeBoxMap_route@14:", - "340: txn OnCompletion", - "341: !", - "342: assert", - "343: txn ApplicationID", - "344: assert", - "347: txna ApplicationArgs 1", - "348: btoi", - "351: callsub maybeBoxMap" - ], - [ - "869: maybeBoxMap:", - "873: proto 1 2", - "876: frame_dig -1", - "877: itob", - "880: bytec_2", - "881: swap", - "882: concat", - "885: box_get", - "886: dup", - "887: uncover 2", - "888: swap", - "891: bz maybeBoxMap_ternary_false@2" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "892: frame_dig 1" + "348: main_maybeBoxRef_route@12:", + "351: txn OnCompletion", + "352: !", + "353: assert", + "354: txn ApplicationID", + "355: assert", + "358: txna ApplicationArgs 1", + "359: extract 2 0", + "362: callsub maybeBoxRef" ], [ - "894: maybeBoxMap_ternary_merge@3:", - "897: frame_dig 0", - "898: uncover 3", - "899: uncover 3", - "900: retsub" + "798: maybeBoxRef:", + "802: proto 1 2", + "805: frame_dig -1", + "806: box_get", + "809: retsub" ], [ - "352: dig 1", - "353: len", - "354: itob", - "355: extract 6 2", - "356: uncover 2", - "357: concat", - "358: bytec_1", - "359: intc_1", - "360: uncover 3", - "361: setbit", - "362: bytec 9", - "363: swap", - "364: concat", - "365: swap", - "366: concat", - "367: bytec_0", - "368: swap", - "369: concat", - "370: log", - "371: intc_0", - "372: return" + "363: dig 1", + "364: len", + "365: itob", + "366: extract 6 2", + "367: uncover 2", + "368: concat", + "369: bytec_1", + "370: intc_1", + "371: uncover 3", + "372: setbit", + "373: bytec 9", + "374: swap", + "375: concat", + "376: swap", + "377: concat", + "378: bytec_0", + "379: swap", + "380: concat", + "381: log", + "382: intc_0", + "383: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 31 -> 68 -> 71 -> 70 -> 32", + "short": "0 -> 1 -> 2 -> 34 -> 69 -> 35", "blocks": [ [ "1: #pragma version 10", @@ -5183,79 +5159,44 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "337: main_maybeBoxMap_route@14:", - "340: txn OnCompletion", - "341: !", - "342: assert", - "343: txn ApplicationID", - "344: assert", - "347: txna ApplicationArgs 1", - "348: btoi", - "351: callsub maybeBoxMap" - ], - [ - "869: maybeBoxMap:", - "873: proto 1 2", - "876: frame_dig -1", - "877: itob", - "880: bytec_2", - "881: swap", - "882: concat", - "885: box_get", - "886: dup", - "887: uncover 2", - "888: swap", - "891: bz maybeBoxMap_ternary_false@2" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "902: maybeBoxMap_ternary_false@2:", - "905: pushbytes \"\"", - "906: b maybeBoxMap_ternary_merge@3" + "330: main_setBox_route@13:", + "333: txn OnCompletion", + "334: !", + "335: assert", + "336: txn ApplicationID", + "337: assert", + "340: txna ApplicationArgs 1", + "341: btoi", + "344: callsub setBox" ], [ - "894: maybeBoxMap_ternary_merge@3:", - "897: frame_dig 0", - "898: uncover 3", - "899: uncover 3", - "900: retsub" + "813: setBox:", + "816: proto 1 0", + "819: frame_dig -1", + "820: itob", + "823: bytec_3", + "826: swap", + "827: box_put", + "828: retsub" ], [ - "352: dig 1", - "353: len", - "354: itob", - "355: extract 6 2", - "356: uncover 2", - "357: concat", - "358: bytec_1", - "359: intc_1", - "360: uncover 3", - "361: setbit", - "362: bytec 9", - "363: swap", - "364: concat", - "365: swap", - "366: concat", - "367: bytec_0", - "368: swap", - "369: concat", - "370: log", - "371: intc_0", - "372: return" + "345: intc_0", + "346: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 29 -> 72 -> 73 -> 30", + "short": "0 -> 1 -> 2 -> 32 -> 70 -> 33", "blocks": [ [ "1: #pragma version 10", @@ -5264,57 +5205,45 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "314: main_boxMapLength_route@15:", - "317: txn OnCompletion", - "318: !", + "312: main_setBoxString_route@14:", + "315: txn OnCompletion", + "316: !", + "317: assert", + "318: txn ApplicationID", "319: assert", - "320: txn ApplicationID", - "321: assert", - "324: txna ApplicationArgs 1", - "325: btoi", - "328: callsub boxMapLength" + "322: txna ApplicationArgs 1", + "323: extract 2 0", + "326: callsub setBoxString" ], [ - "910: boxMapLength:", - "914: proto 1 1", - "917: frame_dig -1", - "918: itob", - "921: bytec_2", - "922: swap", - "923: concat", - "924: dup", - "927: box_len", - "928: bury 1", - "929: bnz boxMapLength_after_if_else@2" + "832: setBoxString:", + "835: proto 1 0", + "838: bytec 4", + "841: box_del", + "842: pop", + "845: bytec 4", + "848: frame_dig -1", + "849: box_put", + "850: retsub" ], [ - "932: intc_1", - "933: swap", - "934: retsub" - ], - [ - "329: itob", - "330: bytec_0", - "331: swap", - "332: concat", - "333: log", - "334: intc_0", - "335: return" + "327: intc_0", + "328: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 29 -> 72 -> 74 -> 30", + "short": "0 -> 1 -> 2 -> 30 -> 71 -> 31", "blocks": [ [ "1: #pragma version 10", @@ -5323,60 +5252,44 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "314: main_boxMapLength_route@15:", - "317: txn OnCompletion", - "318: !", - "319: assert", - "320: txn ApplicationID", - "321: assert", - "324: txna ApplicationArgs 1", - "325: btoi", - "328: callsub boxMapLength" - ], - [ - "910: boxMapLength:", - "914: proto 1 1", - "917: frame_dig -1", - "918: itob", - "921: bytec_2", - "922: swap", - "923: concat", - "924: dup", - "927: box_len", - "928: bury 1", - "929: bnz boxMapLength_after_if_else@2" - ], - [ - "936: boxMapLength_after_if_else@2:", - "939: frame_dig 0", - "940: box_len", - "941: assert", - "942: swap", - "943: retsub" + "295: main_setBoxDynamicBytes_route@15:", + "298: txn OnCompletion", + "299: !", + "300: assert", + "301: txn ApplicationID", + "302: assert", + "305: txna ApplicationArgs 1", + "308: callsub setBoxDynamicBytes" ], [ - "329: itob", - "330: bytec_0", - "331: swap", - "332: concat", - "333: log", - "334: intc_0", - "335: return" + "854: setBoxDynamicBytes:", + "857: proto 1 0", + "860: bytec 5", + "863: box_del", + "864: pop", + "867: bytec 5", + "870: frame_dig -1", + "871: box_put", + "872: retsub" + ], + [ + "309: intc_0", + "310: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 27 -> 75 -> 28", + "short": "0 -> 1 -> 2 -> 28 -> 72 -> 29", "blocks": [ [ "1: #pragma version 10", @@ -5385,54 +5298,51 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "288: main_boxMapExists_route@16:", - "291: txn OnCompletion", - "292: !", - "293: assert", - "294: txn ApplicationID", - "295: assert", - "298: txna ApplicationArgs 1", - "299: btoi", - "302: callsub boxMapExists" + "275: main_setBoxMap_route@16:", + "278: txn OnCompletion", + "279: !", + "280: assert", + "281: txn ApplicationID", + "282: assert", + "285: txna ApplicationArgs 1", + "286: btoi", + "287: txna ApplicationArgs 2", + "288: extract 2 0", + "291: callsub setBoxMap" ], [ - "947: boxMapExists:", - "951: proto 1 1", - "954: frame_dig -1", - "955: itob", - "958: bytec_2", - "959: swap", - "960: concat", - "963: box_len", - "964: bury 1", - "965: retsub" + "876: setBoxMap:", + "879: proto 2 0", + "882: frame_dig -2", + "883: itob", + "886: bytec_2", + "887: swap", + "888: concat", + "891: dup", + "892: box_del", + "893: pop", + "894: frame_dig -1", + "895: box_put", + "896: retsub" ], [ - "303: bytec_1", - "304: intc_1", - "305: uncover 2", - "306: setbit", - "307: bytec_0", - "308: swap", - "309: concat", - "310: log", - "311: intc_0", - "312: return" + "292: intc_0", + "293: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 26", + "short": "0 -> 1 -> 2 -> 26 -> 73 -> 27", "blocks": [ [ "1: #pragma version 10", @@ -5441,31 +5351,46 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "275: main_keyPrefixBoxMap_route@17:", - "278: txn OnCompletion", - "279: !", - "280: assert", - "281: txn ApplicationID", - "282: assert", - "283: pushbytes 0x151f7c750006626f784d6170", - "284: log", - "285: intc_0", - "286: return" + "257: main_setBoxRef_route@17:", + "260: txn OnCompletion", + "261: !", + "262: assert", + "263: txn ApplicationID", + "264: assert", + "267: txna ApplicationArgs 1", + "268: extract 2 0", + "271: callsub setBoxRef" + ], + [ + "900: setBoxRef:", + "903: proto 1 0", + "906: frame_dig -1", + "907: intc_2", + "908: box_create", + "909: pop", + "912: frame_dig -1", + "915: txn Sender", + "918: box_put", + "919: retsub" + ], + [ + "272: intc_0", + "273: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 24 -> 76 -> 25", + "short": "0 -> 1 -> 2 -> 24 -> 74 -> 75 -> 25", "blocks": [ [ "1: #pragma version 10", @@ -5474,50 +5399,57 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "253: main_getBoxMapStruct_route@18:", - "256: txn OnCompletion", - "257: !", - "258: assert", - "259: txn ApplicationID", - "260: assert", - "263: txna ApplicationArgs 1", - "264: btoi", - "267: callsub getBoxMapStruct" + "234: main_boxMapLength_route@18:", + "237: txn OnCompletion", + "238: !", + "239: assert", + "240: txn ApplicationID", + "241: assert", + "244: txna ApplicationArgs 1", + "245: btoi", + "248: callsub boxMapLength" ], [ - "969: getBoxMapStruct:", - "973: proto 1 1", - "976: frame_dig -1", - "977: itob", - "980: bytec 6", - "981: swap", - "982: concat", - "985: box_get", - "986: assert", - "987: retsub" + "923: boxMapLength:", + "927: proto 1 1", + "930: frame_dig -1", + "931: itob", + "934: bytec_2", + "935: swap", + "936: concat", + "937: dup", + "940: box_len", + "941: bury 1", + "942: bnz boxMapLength_after_if_else@2" ], [ - "268: bytec_0", - "269: swap", - "270: concat", - "271: log", - "272: intc_0", - "273: return" + "945: intc_1", + "946: swap", + "947: retsub" + ], + [ + "249: itob", + "250: bytec_0", + "251: swap", + "252: concat", + "253: log", + "254: intc_0", + "255: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 78 -> 79 -> 80 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 24 -> 74 -> 76 -> 25", "blocks": [ [ "1: #pragma version 10", @@ -5526,106 +5458,60 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" + "234: main_boxMapLength_route@18:", + "237: txn OnCompletion", + "238: !", + "239: assert", + "240: txn ApplicationID", + "241: assert", + "244: txna ApplicationArgs 1", + "245: btoi", + "248: callsub boxMapLength" ], [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" - ], - [ - "1056: frame_dig 0", - "1057: box_get", - "1058: assert", - "1069: extract 2 8", - "1072: frame_dig -1", - "1073: extract 2 8", - "1084: ==", - "1085: bz setBoxMapStruct_bool_false@4" - ], - [ - "1088: frame_dig 0", - "1089: box_get", - "1090: assert", - "1101: extract 10 8", - "1104: frame_dig -1", - "1105: extract 10 8", - "1116: ==", - "1117: bz setBoxMapStruct_bool_false@4" - ], - [ - "1118: intc_0" + "923: boxMapLength:", + "927: proto 1 1", + "930: frame_dig -1", + "931: itob", + "934: bytec_2", + "935: swap", + "936: concat", + "937: dup", + "940: box_len", + "941: bury 1", + "942: bnz boxMapLength_after_if_else@2" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "949: boxMapLength_after_if_else@2:", + "952: frame_dig 0", + "953: box_len", + "954: assert", + "955: swap", + "956: retsub" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "249: itob", + "250: bytec_0", + "251: swap", + "252: concat", + "253: log", + "254: intc_0", + "255: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 78 -> 79 -> 82 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 22 -> 77 -> 23", "blocks": [ [ "1: #pragma version 10", @@ -5634,108 +5520,126 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" + "211: main_lengthBoxRef_route@19:", + "214: txn OnCompletion", + "215: !", + "216: assert", + "217: txn ApplicationID", + "218: assert", + "221: txna ApplicationArgs 1", + "222: extract 2 0", + "225: callsub lengthBoxRef" ], [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" - ], - [ - "1056: frame_dig 0", - "1057: box_get", - "1058: assert", - "1069: extract 2 8", - "1072: frame_dig -1", - "1073: extract 2 8", - "1084: ==", - "1085: bz setBoxMapStruct_bool_false@4" + "960: lengthBoxRef:", + "963: proto 1 1", + "966: frame_dig -1", + "967: intc_2", + "968: box_create", + "969: assert", + "972: frame_dig -1", + "973: box_len", + "974: assert", + "975: retsub" + ], + [ + "226: itob", + "227: bytec_0", + "228: swap", + "229: concat", + "230: log", + "231: intc_0", + "232: return" + ] + ] + }, + { + "short": "0 -> 1 -> 2 -> 20 -> 78 -> 21", + "blocks": [ + [ + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" + ], + [ + "5: main:", + "6: intcblock 1 0 32 42", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", + "10: txn NumAppArgs", + "11: bz main_bare_routing@31" ], [ - "1088: frame_dig 0", - "1089: box_get", - "1090: assert", - "1101: extract 10 8", - "1104: frame_dig -1", - "1105: extract 10 8", - "1116: ==", - "1117: bz setBoxMapStruct_bool_false@4" + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", + "13: txna ApplicationArgs 0", + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "1138: setBoxMapStruct_bool_false@4:", - "1139: intc_1", - "1140: b setBoxMapStruct_bool_merge@5" + "199: main_deleteBox_route@20:", + "202: txn OnCompletion", + "203: !", + "204: assert", + "205: txn ApplicationID", + "206: assert", + "207: callsub deleteBox" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "979: deleteBox:", + "982: bytec_3", + "985: box_del", + "986: pop", + "989: bytec 5", + "992: box_del", + "993: pop", + "996: bytec 4", + "999: box_del", + "1000: pop", + "1003: bytec_3", + "1006: box_get", + "1007: swap", + "1008: btoi", + "1009: intc_3", + "1010: swap", + "1011: uncover 2", + "1012: select", + "1013: intc_3", + "1014: ==", + "1015: assert", + "1018: bytec 5", + "1021: box_get", + "1022: pushbytes 0x00023432", + "1023: cover 2", + "1024: select", + "1025: extract 2 0", + "1026: bytec 8", + "1027: ==", + "1028: assert", + "1031: bytec 4", + "1034: box_get", + "1035: bytec 8", + "1036: cover 2", + "1037: select", + "1038: bytec 8", + "1039: ==", + "1040: assert", + "1041: retsub" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "208: intc_0", + "209: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 78 -> 82 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 18 -> 79 -> 19", "blocks": [ [ "1: #pragma version 10", @@ -5744,98 +5648,46 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" + "181: main_deleteBoxMap_route@21:", + "184: txn OnCompletion", + "185: !", + "186: assert", + "187: txn ApplicationID", + "188: assert", + "191: txna ApplicationArgs 1", + "192: btoi", + "195: callsub deleteBoxMap" ], [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" - ], - [ - "1056: frame_dig 0", - "1057: box_get", - "1058: assert", - "1069: extract 2 8", - "1072: frame_dig -1", - "1073: extract 2 8", - "1084: ==", - "1085: bz setBoxMapStruct_bool_false@4" + "1045: deleteBoxMap:", + "1048: proto 1 0", + "1051: frame_dig -1", + "1052: itob", + "1055: bytec_2", + "1056: swap", + "1057: concat", + "1060: box_del", + "1061: pop", + "1062: retsub" ], [ - "1138: setBoxMapStruct_bool_false@4:", - "1139: intc_1", - "1140: b setBoxMapStruct_bool_merge@5" - ], - [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" - ], - [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "196: intc_0", + "197: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 82 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 16 -> 80 -> 81 -> 82 -> 83 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -5844,88 +5696,61 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" + "163: main_deleteBoxRef_route@22:", + "166: txn OnCompletion", + "167: !", + "168: assert", + "169: txn ApplicationID", + "170: assert", + "173: txna ApplicationArgs 1", + "174: extract 2 0", + "177: callsub deleteBoxRef" ], [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" + "1066: deleteBoxRef:", + "1069: proto 1 0", + "1072: frame_dig -1", + "1073: box_del", + "1074: pop", + "1077: frame_dig -1", + "1078: box_get", + "1079: pop", + "1080: pushbytes \"\"", + "1081: ==", + "1082: bz deleteBoxRef_bool_false@4" ], [ - "1138: setBoxMapStruct_bool_false@4:", - "1139: intc_1", - "1140: b setBoxMapStruct_bool_merge@5" + "1083: frame_dig -1", + "1084: box_get", + "1085: bury 1", + "1086: bnz deleteBoxRef_bool_false@4" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "1087: intc_0" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "1089: deleteBoxRef_bool_merge@5:", + "1092: assert", + "1093: retsub" + ], + [ + "178: intc_0", + "179: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 20 -> 83 -> 21", + "short": "0 -> 1 -> 2 -> 16 -> 80 -> 81 -> 84 -> 83 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -5934,71 +5759,63 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", - "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", + "13: txna ApplicationArgs 0", + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "163: main_deleteBoxRef_route@22:", + "166: txn OnCompletion", + "167: !", + "168: assert", + "169: txn ApplicationID", + "170: assert", + "173: txna ApplicationArgs 1", + "174: extract 2 0", + "177: callsub deleteBoxRef" + ], + [ + "1066: deleteBoxRef:", + "1069: proto 1 0", + "1072: frame_dig -1", + "1073: box_del", + "1074: pop", + "1077: frame_dig -1", + "1078: box_get", + "1079: pop", + "1080: pushbytes \"\"", + "1081: ==", + "1082: bz deleteBoxRef_bool_false@4" + ], + [ + "1083: frame_dig -1", + "1084: box_get", + "1085: bury 1", + "1086: bnz deleteBoxRef_bool_false@4" ], [ - "200: main_boxMapStructLength_route@20:", - "203: txn OnCompletion", - "204: !", - "205: assert", - "206: txn ApplicationID", - "207: assert", - "210: txna ApplicationArgs 1", - "211: btoi", - "214: callsub boxMapStructLength" + "1095: deleteBoxRef_bool_false@4:", + "1096: intc_1", + "1097: b deleteBoxRef_bool_merge@5" ], [ - "1144: boxMapStructLength:", - "1147: proto 1 1", - "1150: frame_dig -1", - "1151: itob", - "1154: bytec 6", - "1155: swap", - "1156: concat", - "1159: dup", - "1160: box_del", - "1161: pop", - "1162: dup", - "1169: pushbytes 0x0012000000000000004600000000000004d20008746573744e616d65", - "1172: box_put", - "1175: dup", - "1176: box_get", - "1177: assert", - "1178: len", - "1179: pushint 28", - "1180: ==", - "1181: assert", - "1184: box_len", - "1185: assert", - "1186: pushint 28", - "1187: ==", - "1188: assert", - "1191: intc_0", - "1192: retsub" + "1089: deleteBoxRef_bool_merge@5:", + "1092: assert", + "1093: retsub" ], [ - "215: bytec_1", - "216: intc_1", - "217: uncover 2", - "218: setbit", - "219: bytec_0", - "220: swap", - "221: concat", - "222: log", - "223: intc_0", - "224: return" + "178: intc_0", + "179: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 18 -> 84 -> 19", + "short": "0 -> 1 -> 2 -> 16 -> 80 -> 84 -> 83 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -6007,54 +5824,57 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "163: main_deleteBoxRef_route@22:", + "166: txn OnCompletion", + "167: !", + "168: assert", + "169: txn ApplicationID", + "170: assert", + "173: txna ApplicationArgs 1", + "174: extract 2 0", + "177: callsub deleteBoxRef" + ], + [ + "1066: deleteBoxRef:", + "1069: proto 1 0", + "1072: frame_dig -1", + "1073: box_del", + "1074: pop", + "1077: frame_dig -1", + "1078: box_get", + "1079: pop", + "1080: pushbytes \"\"", + "1081: ==", + "1082: bz deleteBoxRef_bool_false@4" ], [ - "174: main_boxMapStructExists_route@21:", - "177: txn OnCompletion", - "178: !", - "179: assert", - "180: txn ApplicationID", - "181: assert", - "184: txna ApplicationArgs 1", - "185: btoi", - "188: callsub boxMapStructExists" + "1095: deleteBoxRef_bool_false@4:", + "1096: intc_1", + "1097: b deleteBoxRef_bool_merge@5" ], [ - "1196: boxMapStructExists:", - "1200: proto 1 1", - "1203: frame_dig -1", - "1204: itob", - "1207: bytec 6", - "1208: swap", - "1209: concat", - "1212: box_len", - "1213: bury 1", - "1214: retsub" + "1089: deleteBoxRef_bool_merge@5:", + "1092: assert", + "1093: retsub" ], [ - "189: bytec_1", - "190: intc_1", - "191: uncover 2", - "192: setbit", - "193: bytec_0", - "194: swap", - "195: concat", - "196: log", - "197: intc_0", - "198: return" + "178: intc_0", + "179: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 16 -> 85 -> 17", + "short": "0 -> 1 -> 2 -> 14 -> 85 -> 15", "blocks": [ [ "1: #pragma version 10", @@ -6063,57 +5883,73 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "158: main_getBoxRef_route@22:", - "161: txn OnCompletion", - "162: !", - "163: assert", - "164: txn ApplicationID", - "165: assert", - "166: callsub getBoxRef" + "145: main_extractBoxRef_route@23:", + "148: txn OnCompletion", + "149: !", + "150: assert", + "151: txn ApplicationID", + "152: assert", + "155: txna ApplicationArgs 1", + "156: extract 2 0", + "159: callsub extractBoxRef" ], [ - "1218: getBoxRef:", - "1221: bytec 8", - "1224: intc_2", - "1225: box_create", - "1226: pop", - "1229: txn Sender", - "1232: bytec 8", - "1235: dig 1", - "1236: box_put", - "1239: bytec 8", - "1242: box_get", - "1243: dig 2", - "1244: cover 2", - "1245: select", - "1248: dup", - "1249: uncover 2", - "1250: ==", - "1251: assert", - "1254: retsub" + "1101: extractBoxRef:", + "1104: proto 1 0", + "1107: txn Sender", + "1110: global CurrentApplicationAddress", + "1113: dup", + "1114: len", + "1115: dig 2", + "1116: len", + "1117: +", + "1120: frame_dig -1", + "1121: swap", + "1122: box_create", + "1123: assert", + "1126: frame_dig -1", + "1127: intc_1", + "1128: dig 3", + "1129: box_replace", + "1132: frame_dig -1", + "1133: intc_1", + "1134: dup", + "1135: dig 3", + "1136: UNSUPPORTED box_splice", + "1139: frame_dig -1", + "1140: intc_1", + "1141: intc_2", + "1142: box_extract", + "1145: frame_dig -1", + "1146: intc_2", + "1147: dup", + "1148: box_extract", + "1151: swap", + "1152: uncover 2", + "1153: ==", + "1154: assert", + "1157: ==", + "1158: assert", + "1159: retsub" ], [ - "167: bytec_0", - "168: swap", - "169: concat", - "170: log", - "171: intc_0", - "172: return" + "160: intc_0", + "161: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 14 -> 86 -> 15", + "short": "0 -> 1 -> 2 -> 12 -> 86 -> 13", "blocks": [ [ "1: #pragma version 10", @@ -6122,46 +5958,50 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "140: main_setBoxRef_route@23:", - "143: txn OnCompletion", - "144: !", - "145: assert", - "146: txn ApplicationID", - "147: assert", - "150: txna ApplicationArgs 1", - "151: extract 2 0", - "154: callsub setBoxRef" + "123: main_getBoxMapStruct_route@24:", + "126: txn OnCompletion", + "127: !", + "128: assert", + "129: txn ApplicationID", + "130: assert", + "133: txna ApplicationArgs 1", + "134: btoi", + "137: callsub getBoxMapStruct" ], [ - "1258: setBoxRef:", - "1261: proto 1 0", - "1264: frame_dig -1", - "1265: intc_2", - "1266: box_create", - "1267: pop", - "1270: frame_dig -1", - "1273: txn Sender", - "1276: box_put", - "1277: retsub" + "1163: getBoxMapStruct:", + "1167: proto 1 1", + "1170: frame_dig -1", + "1171: itob", + "1174: bytec 6", + "1175: swap", + "1176: concat", + "1179: box_get", + "1180: assert", + "1181: retsub" ], [ - "155: intc_0", - "156: return" + "138: bytec_0", + "139: swap", + "140: concat", + "141: log", + "142: intc_0", + "143: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 12 -> 87 -> 88 -> 89 -> 90 -> 13", + "short": "0 -> 1 -> 2 -> 10 -> 87 -> 11", "blocks": [ [ "1: #pragma version 10", @@ -6170,61 +6010,54 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "122: main_deleteBoxRef_route@24:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "132: txna ApplicationArgs 1", - "133: extract 2 0", - "136: callsub deleteBoxRef" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "1281: deleteBoxRef:", - "1284: proto 1 0", - "1287: frame_dig -1", - "1288: box_del", - "1289: pop", - "1292: frame_dig -1", - "1293: box_get", - "1294: pop", - "1295: pushbytes \"\"", - "1296: ==", - "1297: bz deleteBoxRef_bool_false@4" + "97: main_boxMapStructExists_route@25:", + "100: txn OnCompletion", + "101: !", + "102: assert", + "103: txn ApplicationID", + "104: assert", + "107: txna ApplicationArgs 1", + "108: btoi", + "111: callsub boxMapStructExists" ], [ - "1298: frame_dig -1", - "1299: box_get", - "1300: bury 1", - "1301: bnz deleteBoxRef_bool_false@4" + "1185: boxMapStructExists:", + "1189: proto 1 1", + "1192: frame_dig -1", + "1193: itob", + "1196: bytec 6", + "1197: swap", + "1198: concat", + "1201: box_len", + "1202: bury 1", + "1203: retsub" ], [ - "1302: intc_0" - ], - [ - "1304: deleteBoxRef_bool_merge@5:", - "1307: assert", - "1308: retsub" - ], - [ - "137: intc_0", - "138: return" + "112: bytec_1", + "113: intc_1", + "114: uncover 2", + "115: setbit", + "116: bytec_0", + "117: swap", + "118: concat", + "119: log", + "120: intc_0", + "121: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 12 -> 87 -> 88 -> 91 -> 90 -> 13", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 89 -> 90 -> 91 -> 92 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -6233,122 +6066,216 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "122: main_deleteBoxRef_route@24:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "132: txna ApplicationArgs 1", - "133: extract 2 0", - "136: callsub deleteBoxRef" + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" ], [ - "1281: deleteBoxRef:", - "1284: proto 1 0", - "1287: frame_dig -1", - "1288: box_del", - "1289: pop", - "1292: frame_dig -1", - "1293: box_get", - "1294: pop", - "1295: pushbytes \"\"", - "1296: ==", - "1297: bz deleteBoxRef_bool_false@4" + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "1298: frame_dig -1", - "1299: box_get", - "1300: bury 1", - "1301: bnz deleteBoxRef_bool_false@4" + "1272: frame_dig 0", + "1273: box_get", + "1274: assert", + "1285: extract 2 8", + "1288: frame_dig -1", + "1289: extract 2 8", + "1300: ==", + "1301: bz setBoxMapStruct_bool_false@4" ], [ - "1310: deleteBoxRef_bool_false@4:", - "1311: intc_1", - "1312: b deleteBoxRef_bool_merge@5" + "1304: frame_dig 0", + "1305: box_get", + "1306: assert", + "1317: extract 10 8", + "1320: frame_dig -1", + "1321: extract 10 8", + "1332: ==", + "1333: bz setBoxMapStruct_bool_false@4" ], [ - "1304: deleteBoxRef_bool_merge@5:", - "1307: assert", - "1308: retsub" + "1334: intc_0" ], [ - "137: intc_0", - "138: return" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" + ], + [ + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 12 -> 87 -> 91 -> 90 -> 13", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 89 -> 90 -> 93 -> 92 -> 9", "blocks": [ [ - "1: #pragma version 10", - "2: UNSUPPORTED #pragma typetrack false" + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" + ], + [ + "5: main:", + "6: intcblock 1 0 32 42", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", + "10: txn NumAppArgs", + "11: bz main_bare_routing@31" + ], + [ + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", + "13: txna ApplicationArgs 0", + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "5: main:", - "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", - "10: txn NumAppArgs", - "11: bz main_bare_routing@31" + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", - "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "122: main_deleteBoxRef_route@24:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "132: txna ApplicationArgs 1", - "133: extract 2 0", - "136: callsub deleteBoxRef" + "1272: frame_dig 0", + "1273: box_get", + "1274: assert", + "1285: extract 2 8", + "1288: frame_dig -1", + "1289: extract 2 8", + "1300: ==", + "1301: bz setBoxMapStruct_bool_false@4" ], [ - "1281: deleteBoxRef:", - "1284: proto 1 0", - "1287: frame_dig -1", - "1288: box_del", - "1289: pop", - "1292: frame_dig -1", - "1293: box_get", - "1294: pop", - "1295: pushbytes \"\"", - "1296: ==", - "1297: bz deleteBoxRef_bool_false@4" + "1304: frame_dig 0", + "1305: box_get", + "1306: assert", + "1317: extract 10 8", + "1320: frame_dig -1", + "1321: extract 10 8", + "1332: ==", + "1333: bz setBoxMapStruct_bool_false@4" ], [ - "1310: deleteBoxRef_bool_false@4:", - "1311: intc_1", - "1312: b deleteBoxRef_bool_merge@5" + "1354: setBoxMapStruct_bool_false@4:", + "1355: intc_1", + "1356: b setBoxMapStruct_bool_merge@5" ], [ - "1304: deleteBoxRef_bool_merge@5:", - "1307: assert", - "1308: retsub" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" ], [ - "137: intc_0", - "138: return" + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 10 -> 92 -> 11", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 89 -> 93 -> 92 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -6357,60 +6284,98 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" + ], + [ + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" + ], + [ + "1272: frame_dig 0", + "1273: box_get", + "1274: assert", + "1285: extract 2 8", + "1288: frame_dig -1", + "1289: extract 2 8", + "1300: ==", + "1301: bz setBoxMapStruct_bool_false@4" ], [ - "85: main_maybeBoxRef_route@25:", - "88: txn OnCompletion", - "89: !", - "90: assert", - "91: txn ApplicationID", - "92: assert", - "95: txna ApplicationArgs 1", - "96: extract 2 0", - "99: callsub maybeBoxRef" + "1354: setBoxMapStruct_bool_false@4:", + "1355: intc_1", + "1356: b setBoxMapStruct_bool_merge@5" ], [ - "1316: maybeBoxRef:", - "1320: proto 1 2", - "1323: frame_dig -1", - "1324: box_get", - "1327: retsub" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" ], [ - "100: dig 1", - "101: len", - "102: itob", - "103: extract 6 2", - "104: uncover 2", - "105: concat", - "106: bytec_1", - "107: intc_1", - "108: uncover 3", - "109: setbit", - "110: bytec 9", - "111: swap", - "112: concat", - "113: swap", - "114: concat", - "115: bytec_0", - "116: swap", - "117: concat", - "118: log", - "119: intc_0", - "120: return" + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 8 -> 93 -> 9", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 93 -> 92 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -6419,46 +6384,83 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" + ], + [ + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "62: main_lengthBoxRef_route@26:", - "65: txn OnCompletion", - "66: !", - "67: assert", - "68: txn ApplicationID", - "69: assert", - "72: txna ApplicationArgs 1", - "73: extract 2 0", - "76: callsub lengthBoxRef" + "1354: setBoxMapStruct_bool_false@4:", + "1355: intc_1", + "1356: b setBoxMapStruct_bool_merge@5" ], [ - "1331: lengthBoxRef:", - "1334: proto 1 1", - "1337: frame_dig -1", - "1338: intc_2", - "1339: box_create", - "1340: assert", - "1343: frame_dig -1", - "1344: box_len", - "1345: assert", - "1346: retsub" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" ], [ - "77: itob", - "78: bytec_0", - "79: swap", - "80: concat", - "81: log", - "82: intc_0", - "83: return" + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, @@ -6472,68 +6474,66 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "44: main_extractBoxRef_route@27:", + "44: main_boxMapStructLength_route@27:", "47: txn OnCompletion", "48: !", "49: assert", "50: txn ApplicationID", "51: assert", "54: txna ApplicationArgs 1", - "55: extract 2 0", - "58: callsub extractBoxRef" - ], - [ - "1350: extractBoxRef:", - "1353: proto 1 0", - "1356: txn Sender", - "1359: global CurrentApplicationAddress", - "1362: dup", - "1363: len", - "1364: dig 2", - "1365: len", - "1366: +", - "1369: frame_dig -1", - "1370: swap", - "1371: box_create", - "1372: assert", - "1375: frame_dig -1", - "1376: intc_1", - "1377: dig 3", - "1378: box_replace", - "1381: frame_dig -1", - "1382: intc_1", - "1383: dup", - "1384: dig 3", - "1385: UNSUPPORTED box_splice", - "1388: frame_dig -1", - "1389: intc_1", - "1390: intc_2", - "1391: box_extract", - "1394: frame_dig -1", - "1395: intc_2", - "1396: dup", - "1397: box_extract", - "1400: swap", - "1401: uncover 2", - "1402: ==", - "1403: assert", - "1406: ==", - "1407: assert", + "55: btoi", + "58: callsub boxMapStructLength" + ], + [ + "1360: boxMapStructLength:", + "1363: proto 1 1", + "1366: frame_dig -1", + "1367: itob", + "1370: bytec 6", + "1371: swap", + "1372: concat", + "1375: dup", + "1376: box_del", + "1377: pop", + "1378: dup", + "1385: pushbytes 0x0012000000000000004600000000000004d20008746573744e616d65", + "1388: box_put", + "1391: dup", + "1392: box_get", + "1393: assert", + "1394: len", + "1395: pushint 28", + "1396: ==", + "1397: assert", + "1400: box_len", + "1401: assert", + "1402: pushint 28", + "1403: ==", + "1404: assert", + "1407: intc_0", "1408: retsub" ], [ - "59: intc_0", - "60: return" + "59: bytec_1", + "60: intc_1", + "61: uncover 2", + "62: setbit", + "63: bytec_0", + "64: swap", + "65: concat", + "66: log", + "67: intc_0", + "68: return" ] ] }, @@ -6547,14 +6547,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "22: main_arc4Box_route@28:", @@ -6629,7 +6629,7 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], @@ -6666,14 +6666,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "16: main_after_if_else@35:", @@ -6692,14 +6692,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "573: main_getBox_route@3:", @@ -6741,14 +6741,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "556: main_valueBox_route@4:", @@ -6790,37 +6790,45 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "538: main_setBox_route@5:", - "541: txn OnCompletion", - "542: !", - "543: assert", - "544: txn ApplicationID", - "545: assert", - "548: txna ApplicationArgs 1", - "549: btoi", - "552: callsub setBox" + "533: main_maybeBox_route@5:", + "536: txn OnCompletion", + "537: !", + "538: assert", + "539: txn ApplicationID", + "540: assert", + "541: callsub maybeBox" ], [ - "633: setBox:", - "636: proto 1 0", - "639: frame_dig -1", - "640: itob", - "643: bytec_3", - "646: swap", - "647: box_put", - "648: retsub" + "633: maybeBox:", + "636: bytec_3", + "639: box_get", + "640: swap", + "641: btoi", + "644: swap", + "645: retsub" ], [ + "542: swap", + "543: itob", + "544: bytec_1", + "545: intc_1", + "546: uncover 3", + "547: setbit", + "548: concat", + "549: bytec_0", + "550: swap", + "551: concat", + "552: log", "553: intc_0", "554: return" ] @@ -6836,40 +6844,51 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "520: main_setBoxString_route@6:", - "523: txn OnCompletion", - "524: !", - "525: assert", - "526: txn ApplicationID", - "527: assert", - "530: txna ApplicationArgs 1", - "531: extract 2 0", - "534: callsub setBoxString" + "505: main_getBoxMap_route@6:", + "508: txn OnCompletion", + "509: !", + "510: assert", + "511: txn ApplicationID", + "512: assert", + "515: txna ApplicationArgs 1", + "516: btoi", + "519: callsub getBoxMap" ], [ - "652: setBoxString:", - "655: proto 1 0", - "658: bytec 4", - "661: box_del", - "662: pop", - "665: bytec 4", - "668: frame_dig -1", - "669: box_put", - "670: retsub" + "649: getBoxMap:", + "653: proto 1 1", + "656: frame_dig -1", + "657: itob", + "660: bytec_2", + "661: swap", + "662: concat", + "665: box_get", + "666: assert", + "667: retsub" ], [ - "535: intc_0", - "536: return" + "520: dup", + "521: len", + "522: itob", + "523: extract 6 2", + "524: swap", + "525: concat", + "526: bytec_0", + "527: swap", + "528: concat", + "529: log", + "530: intc_0", + "531: return" ] ] }, @@ -6883,44 +6902,58 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "503: main_setBoxDynamicBytes_route@7:", - "506: txn OnCompletion", - "507: !", - "508: assert", - "509: txn ApplicationID", - "510: assert", - "513: txna ApplicationArgs 1", - "516: callsub setBoxDynamicBytes" + "477: main_getBoxMapWithDefault_route@7:", + "480: txn OnCompletion", + "481: !", + "482: assert", + "483: txn ApplicationID", + "484: assert", + "487: txna ApplicationArgs 1", + "488: btoi", + "491: callsub getBoxMapWithDefault" ], [ - "674: setBoxDynamicBytes:", - "677: proto 1 0", - "680: bytec 5", - "683: box_del", - "684: pop", - "687: bytec 5", - "690: frame_dig -1", - "691: box_put", - "692: retsub" + "671: getBoxMapWithDefault:", + "675: proto 1 1", + "678: frame_dig -1", + "679: itob", + "682: bytec_2", + "683: swap", + "684: concat", + "687: box_get", + "688: pushbytes \"default\"", + "689: cover 2", + "690: select", + "691: retsub" ], [ - "517: intc_0", - "518: return" + "492: dup", + "493: len", + "494: itob", + "495: extract 6 2", + "496: swap", + "497: concat", + "498: bytec_0", + "499: swap", + "500: concat", + "501: log", + "502: intc_0", + "503: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 43 -> 62 -> 44", + "short": "0 -> 1 -> 2 -> 43 -> 62 -> 63 -> 64 -> 44", "blocks": [ [ "1: #pragma version 10", @@ -6929,127 +6962,77 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "491: main_deleteBox_route@8:", - "494: txn OnCompletion", - "495: !", - "496: assert", - "497: txn ApplicationID", - "498: assert", - "499: callsub deleteBox" - ], - [ - "696: deleteBox:", - "699: bytec_3", - "702: box_del", - "703: pop", - "706: bytec 5", - "709: box_del", - "710: pop", - "713: bytec 4", - "716: box_del", - "717: pop", - "720: bytec_3", - "723: box_get", - "724: swap", - "725: btoi", - "726: intc_3", - "727: swap", - "728: uncover 2", - "729: select", - "730: intc_3", - "731: ==", - "732: assert", - "735: bytec 5", - "738: box_get", - "739: pushbytes 0x00023432", - "740: cover 2", - "741: select", - "742: extract 2 0", - "743: bytec 7", - "744: ==", - "745: assert", - "748: bytec 4", - "751: box_get", - "752: bytec 7", - "753: cover 2", - "754: select", - "755: bytec 7", - "756: ==", - "757: assert", - "758: retsub" - ], - [ - "500: intc_0", - "501: return" - ] - ] - }, - { - "short": "0 -> 1 -> 2 -> 41 -> 63 -> 42", - "blocks": [ - [ - "1: #pragma version 10", - "2: UNSUPPORTED #pragma typetrack false" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "5: main:", - "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", - "10: txn NumAppArgs", - "11: bz main_bare_routing@31" + "440: main_maybeBoxMap_route@8:", + "443: txn OnCompletion", + "444: !", + "445: assert", + "446: txn ApplicationID", + "447: assert", + "450: txna ApplicationArgs 1", + "451: btoi", + "454: callsub maybeBoxMap" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", - "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "695: maybeBoxMap:", + "699: proto 1 2", + "702: frame_dig -1", + "703: itob", + "706: bytec_2", + "707: swap", + "708: concat", + "711: box_get", + "712: dup", + "713: uncover 2", + "714: swap", + "717: bz maybeBoxMap_ternary_false@2" ], [ - "468: main_maybeBox_route@9:", - "471: txn OnCompletion", - "472: !", - "473: assert", - "474: txn ApplicationID", - "475: assert", - "476: callsub maybeBox" + "718: frame_dig 1" ], [ - "762: maybeBox:", - "765: bytec_3", - "768: box_get", - "769: swap", - "770: btoi", - "773: swap", - "774: retsub" + "720: maybeBoxMap_ternary_merge@3:", + "723: frame_dig 0", + "724: uncover 3", + "725: uncover 3", + "726: retsub" ], [ - "477: swap", - "478: itob", - "479: bytec_1", - "480: intc_1", - "481: uncover 3", - "482: setbit", - "483: concat", - "484: bytec_0", - "485: swap", - "486: concat", - "487: log", - "488: intc_0", - "489: return" + "455: dig 1", + "456: len", + "457: itob", + "458: extract 6 2", + "459: uncover 2", + "460: concat", + "461: bytec_1", + "462: intc_1", + "463: uncover 3", + "464: setbit", + "465: bytec 9", + "466: swap", + "467: concat", + "468: swap", + "469: concat", + "470: bytec_0", + "471: swap", + "472: concat", + "473: log", + "474: intc_0", + "475: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 39 -> 64 -> 40", + "short": "0 -> 1 -> 2 -> 43 -> 62 -> 65 -> 64 -> 44", "blocks": [ [ "1: #pragma version 10", @@ -7058,17 +7041,17 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "440: main_getBoxMap_route@10:", + "440: main_maybeBoxMap_route@8:", "443: txn OnCompletion", "444: !", "445: assert", @@ -7076,38 +7059,61 @@ "447: assert", "450: txna ApplicationArgs 1", "451: btoi", - "454: callsub getBoxMap" + "454: callsub maybeBoxMap" ], [ - "778: getBoxMap:", - "782: proto 1 1", - "785: frame_dig -1", - "786: itob", - "789: bytec_2", - "790: swap", - "791: concat", - "794: box_get", - "795: assert", - "796: retsub" + "695: maybeBoxMap:", + "699: proto 1 2", + "702: frame_dig -1", + "703: itob", + "706: bytec_2", + "707: swap", + "708: concat", + "711: box_get", + "712: dup", + "713: uncover 2", + "714: swap", + "717: bz maybeBoxMap_ternary_false@2" ], [ - "455: dup", + "728: maybeBoxMap_ternary_false@2:", + "731: pushbytes \"\"", + "732: b maybeBoxMap_ternary_merge@3" + ], + [ + "720: maybeBoxMap_ternary_merge@3:", + "723: frame_dig 0", + "724: uncover 3", + "725: uncover 3", + "726: retsub" + ], + [ + "455: dig 1", "456: len", "457: itob", "458: extract 6 2", - "459: swap", + "459: uncover 2", "460: concat", - "461: bytec_0", - "462: swap", - "463: concat", - "464: log", - "465: intc_0", - "466: return" + "461: bytec_1", + "462: intc_1", + "463: uncover 3", + "464: setbit", + "465: bytec 9", + "466: swap", + "467: concat", + "468: swap", + "469: concat", + "470: bytec_0", + "471: swap", + "472: concat", + "473: log", + "474: intc_0", + "475: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 37 -> 65 -> 38", + "short": "0 -> 1 -> 2 -> 42", "blocks": [ [ "1: #pragma version 10", @@ -7116,50 +7122,23 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "412: main_getBoxMapWithDefault_route@11:", - "415: txn OnCompletion", - "416: !", - "417: assert", - "418: txn ApplicationID", - "419: assert", - "422: txna ApplicationArgs 1", - "423: btoi", - "426: callsub getBoxMapWithDefault" - ], - [ - "800: getBoxMapWithDefault:", - "804: proto 1 1", - "807: frame_dig -1", - "808: itob", - "811: bytec_2", - "812: swap", - "813: concat", - "816: box_get", - "817: pushbytes \"default\"", - "818: cover 2", - "819: select", - "820: retsub" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "427: dup", - "428: len", - "429: itob", - "430: extract 6 2", - "431: swap", - "432: concat", - "433: bytec_0", - "434: swap", - "435: concat", + "427: main_keyPrefixBoxMap_route@9:", + "430: txn OnCompletion", + "431: !", + "432: assert", + "433: txn ApplicationID", + "434: assert", + "435: pushbytes 0x151f7c750006626f784d6170", "436: log", "437: intc_0", "438: return" @@ -7167,7 +7146,7 @@ ] }, { - "short": "0 -> 1 -> 2 -> 35 -> 66 -> 36", + "short": "0 -> 1 -> 2 -> 40 -> 66 -> 41", "blocks": [ [ "1: #pragma version 10", @@ -7176,51 +7155,57 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "392: main_setBoxMap_route@12:", - "395: txn OnCompletion", - "396: !", - "397: assert", - "398: txn ApplicationID", - "399: assert", - "402: txna ApplicationArgs 1", - "403: btoi", - "404: txna ApplicationArgs 2", - "405: extract 2 0", - "408: callsub setBoxMap" + "411: main_getBoxRef_route@10:", + "414: txn OnCompletion", + "415: !", + "416: assert", + "417: txn ApplicationID", + "418: assert", + "419: callsub getBoxRef" ], [ - "824: setBoxMap:", - "827: proto 2 0", - "830: frame_dig -2", - "831: itob", - "834: bytec_2", - "835: swap", - "836: concat", - "839: dup", - "840: box_del", - "841: pop", - "842: frame_dig -1", - "843: box_put", - "844: retsub" + "736: getBoxRef:", + "739: bytec 7", + "742: intc_2", + "743: box_create", + "744: pop", + "747: txn Sender", + "750: bytec 7", + "753: dig 1", + "754: box_put", + "757: bytec 7", + "760: box_get", + "761: dig 2", + "762: cover 2", + "763: select", + "766: dup", + "767: uncover 2", + "768: ==", + "769: assert", + "772: retsub" ], [ - "409: intc_0", - "410: return" + "420: bytec_0", + "421: swap", + "422: concat", + "423: log", + "424: intc_0", + "425: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 33 -> 67 -> 34", + "short": "0 -> 1 -> 2 -> 38 -> 67 -> 39", "blocks": [ [ "1: #pragma version 10", @@ -7229,46 +7214,54 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "374: main_deleteBoxMap_route@13:", - "377: txn OnCompletion", - "378: !", - "379: assert", - "380: txn ApplicationID", - "381: assert", - "384: txna ApplicationArgs 1", - "385: btoi", - "388: callsub deleteBoxMap" + "385: main_boxMapExists_route@11:", + "388: txn OnCompletion", + "389: !", + "390: assert", + "391: txn ApplicationID", + "392: assert", + "395: txna ApplicationArgs 1", + "396: btoi", + "399: callsub boxMapExists" ], [ - "848: deleteBoxMap:", - "851: proto 1 0", - "854: frame_dig -1", - "855: itob", - "858: bytec_2", - "859: swap", - "860: concat", - "863: box_del", - "864: pop", - "865: retsub" + "776: boxMapExists:", + "780: proto 1 1", + "783: frame_dig -1", + "784: itob", + "787: bytec_2", + "788: swap", + "789: concat", + "792: box_len", + "793: bury 1", + "794: retsub" ], [ - "389: intc_0", - "390: return" + "400: bytec_1", + "401: intc_1", + "402: uncover 2", + "403: setbit", + "404: bytec_0", + "405: swap", + "406: concat", + "407: log", + "408: intc_0", + "409: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 31 -> 68 -> 69 -> 70 -> 32", + "short": "0 -> 1 -> 2 -> 36 -> 68 -> 37", "blocks": [ [ "1: #pragma version 10", @@ -7277,77 +7270,60 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "337: main_maybeBoxMap_route@14:", - "340: txn OnCompletion", - "341: !", - "342: assert", - "343: txn ApplicationID", - "344: assert", - "347: txna ApplicationArgs 1", - "348: btoi", - "351: callsub maybeBoxMap" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "869: maybeBoxMap:", - "873: proto 1 2", - "876: frame_dig -1", - "877: itob", - "880: bytec_2", - "881: swap", - "882: concat", - "885: box_get", - "886: dup", - "887: uncover 2", - "888: swap", - "891: bz maybeBoxMap_ternary_false@2" + "348: main_maybeBoxRef_route@12:", + "351: txn OnCompletion", + "352: !", + "353: assert", + "354: txn ApplicationID", + "355: assert", + "358: txna ApplicationArgs 1", + "359: extract 2 0", + "362: callsub maybeBoxRef" ], [ - "892: frame_dig 1" + "798: maybeBoxRef:", + "802: proto 1 2", + "805: frame_dig -1", + "806: box_get", + "809: retsub" ], [ - "894: maybeBoxMap_ternary_merge@3:", - "897: frame_dig 0", - "898: uncover 3", - "899: uncover 3", - "900: retsub" - ], - [ - "352: dig 1", - "353: len", - "354: itob", - "355: extract 6 2", - "356: uncover 2", - "357: concat", - "358: bytec_1", - "359: intc_1", - "360: uncover 3", - "361: setbit", - "362: bytec 9", - "363: swap", - "364: concat", - "365: swap", - "366: concat", - "367: bytec_0", - "368: swap", - "369: concat", - "370: log", - "371: intc_0", - "372: return" + "363: dig 1", + "364: len", + "365: itob", + "366: extract 6 2", + "367: uncover 2", + "368: concat", + "369: bytec_1", + "370: intc_1", + "371: uncover 3", + "372: setbit", + "373: bytec 9", + "374: swap", + "375: concat", + "376: swap", + "377: concat", + "378: bytec_0", + "379: swap", + "380: concat", + "381: log", + "382: intc_0", + "383: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 31 -> 68 -> 71 -> 70 -> 32", + "short": "0 -> 1 -> 2 -> 34 -> 69 -> 35", "blocks": [ [ "1: #pragma version 10", @@ -7356,79 +7332,44 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "337: main_maybeBoxMap_route@14:", - "340: txn OnCompletion", - "341: !", - "342: assert", - "343: txn ApplicationID", - "344: assert", - "347: txna ApplicationArgs 1", - "348: btoi", - "351: callsub maybeBoxMap" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "869: maybeBoxMap:", - "873: proto 1 2", - "876: frame_dig -1", - "877: itob", - "880: bytec_2", - "881: swap", - "882: concat", - "885: box_get", - "886: dup", - "887: uncover 2", - "888: swap", - "891: bz maybeBoxMap_ternary_false@2" + "330: main_setBox_route@13:", + "333: txn OnCompletion", + "334: !", + "335: assert", + "336: txn ApplicationID", + "337: assert", + "340: txna ApplicationArgs 1", + "341: btoi", + "344: callsub setBox" ], [ - "902: maybeBoxMap_ternary_false@2:", - "905: pushbytes \"\"", - "906: b maybeBoxMap_ternary_merge@3" + "813: setBox:", + "816: proto 1 0", + "819: frame_dig -1", + "820: itob", + "823: bytec_3", + "826: swap", + "827: box_put", + "828: retsub" ], [ - "894: maybeBoxMap_ternary_merge@3:", - "897: frame_dig 0", - "898: uncover 3", - "899: uncover 3", - "900: retsub" - ], - [ - "352: dig 1", - "353: len", - "354: itob", - "355: extract 6 2", - "356: uncover 2", - "357: concat", - "358: bytec_1", - "359: intc_1", - "360: uncover 3", - "361: setbit", - "362: bytec 9", - "363: swap", - "364: concat", - "365: swap", - "366: concat", - "367: bytec_0", - "368: swap", - "369: concat", - "370: log", - "371: intc_0", - "372: return" + "345: intc_0", + "346: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 29 -> 72 -> 73 -> 30", + "short": "0 -> 1 -> 2 -> 32 -> 70 -> 33", "blocks": [ [ "1: #pragma version 10", @@ -7437,57 +7378,45 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "314: main_boxMapLength_route@15:", - "317: txn OnCompletion", - "318: !", + "312: main_setBoxString_route@14:", + "315: txn OnCompletion", + "316: !", + "317: assert", + "318: txn ApplicationID", "319: assert", - "320: txn ApplicationID", - "321: assert", - "324: txna ApplicationArgs 1", - "325: btoi", - "328: callsub boxMapLength" - ], - [ - "910: boxMapLength:", - "914: proto 1 1", - "917: frame_dig -1", - "918: itob", - "921: bytec_2", - "922: swap", - "923: concat", - "924: dup", - "927: box_len", - "928: bury 1", - "929: bnz boxMapLength_after_if_else@2" + "322: txna ApplicationArgs 1", + "323: extract 2 0", + "326: callsub setBoxString" ], [ - "932: intc_1", - "933: swap", - "934: retsub" + "832: setBoxString:", + "835: proto 1 0", + "838: bytec 4", + "841: box_del", + "842: pop", + "845: bytec 4", + "848: frame_dig -1", + "849: box_put", + "850: retsub" ], [ - "329: itob", - "330: bytec_0", - "331: swap", - "332: concat", - "333: log", - "334: intc_0", - "335: return" + "327: intc_0", + "328: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 29 -> 72 -> 74 -> 30", + "short": "0 -> 1 -> 2 -> 30 -> 71 -> 31", "blocks": [ [ "1: #pragma version 10", @@ -7496,60 +7425,44 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "314: main_boxMapLength_route@15:", - "317: txn OnCompletion", - "318: !", - "319: assert", - "320: txn ApplicationID", - "321: assert", - "324: txna ApplicationArgs 1", - "325: btoi", - "328: callsub boxMapLength" - ], - [ - "910: boxMapLength:", - "914: proto 1 1", - "917: frame_dig -1", - "918: itob", - "921: bytec_2", - "922: swap", - "923: concat", - "924: dup", - "927: box_len", - "928: bury 1", - "929: bnz boxMapLength_after_if_else@2" - ], - [ - "936: boxMapLength_after_if_else@2:", - "939: frame_dig 0", - "940: box_len", - "941: assert", - "942: swap", - "943: retsub" + "295: main_setBoxDynamicBytes_route@15:", + "298: txn OnCompletion", + "299: !", + "300: assert", + "301: txn ApplicationID", + "302: assert", + "305: txna ApplicationArgs 1", + "308: callsub setBoxDynamicBytes" + ], + [ + "854: setBoxDynamicBytes:", + "857: proto 1 0", + "860: bytec 5", + "863: box_del", + "864: pop", + "867: bytec 5", + "870: frame_dig -1", + "871: box_put", + "872: retsub" ], [ - "329: itob", - "330: bytec_0", - "331: swap", - "332: concat", - "333: log", - "334: intc_0", - "335: return" + "309: intc_0", + "310: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 27 -> 75 -> 28", + "short": "0 -> 1 -> 2 -> 28 -> 72 -> 29", "blocks": [ [ "1: #pragma version 10", @@ -7558,54 +7471,51 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "288: main_boxMapExists_route@16:", - "291: txn OnCompletion", - "292: !", - "293: assert", - "294: txn ApplicationID", - "295: assert", - "298: txna ApplicationArgs 1", - "299: btoi", - "302: callsub boxMapExists" + "275: main_setBoxMap_route@16:", + "278: txn OnCompletion", + "279: !", + "280: assert", + "281: txn ApplicationID", + "282: assert", + "285: txna ApplicationArgs 1", + "286: btoi", + "287: txna ApplicationArgs 2", + "288: extract 2 0", + "291: callsub setBoxMap" ], [ - "947: boxMapExists:", - "951: proto 1 1", - "954: frame_dig -1", - "955: itob", - "958: bytec_2", - "959: swap", - "960: concat", - "963: box_len", - "964: bury 1", - "965: retsub" + "876: setBoxMap:", + "879: proto 2 0", + "882: frame_dig -2", + "883: itob", + "886: bytec_2", + "887: swap", + "888: concat", + "891: dup", + "892: box_del", + "893: pop", + "894: frame_dig -1", + "895: box_put", + "896: retsub" ], [ - "303: bytec_1", - "304: intc_1", - "305: uncover 2", - "306: setbit", - "307: bytec_0", - "308: swap", - "309: concat", - "310: log", - "311: intc_0", - "312: return" + "292: intc_0", + "293: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 26", + "short": "0 -> 1 -> 2 -> 26 -> 73 -> 27", "blocks": [ [ "1: #pragma version 10", @@ -7614,31 +7524,46 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "275: main_keyPrefixBoxMap_route@17:", - "278: txn OnCompletion", - "279: !", - "280: assert", - "281: txn ApplicationID", - "282: assert", - "283: pushbytes 0x151f7c750006626f784d6170", - "284: log", - "285: intc_0", - "286: return" + "257: main_setBoxRef_route@17:", + "260: txn OnCompletion", + "261: !", + "262: assert", + "263: txn ApplicationID", + "264: assert", + "267: txna ApplicationArgs 1", + "268: extract 2 0", + "271: callsub setBoxRef" + ], + [ + "900: setBoxRef:", + "903: proto 1 0", + "906: frame_dig -1", + "907: intc_2", + "908: box_create", + "909: pop", + "912: frame_dig -1", + "915: txn Sender", + "918: box_put", + "919: retsub" + ], + [ + "272: intc_0", + "273: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 24 -> 76 -> 25", + "short": "0 -> 1 -> 2 -> 24 -> 74 -> 75 -> 25", "blocks": [ [ "1: #pragma version 10", @@ -7647,50 +7572,57 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "253: main_getBoxMapStruct_route@18:", - "256: txn OnCompletion", - "257: !", - "258: assert", - "259: txn ApplicationID", - "260: assert", - "263: txna ApplicationArgs 1", - "264: btoi", - "267: callsub getBoxMapStruct" + "234: main_boxMapLength_route@18:", + "237: txn OnCompletion", + "238: !", + "239: assert", + "240: txn ApplicationID", + "241: assert", + "244: txna ApplicationArgs 1", + "245: btoi", + "248: callsub boxMapLength" ], [ - "969: getBoxMapStruct:", - "973: proto 1 1", - "976: frame_dig -1", - "977: itob", - "980: bytec 6", - "981: swap", - "982: concat", - "985: box_get", - "986: assert", - "987: retsub" + "923: boxMapLength:", + "927: proto 1 1", + "930: frame_dig -1", + "931: itob", + "934: bytec_2", + "935: swap", + "936: concat", + "937: dup", + "940: box_len", + "941: bury 1", + "942: bnz boxMapLength_after_if_else@2" ], [ - "268: bytec_0", - "269: swap", - "270: concat", - "271: log", - "272: intc_0", - "273: return" + "945: intc_1", + "946: swap", + "947: retsub" + ], + [ + "249: itob", + "250: bytec_0", + "251: swap", + "252: concat", + "253: log", + "254: intc_0", + "255: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 78 -> 79 -> 80 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 24 -> 74 -> 76 -> 25", "blocks": [ [ "1: #pragma version 10", @@ -7699,106 +7631,60 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" - ], - [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" - ], - [ - "1056: frame_dig 0", - "1057: box_get", - "1058: assert", - "1069: extract 2 8", - "1072: frame_dig -1", - "1073: extract 2 8", - "1084: ==", - "1085: bz setBoxMapStruct_bool_false@4" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "1088: frame_dig 0", - "1089: box_get", - "1090: assert", - "1101: extract 10 8", - "1104: frame_dig -1", - "1105: extract 10 8", - "1116: ==", - "1117: bz setBoxMapStruct_bool_false@4" + "234: main_boxMapLength_route@18:", + "237: txn OnCompletion", + "238: !", + "239: assert", + "240: txn ApplicationID", + "241: assert", + "244: txna ApplicationArgs 1", + "245: btoi", + "248: callsub boxMapLength" ], [ - "1118: intc_0" + "923: boxMapLength:", + "927: proto 1 1", + "930: frame_dig -1", + "931: itob", + "934: bytec_2", + "935: swap", + "936: concat", + "937: dup", + "940: box_len", + "941: bury 1", + "942: bnz boxMapLength_after_if_else@2" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "949: boxMapLength_after_if_else@2:", + "952: frame_dig 0", + "953: box_len", + "954: assert", + "955: swap", + "956: retsub" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "249: itob", + "250: bytec_0", + "251: swap", + "252: concat", + "253: log", + "254: intc_0", + "255: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 78 -> 79 -> 82 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 22 -> 77 -> 23", "blocks": [ [ "1: #pragma version 10", @@ -7807,108 +7693,126 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" + "211: main_lengthBoxRef_route@19:", + "214: txn OnCompletion", + "215: !", + "216: assert", + "217: txn ApplicationID", + "218: assert", + "221: txna ApplicationArgs 1", + "222: extract 2 0", + "225: callsub lengthBoxRef" ], [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" - ], - [ - "1056: frame_dig 0", - "1057: box_get", - "1058: assert", - "1069: extract 2 8", - "1072: frame_dig -1", - "1073: extract 2 8", - "1084: ==", - "1085: bz setBoxMapStruct_bool_false@4" + "960: lengthBoxRef:", + "963: proto 1 1", + "966: frame_dig -1", + "967: intc_2", + "968: box_create", + "969: assert", + "972: frame_dig -1", + "973: box_len", + "974: assert", + "975: retsub" + ], + [ + "226: itob", + "227: bytec_0", + "228: swap", + "229: concat", + "230: log", + "231: intc_0", + "232: return" + ] + ] + }, + { + "short": "0 -> 1 -> 2 -> 20 -> 78 -> 21", + "blocks": [ + [ + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" + ], + [ + "5: main:", + "6: intcblock 1 0 32 42", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", + "10: txn NumAppArgs", + "11: bz main_bare_routing@31" ], [ - "1088: frame_dig 0", - "1089: box_get", - "1090: assert", - "1101: extract 10 8", - "1104: frame_dig -1", - "1105: extract 10 8", - "1116: ==", - "1117: bz setBoxMapStruct_bool_false@4" + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", + "13: txna ApplicationArgs 0", + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "1138: setBoxMapStruct_bool_false@4:", - "1139: intc_1", - "1140: b setBoxMapStruct_bool_merge@5" + "199: main_deleteBox_route@20:", + "202: txn OnCompletion", + "203: !", + "204: assert", + "205: txn ApplicationID", + "206: assert", + "207: callsub deleteBox" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "979: deleteBox:", + "982: bytec_3", + "985: box_del", + "986: pop", + "989: bytec 5", + "992: box_del", + "993: pop", + "996: bytec 4", + "999: box_del", + "1000: pop", + "1003: bytec_3", + "1006: box_get", + "1007: swap", + "1008: btoi", + "1009: intc_3", + "1010: swap", + "1011: uncover 2", + "1012: select", + "1013: intc_3", + "1014: ==", + "1015: assert", + "1018: bytec 5", + "1021: box_get", + "1022: pushbytes 0x00023432", + "1023: cover 2", + "1024: select", + "1025: extract 2 0", + "1026: bytec 8", + "1027: ==", + "1028: assert", + "1031: bytec 4", + "1034: box_get", + "1035: bytec 8", + "1036: cover 2", + "1037: select", + "1038: bytec 8", + "1039: ==", + "1040: assert", + "1041: retsub" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "208: intc_0", + "209: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 78 -> 82 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 18 -> 79 -> 19", "blocks": [ [ "1: #pragma version 10", @@ -7917,98 +7821,46 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" - ], - [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" - ], - [ - "1056: frame_dig 0", - "1057: box_get", - "1058: assert", - "1069: extract 2 8", - "1072: frame_dig -1", - "1073: extract 2 8", - "1084: ==", - "1085: bz setBoxMapStruct_bool_false@4" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "1138: setBoxMapStruct_bool_false@4:", - "1139: intc_1", - "1140: b setBoxMapStruct_bool_merge@5" + "181: main_deleteBoxMap_route@21:", + "184: txn OnCompletion", + "185: !", + "186: assert", + "187: txn ApplicationID", + "188: assert", + "191: txna ApplicationArgs 1", + "192: btoi", + "195: callsub deleteBoxMap" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "1045: deleteBoxMap:", + "1048: proto 1 0", + "1051: frame_dig -1", + "1052: itob", + "1055: bytec_2", + "1056: swap", + "1057: concat", + "1060: box_del", + "1061: pop", + "1062: retsub" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "196: intc_0", + "197: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 82 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 16 -> 80 -> 81 -> 82 -> 83 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -8017,88 +7869,61 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" + "163: main_deleteBoxRef_route@22:", + "166: txn OnCompletion", + "167: !", + "168: assert", + "169: txn ApplicationID", + "170: assert", + "173: txna ApplicationArgs 1", + "174: extract 2 0", + "177: callsub deleteBoxRef" ], [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" + "1066: deleteBoxRef:", + "1069: proto 1 0", + "1072: frame_dig -1", + "1073: box_del", + "1074: pop", + "1077: frame_dig -1", + "1078: box_get", + "1079: pop", + "1080: pushbytes \"\"", + "1081: ==", + "1082: bz deleteBoxRef_bool_false@4" + ], + [ + "1083: frame_dig -1", + "1084: box_get", + "1085: bury 1", + "1086: bnz deleteBoxRef_bool_false@4" ], [ - "1138: setBoxMapStruct_bool_false@4:", - "1139: intc_1", - "1140: b setBoxMapStruct_bool_merge@5" + "1087: intc_0" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "1089: deleteBoxRef_bool_merge@5:", + "1092: assert", + "1093: retsub" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "178: intc_0", + "179: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 20 -> 83 -> 21", + "short": "0 -> 1 -> 2 -> 16 -> 80 -> 81 -> 84 -> 83 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -8107,71 +7932,63 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "163: main_deleteBoxRef_route@22:", + "166: txn OnCompletion", + "167: !", + "168: assert", + "169: txn ApplicationID", + "170: assert", + "173: txna ApplicationArgs 1", + "174: extract 2 0", + "177: callsub deleteBoxRef" + ], + [ + "1066: deleteBoxRef:", + "1069: proto 1 0", + "1072: frame_dig -1", + "1073: box_del", + "1074: pop", + "1077: frame_dig -1", + "1078: box_get", + "1079: pop", + "1080: pushbytes \"\"", + "1081: ==", + "1082: bz deleteBoxRef_bool_false@4" + ], + [ + "1083: frame_dig -1", + "1084: box_get", + "1085: bury 1", + "1086: bnz deleteBoxRef_bool_false@4" ], [ - "200: main_boxMapStructLength_route@20:", - "203: txn OnCompletion", - "204: !", - "205: assert", - "206: txn ApplicationID", - "207: assert", - "210: txna ApplicationArgs 1", - "211: btoi", - "214: callsub boxMapStructLength" + "1095: deleteBoxRef_bool_false@4:", + "1096: intc_1", + "1097: b deleteBoxRef_bool_merge@5" ], [ - "1144: boxMapStructLength:", - "1147: proto 1 1", - "1150: frame_dig -1", - "1151: itob", - "1154: bytec 6", - "1155: swap", - "1156: concat", - "1159: dup", - "1160: box_del", - "1161: pop", - "1162: dup", - "1169: pushbytes 0x0012000000000000004600000000000004d20008746573744e616d65", - "1172: box_put", - "1175: dup", - "1176: box_get", - "1177: assert", - "1178: len", - "1179: pushint 28", - "1180: ==", - "1181: assert", - "1184: box_len", - "1185: assert", - "1186: pushint 28", - "1187: ==", - "1188: assert", - "1191: intc_0", - "1192: retsub" + "1089: deleteBoxRef_bool_merge@5:", + "1092: assert", + "1093: retsub" ], [ - "215: bytec_1", - "216: intc_1", - "217: uncover 2", - "218: setbit", - "219: bytec_0", - "220: swap", - "221: concat", - "222: log", - "223: intc_0", - "224: return" + "178: intc_0", + "179: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 18 -> 84 -> 19", + "short": "0 -> 1 -> 2 -> 16 -> 80 -> 84 -> 83 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -8180,54 +7997,57 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "163: main_deleteBoxRef_route@22:", + "166: txn OnCompletion", + "167: !", + "168: assert", + "169: txn ApplicationID", + "170: assert", + "173: txna ApplicationArgs 1", + "174: extract 2 0", + "177: callsub deleteBoxRef" + ], + [ + "1066: deleteBoxRef:", + "1069: proto 1 0", + "1072: frame_dig -1", + "1073: box_del", + "1074: pop", + "1077: frame_dig -1", + "1078: box_get", + "1079: pop", + "1080: pushbytes \"\"", + "1081: ==", + "1082: bz deleteBoxRef_bool_false@4" ], [ - "174: main_boxMapStructExists_route@21:", - "177: txn OnCompletion", - "178: !", - "179: assert", - "180: txn ApplicationID", - "181: assert", - "184: txna ApplicationArgs 1", - "185: btoi", - "188: callsub boxMapStructExists" + "1095: deleteBoxRef_bool_false@4:", + "1096: intc_1", + "1097: b deleteBoxRef_bool_merge@5" ], [ - "1196: boxMapStructExists:", - "1200: proto 1 1", - "1203: frame_dig -1", - "1204: itob", - "1207: bytec 6", - "1208: swap", - "1209: concat", - "1212: box_len", - "1213: bury 1", - "1214: retsub" + "1089: deleteBoxRef_bool_merge@5:", + "1092: assert", + "1093: retsub" ], [ - "189: bytec_1", - "190: intc_1", - "191: uncover 2", - "192: setbit", - "193: bytec_0", - "194: swap", - "195: concat", - "196: log", - "197: intc_0", - "198: return" + "178: intc_0", + "179: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 16 -> 85 -> 17", + "short": "0 -> 1 -> 2 -> 14 -> 85 -> 15", "blocks": [ [ "1: #pragma version 10", @@ -8236,57 +8056,73 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "158: main_getBoxRef_route@22:", - "161: txn OnCompletion", - "162: !", - "163: assert", - "164: txn ApplicationID", - "165: assert", - "166: callsub getBoxRef" + "145: main_extractBoxRef_route@23:", + "148: txn OnCompletion", + "149: !", + "150: assert", + "151: txn ApplicationID", + "152: assert", + "155: txna ApplicationArgs 1", + "156: extract 2 0", + "159: callsub extractBoxRef" ], [ - "1218: getBoxRef:", - "1221: bytec 8", - "1224: intc_2", - "1225: box_create", - "1226: pop", - "1229: txn Sender", - "1232: bytec 8", - "1235: dig 1", - "1236: box_put", - "1239: bytec 8", - "1242: box_get", - "1243: dig 2", - "1244: cover 2", - "1245: select", - "1248: dup", - "1249: uncover 2", - "1250: ==", - "1251: assert", - "1254: retsub" + "1101: extractBoxRef:", + "1104: proto 1 0", + "1107: txn Sender", + "1110: global CurrentApplicationAddress", + "1113: dup", + "1114: len", + "1115: dig 2", + "1116: len", + "1117: +", + "1120: frame_dig -1", + "1121: swap", + "1122: box_create", + "1123: assert", + "1126: frame_dig -1", + "1127: intc_1", + "1128: dig 3", + "1129: box_replace", + "1132: frame_dig -1", + "1133: intc_1", + "1134: dup", + "1135: dig 3", + "1136: UNSUPPORTED box_splice", + "1139: frame_dig -1", + "1140: intc_1", + "1141: intc_2", + "1142: box_extract", + "1145: frame_dig -1", + "1146: intc_2", + "1147: dup", + "1148: box_extract", + "1151: swap", + "1152: uncover 2", + "1153: ==", + "1154: assert", + "1157: ==", + "1158: assert", + "1159: retsub" ], [ - "167: bytec_0", - "168: swap", - "169: concat", - "170: log", - "171: intc_0", - "172: return" + "160: intc_0", + "161: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 14 -> 86 -> 15", + "short": "0 -> 1 -> 2 -> 12 -> 86 -> 13", "blocks": [ [ "1: #pragma version 10", @@ -8295,46 +8131,50 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "140: main_setBoxRef_route@23:", - "143: txn OnCompletion", - "144: !", - "145: assert", - "146: txn ApplicationID", - "147: assert", - "150: txna ApplicationArgs 1", - "151: extract 2 0", - "154: callsub setBoxRef" + "123: main_getBoxMapStruct_route@24:", + "126: txn OnCompletion", + "127: !", + "128: assert", + "129: txn ApplicationID", + "130: assert", + "133: txna ApplicationArgs 1", + "134: btoi", + "137: callsub getBoxMapStruct" ], [ - "1258: setBoxRef:", - "1261: proto 1 0", - "1264: frame_dig -1", - "1265: intc_2", - "1266: box_create", - "1267: pop", - "1270: frame_dig -1", - "1273: txn Sender", - "1276: box_put", - "1277: retsub" + "1163: getBoxMapStruct:", + "1167: proto 1 1", + "1170: frame_dig -1", + "1171: itob", + "1174: bytec 6", + "1175: swap", + "1176: concat", + "1179: box_get", + "1180: assert", + "1181: retsub" ], [ - "155: intc_0", - "156: return" + "138: bytec_0", + "139: swap", + "140: concat", + "141: log", + "142: intc_0", + "143: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 12 -> 87 -> 88 -> 89 -> 90 -> 13", + "short": "0 -> 1 -> 2 -> 10 -> 87 -> 11", "blocks": [ [ "1: #pragma version 10", @@ -8343,61 +8183,54 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "122: main_deleteBoxRef_route@24:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "132: txna ApplicationArgs 1", - "133: extract 2 0", - "136: callsub deleteBoxRef" + "97: main_boxMapStructExists_route@25:", + "100: txn OnCompletion", + "101: !", + "102: assert", + "103: txn ApplicationID", + "104: assert", + "107: txna ApplicationArgs 1", + "108: btoi", + "111: callsub boxMapStructExists" ], [ - "1281: deleteBoxRef:", - "1284: proto 1 0", - "1287: frame_dig -1", - "1288: box_del", - "1289: pop", - "1292: frame_dig -1", - "1293: box_get", - "1294: pop", - "1295: pushbytes \"\"", - "1296: ==", - "1297: bz deleteBoxRef_bool_false@4" + "1185: boxMapStructExists:", + "1189: proto 1 1", + "1192: frame_dig -1", + "1193: itob", + "1196: bytec 6", + "1197: swap", + "1198: concat", + "1201: box_len", + "1202: bury 1", + "1203: retsub" ], [ - "1298: frame_dig -1", - "1299: box_get", - "1300: bury 1", - "1301: bnz deleteBoxRef_bool_false@4" - ], - [ - "1302: intc_0" - ], - [ - "1304: deleteBoxRef_bool_merge@5:", - "1307: assert", - "1308: retsub" - ], - [ - "137: intc_0", - "138: return" + "112: bytec_1", + "113: intc_1", + "114: uncover 2", + "115: setbit", + "116: bytec_0", + "117: swap", + "118: concat", + "119: log", + "120: intc_0", + "121: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 12 -> 87 -> 88 -> 91 -> 90 -> 13", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 89 -> 90 -> 91 -> 92 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -8406,122 +8239,216 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" ], [ - "122: main_deleteBoxRef_route@24:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "132: txna ApplicationArgs 1", - "133: extract 2 0", - "136: callsub deleteBoxRef" + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "1281: deleteBoxRef:", - "1284: proto 1 0", - "1287: frame_dig -1", - "1288: box_del", - "1289: pop", - "1292: frame_dig -1", - "1293: box_get", - "1294: pop", - "1295: pushbytes \"\"", - "1296: ==", - "1297: bz deleteBoxRef_bool_false@4" + "1272: frame_dig 0", + "1273: box_get", + "1274: assert", + "1285: extract 2 8", + "1288: frame_dig -1", + "1289: extract 2 8", + "1300: ==", + "1301: bz setBoxMapStruct_bool_false@4" ], [ - "1298: frame_dig -1", - "1299: box_get", - "1300: bury 1", - "1301: bnz deleteBoxRef_bool_false@4" + "1304: frame_dig 0", + "1305: box_get", + "1306: assert", + "1317: extract 10 8", + "1320: frame_dig -1", + "1321: extract 10 8", + "1332: ==", + "1333: bz setBoxMapStruct_bool_false@4" ], [ - "1310: deleteBoxRef_bool_false@4:", - "1311: intc_1", - "1312: b deleteBoxRef_bool_merge@5" + "1334: intc_0" ], [ - "1304: deleteBoxRef_bool_merge@5:", - "1307: assert", - "1308: retsub" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" ], [ - "137: intc_0", - "138: return" + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 12 -> 87 -> 91 -> 90 -> 13", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 89 -> 90 -> 93 -> 92 -> 9", "blocks": [ [ - "1: #pragma version 10", - "2: UNSUPPORTED #pragma typetrack false" + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" + ], + [ + "5: main:", + "6: intcblock 1 0 32 42", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", + "10: txn NumAppArgs", + "11: bz main_bare_routing@31" + ], + [ + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", + "13: txna ApplicationArgs 0", + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "5: main:", - "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", - "10: txn NumAppArgs", - "11: bz main_bare_routing@31" + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", - "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "122: main_deleteBoxRef_route@24:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "132: txna ApplicationArgs 1", - "133: extract 2 0", - "136: callsub deleteBoxRef" + "1272: frame_dig 0", + "1273: box_get", + "1274: assert", + "1285: extract 2 8", + "1288: frame_dig -1", + "1289: extract 2 8", + "1300: ==", + "1301: bz setBoxMapStruct_bool_false@4" ], [ - "1281: deleteBoxRef:", - "1284: proto 1 0", - "1287: frame_dig -1", - "1288: box_del", - "1289: pop", - "1292: frame_dig -1", - "1293: box_get", - "1294: pop", - "1295: pushbytes \"\"", - "1296: ==", - "1297: bz deleteBoxRef_bool_false@4" + "1304: frame_dig 0", + "1305: box_get", + "1306: assert", + "1317: extract 10 8", + "1320: frame_dig -1", + "1321: extract 10 8", + "1332: ==", + "1333: bz setBoxMapStruct_bool_false@4" ], [ - "1310: deleteBoxRef_bool_false@4:", - "1311: intc_1", - "1312: b deleteBoxRef_bool_merge@5" + "1354: setBoxMapStruct_bool_false@4:", + "1355: intc_1", + "1356: b setBoxMapStruct_bool_merge@5" ], [ - "1304: deleteBoxRef_bool_merge@5:", - "1307: assert", - "1308: retsub" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" ], [ - "137: intc_0", - "138: return" + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 10 -> 92 -> 11", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 89 -> 93 -> 92 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -8530,60 +8457,98 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" + ], + [ + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" + ], + [ + "1272: frame_dig 0", + "1273: box_get", + "1274: assert", + "1285: extract 2 8", + "1288: frame_dig -1", + "1289: extract 2 8", + "1300: ==", + "1301: bz setBoxMapStruct_bool_false@4" ], [ - "85: main_maybeBoxRef_route@25:", - "88: txn OnCompletion", - "89: !", - "90: assert", - "91: txn ApplicationID", - "92: assert", - "95: txna ApplicationArgs 1", - "96: extract 2 0", - "99: callsub maybeBoxRef" + "1354: setBoxMapStruct_bool_false@4:", + "1355: intc_1", + "1356: b setBoxMapStruct_bool_merge@5" ], [ - "1316: maybeBoxRef:", - "1320: proto 1 2", - "1323: frame_dig -1", - "1324: box_get", - "1327: retsub" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" ], [ - "100: dig 1", - "101: len", - "102: itob", - "103: extract 6 2", - "104: uncover 2", - "105: concat", - "106: bytec_1", - "107: intc_1", - "108: uncover 3", - "109: setbit", - "110: bytec 9", - "111: swap", - "112: concat", - "113: swap", - "114: concat", - "115: bytec_0", - "116: swap", - "117: concat", - "118: log", - "119: intc_0", - "120: return" + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 8 -> 93 -> 9", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 93 -> 92 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -8592,46 +8557,83 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" ], [ - "62: main_lengthBoxRef_route@26:", - "65: txn OnCompletion", - "66: !", - "67: assert", - "68: txn ApplicationID", - "69: assert", - "72: txna ApplicationArgs 1", - "73: extract 2 0", - "76: callsub lengthBoxRef" + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "1331: lengthBoxRef:", - "1334: proto 1 1", - "1337: frame_dig -1", - "1338: intc_2", - "1339: box_create", - "1340: assert", - "1343: frame_dig -1", - "1344: box_len", - "1345: assert", - "1346: retsub" + "1354: setBoxMapStruct_bool_false@4:", + "1355: intc_1", + "1356: b setBoxMapStruct_bool_merge@5" ], [ - "77: itob", - "78: bytec_0", - "79: swap", - "80: concat", - "81: log", - "82: intc_0", - "83: return" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" + ], + [ + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, @@ -8645,68 +8647,66 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "44: main_extractBoxRef_route@27:", + "44: main_boxMapStructLength_route@27:", "47: txn OnCompletion", "48: !", "49: assert", "50: txn ApplicationID", "51: assert", "54: txna ApplicationArgs 1", - "55: extract 2 0", - "58: callsub extractBoxRef" - ], - [ - "1350: extractBoxRef:", - "1353: proto 1 0", - "1356: txn Sender", - "1359: global CurrentApplicationAddress", - "1362: dup", - "1363: len", - "1364: dig 2", - "1365: len", - "1366: +", - "1369: frame_dig -1", - "1370: swap", - "1371: box_create", - "1372: assert", - "1375: frame_dig -1", - "1376: intc_1", - "1377: dig 3", - "1378: box_replace", - "1381: frame_dig -1", - "1382: intc_1", - "1383: dup", - "1384: dig 3", - "1385: UNSUPPORTED box_splice", - "1388: frame_dig -1", - "1389: intc_1", - "1390: intc_2", - "1391: box_extract", - "1394: frame_dig -1", - "1395: intc_2", - "1396: dup", - "1397: box_extract", - "1400: swap", - "1401: uncover 2", - "1402: ==", - "1403: assert", - "1406: ==", - "1407: assert", + "55: btoi", + "58: callsub boxMapStructLength" + ], + [ + "1360: boxMapStructLength:", + "1363: proto 1 1", + "1366: frame_dig -1", + "1367: itob", + "1370: bytec 6", + "1371: swap", + "1372: concat", + "1375: dup", + "1376: box_del", + "1377: pop", + "1378: dup", + "1385: pushbytes 0x0012000000000000004600000000000004d20008746573744e616d65", + "1388: box_put", + "1391: dup", + "1392: box_get", + "1393: assert", + "1394: len", + "1395: pushint 28", + "1396: ==", + "1397: assert", + "1400: box_len", + "1401: assert", + "1402: pushint 28", + "1403: ==", + "1404: assert", + "1407: intc_0", "1408: retsub" ], [ - "59: intc_0", - "60: return" + "59: bytec_1", + "60: intc_1", + "61: uncover 2", + "62: setbit", + "63: bytec_0", + "64: swap", + "65: concat", + "66: log", + "67: intc_0", + "68: return" ] ] }, @@ -8720,14 +8720,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "22: main_arc4Box_route@28:", @@ -8802,7 +8802,7 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], @@ -8839,14 +8839,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "16: main_after_if_else@35:", @@ -8865,14 +8865,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "573: main_getBox_route@3:", @@ -8914,14 +8914,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "556: main_valueBox_route@4:", @@ -8963,37 +8963,45 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "538: main_setBox_route@5:", - "541: txn OnCompletion", - "542: !", - "543: assert", - "544: txn ApplicationID", - "545: assert", - "548: txna ApplicationArgs 1", - "549: btoi", - "552: callsub setBox" + "533: main_maybeBox_route@5:", + "536: txn OnCompletion", + "537: !", + "538: assert", + "539: txn ApplicationID", + "540: assert", + "541: callsub maybeBox" ], [ - "633: setBox:", - "636: proto 1 0", - "639: frame_dig -1", - "640: itob", - "643: bytec_3", - "646: swap", - "647: box_put", - "648: retsub" + "633: maybeBox:", + "636: bytec_3", + "639: box_get", + "640: swap", + "641: btoi", + "644: swap", + "645: retsub" ], [ + "542: swap", + "543: itob", + "544: bytec_1", + "545: intc_1", + "546: uncover 3", + "547: setbit", + "548: concat", + "549: bytec_0", + "550: swap", + "551: concat", + "552: log", "553: intc_0", "554: return" ] @@ -9009,40 +9017,51 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "520: main_setBoxString_route@6:", - "523: txn OnCompletion", - "524: !", - "525: assert", - "526: txn ApplicationID", - "527: assert", - "530: txna ApplicationArgs 1", - "531: extract 2 0", - "534: callsub setBoxString" + "505: main_getBoxMap_route@6:", + "508: txn OnCompletion", + "509: !", + "510: assert", + "511: txn ApplicationID", + "512: assert", + "515: txna ApplicationArgs 1", + "516: btoi", + "519: callsub getBoxMap" ], [ - "652: setBoxString:", - "655: proto 1 0", - "658: bytec 4", - "661: box_del", - "662: pop", - "665: bytec 4", - "668: frame_dig -1", - "669: box_put", - "670: retsub" + "649: getBoxMap:", + "653: proto 1 1", + "656: frame_dig -1", + "657: itob", + "660: bytec_2", + "661: swap", + "662: concat", + "665: box_get", + "666: assert", + "667: retsub" ], [ - "535: intc_0", - "536: return" + "520: dup", + "521: len", + "522: itob", + "523: extract 6 2", + "524: swap", + "525: concat", + "526: bytec_0", + "527: swap", + "528: concat", + "529: log", + "530: intc_0", + "531: return" ] ] }, @@ -9056,44 +9075,58 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "503: main_setBoxDynamicBytes_route@7:", - "506: txn OnCompletion", - "507: !", - "508: assert", - "509: txn ApplicationID", - "510: assert", - "513: txna ApplicationArgs 1", - "516: callsub setBoxDynamicBytes" + "477: main_getBoxMapWithDefault_route@7:", + "480: txn OnCompletion", + "481: !", + "482: assert", + "483: txn ApplicationID", + "484: assert", + "487: txna ApplicationArgs 1", + "488: btoi", + "491: callsub getBoxMapWithDefault" ], [ - "674: setBoxDynamicBytes:", - "677: proto 1 0", - "680: bytec 5", - "683: box_del", - "684: pop", - "687: bytec 5", - "690: frame_dig -1", - "691: box_put", - "692: retsub" + "671: getBoxMapWithDefault:", + "675: proto 1 1", + "678: frame_dig -1", + "679: itob", + "682: bytec_2", + "683: swap", + "684: concat", + "687: box_get", + "688: pushbytes \"default\"", + "689: cover 2", + "690: select", + "691: retsub" ], [ - "517: intc_0", - "518: return" + "492: dup", + "493: len", + "494: itob", + "495: extract 6 2", + "496: swap", + "497: concat", + "498: bytec_0", + "499: swap", + "500: concat", + "501: log", + "502: intc_0", + "503: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 43 -> 62 -> 44", + "short": "0 -> 1 -> 2 -> 43 -> 62 -> 63 -> 64 -> 44", "blocks": [ [ "1: #pragma version 10", @@ -9102,73 +9135,77 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "440: main_maybeBoxMap_route@8:", + "443: txn OnCompletion", + "444: !", + "445: assert", + "446: txn ApplicationID", + "447: assert", + "450: txna ApplicationArgs 1", + "451: btoi", + "454: callsub maybeBoxMap" + ], + [ + "695: maybeBoxMap:", + "699: proto 1 2", + "702: frame_dig -1", + "703: itob", + "706: bytec_2", + "707: swap", + "708: concat", + "711: box_get", + "712: dup", + "713: uncover 2", + "714: swap", + "717: bz maybeBoxMap_ternary_false@2" ], [ - "491: main_deleteBox_route@8:", - "494: txn OnCompletion", - "495: !", - "496: assert", - "497: txn ApplicationID", - "498: assert", - "499: callsub deleteBox" + "718: frame_dig 1" ], [ - "696: deleteBox:", - "699: bytec_3", - "702: box_del", - "703: pop", - "706: bytec 5", - "709: box_del", - "710: pop", - "713: bytec 4", - "716: box_del", - "717: pop", - "720: bytec_3", - "723: box_get", - "724: swap", - "725: btoi", - "726: intc_3", - "727: swap", - "728: uncover 2", - "729: select", - "730: intc_3", - "731: ==", - "732: assert", - "735: bytec 5", - "738: box_get", - "739: pushbytes 0x00023432", - "740: cover 2", - "741: select", - "742: extract 2 0", - "743: bytec 7", - "744: ==", - "745: assert", - "748: bytec 4", - "751: box_get", - "752: bytec 7", - "753: cover 2", - "754: select", - "755: bytec 7", - "756: ==", - "757: assert", - "758: retsub" + "720: maybeBoxMap_ternary_merge@3:", + "723: frame_dig 0", + "724: uncover 3", + "725: uncover 3", + "726: retsub" ], [ - "500: intc_0", - "501: return" + "455: dig 1", + "456: len", + "457: itob", + "458: extract 6 2", + "459: uncover 2", + "460: concat", + "461: bytec_1", + "462: intc_1", + "463: uncover 3", + "464: setbit", + "465: bytec 9", + "466: swap", + "467: concat", + "468: swap", + "469: concat", + "470: bytec_0", + "471: swap", + "472: concat", + "473: log", + "474: intc_0", + "475: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 41 -> 63 -> 42", + "short": "0 -> 1 -> 2 -> 43 -> 62 -> 65 -> 64 -> 44", "blocks": [ [ "1: #pragma version 10", @@ -9177,52 +9214,79 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "440: main_maybeBoxMap_route@8:", + "443: txn OnCompletion", + "444: !", + "445: assert", + "446: txn ApplicationID", + "447: assert", + "450: txna ApplicationArgs 1", + "451: btoi", + "454: callsub maybeBoxMap" ], [ - "468: main_maybeBox_route@9:", - "471: txn OnCompletion", - "472: !", - "473: assert", - "474: txn ApplicationID", - "475: assert", - "476: callsub maybeBox" + "695: maybeBoxMap:", + "699: proto 1 2", + "702: frame_dig -1", + "703: itob", + "706: bytec_2", + "707: swap", + "708: concat", + "711: box_get", + "712: dup", + "713: uncover 2", + "714: swap", + "717: bz maybeBoxMap_ternary_false@2" ], [ - "762: maybeBox:", - "765: bytec_3", - "768: box_get", - "769: swap", - "770: btoi", - "773: swap", - "774: retsub" + "728: maybeBoxMap_ternary_false@2:", + "731: pushbytes \"\"", + "732: b maybeBoxMap_ternary_merge@3" ], [ - "477: swap", - "478: itob", - "479: bytec_1", - "480: intc_1", - "481: uncover 3", - "482: setbit", - "483: concat", - "484: bytec_0", - "485: swap", - "486: concat", - "487: log", - "488: intc_0", - "489: return" + "720: maybeBoxMap_ternary_merge@3:", + "723: frame_dig 0", + "724: uncover 3", + "725: uncover 3", + "726: retsub" + ], + [ + "455: dig 1", + "456: len", + "457: itob", + "458: extract 6 2", + "459: uncover 2", + "460: concat", + "461: bytec_1", + "462: intc_1", + "463: uncover 3", + "464: setbit", + "465: bytec 9", + "466: swap", + "467: concat", + "468: swap", + "469: concat", + "470: bytec_0", + "471: swap", + "472: concat", + "473: log", + "474: intc_0", + "475: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 39 -> 64 -> 40", + "short": "0 -> 1 -> 2 -> 42", "blocks": [ [ "1: #pragma version 10", @@ -9231,56 +9295,90 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "440: main_getBoxMap_route@10:", - "443: txn OnCompletion", - "444: !", - "445: assert", - "446: txn ApplicationID", - "447: assert", - "450: txna ApplicationArgs 1", - "451: btoi", - "454: callsub getBoxMap" + "427: main_keyPrefixBoxMap_route@9:", + "430: txn OnCompletion", + "431: !", + "432: assert", + "433: txn ApplicationID", + "434: assert", + "435: pushbytes 0x151f7c750006626f784d6170", + "436: log", + "437: intc_0", + "438: return" + ] + ] + }, + { + "short": "0 -> 1 -> 2 -> 40 -> 66 -> 41", + "blocks": [ + [ + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" + ], + [ + "5: main:", + "6: intcblock 1 0 32 42", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", + "10: txn NumAppArgs", + "11: bz main_bare_routing@31" ], [ - "778: getBoxMap:", - "782: proto 1 1", - "785: frame_dig -1", - "786: itob", - "789: bytec_2", - "790: swap", - "791: concat", - "794: box_get", - "795: assert", - "796: retsub" + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", + "13: txna ApplicationArgs 0", + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "455: dup", - "456: len", - "457: itob", - "458: extract 6 2", - "459: swap", - "460: concat", - "461: bytec_0", - "462: swap", - "463: concat", - "464: log", - "465: intc_0", - "466: return" + "411: main_getBoxRef_route@10:", + "414: txn OnCompletion", + "415: !", + "416: assert", + "417: txn ApplicationID", + "418: assert", + "419: callsub getBoxRef" + ], + [ + "736: getBoxRef:", + "739: bytec 7", + "742: intc_2", + "743: box_create", + "744: pop", + "747: txn Sender", + "750: bytec 7", + "753: dig 1", + "754: box_put", + "757: bytec 7", + "760: box_get", + "761: dig 2", + "762: cover 2", + "763: select", + "766: dup", + "767: uncover 2", + "768: ==", + "769: assert", + "772: retsub" + ], + [ + "420: bytec_0", + "421: swap", + "422: concat", + "423: log", + "424: intc_0", + "425: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 37 -> 65 -> 38", + "short": "0 -> 1 -> 2 -> 38 -> 67 -> 39", "blocks": [ [ "1: #pragma version 10", @@ -9289,58 +9387,54 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "412: main_getBoxMapWithDefault_route@11:", - "415: txn OnCompletion", - "416: !", - "417: assert", - "418: txn ApplicationID", - "419: assert", - "422: txna ApplicationArgs 1", - "423: btoi", - "426: callsub getBoxMapWithDefault" + "385: main_boxMapExists_route@11:", + "388: txn OnCompletion", + "389: !", + "390: assert", + "391: txn ApplicationID", + "392: assert", + "395: txna ApplicationArgs 1", + "396: btoi", + "399: callsub boxMapExists" ], [ - "800: getBoxMapWithDefault:", - "804: proto 1 1", - "807: frame_dig -1", - "808: itob", - "811: bytec_2", - "812: swap", - "813: concat", - "816: box_get", - "817: pushbytes \"default\"", - "818: cover 2", - "819: select", - "820: retsub" + "776: boxMapExists:", + "780: proto 1 1", + "783: frame_dig -1", + "784: itob", + "787: bytec_2", + "788: swap", + "789: concat", + "792: box_len", + "793: bury 1", + "794: retsub" ], [ - "427: dup", - "428: len", - "429: itob", - "430: extract 6 2", - "431: swap", - "432: concat", - "433: bytec_0", - "434: swap", - "435: concat", - "436: log", - "437: intc_0", - "438: return" + "400: bytec_1", + "401: intc_1", + "402: uncover 2", + "403: setbit", + "404: bytec_0", + "405: swap", + "406: concat", + "407: log", + "408: intc_0", + "409: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 35 -> 66 -> 36", + "short": "0 -> 1 -> 2 -> 36 -> 68 -> 37", "blocks": [ [ "1: #pragma version 10", @@ -9349,51 +9443,60 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "392: main_setBoxMap_route@12:", - "395: txn OnCompletion", - "396: !", - "397: assert", - "398: txn ApplicationID", - "399: assert", - "402: txna ApplicationArgs 1", - "403: btoi", - "404: txna ApplicationArgs 2", - "405: extract 2 0", - "408: callsub setBoxMap" + "348: main_maybeBoxRef_route@12:", + "351: txn OnCompletion", + "352: !", + "353: assert", + "354: txn ApplicationID", + "355: assert", + "358: txna ApplicationArgs 1", + "359: extract 2 0", + "362: callsub maybeBoxRef" ], [ - "824: setBoxMap:", - "827: proto 2 0", - "830: frame_dig -2", - "831: itob", - "834: bytec_2", - "835: swap", - "836: concat", - "839: dup", - "840: box_del", - "841: pop", - "842: frame_dig -1", - "843: box_put", - "844: retsub" + "798: maybeBoxRef:", + "802: proto 1 2", + "805: frame_dig -1", + "806: box_get", + "809: retsub" ], [ - "409: intc_0", - "410: return" + "363: dig 1", + "364: len", + "365: itob", + "366: extract 6 2", + "367: uncover 2", + "368: concat", + "369: bytec_1", + "370: intc_1", + "371: uncover 3", + "372: setbit", + "373: bytec 9", + "374: swap", + "375: concat", + "376: swap", + "377: concat", + "378: bytec_0", + "379: swap", + "380: concat", + "381: log", + "382: intc_0", + "383: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 33 -> 67 -> 34", + "short": "0 -> 1 -> 2 -> 34 -> 69 -> 35", "blocks": [ [ "1: #pragma version 10", @@ -9402,46 +9505,44 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "374: main_deleteBoxMap_route@13:", - "377: txn OnCompletion", - "378: !", - "379: assert", - "380: txn ApplicationID", - "381: assert", - "384: txna ApplicationArgs 1", - "385: btoi", - "388: callsub deleteBoxMap" + "330: main_setBox_route@13:", + "333: txn OnCompletion", + "334: !", + "335: assert", + "336: txn ApplicationID", + "337: assert", + "340: txna ApplicationArgs 1", + "341: btoi", + "344: callsub setBox" ], [ - "848: deleteBoxMap:", - "851: proto 1 0", - "854: frame_dig -1", - "855: itob", - "858: bytec_2", - "859: swap", - "860: concat", - "863: box_del", - "864: pop", - "865: retsub" + "813: setBox:", + "816: proto 1 0", + "819: frame_dig -1", + "820: itob", + "823: bytec_3", + "826: swap", + "827: box_put", + "828: retsub" ], [ - "389: intc_0", - "390: return" + "345: intc_0", + "346: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 31 -> 68 -> 69 -> 70 -> 32", + "short": "0 -> 1 -> 2 -> 32 -> 70 -> 33", "blocks": [ [ "1: #pragma version 10", @@ -9450,77 +9551,45 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "337: main_maybeBoxMap_route@14:", - "340: txn OnCompletion", - "341: !", - "342: assert", - "343: txn ApplicationID", - "344: assert", - "347: txna ApplicationArgs 1", - "348: btoi", - "351: callsub maybeBoxMap" - ], - [ - "869: maybeBoxMap:", - "873: proto 1 2", - "876: frame_dig -1", - "877: itob", - "880: bytec_2", - "881: swap", - "882: concat", - "885: box_get", - "886: dup", - "887: uncover 2", - "888: swap", - "891: bz maybeBoxMap_ternary_false@2" - ], - [ - "892: frame_dig 1" + "312: main_setBoxString_route@14:", + "315: txn OnCompletion", + "316: !", + "317: assert", + "318: txn ApplicationID", + "319: assert", + "322: txna ApplicationArgs 1", + "323: extract 2 0", + "326: callsub setBoxString" ], [ - "894: maybeBoxMap_ternary_merge@3:", - "897: frame_dig 0", - "898: uncover 3", - "899: uncover 3", - "900: retsub" + "832: setBoxString:", + "835: proto 1 0", + "838: bytec 4", + "841: box_del", + "842: pop", + "845: bytec 4", + "848: frame_dig -1", + "849: box_put", + "850: retsub" ], [ - "352: dig 1", - "353: len", - "354: itob", - "355: extract 6 2", - "356: uncover 2", - "357: concat", - "358: bytec_1", - "359: intc_1", - "360: uncover 3", - "361: setbit", - "362: bytec 9", - "363: swap", - "364: concat", - "365: swap", - "366: concat", - "367: bytec_0", - "368: swap", - "369: concat", - "370: log", - "371: intc_0", - "372: return" + "327: intc_0", + "328: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 31 -> 68 -> 71 -> 70 -> 32", + "short": "0 -> 1 -> 2 -> 30 -> 71 -> 31", "blocks": [ [ "1: #pragma version 10", @@ -9529,79 +9598,44 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "337: main_maybeBoxMap_route@14:", - "340: txn OnCompletion", - "341: !", - "342: assert", - "343: txn ApplicationID", - "344: assert", - "347: txna ApplicationArgs 1", - "348: btoi", - "351: callsub maybeBoxMap" - ], - [ - "869: maybeBoxMap:", - "873: proto 1 2", - "876: frame_dig -1", - "877: itob", - "880: bytec_2", - "881: swap", - "882: concat", - "885: box_get", - "886: dup", - "887: uncover 2", - "888: swap", - "891: bz maybeBoxMap_ternary_false@2" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "902: maybeBoxMap_ternary_false@2:", - "905: pushbytes \"\"", - "906: b maybeBoxMap_ternary_merge@3" + "295: main_setBoxDynamicBytes_route@15:", + "298: txn OnCompletion", + "299: !", + "300: assert", + "301: txn ApplicationID", + "302: assert", + "305: txna ApplicationArgs 1", + "308: callsub setBoxDynamicBytes" ], [ - "894: maybeBoxMap_ternary_merge@3:", - "897: frame_dig 0", - "898: uncover 3", - "899: uncover 3", - "900: retsub" + "854: setBoxDynamicBytes:", + "857: proto 1 0", + "860: bytec 5", + "863: box_del", + "864: pop", + "867: bytec 5", + "870: frame_dig -1", + "871: box_put", + "872: retsub" ], [ - "352: dig 1", - "353: len", - "354: itob", - "355: extract 6 2", - "356: uncover 2", - "357: concat", - "358: bytec_1", - "359: intc_1", - "360: uncover 3", - "361: setbit", - "362: bytec 9", - "363: swap", - "364: concat", - "365: swap", - "366: concat", - "367: bytec_0", - "368: swap", - "369: concat", - "370: log", - "371: intc_0", - "372: return" + "309: intc_0", + "310: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 29 -> 72 -> 73 -> 30", + "short": "0 -> 1 -> 2 -> 28 -> 72 -> 29", "blocks": [ [ "1: #pragma version 10", @@ -9610,57 +9644,51 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "314: main_boxMapLength_route@15:", - "317: txn OnCompletion", - "318: !", - "319: assert", - "320: txn ApplicationID", - "321: assert", - "324: txna ApplicationArgs 1", - "325: btoi", - "328: callsub boxMapLength" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "910: boxMapLength:", - "914: proto 1 1", - "917: frame_dig -1", - "918: itob", - "921: bytec_2", - "922: swap", - "923: concat", - "924: dup", - "927: box_len", - "928: bury 1", - "929: bnz boxMapLength_after_if_else@2" + "275: main_setBoxMap_route@16:", + "278: txn OnCompletion", + "279: !", + "280: assert", + "281: txn ApplicationID", + "282: assert", + "285: txna ApplicationArgs 1", + "286: btoi", + "287: txna ApplicationArgs 2", + "288: extract 2 0", + "291: callsub setBoxMap" ], [ - "932: intc_1", - "933: swap", - "934: retsub" + "876: setBoxMap:", + "879: proto 2 0", + "882: frame_dig -2", + "883: itob", + "886: bytec_2", + "887: swap", + "888: concat", + "891: dup", + "892: box_del", + "893: pop", + "894: frame_dig -1", + "895: box_put", + "896: retsub" ], [ - "329: itob", - "330: bytec_0", - "331: swap", - "332: concat", - "333: log", - "334: intc_0", - "335: return" + "292: intc_0", + "293: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 29 -> 72 -> 74 -> 30", + "short": "0 -> 1 -> 2 -> 26 -> 73 -> 27", "blocks": [ [ "1: #pragma version 10", @@ -9669,60 +9697,46 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "314: main_boxMapLength_route@15:", - "317: txn OnCompletion", - "318: !", - "319: assert", - "320: txn ApplicationID", - "321: assert", - "324: txna ApplicationArgs 1", - "325: btoi", - "328: callsub boxMapLength" - ], - [ - "910: boxMapLength:", - "914: proto 1 1", - "917: frame_dig -1", - "918: itob", - "921: bytec_2", - "922: swap", - "923: concat", - "924: dup", - "927: box_len", - "928: bury 1", - "929: bnz boxMapLength_after_if_else@2" - ], - [ - "936: boxMapLength_after_if_else@2:", - "939: frame_dig 0", - "940: box_len", - "941: assert", - "942: swap", - "943: retsub" + "257: main_setBoxRef_route@17:", + "260: txn OnCompletion", + "261: !", + "262: assert", + "263: txn ApplicationID", + "264: assert", + "267: txna ApplicationArgs 1", + "268: extract 2 0", + "271: callsub setBoxRef" + ], + [ + "900: setBoxRef:", + "903: proto 1 0", + "906: frame_dig -1", + "907: intc_2", + "908: box_create", + "909: pop", + "912: frame_dig -1", + "915: txn Sender", + "918: box_put", + "919: retsub" ], [ - "329: itob", - "330: bytec_0", - "331: swap", - "332: concat", - "333: log", - "334: intc_0", - "335: return" + "272: intc_0", + "273: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 27 -> 75 -> 28", + "short": "0 -> 1 -> 2 -> 24 -> 74 -> 75 -> 25", "blocks": [ [ "1: #pragma version 10", @@ -9731,54 +9745,57 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "234: main_boxMapLength_route@18:", + "237: txn OnCompletion", + "238: !", + "239: assert", + "240: txn ApplicationID", + "241: assert", + "244: txna ApplicationArgs 1", + "245: btoi", + "248: callsub boxMapLength" ], [ - "288: main_boxMapExists_route@16:", - "291: txn OnCompletion", - "292: !", - "293: assert", - "294: txn ApplicationID", - "295: assert", - "298: txna ApplicationArgs 1", - "299: btoi", - "302: callsub boxMapExists" + "923: boxMapLength:", + "927: proto 1 1", + "930: frame_dig -1", + "931: itob", + "934: bytec_2", + "935: swap", + "936: concat", + "937: dup", + "940: box_len", + "941: bury 1", + "942: bnz boxMapLength_after_if_else@2" ], [ - "947: boxMapExists:", - "951: proto 1 1", - "954: frame_dig -1", - "955: itob", - "958: bytec_2", - "959: swap", - "960: concat", - "963: box_len", - "964: bury 1", - "965: retsub" + "945: intc_1", + "946: swap", + "947: retsub" ], [ - "303: bytec_1", - "304: intc_1", - "305: uncover 2", - "306: setbit", - "307: bytec_0", - "308: swap", - "309: concat", - "310: log", - "311: intc_0", - "312: return" + "249: itob", + "250: bytec_0", + "251: swap", + "252: concat", + "253: log", + "254: intc_0", + "255: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 26", + "short": "0 -> 1 -> 2 -> 24 -> 74 -> 76 -> 25", "blocks": [ [ "1: #pragma version 10", @@ -9787,31 +9804,60 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "275: main_keyPrefixBoxMap_route@17:", - "278: txn OnCompletion", - "279: !", - "280: assert", - "281: txn ApplicationID", - "282: assert", - "283: pushbytes 0x151f7c750006626f784d6170", - "284: log", - "285: intc_0", - "286: return" + "234: main_boxMapLength_route@18:", + "237: txn OnCompletion", + "238: !", + "239: assert", + "240: txn ApplicationID", + "241: assert", + "244: txna ApplicationArgs 1", + "245: btoi", + "248: callsub boxMapLength" + ], + [ + "923: boxMapLength:", + "927: proto 1 1", + "930: frame_dig -1", + "931: itob", + "934: bytec_2", + "935: swap", + "936: concat", + "937: dup", + "940: box_len", + "941: bury 1", + "942: bnz boxMapLength_after_if_else@2" + ], + [ + "949: boxMapLength_after_if_else@2:", + "952: frame_dig 0", + "953: box_len", + "954: assert", + "955: swap", + "956: retsub" + ], + [ + "249: itob", + "250: bytec_0", + "251: swap", + "252: concat", + "253: log", + "254: intc_0", + "255: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 24 -> 76 -> 25", + "short": "0 -> 1 -> 2 -> 22 -> 77 -> 23", "blocks": [ [ "1: #pragma version 10", @@ -9820,50 +9866,51 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "253: main_getBoxMapStruct_route@18:", - "256: txn OnCompletion", - "257: !", - "258: assert", - "259: txn ApplicationID", - "260: assert", - "263: txna ApplicationArgs 1", - "264: btoi", - "267: callsub getBoxMapStruct" + "211: main_lengthBoxRef_route@19:", + "214: txn OnCompletion", + "215: !", + "216: assert", + "217: txn ApplicationID", + "218: assert", + "221: txna ApplicationArgs 1", + "222: extract 2 0", + "225: callsub lengthBoxRef" ], [ - "969: getBoxMapStruct:", - "973: proto 1 1", - "976: frame_dig -1", - "977: itob", - "980: bytec 6", - "981: swap", - "982: concat", - "985: box_get", - "986: assert", - "987: retsub" + "960: lengthBoxRef:", + "963: proto 1 1", + "966: frame_dig -1", + "967: intc_2", + "968: box_create", + "969: assert", + "972: frame_dig -1", + "973: box_len", + "974: assert", + "975: retsub" ], [ - "268: bytec_0", - "269: swap", - "270: concat", - "271: log", - "272: intc_0", - "273: return" + "226: itob", + "227: bytec_0", + "228: swap", + "229: concat", + "230: log", + "231: intc_0", + "232: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 78 -> 79 -> 80 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 20 -> 78 -> 21", "blocks": [ [ "1: #pragma version 10", @@ -9872,106 +9919,73 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" + "199: main_deleteBox_route@20:", + "202: txn OnCompletion", + "203: !", + "204: assert", + "205: txn ApplicationID", + "206: assert", + "207: callsub deleteBox" ], [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", + "979: deleteBox:", + "982: bytec_3", + "985: box_del", + "986: pop", + "989: bytec 5", + "992: box_del", + "993: pop", + "996: bytec 4", + "999: box_del", + "1000: pop", + "1003: bytec_3", + "1006: box_get", + "1007: swap", + "1008: btoi", + "1009: intc_3", + "1010: swap", + "1011: uncover 2", + "1012: select", + "1013: intc_3", + "1014: ==", "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" - ], - [ - "1056: frame_dig 0", - "1057: box_get", - "1058: assert", - "1069: extract 2 8", - "1072: frame_dig -1", - "1073: extract 2 8", - "1084: ==", - "1085: bz setBoxMapStruct_bool_false@4" - ], - [ - "1088: frame_dig 0", - "1089: box_get", - "1090: assert", - "1101: extract 10 8", - "1104: frame_dig -1", - "1105: extract 10 8", - "1116: ==", - "1117: bz setBoxMapStruct_bool_false@4" - ], - [ - "1118: intc_0" - ], - [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "1018: bytec 5", + "1021: box_get", + "1022: pushbytes 0x00023432", + "1023: cover 2", + "1024: select", + "1025: extract 2 0", + "1026: bytec 8", + "1027: ==", + "1028: assert", + "1031: bytec 4", + "1034: box_get", + "1035: bytec 8", + "1036: cover 2", + "1037: select", + "1038: bytec 8", + "1039: ==", + "1040: assert", + "1041: retsub" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "208: intc_0", + "209: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 78 -> 79 -> 82 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 18 -> 79 -> 19", "blocks": [ [ "1: #pragma version 10", @@ -9980,108 +9994,46 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" - ], - [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" - ], - [ - "1056: frame_dig 0", - "1057: box_get", - "1058: assert", - "1069: extract 2 8", - "1072: frame_dig -1", - "1073: extract 2 8", - "1084: ==", - "1085: bz setBoxMapStruct_bool_false@4" - ], - [ - "1088: frame_dig 0", - "1089: box_get", - "1090: assert", - "1101: extract 10 8", - "1104: frame_dig -1", - "1105: extract 10 8", - "1116: ==", - "1117: bz setBoxMapStruct_bool_false@4" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "1138: setBoxMapStruct_bool_false@4:", - "1139: intc_1", - "1140: b setBoxMapStruct_bool_merge@5" + "181: main_deleteBoxMap_route@21:", + "184: txn OnCompletion", + "185: !", + "186: assert", + "187: txn ApplicationID", + "188: assert", + "191: txna ApplicationArgs 1", + "192: btoi", + "195: callsub deleteBoxMap" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "1045: deleteBoxMap:", + "1048: proto 1 0", + "1051: frame_dig -1", + "1052: itob", + "1055: bytec_2", + "1056: swap", + "1057: concat", + "1060: box_del", + "1061: pop", + "1062: retsub" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "196: intc_0", + "197: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 78 -> 82 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 16 -> 80 -> 81 -> 82 -> 83 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -10090,98 +10042,61 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" + "163: main_deleteBoxRef_route@22:", + "166: txn OnCompletion", + "167: !", + "168: assert", + "169: txn ApplicationID", + "170: assert", + "173: txna ApplicationArgs 1", + "174: extract 2 0", + "177: callsub deleteBoxRef" ], [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" - ], - [ - "1056: frame_dig 0", - "1057: box_get", - "1058: assert", - "1069: extract 2 8", + "1066: deleteBoxRef:", + "1069: proto 1 0", "1072: frame_dig -1", - "1073: extract 2 8", - "1084: ==", - "1085: bz setBoxMapStruct_bool_false@4" + "1073: box_del", + "1074: pop", + "1077: frame_dig -1", + "1078: box_get", + "1079: pop", + "1080: pushbytes \"\"", + "1081: ==", + "1082: bz deleteBoxRef_bool_false@4" + ], + [ + "1083: frame_dig -1", + "1084: box_get", + "1085: bury 1", + "1086: bnz deleteBoxRef_bool_false@4" ], [ - "1138: setBoxMapStruct_bool_false@4:", - "1139: intc_1", - "1140: b setBoxMapStruct_bool_merge@5" + "1087: intc_0" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "1089: deleteBoxRef_bool_merge@5:", + "1092: assert", + "1093: retsub" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "178: intc_0", + "179: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 82 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 16 -> 80 -> 81 -> 84 -> 83 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -10190,88 +10105,63 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" + "163: main_deleteBoxRef_route@22:", + "166: txn OnCompletion", + "167: !", + "168: assert", + "169: txn ApplicationID", + "170: assert", + "173: txna ApplicationArgs 1", + "174: extract 2 0", + "177: callsub deleteBoxRef" ], [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" + "1066: deleteBoxRef:", + "1069: proto 1 0", + "1072: frame_dig -1", + "1073: box_del", + "1074: pop", + "1077: frame_dig -1", + "1078: box_get", + "1079: pop", + "1080: pushbytes \"\"", + "1081: ==", + "1082: bz deleteBoxRef_bool_false@4" + ], + [ + "1083: frame_dig -1", + "1084: box_get", + "1085: bury 1", + "1086: bnz deleteBoxRef_bool_false@4" ], [ - "1138: setBoxMapStruct_bool_false@4:", - "1139: intc_1", - "1140: b setBoxMapStruct_bool_merge@5" + "1095: deleteBoxRef_bool_false@4:", + "1096: intc_1", + "1097: b deleteBoxRef_bool_merge@5" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "1089: deleteBoxRef_bool_merge@5:", + "1092: assert", + "1093: retsub" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "178: intc_0", + "179: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 20 -> 83 -> 21", + "short": "0 -> 1 -> 2 -> 16 -> 80 -> 84 -> 83 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -10280,71 +10170,57 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "200: main_boxMapStructLength_route@20:", - "203: txn OnCompletion", - "204: !", - "205: assert", - "206: txn ApplicationID", - "207: assert", - "210: txna ApplicationArgs 1", - "211: btoi", - "214: callsub boxMapStructLength" + "163: main_deleteBoxRef_route@22:", + "166: txn OnCompletion", + "167: !", + "168: assert", + "169: txn ApplicationID", + "170: assert", + "173: txna ApplicationArgs 1", + "174: extract 2 0", + "177: callsub deleteBoxRef" ], [ - "1144: boxMapStructLength:", - "1147: proto 1 1", - "1150: frame_dig -1", - "1151: itob", - "1154: bytec 6", - "1155: swap", - "1156: concat", - "1159: dup", - "1160: box_del", - "1161: pop", - "1162: dup", - "1169: pushbytes 0x0012000000000000004600000000000004d20008746573744e616d65", - "1172: box_put", - "1175: dup", - "1176: box_get", - "1177: assert", - "1178: len", - "1179: pushint 28", - "1180: ==", - "1181: assert", - "1184: box_len", - "1185: assert", - "1186: pushint 28", - "1187: ==", - "1188: assert", - "1191: intc_0", - "1192: retsub" + "1066: deleteBoxRef:", + "1069: proto 1 0", + "1072: frame_dig -1", + "1073: box_del", + "1074: pop", + "1077: frame_dig -1", + "1078: box_get", + "1079: pop", + "1080: pushbytes \"\"", + "1081: ==", + "1082: bz deleteBoxRef_bool_false@4" + ], + [ + "1095: deleteBoxRef_bool_false@4:", + "1096: intc_1", + "1097: b deleteBoxRef_bool_merge@5" + ], + [ + "1089: deleteBoxRef_bool_merge@5:", + "1092: assert", + "1093: retsub" ], [ - "215: bytec_1", - "216: intc_1", - "217: uncover 2", - "218: setbit", - "219: bytec_0", - "220: swap", - "221: concat", - "222: log", - "223: intc_0", - "224: return" + "178: intc_0", + "179: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 18 -> 84 -> 19", + "short": "0 -> 1 -> 2 -> 14 -> 85 -> 15", "blocks": [ [ "1: #pragma version 10", @@ -10353,54 +10229,73 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "174: main_boxMapStructExists_route@21:", - "177: txn OnCompletion", - "178: !", - "179: assert", - "180: txn ApplicationID", - "181: assert", - "184: txna ApplicationArgs 1", - "185: btoi", - "188: callsub boxMapStructExists" + "145: main_extractBoxRef_route@23:", + "148: txn OnCompletion", + "149: !", + "150: assert", + "151: txn ApplicationID", + "152: assert", + "155: txna ApplicationArgs 1", + "156: extract 2 0", + "159: callsub extractBoxRef" ], [ - "1196: boxMapStructExists:", - "1200: proto 1 1", - "1203: frame_dig -1", - "1204: itob", - "1207: bytec 6", - "1208: swap", - "1209: concat", - "1212: box_len", - "1213: bury 1", - "1214: retsub" + "1101: extractBoxRef:", + "1104: proto 1 0", + "1107: txn Sender", + "1110: global CurrentApplicationAddress", + "1113: dup", + "1114: len", + "1115: dig 2", + "1116: len", + "1117: +", + "1120: frame_dig -1", + "1121: swap", + "1122: box_create", + "1123: assert", + "1126: frame_dig -1", + "1127: intc_1", + "1128: dig 3", + "1129: box_replace", + "1132: frame_dig -1", + "1133: intc_1", + "1134: dup", + "1135: dig 3", + "1136: UNSUPPORTED box_splice", + "1139: frame_dig -1", + "1140: intc_1", + "1141: intc_2", + "1142: box_extract", + "1145: frame_dig -1", + "1146: intc_2", + "1147: dup", + "1148: box_extract", + "1151: swap", + "1152: uncover 2", + "1153: ==", + "1154: assert", + "1157: ==", + "1158: assert", + "1159: retsub" ], [ - "189: bytec_1", - "190: intc_1", - "191: uncover 2", - "192: setbit", - "193: bytec_0", - "194: swap", - "195: concat", - "196: log", - "197: intc_0", - "198: return" + "160: intc_0", + "161: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 16 -> 85 -> 17", + "short": "0 -> 1 -> 2 -> 12 -> 86 -> 13", "blocks": [ [ "1: #pragma version 10", @@ -10409,57 +10304,50 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "158: main_getBoxRef_route@22:", - "161: txn OnCompletion", - "162: !", - "163: assert", - "164: txn ApplicationID", - "165: assert", - "166: callsub getBoxRef" + "123: main_getBoxMapStruct_route@24:", + "126: txn OnCompletion", + "127: !", + "128: assert", + "129: txn ApplicationID", + "130: assert", + "133: txna ApplicationArgs 1", + "134: btoi", + "137: callsub getBoxMapStruct" ], [ - "1218: getBoxRef:", - "1221: bytec 8", - "1224: intc_2", - "1225: box_create", - "1226: pop", - "1229: txn Sender", - "1232: bytec 8", - "1235: dig 1", - "1236: box_put", - "1239: bytec 8", - "1242: box_get", - "1243: dig 2", - "1244: cover 2", - "1245: select", - "1248: dup", - "1249: uncover 2", - "1250: ==", - "1251: assert", - "1254: retsub" + "1163: getBoxMapStruct:", + "1167: proto 1 1", + "1170: frame_dig -1", + "1171: itob", + "1174: bytec 6", + "1175: swap", + "1176: concat", + "1179: box_get", + "1180: assert", + "1181: retsub" ], [ - "167: bytec_0", - "168: swap", - "169: concat", - "170: log", - "171: intc_0", - "172: return" + "138: bytec_0", + "139: swap", + "140: concat", + "141: log", + "142: intc_0", + "143: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 14 -> 86 -> 15", + "short": "0 -> 1 -> 2 -> 10 -> 87 -> 11", "blocks": [ [ "1: #pragma version 10", @@ -10468,46 +10356,54 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "140: main_setBoxRef_route@23:", - "143: txn OnCompletion", - "144: !", - "145: assert", - "146: txn ApplicationID", - "147: assert", - "150: txna ApplicationArgs 1", - "151: extract 2 0", - "154: callsub setBoxRef" + "97: main_boxMapStructExists_route@25:", + "100: txn OnCompletion", + "101: !", + "102: assert", + "103: txn ApplicationID", + "104: assert", + "107: txna ApplicationArgs 1", + "108: btoi", + "111: callsub boxMapStructExists" ], [ - "1258: setBoxRef:", - "1261: proto 1 0", - "1264: frame_dig -1", - "1265: intc_2", - "1266: box_create", - "1267: pop", - "1270: frame_dig -1", - "1273: txn Sender", - "1276: box_put", - "1277: retsub" + "1185: boxMapStructExists:", + "1189: proto 1 1", + "1192: frame_dig -1", + "1193: itob", + "1196: bytec 6", + "1197: swap", + "1198: concat", + "1201: box_len", + "1202: bury 1", + "1203: retsub" ], [ - "155: intc_0", - "156: return" + "112: bytec_1", + "113: intc_1", + "114: uncover 2", + "115: setbit", + "116: bytec_0", + "117: swap", + "118: concat", + "119: log", + "120: intc_0", + "121: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 12 -> 87 -> 88 -> 89 -> 90 -> 13", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 89 -> 90 -> 91 -> 92 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -10516,126 +10412,216 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" ], [ - "122: main_deleteBoxRef_route@24:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "132: txna ApplicationArgs 1", - "133: extract 2 0", - "136: callsub deleteBoxRef" + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "1281: deleteBoxRef:", - "1284: proto 1 0", - "1287: frame_dig -1", - "1288: box_del", - "1289: pop", - "1292: frame_dig -1", - "1293: box_get", - "1294: pop", - "1295: pushbytes \"\"", - "1296: ==", - "1297: bz deleteBoxRef_bool_false@4" + "1272: frame_dig 0", + "1273: box_get", + "1274: assert", + "1285: extract 2 8", + "1288: frame_dig -1", + "1289: extract 2 8", + "1300: ==", + "1301: bz setBoxMapStruct_bool_false@4" ], [ - "1298: frame_dig -1", - "1299: box_get", - "1300: bury 1", - "1301: bnz deleteBoxRef_bool_false@4" + "1304: frame_dig 0", + "1305: box_get", + "1306: assert", + "1317: extract 10 8", + "1320: frame_dig -1", + "1321: extract 10 8", + "1332: ==", + "1333: bz setBoxMapStruct_bool_false@4" ], [ - "1302: intc_0" + "1334: intc_0" ], [ - "1304: deleteBoxRef_bool_merge@5:", - "1307: assert", - "1308: retsub" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" ], [ - "137: intc_0", - "138: return" + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 12 -> 87 -> 88 -> 91 -> 90 -> 13", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 89 -> 90 -> 93 -> 92 -> 9", "blocks": [ [ - "1: #pragma version 10", - "2: UNSUPPORTED #pragma typetrack false" - ], + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" + ], + [ + "5: main:", + "6: intcblock 1 0 32 42", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", + "10: txn NumAppArgs", + "11: bz main_bare_routing@31" + ], [ - "5: main:", - "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", - "10: txn NumAppArgs", - "11: bz main_bare_routing@31" + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", + "13: txna ApplicationArgs 0", + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", - "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" ], [ - "122: main_deleteBoxRef_route@24:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "132: txna ApplicationArgs 1", - "133: extract 2 0", - "136: callsub deleteBoxRef" + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "1281: deleteBoxRef:", - "1284: proto 1 0", - "1287: frame_dig -1", - "1288: box_del", - "1289: pop", - "1292: frame_dig -1", - "1293: box_get", - "1294: pop", - "1295: pushbytes \"\"", - "1296: ==", - "1297: bz deleteBoxRef_bool_false@4" + "1272: frame_dig 0", + "1273: box_get", + "1274: assert", + "1285: extract 2 8", + "1288: frame_dig -1", + "1289: extract 2 8", + "1300: ==", + "1301: bz setBoxMapStruct_bool_false@4" ], [ - "1298: frame_dig -1", - "1299: box_get", - "1300: bury 1", - "1301: bnz deleteBoxRef_bool_false@4" + "1304: frame_dig 0", + "1305: box_get", + "1306: assert", + "1317: extract 10 8", + "1320: frame_dig -1", + "1321: extract 10 8", + "1332: ==", + "1333: bz setBoxMapStruct_bool_false@4" ], [ - "1310: deleteBoxRef_bool_false@4:", - "1311: intc_1", - "1312: b deleteBoxRef_bool_merge@5" + "1354: setBoxMapStruct_bool_false@4:", + "1355: intc_1", + "1356: b setBoxMapStruct_bool_merge@5" ], [ - "1304: deleteBoxRef_bool_merge@5:", - "1307: assert", - "1308: retsub" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" ], [ - "137: intc_0", - "138: return" + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 12 -> 87 -> 91 -> 90 -> 13", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 89 -> 93 -> 92 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -10644,57 +10630,98 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "122: main_deleteBoxRef_route@24:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "132: txna ApplicationArgs 1", - "133: extract 2 0", - "136: callsub deleteBoxRef" + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" ], [ - "1281: deleteBoxRef:", - "1284: proto 1 0", - "1287: frame_dig -1", - "1288: box_del", - "1289: pop", - "1292: frame_dig -1", - "1293: box_get", - "1294: pop", - "1295: pushbytes \"\"", - "1296: ==", - "1297: bz deleteBoxRef_bool_false@4" + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "1310: deleteBoxRef_bool_false@4:", - "1311: intc_1", - "1312: b deleteBoxRef_bool_merge@5" + "1272: frame_dig 0", + "1273: box_get", + "1274: assert", + "1285: extract 2 8", + "1288: frame_dig -1", + "1289: extract 2 8", + "1300: ==", + "1301: bz setBoxMapStruct_bool_false@4" ], [ - "1304: deleteBoxRef_bool_merge@5:", - "1307: assert", - "1308: retsub" + "1354: setBoxMapStruct_bool_false@4:", + "1355: intc_1", + "1356: b setBoxMapStruct_bool_merge@5" ], [ - "137: intc_0", - "138: return" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" + ], + [ + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 10 -> 92 -> 11", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 93 -> 92 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -10703,108 +10730,83 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "85: main_maybeBoxRef_route@25:", - "88: txn OnCompletion", - "89: !", - "90: assert", - "91: txn ApplicationID", - "92: assert", - "95: txna ApplicationArgs 1", - "96: extract 2 0", - "99: callsub maybeBoxRef" - ], - [ - "1316: maybeBoxRef:", - "1320: proto 1 2", - "1323: frame_dig -1", - "1324: box_get", - "1327: retsub" - ], - [ - "100: dig 1", - "101: len", - "102: itob", - "103: extract 6 2", - "104: uncover 2", - "105: concat", - "106: bytec_1", - "107: intc_1", - "108: uncover 3", - "109: setbit", - "110: bytec 9", - "111: swap", - "112: concat", - "113: swap", - "114: concat", - "115: bytec_0", - "116: swap", - "117: concat", - "118: log", - "119: intc_0", - "120: return" - ] - ] - }, - { - "short": "0 -> 1 -> 2 -> 8 -> 93 -> 9", - "blocks": [ - [ - "1: #pragma version 10", - "2: UNSUPPORTED #pragma typetrack false" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], - [ - "5: main:", - "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", - "10: txn NumAppArgs", - "11: bz main_bare_routing@31" + [ + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", - "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "62: main_lengthBoxRef_route@26:", - "65: txn OnCompletion", - "66: !", - "67: assert", - "68: txn ApplicationID", - "69: assert", - "72: txna ApplicationArgs 1", - "73: extract 2 0", - "76: callsub lengthBoxRef" + "1354: setBoxMapStruct_bool_false@4:", + "1355: intc_1", + "1356: b setBoxMapStruct_bool_merge@5" ], [ - "1331: lengthBoxRef:", - "1334: proto 1 1", - "1337: frame_dig -1", - "1338: intc_2", - "1339: box_create", - "1340: assert", - "1343: frame_dig -1", - "1344: box_len", - "1345: assert", - "1346: retsub" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" ], [ - "77: itob", - "78: bytec_0", - "79: swap", - "80: concat", - "81: log", - "82: intc_0", - "83: return" + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, @@ -10818,68 +10820,66 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "44: main_extractBoxRef_route@27:", + "44: main_boxMapStructLength_route@27:", "47: txn OnCompletion", "48: !", "49: assert", "50: txn ApplicationID", "51: assert", "54: txna ApplicationArgs 1", - "55: extract 2 0", - "58: callsub extractBoxRef" - ], - [ - "1350: extractBoxRef:", - "1353: proto 1 0", - "1356: txn Sender", - "1359: global CurrentApplicationAddress", - "1362: dup", - "1363: len", - "1364: dig 2", - "1365: len", - "1366: +", - "1369: frame_dig -1", - "1370: swap", - "1371: box_create", - "1372: assert", - "1375: frame_dig -1", - "1376: intc_1", - "1377: dig 3", - "1378: box_replace", - "1381: frame_dig -1", - "1382: intc_1", - "1383: dup", - "1384: dig 3", - "1385: UNSUPPORTED box_splice", - "1388: frame_dig -1", - "1389: intc_1", - "1390: intc_2", - "1391: box_extract", - "1394: frame_dig -1", - "1395: intc_2", - "1396: dup", - "1397: box_extract", - "1400: swap", - "1401: uncover 2", - "1402: ==", - "1403: assert", - "1406: ==", - "1407: assert", + "55: btoi", + "58: callsub boxMapStructLength" + ], + [ + "1360: boxMapStructLength:", + "1363: proto 1 1", + "1366: frame_dig -1", + "1367: itob", + "1370: bytec 6", + "1371: swap", + "1372: concat", + "1375: dup", + "1376: box_del", + "1377: pop", + "1378: dup", + "1385: pushbytes 0x0012000000000000004600000000000004d20008746573744e616d65", + "1388: box_put", + "1391: dup", + "1392: box_get", + "1393: assert", + "1394: len", + "1395: pushint 28", + "1396: ==", + "1397: assert", + "1400: box_len", + "1401: assert", + "1402: pushint 28", + "1403: ==", + "1404: assert", + "1407: intc_0", "1408: retsub" ], [ - "59: intc_0", - "60: return" + "59: bytec_1", + "60: intc_1", + "61: uncover 2", + "62: setbit", + "63: bytec_0", + "64: swap", + "65: concat", + "66: log", + "67: intc_0", + "68: return" ] ] }, @@ -10893,14 +10893,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "22: main_arc4Box_route@28:", @@ -10975,7 +10975,7 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], @@ -11003,7 +11003,7 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], @@ -11050,14 +11050,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "16: main_after_if_else@35:", @@ -11076,14 +11076,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "573: main_getBox_route@3:", @@ -11125,14 +11125,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "556: main_valueBox_route@4:", @@ -11174,37 +11174,45 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "538: main_setBox_route@5:", - "541: txn OnCompletion", - "542: !", - "543: assert", - "544: txn ApplicationID", - "545: assert", - "548: txna ApplicationArgs 1", - "549: btoi", - "552: callsub setBox" + "533: main_maybeBox_route@5:", + "536: txn OnCompletion", + "537: !", + "538: assert", + "539: txn ApplicationID", + "540: assert", + "541: callsub maybeBox" ], [ - "633: setBox:", - "636: proto 1 0", - "639: frame_dig -1", - "640: itob", - "643: bytec_3", - "646: swap", - "647: box_put", - "648: retsub" + "633: maybeBox:", + "636: bytec_3", + "639: box_get", + "640: swap", + "641: btoi", + "644: swap", + "645: retsub" ], [ + "542: swap", + "543: itob", + "544: bytec_1", + "545: intc_1", + "546: uncover 3", + "547: setbit", + "548: concat", + "549: bytec_0", + "550: swap", + "551: concat", + "552: log", "553: intc_0", "554: return" ] @@ -11220,40 +11228,51 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "520: main_setBoxString_route@6:", - "523: txn OnCompletion", - "524: !", - "525: assert", - "526: txn ApplicationID", - "527: assert", - "530: txna ApplicationArgs 1", - "531: extract 2 0", - "534: callsub setBoxString" + "505: main_getBoxMap_route@6:", + "508: txn OnCompletion", + "509: !", + "510: assert", + "511: txn ApplicationID", + "512: assert", + "515: txna ApplicationArgs 1", + "516: btoi", + "519: callsub getBoxMap" ], [ - "652: setBoxString:", - "655: proto 1 0", - "658: bytec 4", - "661: box_del", - "662: pop", - "665: bytec 4", - "668: frame_dig -1", - "669: box_put", - "670: retsub" + "649: getBoxMap:", + "653: proto 1 1", + "656: frame_dig -1", + "657: itob", + "660: bytec_2", + "661: swap", + "662: concat", + "665: box_get", + "666: assert", + "667: retsub" ], [ - "535: intc_0", - "536: return" + "520: dup", + "521: len", + "522: itob", + "523: extract 6 2", + "524: swap", + "525: concat", + "526: bytec_0", + "527: swap", + "528: concat", + "529: log", + "530: intc_0", + "531: return" ] ] }, @@ -11267,44 +11286,58 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "503: main_setBoxDynamicBytes_route@7:", - "506: txn OnCompletion", - "507: !", - "508: assert", - "509: txn ApplicationID", - "510: assert", - "513: txna ApplicationArgs 1", - "516: callsub setBoxDynamicBytes" + "477: main_getBoxMapWithDefault_route@7:", + "480: txn OnCompletion", + "481: !", + "482: assert", + "483: txn ApplicationID", + "484: assert", + "487: txna ApplicationArgs 1", + "488: btoi", + "491: callsub getBoxMapWithDefault" ], [ - "674: setBoxDynamicBytes:", - "677: proto 1 0", - "680: bytec 5", - "683: box_del", - "684: pop", - "687: bytec 5", - "690: frame_dig -1", - "691: box_put", - "692: retsub" + "671: getBoxMapWithDefault:", + "675: proto 1 1", + "678: frame_dig -1", + "679: itob", + "682: bytec_2", + "683: swap", + "684: concat", + "687: box_get", + "688: pushbytes \"default\"", + "689: cover 2", + "690: select", + "691: retsub" ], [ - "517: intc_0", - "518: return" + "492: dup", + "493: len", + "494: itob", + "495: extract 6 2", + "496: swap", + "497: concat", + "498: bytec_0", + "499: swap", + "500: concat", + "501: log", + "502: intc_0", + "503: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 43 -> 62 -> 44", + "short": "0 -> 1 -> 2 -> 43 -> 62 -> 63 -> 64 -> 44", "blocks": [ [ "1: #pragma version 10", @@ -11313,127 +11346,77 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "491: main_deleteBox_route@8:", - "494: txn OnCompletion", - "495: !", - "496: assert", - "497: txn ApplicationID", - "498: assert", - "499: callsub deleteBox" - ], - [ - "696: deleteBox:", - "699: bytec_3", - "702: box_del", - "703: pop", - "706: bytec 5", - "709: box_del", - "710: pop", - "713: bytec 4", - "716: box_del", - "717: pop", - "720: bytec_3", - "723: box_get", - "724: swap", - "725: btoi", - "726: intc_3", - "727: swap", - "728: uncover 2", - "729: select", - "730: intc_3", - "731: ==", - "732: assert", - "735: bytec 5", - "738: box_get", - "739: pushbytes 0x00023432", - "740: cover 2", - "741: select", - "742: extract 2 0", - "743: bytec 7", - "744: ==", - "745: assert", - "748: bytec 4", - "751: box_get", - "752: bytec 7", - "753: cover 2", - "754: select", - "755: bytec 7", - "756: ==", - "757: assert", - "758: retsub" - ], - [ - "500: intc_0", - "501: return" - ] - ] - }, - { - "short": "0 -> 1 -> 2 -> 41 -> 63 -> 42", - "blocks": [ - [ - "1: #pragma version 10", - "2: UNSUPPORTED #pragma typetrack false" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "5: main:", - "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", - "10: txn NumAppArgs", - "11: bz main_bare_routing@31" + "440: main_maybeBoxMap_route@8:", + "443: txn OnCompletion", + "444: !", + "445: assert", + "446: txn ApplicationID", + "447: assert", + "450: txna ApplicationArgs 1", + "451: btoi", + "454: callsub maybeBoxMap" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", - "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "695: maybeBoxMap:", + "699: proto 1 2", + "702: frame_dig -1", + "703: itob", + "706: bytec_2", + "707: swap", + "708: concat", + "711: box_get", + "712: dup", + "713: uncover 2", + "714: swap", + "717: bz maybeBoxMap_ternary_false@2" ], [ - "468: main_maybeBox_route@9:", - "471: txn OnCompletion", - "472: !", - "473: assert", - "474: txn ApplicationID", - "475: assert", - "476: callsub maybeBox" + "718: frame_dig 1" ], [ - "762: maybeBox:", - "765: bytec_3", - "768: box_get", - "769: swap", - "770: btoi", - "773: swap", - "774: retsub" + "720: maybeBoxMap_ternary_merge@3:", + "723: frame_dig 0", + "724: uncover 3", + "725: uncover 3", + "726: retsub" ], [ - "477: swap", - "478: itob", - "479: bytec_1", - "480: intc_1", - "481: uncover 3", - "482: setbit", - "483: concat", - "484: bytec_0", - "485: swap", - "486: concat", - "487: log", - "488: intc_0", - "489: return" + "455: dig 1", + "456: len", + "457: itob", + "458: extract 6 2", + "459: uncover 2", + "460: concat", + "461: bytec_1", + "462: intc_1", + "463: uncover 3", + "464: setbit", + "465: bytec 9", + "466: swap", + "467: concat", + "468: swap", + "469: concat", + "470: bytec_0", + "471: swap", + "472: concat", + "473: log", + "474: intc_0", + "475: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 39 -> 64 -> 40", + "short": "0 -> 1 -> 2 -> 43 -> 62 -> 65 -> 64 -> 44", "blocks": [ [ "1: #pragma version 10", @@ -11442,17 +11425,17 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "440: main_getBoxMap_route@10:", + "440: main_maybeBoxMap_route@8:", "443: txn OnCompletion", "444: !", "445: assert", @@ -11460,38 +11443,61 @@ "447: assert", "450: txna ApplicationArgs 1", "451: btoi", - "454: callsub getBoxMap" + "454: callsub maybeBoxMap" + ], + [ + "695: maybeBoxMap:", + "699: proto 1 2", + "702: frame_dig -1", + "703: itob", + "706: bytec_2", + "707: swap", + "708: concat", + "711: box_get", + "712: dup", + "713: uncover 2", + "714: swap", + "717: bz maybeBoxMap_ternary_false@2" ], [ - "778: getBoxMap:", - "782: proto 1 1", - "785: frame_dig -1", - "786: itob", - "789: bytec_2", - "790: swap", - "791: concat", - "794: box_get", - "795: assert", - "796: retsub" + "728: maybeBoxMap_ternary_false@2:", + "731: pushbytes \"\"", + "732: b maybeBoxMap_ternary_merge@3" ], [ - "455: dup", + "720: maybeBoxMap_ternary_merge@3:", + "723: frame_dig 0", + "724: uncover 3", + "725: uncover 3", + "726: retsub" + ], + [ + "455: dig 1", "456: len", "457: itob", "458: extract 6 2", - "459: swap", + "459: uncover 2", "460: concat", - "461: bytec_0", - "462: swap", - "463: concat", - "464: log", - "465: intc_0", - "466: return" + "461: bytec_1", + "462: intc_1", + "463: uncover 3", + "464: setbit", + "465: bytec 9", + "466: swap", + "467: concat", + "468: swap", + "469: concat", + "470: bytec_0", + "471: swap", + "472: concat", + "473: log", + "474: intc_0", + "475: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 37 -> 65 -> 38", + "short": "0 -> 1 -> 2 -> 42", "blocks": [ [ "1: #pragma version 10", @@ -11500,50 +11506,23 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "412: main_getBoxMapWithDefault_route@11:", - "415: txn OnCompletion", - "416: !", - "417: assert", - "418: txn ApplicationID", - "419: assert", - "422: txna ApplicationArgs 1", - "423: btoi", - "426: callsub getBoxMapWithDefault" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "800: getBoxMapWithDefault:", - "804: proto 1 1", - "807: frame_dig -1", - "808: itob", - "811: bytec_2", - "812: swap", - "813: concat", - "816: box_get", - "817: pushbytes \"default\"", - "818: cover 2", - "819: select", - "820: retsub" - ], - [ - "427: dup", - "428: len", - "429: itob", - "430: extract 6 2", - "431: swap", - "432: concat", - "433: bytec_0", - "434: swap", - "435: concat", + "427: main_keyPrefixBoxMap_route@9:", + "430: txn OnCompletion", + "431: !", + "432: assert", + "433: txn ApplicationID", + "434: assert", + "435: pushbytes 0x151f7c750006626f784d6170", "436: log", "437: intc_0", "438: return" @@ -11551,7 +11530,7 @@ ] }, { - "short": "0 -> 1 -> 2 -> 35 -> 66 -> 36", + "short": "0 -> 1 -> 2 -> 40 -> 66 -> 41", "blocks": [ [ "1: #pragma version 10", @@ -11560,51 +11539,57 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "392: main_setBoxMap_route@12:", - "395: txn OnCompletion", - "396: !", - "397: assert", - "398: txn ApplicationID", - "399: assert", - "402: txna ApplicationArgs 1", - "403: btoi", - "404: txna ApplicationArgs 2", - "405: extract 2 0", - "408: callsub setBoxMap" + "411: main_getBoxRef_route@10:", + "414: txn OnCompletion", + "415: !", + "416: assert", + "417: txn ApplicationID", + "418: assert", + "419: callsub getBoxRef" ], [ - "824: setBoxMap:", - "827: proto 2 0", - "830: frame_dig -2", - "831: itob", - "834: bytec_2", - "835: swap", - "836: concat", - "839: dup", - "840: box_del", - "841: pop", - "842: frame_dig -1", - "843: box_put", - "844: retsub" + "736: getBoxRef:", + "739: bytec 7", + "742: intc_2", + "743: box_create", + "744: pop", + "747: txn Sender", + "750: bytec 7", + "753: dig 1", + "754: box_put", + "757: bytec 7", + "760: box_get", + "761: dig 2", + "762: cover 2", + "763: select", + "766: dup", + "767: uncover 2", + "768: ==", + "769: assert", + "772: retsub" ], [ - "409: intc_0", - "410: return" + "420: bytec_0", + "421: swap", + "422: concat", + "423: log", + "424: intc_0", + "425: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 33 -> 67 -> 34", + "short": "0 -> 1 -> 2 -> 38 -> 67 -> 39", "blocks": [ [ "1: #pragma version 10", @@ -11613,46 +11598,54 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "374: main_deleteBoxMap_route@13:", - "377: txn OnCompletion", - "378: !", - "379: assert", - "380: txn ApplicationID", - "381: assert", - "384: txna ApplicationArgs 1", - "385: btoi", - "388: callsub deleteBoxMap" + "385: main_boxMapExists_route@11:", + "388: txn OnCompletion", + "389: !", + "390: assert", + "391: txn ApplicationID", + "392: assert", + "395: txna ApplicationArgs 1", + "396: btoi", + "399: callsub boxMapExists" ], [ - "848: deleteBoxMap:", - "851: proto 1 0", - "854: frame_dig -1", - "855: itob", - "858: bytec_2", - "859: swap", - "860: concat", - "863: box_del", - "864: pop", - "865: retsub" + "776: boxMapExists:", + "780: proto 1 1", + "783: frame_dig -1", + "784: itob", + "787: bytec_2", + "788: swap", + "789: concat", + "792: box_len", + "793: bury 1", + "794: retsub" ], [ - "389: intc_0", - "390: return" + "400: bytec_1", + "401: intc_1", + "402: uncover 2", + "403: setbit", + "404: bytec_0", + "405: swap", + "406: concat", + "407: log", + "408: intc_0", + "409: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 31 -> 68 -> 69 -> 70 -> 32", + "short": "0 -> 1 -> 2 -> 36 -> 68 -> 37", "blocks": [ [ "1: #pragma version 10", @@ -11661,77 +11654,60 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "337: main_maybeBoxMap_route@14:", - "340: txn OnCompletion", - "341: !", - "342: assert", - "343: txn ApplicationID", - "344: assert", - "347: txna ApplicationArgs 1", - "348: btoi", - "351: callsub maybeBoxMap" + "348: main_maybeBoxRef_route@12:", + "351: txn OnCompletion", + "352: !", + "353: assert", + "354: txn ApplicationID", + "355: assert", + "358: txna ApplicationArgs 1", + "359: extract 2 0", + "362: callsub maybeBoxRef" ], [ - "869: maybeBoxMap:", - "873: proto 1 2", - "876: frame_dig -1", - "877: itob", - "880: bytec_2", - "881: swap", - "882: concat", - "885: box_get", - "886: dup", - "887: uncover 2", - "888: swap", - "891: bz maybeBoxMap_ternary_false@2" + "798: maybeBoxRef:", + "802: proto 1 2", + "805: frame_dig -1", + "806: box_get", + "809: retsub" ], [ - "892: frame_dig 1" - ], - [ - "894: maybeBoxMap_ternary_merge@3:", - "897: frame_dig 0", - "898: uncover 3", - "899: uncover 3", - "900: retsub" - ], - [ - "352: dig 1", - "353: len", - "354: itob", - "355: extract 6 2", - "356: uncover 2", - "357: concat", - "358: bytec_1", - "359: intc_1", - "360: uncover 3", - "361: setbit", - "362: bytec 9", - "363: swap", - "364: concat", - "365: swap", - "366: concat", - "367: bytec_0", - "368: swap", - "369: concat", - "370: log", - "371: intc_0", - "372: return" + "363: dig 1", + "364: len", + "365: itob", + "366: extract 6 2", + "367: uncover 2", + "368: concat", + "369: bytec_1", + "370: intc_1", + "371: uncover 3", + "372: setbit", + "373: bytec 9", + "374: swap", + "375: concat", + "376: swap", + "377: concat", + "378: bytec_0", + "379: swap", + "380: concat", + "381: log", + "382: intc_0", + "383: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 31 -> 68 -> 71 -> 70 -> 32", + "short": "0 -> 1 -> 2 -> 34 -> 69 -> 35", "blocks": [ [ "1: #pragma version 10", @@ -11740,79 +11716,44 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "337: main_maybeBoxMap_route@14:", - "340: txn OnCompletion", - "341: !", - "342: assert", - "343: txn ApplicationID", - "344: assert", - "347: txna ApplicationArgs 1", - "348: btoi", - "351: callsub maybeBoxMap" - ], - [ - "869: maybeBoxMap:", - "873: proto 1 2", - "876: frame_dig -1", - "877: itob", - "880: bytec_2", - "881: swap", - "882: concat", - "885: box_get", - "886: dup", - "887: uncover 2", - "888: swap", - "891: bz maybeBoxMap_ternary_false@2" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "902: maybeBoxMap_ternary_false@2:", - "905: pushbytes \"\"", - "906: b maybeBoxMap_ternary_merge@3" + "330: main_setBox_route@13:", + "333: txn OnCompletion", + "334: !", + "335: assert", + "336: txn ApplicationID", + "337: assert", + "340: txna ApplicationArgs 1", + "341: btoi", + "344: callsub setBox" ], [ - "894: maybeBoxMap_ternary_merge@3:", - "897: frame_dig 0", - "898: uncover 3", - "899: uncover 3", - "900: retsub" + "813: setBox:", + "816: proto 1 0", + "819: frame_dig -1", + "820: itob", + "823: bytec_3", + "826: swap", + "827: box_put", + "828: retsub" ], [ - "352: dig 1", - "353: len", - "354: itob", - "355: extract 6 2", - "356: uncover 2", - "357: concat", - "358: bytec_1", - "359: intc_1", - "360: uncover 3", - "361: setbit", - "362: bytec 9", - "363: swap", - "364: concat", - "365: swap", - "366: concat", - "367: bytec_0", - "368: swap", - "369: concat", - "370: log", - "371: intc_0", - "372: return" + "345: intc_0", + "346: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 29 -> 72 -> 73 -> 30", + "short": "0 -> 1 -> 2 -> 32 -> 70 -> 33", "blocks": [ [ "1: #pragma version 10", @@ -11821,57 +11762,45 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "314: main_boxMapLength_route@15:", - "317: txn OnCompletion", - "318: !", + "312: main_setBoxString_route@14:", + "315: txn OnCompletion", + "316: !", + "317: assert", + "318: txn ApplicationID", "319: assert", - "320: txn ApplicationID", - "321: assert", - "324: txna ApplicationArgs 1", - "325: btoi", - "328: callsub boxMapLength" + "322: txna ApplicationArgs 1", + "323: extract 2 0", + "326: callsub setBoxString" ], [ - "910: boxMapLength:", - "914: proto 1 1", - "917: frame_dig -1", - "918: itob", - "921: bytec_2", - "922: swap", - "923: concat", - "924: dup", - "927: box_len", - "928: bury 1", - "929: bnz boxMapLength_after_if_else@2" + "832: setBoxString:", + "835: proto 1 0", + "838: bytec 4", + "841: box_del", + "842: pop", + "845: bytec 4", + "848: frame_dig -1", + "849: box_put", + "850: retsub" ], [ - "932: intc_1", - "933: swap", - "934: retsub" - ], - [ - "329: itob", - "330: bytec_0", - "331: swap", - "332: concat", - "333: log", - "334: intc_0", - "335: return" + "327: intc_0", + "328: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 29 -> 72 -> 74 -> 30", + "short": "0 -> 1 -> 2 -> 30 -> 71 -> 31", "blocks": [ [ "1: #pragma version 10", @@ -11880,60 +11809,44 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "314: main_boxMapLength_route@15:", - "317: txn OnCompletion", - "318: !", - "319: assert", - "320: txn ApplicationID", - "321: assert", - "324: txna ApplicationArgs 1", - "325: btoi", - "328: callsub boxMapLength" - ], - [ - "910: boxMapLength:", - "914: proto 1 1", - "917: frame_dig -1", - "918: itob", - "921: bytec_2", - "922: swap", - "923: concat", - "924: dup", - "927: box_len", - "928: bury 1", - "929: bnz boxMapLength_after_if_else@2" - ], - [ - "936: boxMapLength_after_if_else@2:", - "939: frame_dig 0", - "940: box_len", - "941: assert", - "942: swap", - "943: retsub" + "295: main_setBoxDynamicBytes_route@15:", + "298: txn OnCompletion", + "299: !", + "300: assert", + "301: txn ApplicationID", + "302: assert", + "305: txna ApplicationArgs 1", + "308: callsub setBoxDynamicBytes" + ], + [ + "854: setBoxDynamicBytes:", + "857: proto 1 0", + "860: bytec 5", + "863: box_del", + "864: pop", + "867: bytec 5", + "870: frame_dig -1", + "871: box_put", + "872: retsub" ], [ - "329: itob", - "330: bytec_0", - "331: swap", - "332: concat", - "333: log", - "334: intc_0", - "335: return" + "309: intc_0", + "310: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 27 -> 75 -> 28", + "short": "0 -> 1 -> 2 -> 28 -> 72 -> 29", "blocks": [ [ "1: #pragma version 10", @@ -11942,54 +11855,51 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "288: main_boxMapExists_route@16:", - "291: txn OnCompletion", - "292: !", - "293: assert", - "294: txn ApplicationID", - "295: assert", - "298: txna ApplicationArgs 1", - "299: btoi", - "302: callsub boxMapExists" + "275: main_setBoxMap_route@16:", + "278: txn OnCompletion", + "279: !", + "280: assert", + "281: txn ApplicationID", + "282: assert", + "285: txna ApplicationArgs 1", + "286: btoi", + "287: txna ApplicationArgs 2", + "288: extract 2 0", + "291: callsub setBoxMap" ], [ - "947: boxMapExists:", - "951: proto 1 1", - "954: frame_dig -1", - "955: itob", - "958: bytec_2", - "959: swap", - "960: concat", - "963: box_len", - "964: bury 1", - "965: retsub" + "876: setBoxMap:", + "879: proto 2 0", + "882: frame_dig -2", + "883: itob", + "886: bytec_2", + "887: swap", + "888: concat", + "891: dup", + "892: box_del", + "893: pop", + "894: frame_dig -1", + "895: box_put", + "896: retsub" ], [ - "303: bytec_1", - "304: intc_1", - "305: uncover 2", - "306: setbit", - "307: bytec_0", - "308: swap", - "309: concat", - "310: log", - "311: intc_0", - "312: return" + "292: intc_0", + "293: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 26", + "short": "0 -> 1 -> 2 -> 26 -> 73 -> 27", "blocks": [ [ "1: #pragma version 10", @@ -11998,31 +11908,46 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "275: main_keyPrefixBoxMap_route@17:", - "278: txn OnCompletion", - "279: !", - "280: assert", - "281: txn ApplicationID", - "282: assert", - "283: pushbytes 0x151f7c750006626f784d6170", - "284: log", - "285: intc_0", - "286: return" + "257: main_setBoxRef_route@17:", + "260: txn OnCompletion", + "261: !", + "262: assert", + "263: txn ApplicationID", + "264: assert", + "267: txna ApplicationArgs 1", + "268: extract 2 0", + "271: callsub setBoxRef" + ], + [ + "900: setBoxRef:", + "903: proto 1 0", + "906: frame_dig -1", + "907: intc_2", + "908: box_create", + "909: pop", + "912: frame_dig -1", + "915: txn Sender", + "918: box_put", + "919: retsub" + ], + [ + "272: intc_0", + "273: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 24 -> 76 -> 25", + "short": "0 -> 1 -> 2 -> 24 -> 74 -> 75 -> 25", "blocks": [ [ "1: #pragma version 10", @@ -12031,50 +11956,57 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "253: main_getBoxMapStruct_route@18:", - "256: txn OnCompletion", - "257: !", - "258: assert", - "259: txn ApplicationID", - "260: assert", - "263: txna ApplicationArgs 1", - "264: btoi", - "267: callsub getBoxMapStruct" + "234: main_boxMapLength_route@18:", + "237: txn OnCompletion", + "238: !", + "239: assert", + "240: txn ApplicationID", + "241: assert", + "244: txna ApplicationArgs 1", + "245: btoi", + "248: callsub boxMapLength" ], [ - "969: getBoxMapStruct:", - "973: proto 1 1", - "976: frame_dig -1", - "977: itob", - "980: bytec 6", - "981: swap", - "982: concat", - "985: box_get", - "986: assert", - "987: retsub" + "923: boxMapLength:", + "927: proto 1 1", + "930: frame_dig -1", + "931: itob", + "934: bytec_2", + "935: swap", + "936: concat", + "937: dup", + "940: box_len", + "941: bury 1", + "942: bnz boxMapLength_after_if_else@2" ], [ - "268: bytec_0", - "269: swap", - "270: concat", - "271: log", - "272: intc_0", - "273: return" + "945: intc_1", + "946: swap", + "947: retsub" + ], + [ + "249: itob", + "250: bytec_0", + "251: swap", + "252: concat", + "253: log", + "254: intc_0", + "255: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 78 -> 79 -> 80 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 24 -> 74 -> 76 -> 25", "blocks": [ [ "1: #pragma version 10", @@ -12083,106 +12015,60 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" - ], - [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" - ], - [ - "1056: frame_dig 0", - "1057: box_get", - "1058: assert", - "1069: extract 2 8", - "1072: frame_dig -1", - "1073: extract 2 8", - "1084: ==", - "1085: bz setBoxMapStruct_bool_false@4" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "1088: frame_dig 0", - "1089: box_get", - "1090: assert", - "1101: extract 10 8", - "1104: frame_dig -1", - "1105: extract 10 8", - "1116: ==", - "1117: bz setBoxMapStruct_bool_false@4" + "234: main_boxMapLength_route@18:", + "237: txn OnCompletion", + "238: !", + "239: assert", + "240: txn ApplicationID", + "241: assert", + "244: txna ApplicationArgs 1", + "245: btoi", + "248: callsub boxMapLength" ], [ - "1118: intc_0" + "923: boxMapLength:", + "927: proto 1 1", + "930: frame_dig -1", + "931: itob", + "934: bytec_2", + "935: swap", + "936: concat", + "937: dup", + "940: box_len", + "941: bury 1", + "942: bnz boxMapLength_after_if_else@2" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "949: boxMapLength_after_if_else@2:", + "952: frame_dig 0", + "953: box_len", + "954: assert", + "955: swap", + "956: retsub" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "249: itob", + "250: bytec_0", + "251: swap", + "252: concat", + "253: log", + "254: intc_0", + "255: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 78 -> 79 -> 82 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 22 -> 77 -> 23", "blocks": [ [ "1: #pragma version 10", @@ -12191,108 +12077,126 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" + "211: main_lengthBoxRef_route@19:", + "214: txn OnCompletion", + "215: !", + "216: assert", + "217: txn ApplicationID", + "218: assert", + "221: txna ApplicationArgs 1", + "222: extract 2 0", + "225: callsub lengthBoxRef" ], [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" - ], - [ - "1056: frame_dig 0", - "1057: box_get", - "1058: assert", - "1069: extract 2 8", - "1072: frame_dig -1", - "1073: extract 2 8", - "1084: ==", - "1085: bz setBoxMapStruct_bool_false@4" + "960: lengthBoxRef:", + "963: proto 1 1", + "966: frame_dig -1", + "967: intc_2", + "968: box_create", + "969: assert", + "972: frame_dig -1", + "973: box_len", + "974: assert", + "975: retsub" + ], + [ + "226: itob", + "227: bytec_0", + "228: swap", + "229: concat", + "230: log", + "231: intc_0", + "232: return" + ] + ] + }, + { + "short": "0 -> 1 -> 2 -> 20 -> 78 -> 21", + "blocks": [ + [ + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" ], [ - "1088: frame_dig 0", - "1089: box_get", - "1090: assert", - "1101: extract 10 8", - "1104: frame_dig -1", - "1105: extract 10 8", - "1116: ==", - "1117: bz setBoxMapStruct_bool_false@4" + "5: main:", + "6: intcblock 1 0 32 42", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", + "10: txn NumAppArgs", + "11: bz main_bare_routing@31" ], [ - "1138: setBoxMapStruct_bool_false@4:", - "1139: intc_1", - "1140: b setBoxMapStruct_bool_merge@5" + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", + "13: txna ApplicationArgs 0", + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "199: main_deleteBox_route@20:", + "202: txn OnCompletion", + "203: !", + "204: assert", + "205: txn ApplicationID", + "206: assert", + "207: callsub deleteBox" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "979: deleteBox:", + "982: bytec_3", + "985: box_del", + "986: pop", + "989: bytec 5", + "992: box_del", + "993: pop", + "996: bytec 4", + "999: box_del", + "1000: pop", + "1003: bytec_3", + "1006: box_get", + "1007: swap", + "1008: btoi", + "1009: intc_3", + "1010: swap", + "1011: uncover 2", + "1012: select", + "1013: intc_3", + "1014: ==", + "1015: assert", + "1018: bytec 5", + "1021: box_get", + "1022: pushbytes 0x00023432", + "1023: cover 2", + "1024: select", + "1025: extract 2 0", + "1026: bytec 8", + "1027: ==", + "1028: assert", + "1031: bytec 4", + "1034: box_get", + "1035: bytec 8", + "1036: cover 2", + "1037: select", + "1038: bytec 8", + "1039: ==", + "1040: assert", + "1041: retsub" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "208: intc_0", + "209: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 78 -> 82 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 18 -> 79 -> 19", "blocks": [ [ "1: #pragma version 10", @@ -12301,98 +12205,46 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" + "181: main_deleteBoxMap_route@21:", + "184: txn OnCompletion", + "185: !", + "186: assert", + "187: txn ApplicationID", + "188: assert", + "191: txna ApplicationArgs 1", + "192: btoi", + "195: callsub deleteBoxMap" ], [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" - ], - [ - "1056: frame_dig 0", - "1057: box_get", - "1058: assert", - "1069: extract 2 8", - "1072: frame_dig -1", - "1073: extract 2 8", - "1084: ==", - "1085: bz setBoxMapStruct_bool_false@4" - ], - [ - "1138: setBoxMapStruct_bool_false@4:", - "1139: intc_1", - "1140: b setBoxMapStruct_bool_merge@5" + "1045: deleteBoxMap:", + "1048: proto 1 0", + "1051: frame_dig -1", + "1052: itob", + "1055: bytec_2", + "1056: swap", + "1057: concat", + "1060: box_del", + "1061: pop", + "1062: retsub" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" - ], - [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "196: intc_0", + "197: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 22 -> 77 -> 82 -> 81 -> 23", + "short": "0 -> 1 -> 2 -> 16 -> 80 -> 81 -> 82 -> 83 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -12401,88 +12253,61 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "226: main_setBoxMapStruct_route@19:", - "229: txn OnCompletion", - "230: !", - "231: assert", - "232: txn ApplicationID", - "233: assert", - "236: txna ApplicationArgs 1", - "237: btoi", - "238: txna ApplicationArgs 2", - "241: callsub setBoxMapStruct" + "163: main_deleteBoxRef_route@22:", + "166: txn OnCompletion", + "167: !", + "168: assert", + "169: txn ApplicationID", + "170: assert", + "173: txna ApplicationArgs 1", + "174: extract 2 0", + "177: callsub deleteBoxRef" ], [ - "991: setBoxMapStruct:", - "994: proto 2 1", - "997: frame_dig -2", - "998: itob", - "1001: bytec 6", - "1002: swap", - "1003: concat", - "1004: dupn 2", - "1007: box_del", - "1008: pop", - "1009: dup", - "1010: frame_dig -1", - "1011: box_put", - "1014: box_get", - "1015: assert", - "1026: dup", - "1027: intc_1", - "1028: extract_uint16", - "1029: dig 1", - "1030: len", - "1031: substring3", - "1034: frame_dig -1", - "1035: intc_1", - "1036: extract_uint16", - "1037: frame_dig -1", - "1038: len", - "1039: frame_dig -1", - "1040: cover 2", - "1041: substring3", - "1052: ==", - "1053: bz setBoxMapStruct_bool_false@4" + "1066: deleteBoxRef:", + "1069: proto 1 0", + "1072: frame_dig -1", + "1073: box_del", + "1074: pop", + "1077: frame_dig -1", + "1078: box_get", + "1079: pop", + "1080: pushbytes \"\"", + "1081: ==", + "1082: bz deleteBoxRef_bool_false@4" ], [ - "1138: setBoxMapStruct_bool_false@4:", - "1139: intc_1", - "1140: b setBoxMapStruct_bool_merge@5" + "1083: frame_dig -1", + "1084: box_get", + "1085: bury 1", + "1086: bnz deleteBoxRef_bool_false@4" ], [ - "1120: setBoxMapStruct_bool_merge@5:", - "1131: assert", - "1134: intc_0", - "1135: swap", - "1136: retsub" + "1087: intc_0" ], [ - "242: bytec_1", - "243: intc_1", - "244: uncover 2", - "245: setbit", - "246: bytec_0", - "247: swap", - "248: concat", - "249: log", - "250: intc_0", - "251: return" + "1089: deleteBoxRef_bool_merge@5:", + "1092: assert", + "1093: retsub" + ], + [ + "178: intc_0", + "179: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 20 -> 83 -> 21", + "short": "0 -> 1 -> 2 -> 16 -> 80 -> 81 -> 84 -> 83 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -12491,71 +12316,63 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "163: main_deleteBoxRef_route@22:", + "166: txn OnCompletion", + "167: !", + "168: assert", + "169: txn ApplicationID", + "170: assert", + "173: txna ApplicationArgs 1", + "174: extract 2 0", + "177: callsub deleteBoxRef" + ], + [ + "1066: deleteBoxRef:", + "1069: proto 1 0", + "1072: frame_dig -1", + "1073: box_del", + "1074: pop", + "1077: frame_dig -1", + "1078: box_get", + "1079: pop", + "1080: pushbytes \"\"", + "1081: ==", + "1082: bz deleteBoxRef_bool_false@4" + ], + [ + "1083: frame_dig -1", + "1084: box_get", + "1085: bury 1", + "1086: bnz deleteBoxRef_bool_false@4" ], [ - "200: main_boxMapStructLength_route@20:", - "203: txn OnCompletion", - "204: !", - "205: assert", - "206: txn ApplicationID", - "207: assert", - "210: txna ApplicationArgs 1", - "211: btoi", - "214: callsub boxMapStructLength" + "1095: deleteBoxRef_bool_false@4:", + "1096: intc_1", + "1097: b deleteBoxRef_bool_merge@5" ], [ - "1144: boxMapStructLength:", - "1147: proto 1 1", - "1150: frame_dig -1", - "1151: itob", - "1154: bytec 6", - "1155: swap", - "1156: concat", - "1159: dup", - "1160: box_del", - "1161: pop", - "1162: dup", - "1169: pushbytes 0x0012000000000000004600000000000004d20008746573744e616d65", - "1172: box_put", - "1175: dup", - "1176: box_get", - "1177: assert", - "1178: len", - "1179: pushint 28", - "1180: ==", - "1181: assert", - "1184: box_len", - "1185: assert", - "1186: pushint 28", - "1187: ==", - "1188: assert", - "1191: intc_0", - "1192: retsub" + "1089: deleteBoxRef_bool_merge@5:", + "1092: assert", + "1093: retsub" ], [ - "215: bytec_1", - "216: intc_1", - "217: uncover 2", - "218: setbit", - "219: bytec_0", - "220: swap", - "221: concat", - "222: log", - "223: intc_0", - "224: return" + "178: intc_0", + "179: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 18 -> 84 -> 19", + "short": "0 -> 1 -> 2 -> 16 -> 80 -> 84 -> 83 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -12564,54 +12381,57 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "163: main_deleteBoxRef_route@22:", + "166: txn OnCompletion", + "167: !", + "168: assert", + "169: txn ApplicationID", + "170: assert", + "173: txna ApplicationArgs 1", + "174: extract 2 0", + "177: callsub deleteBoxRef" + ], + [ + "1066: deleteBoxRef:", + "1069: proto 1 0", + "1072: frame_dig -1", + "1073: box_del", + "1074: pop", + "1077: frame_dig -1", + "1078: box_get", + "1079: pop", + "1080: pushbytes \"\"", + "1081: ==", + "1082: bz deleteBoxRef_bool_false@4" ], [ - "174: main_boxMapStructExists_route@21:", - "177: txn OnCompletion", - "178: !", - "179: assert", - "180: txn ApplicationID", - "181: assert", - "184: txna ApplicationArgs 1", - "185: btoi", - "188: callsub boxMapStructExists" + "1095: deleteBoxRef_bool_false@4:", + "1096: intc_1", + "1097: b deleteBoxRef_bool_merge@5" ], [ - "1196: boxMapStructExists:", - "1200: proto 1 1", - "1203: frame_dig -1", - "1204: itob", - "1207: bytec 6", - "1208: swap", - "1209: concat", - "1212: box_len", - "1213: bury 1", - "1214: retsub" + "1089: deleteBoxRef_bool_merge@5:", + "1092: assert", + "1093: retsub" ], [ - "189: bytec_1", - "190: intc_1", - "191: uncover 2", - "192: setbit", - "193: bytec_0", - "194: swap", - "195: concat", - "196: log", - "197: intc_0", - "198: return" + "178: intc_0", + "179: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 16 -> 85 -> 17", + "short": "0 -> 1 -> 2 -> 14 -> 85 -> 15", "blocks": [ [ "1: #pragma version 10", @@ -12620,57 +12440,73 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "158: main_getBoxRef_route@22:", - "161: txn OnCompletion", - "162: !", - "163: assert", - "164: txn ApplicationID", - "165: assert", - "166: callsub getBoxRef" + "145: main_extractBoxRef_route@23:", + "148: txn OnCompletion", + "149: !", + "150: assert", + "151: txn ApplicationID", + "152: assert", + "155: txna ApplicationArgs 1", + "156: extract 2 0", + "159: callsub extractBoxRef" ], [ - "1218: getBoxRef:", - "1221: bytec 8", - "1224: intc_2", - "1225: box_create", - "1226: pop", - "1229: txn Sender", - "1232: bytec 8", - "1235: dig 1", - "1236: box_put", - "1239: bytec 8", - "1242: box_get", - "1243: dig 2", - "1244: cover 2", - "1245: select", - "1248: dup", - "1249: uncover 2", - "1250: ==", - "1251: assert", - "1254: retsub" + "1101: extractBoxRef:", + "1104: proto 1 0", + "1107: txn Sender", + "1110: global CurrentApplicationAddress", + "1113: dup", + "1114: len", + "1115: dig 2", + "1116: len", + "1117: +", + "1120: frame_dig -1", + "1121: swap", + "1122: box_create", + "1123: assert", + "1126: frame_dig -1", + "1127: intc_1", + "1128: dig 3", + "1129: box_replace", + "1132: frame_dig -1", + "1133: intc_1", + "1134: dup", + "1135: dig 3", + "1136: UNSUPPORTED box_splice", + "1139: frame_dig -1", + "1140: intc_1", + "1141: intc_2", + "1142: box_extract", + "1145: frame_dig -1", + "1146: intc_2", + "1147: dup", + "1148: box_extract", + "1151: swap", + "1152: uncover 2", + "1153: ==", + "1154: assert", + "1157: ==", + "1158: assert", + "1159: retsub" ], [ - "167: bytec_0", - "168: swap", - "169: concat", - "170: log", - "171: intc_0", - "172: return" + "160: intc_0", + "161: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 14 -> 86 -> 15", + "short": "0 -> 1 -> 2 -> 12 -> 86 -> 13", "blocks": [ [ "1: #pragma version 10", @@ -12679,46 +12515,50 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "140: main_setBoxRef_route@23:", - "143: txn OnCompletion", - "144: !", - "145: assert", - "146: txn ApplicationID", - "147: assert", - "150: txna ApplicationArgs 1", - "151: extract 2 0", - "154: callsub setBoxRef" + "123: main_getBoxMapStruct_route@24:", + "126: txn OnCompletion", + "127: !", + "128: assert", + "129: txn ApplicationID", + "130: assert", + "133: txna ApplicationArgs 1", + "134: btoi", + "137: callsub getBoxMapStruct" ], [ - "1258: setBoxRef:", - "1261: proto 1 0", - "1264: frame_dig -1", - "1265: intc_2", - "1266: box_create", - "1267: pop", - "1270: frame_dig -1", - "1273: txn Sender", - "1276: box_put", - "1277: retsub" + "1163: getBoxMapStruct:", + "1167: proto 1 1", + "1170: frame_dig -1", + "1171: itob", + "1174: bytec 6", + "1175: swap", + "1176: concat", + "1179: box_get", + "1180: assert", + "1181: retsub" ], [ - "155: intc_0", - "156: return" + "138: bytec_0", + "139: swap", + "140: concat", + "141: log", + "142: intc_0", + "143: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 12 -> 87 -> 88 -> 89 -> 90 -> 13", + "short": "0 -> 1 -> 2 -> 10 -> 87 -> 11", "blocks": [ [ "1: #pragma version 10", @@ -12727,61 +12567,54 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" - ], - [ - "122: main_deleteBoxRef_route@24:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "132: txna ApplicationArgs 1", - "133: extract 2 0", - "136: callsub deleteBoxRef" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "1281: deleteBoxRef:", - "1284: proto 1 0", - "1287: frame_dig -1", - "1288: box_del", - "1289: pop", - "1292: frame_dig -1", - "1293: box_get", - "1294: pop", - "1295: pushbytes \"\"", - "1296: ==", - "1297: bz deleteBoxRef_bool_false@4" + "97: main_boxMapStructExists_route@25:", + "100: txn OnCompletion", + "101: !", + "102: assert", + "103: txn ApplicationID", + "104: assert", + "107: txna ApplicationArgs 1", + "108: btoi", + "111: callsub boxMapStructExists" ], [ - "1298: frame_dig -1", - "1299: box_get", - "1300: bury 1", - "1301: bnz deleteBoxRef_bool_false@4" + "1185: boxMapStructExists:", + "1189: proto 1 1", + "1192: frame_dig -1", + "1193: itob", + "1196: bytec 6", + "1197: swap", + "1198: concat", + "1201: box_len", + "1202: bury 1", + "1203: retsub" ], [ - "1302: intc_0" - ], - [ - "1304: deleteBoxRef_bool_merge@5:", - "1307: assert", - "1308: retsub" - ], - [ - "137: intc_0", - "138: return" + "112: bytec_1", + "113: intc_1", + "114: uncover 2", + "115: setbit", + "116: bytec_0", + "117: swap", + "118: concat", + "119: log", + "120: intc_0", + "121: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 12 -> 87 -> 88 -> 91 -> 90 -> 13", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 89 -> 90 -> 91 -> 92 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -12790,122 +12623,216 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "122: main_deleteBoxRef_route@24:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "132: txna ApplicationArgs 1", - "133: extract 2 0", - "136: callsub deleteBoxRef" + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" ], [ - "1281: deleteBoxRef:", - "1284: proto 1 0", - "1287: frame_dig -1", - "1288: box_del", - "1289: pop", - "1292: frame_dig -1", - "1293: box_get", - "1294: pop", - "1295: pushbytes \"\"", - "1296: ==", - "1297: bz deleteBoxRef_bool_false@4" + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "1298: frame_dig -1", - "1299: box_get", - "1300: bury 1", - "1301: bnz deleteBoxRef_bool_false@4" + "1272: frame_dig 0", + "1273: box_get", + "1274: assert", + "1285: extract 2 8", + "1288: frame_dig -1", + "1289: extract 2 8", + "1300: ==", + "1301: bz setBoxMapStruct_bool_false@4" ], [ - "1310: deleteBoxRef_bool_false@4:", - "1311: intc_1", - "1312: b deleteBoxRef_bool_merge@5" + "1304: frame_dig 0", + "1305: box_get", + "1306: assert", + "1317: extract 10 8", + "1320: frame_dig -1", + "1321: extract 10 8", + "1332: ==", + "1333: bz setBoxMapStruct_bool_false@4" ], [ - "1304: deleteBoxRef_bool_merge@5:", - "1307: assert", - "1308: retsub" + "1334: intc_0" ], [ - "137: intc_0", - "138: return" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" + ], + [ + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 12 -> 87 -> 91 -> 90 -> 13", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 89 -> 90 -> 93 -> 92 -> 9", "blocks": [ [ - "1: #pragma version 10", - "2: UNSUPPORTED #pragma typetrack false" + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" + ], + [ + "5: main:", + "6: intcblock 1 0 32 42", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", + "10: txn NumAppArgs", + "11: bz main_bare_routing@31" + ], + [ + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", + "13: txna ApplicationArgs 0", + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "5: main:", - "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", - "10: txn NumAppArgs", - "11: bz main_bare_routing@31" + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", - "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "122: main_deleteBoxRef_route@24:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "132: txna ApplicationArgs 1", - "133: extract 2 0", - "136: callsub deleteBoxRef" + "1272: frame_dig 0", + "1273: box_get", + "1274: assert", + "1285: extract 2 8", + "1288: frame_dig -1", + "1289: extract 2 8", + "1300: ==", + "1301: bz setBoxMapStruct_bool_false@4" ], [ - "1281: deleteBoxRef:", - "1284: proto 1 0", - "1287: frame_dig -1", - "1288: box_del", - "1289: pop", - "1292: frame_dig -1", - "1293: box_get", - "1294: pop", - "1295: pushbytes \"\"", - "1296: ==", - "1297: bz deleteBoxRef_bool_false@4" + "1304: frame_dig 0", + "1305: box_get", + "1306: assert", + "1317: extract 10 8", + "1320: frame_dig -1", + "1321: extract 10 8", + "1332: ==", + "1333: bz setBoxMapStruct_bool_false@4" ], [ - "1310: deleteBoxRef_bool_false@4:", - "1311: intc_1", - "1312: b deleteBoxRef_bool_merge@5" + "1354: setBoxMapStruct_bool_false@4:", + "1355: intc_1", + "1356: b setBoxMapStruct_bool_merge@5" ], [ - "1304: deleteBoxRef_bool_merge@5:", - "1307: assert", - "1308: retsub" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" ], [ - "137: intc_0", - "138: return" + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 10 -> 92 -> 11", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 89 -> 93 -> 92 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -12914,60 +12841,98 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" + ], + [ + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" + ], + [ + "1272: frame_dig 0", + "1273: box_get", + "1274: assert", + "1285: extract 2 8", + "1288: frame_dig -1", + "1289: extract 2 8", + "1300: ==", + "1301: bz setBoxMapStruct_bool_false@4" ], [ - "85: main_maybeBoxRef_route@25:", - "88: txn OnCompletion", - "89: !", - "90: assert", - "91: txn ApplicationID", - "92: assert", - "95: txna ApplicationArgs 1", - "96: extract 2 0", - "99: callsub maybeBoxRef" + "1354: setBoxMapStruct_bool_false@4:", + "1355: intc_1", + "1356: b setBoxMapStruct_bool_merge@5" ], [ - "1316: maybeBoxRef:", - "1320: proto 1 2", - "1323: frame_dig -1", - "1324: box_get", - "1327: retsub" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" ], [ - "100: dig 1", - "101: len", - "102: itob", - "103: extract 6 2", - "104: uncover 2", - "105: concat", - "106: bytec_1", - "107: intc_1", - "108: uncover 3", - "109: setbit", - "110: bytec 9", - "111: swap", - "112: concat", - "113: swap", - "114: concat", - "115: bytec_0", - "116: swap", - "117: concat", - "118: log", - "119: intc_0", - "120: return" + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 8 -> 93 -> 9", + "short": "0 -> 1 -> 2 -> 8 -> 88 -> 93 -> 92 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -12976,46 +12941,83 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" + ], + [ + "70: main_setBoxMapStruct_route@26:", + "73: txn OnCompletion", + "74: !", + "75: assert", + "76: txn ApplicationID", + "77: assert", + "80: txna ApplicationArgs 1", + "81: btoi", + "82: txna ApplicationArgs 2", + "85: callsub setBoxMapStruct" + ], + [ + "1207: setBoxMapStruct:", + "1210: proto 2 1", + "1213: frame_dig -2", + "1214: itob", + "1217: bytec 6", + "1218: swap", + "1219: concat", + "1220: dupn 2", + "1223: box_del", + "1224: pop", + "1225: dup", + "1226: frame_dig -1", + "1227: box_put", + "1230: box_get", + "1231: assert", + "1242: dup", + "1243: intc_1", + "1244: extract_uint16", + "1245: dig 1", + "1246: len", + "1247: substring3", + "1250: frame_dig -1", + "1251: intc_1", + "1252: extract_uint16", + "1253: frame_dig -1", + "1254: len", + "1255: frame_dig -1", + "1256: cover 2", + "1257: substring3", + "1268: ==", + "1269: bz setBoxMapStruct_bool_false@4" ], [ - "62: main_lengthBoxRef_route@26:", - "65: txn OnCompletion", - "66: !", - "67: assert", - "68: txn ApplicationID", - "69: assert", - "72: txna ApplicationArgs 1", - "73: extract 2 0", - "76: callsub lengthBoxRef" + "1354: setBoxMapStruct_bool_false@4:", + "1355: intc_1", + "1356: b setBoxMapStruct_bool_merge@5" ], [ - "1331: lengthBoxRef:", - "1334: proto 1 1", - "1337: frame_dig -1", - "1338: intc_2", - "1339: box_create", - "1340: assert", - "1343: frame_dig -1", - "1344: box_len", - "1345: assert", - "1346: retsub" + "1336: setBoxMapStruct_bool_merge@5:", + "1347: assert", + "1350: intc_0", + "1351: swap", + "1352: retsub" ], [ - "77: itob", - "78: bytec_0", - "79: swap", - "80: concat", - "81: log", - "82: intc_0", - "83: return" + "86: bytec_1", + "87: intc_1", + "88: uncover 2", + "89: setbit", + "90: bytec_0", + "91: swap", + "92: concat", + "93: log", + "94: intc_0", + "95: return" ] ] }, @@ -13029,68 +13031,66 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ - "44: main_extractBoxRef_route@27:", + "44: main_boxMapStructLength_route@27:", "47: txn OnCompletion", "48: !", "49: assert", "50: txn ApplicationID", "51: assert", "54: txna ApplicationArgs 1", - "55: extract 2 0", - "58: callsub extractBoxRef" - ], - [ - "1350: extractBoxRef:", - "1353: proto 1 0", - "1356: txn Sender", - "1359: global CurrentApplicationAddress", - "1362: dup", - "1363: len", - "1364: dig 2", - "1365: len", - "1366: +", - "1369: frame_dig -1", - "1370: swap", - "1371: box_create", - "1372: assert", - "1375: frame_dig -1", - "1376: intc_1", - "1377: dig 3", - "1378: box_replace", - "1381: frame_dig -1", - "1382: intc_1", - "1383: dup", - "1384: dig 3", - "1385: UNSUPPORTED box_splice", - "1388: frame_dig -1", - "1389: intc_1", - "1390: intc_2", - "1391: box_extract", - "1394: frame_dig -1", - "1395: intc_2", - "1396: dup", - "1397: box_extract", - "1400: swap", - "1401: uncover 2", - "1402: ==", - "1403: assert", - "1406: ==", - "1407: assert", + "55: btoi", + "58: callsub boxMapStructLength" + ], + [ + "1360: boxMapStructLength:", + "1363: proto 1 1", + "1366: frame_dig -1", + "1367: itob", + "1370: bytec 6", + "1371: swap", + "1372: concat", + "1375: dup", + "1376: box_del", + "1377: pop", + "1378: dup", + "1385: pushbytes 0x0012000000000000004600000000000004d20008746573744e616d65", + "1388: box_put", + "1391: dup", + "1392: box_get", + "1393: assert", + "1394: len", + "1395: pushint 28", + "1396: ==", + "1397: assert", + "1400: box_len", + "1401: assert", + "1402: pushint 28", + "1403: ==", + "1404: assert", + "1407: intc_0", "1408: retsub" ], [ - "59: intc_0", - "60: return" + "59: bytec_1", + "60: intc_1", + "61: uncover 2", + "62: setbit", + "63: bytec_0", + "64: swap", + "65: concat", + "66: log", + "67: intc_0", + "68: return" ] ] }, @@ -13104,14 +13104,14 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], [ - "12: pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74", + "12: pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74", "13: txna ApplicationArgs 0", - "14: match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28" + "14: match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28" ], [ "22: main_arc4Box_route@28:", @@ -13186,7 +13186,7 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], @@ -13214,7 +13214,7 @@ [ "5: main:", "6: intcblock 1 0 32 42", - "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003", + "7: bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003", "10: txn NumAppArgs", "11: bz main_bare_routing@31" ], diff --git a/projects/typescript-examples/.algokit/static-analysis/snapshots/GlobalStorage.approval.json b/projects/typescript-examples/.algokit/static-analysis/snapshots/GlobalStorage.approval.json index 097c914..10bfc71 100644 --- a/projects/typescript-examples/.algokit/static-analysis/snapshots/GlobalStorage.approval.json +++ b/projects/typescript-examples/.algokit/static-analysis/snapshots/GlobalStorage.approval.json @@ -4,7 +4,7 @@ "result": [ { "type": "ExecutionPaths", - "count": 6, + "count": 7, "description": "\nCheck: \"unprotected-deletable\", Impact: High, Confidence: High\nDescription: Unprotected Deletable Applications\n\nWiki: https://github.com/crytic/tealer/wiki/Detector-Documentation#unprotected-deletable-application\n", "check": "unprotected-deletable", "impact": "High", @@ -21,29 +21,29 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" ], [ - "55: main_after_if_else@15:", + "55: main_after_if_else@16:", "59: intc_0", "60: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 12 -> 16 -> 13", + "short": "0 -> 1 -> 3 -> 4 -> 14 -> 18 -> 15", "blocks": [ [ "1: #pragma version 10", @@ -52,110 +52,110 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "141: main_readGlobalState_route@5:", - "144: txn OnCompletion", - "145: !", - "146: assert", - "147: txn ApplicationID", - "148: assert", - "149: callsub readGlobalState" - ], - [ - "211: readGlobalState:", - "214: intc_0", - "215: bytec_3", - "216: app_global_get_ex", - "217: assert", - "220: intc_0", - "221: bytec 5", - "222: app_global_get_ex", - "223: assert", - "226: intc_0", - "227: bytec_2", - "228: app_global_get_ex", - "229: assert", - "232: intc_0", - "233: bytec 6", - "234: app_global_get_ex", - "235: assert", - "238: intc_0", - "239: bytec_0", - "240: app_global_get_ex", - "241: assert", - "244: intc_0", - "245: bytec_1", - "246: app_global_get_ex", - "247: assert", - "257: uncover 5", - "258: retsub" - ], - [ - "150: uncover 5", - "151: itob", - "152: uncover 5", - "153: itob", - "154: dig 5", - "155: len", - "156: itob", - "157: extract 6 2", - "158: uncover 6", - "159: concat", - "160: dig 5", - "161: len", - "162: itob", - "163: extract 6 2", - "164: uncover 6", - "165: concat", - "166: pushbytes 0x00", - "167: intc_0", - "168: uncover 7", - "169: setbit", - "170: uncover 4", - "171: uncover 4", - "172: concat", - "173: pushbytes 0x0035", - "174: concat", - "175: dig 3", - "176: len", - "177: pushint 53", - "178: +", - "179: itob", - "180: extract 6 2", - "181: concat", - "182: swap", - "183: concat", - "184: uncover 3", + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "161: main_readGlobalState_route@5:", + "164: txn OnCompletion", + "165: !", + "166: assert", + "167: txn ApplicationID", + "168: assert", + "169: callsub readGlobalState" + ], + [ + "231: readGlobalState:", + "234: intc_0", + "235: bytec_3", + "236: app_global_get_ex", + "237: assert", + "240: intc_0", + "241: bytec 5", + "242: app_global_get_ex", + "243: assert", + "246: intc_0", + "247: bytec_2", + "248: app_global_get_ex", + "249: assert", + "252: intc_0", + "253: bytec 7", + "254: app_global_get_ex", + "255: assert", + "258: intc_0", + "259: bytec_0", + "260: app_global_get_ex", + "261: assert", + "264: intc_0", + "265: bytec_1", + "266: app_global_get_ex", + "267: assert", + "277: uncover 5", + "278: retsub" + ], + [ + "170: uncover 5", + "171: itob", + "172: uncover 5", + "173: itob", + "174: dig 5", + "175: len", + "176: itob", + "177: extract 6 2", + "178: uncover 6", + "179: concat", + "180: dig 5", + "181: len", + "182: itob", + "183: extract 6 2", + "184: uncover 6", "185: concat", - "186: uncover 2", - "187: concat", - "188: swap", - "189: concat", - "190: bytec 4", - "191: swap", + "186: bytec 6", + "187: intc_0", + "188: uncover 7", + "189: setbit", + "190: uncover 4", + "191: uncover 4", "192: concat", - "193: log", - "194: intc_1", - "195: return" + "193: pushbytes 0x0035", + "194: concat", + "195: dig 3", + "196: len", + "197: pushint 53", + "198: +", + "199: itob", + "200: extract 6 2", + "201: concat", + "202: swap", + "203: concat", + "204: uncover 3", + "205: concat", + "206: uncover 2", + "207: concat", + "208: swap", + "209: concat", + "210: bytec 4", + "211: swap", + "212: concat", + "213: log", + "214: intc_1", + "215: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 10 -> 17 -> 11", + "short": "0 -> 1 -> 3 -> 4 -> 12 -> 19 -> 13", "blocks": [ [ "1: #pragma version 10", @@ -164,63 +164,63 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "118: main_hasGlobalState_route@6:", - "121: txn OnCompletion", - "122: !", - "123: assert", - "124: txn ApplicationID", - "125: assert", - "126: callsub hasGlobalState" - ], - [ - "262: hasGlobalState:", - "265: intc_0", - "266: bytec_2", - "269: app_global_get_ex", - "270: bury 1", - "273: intc_0", - "274: bytec_2", - "275: app_global_get_ex", - "276: assert", - "279: dig 1", - "280: assert", - "283: swap", - "284: retsub" - ], - [ - "127: swap", - "128: itob", - "129: pushbytes 0x00", - "130: intc_0", - "131: uncover 3", - "132: setbit", - "133: concat", - "134: bytec 4", - "135: swap", - "136: concat", - "137: log", - "138: intc_1", - "139: return" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "138: main_hasGlobalState_route@6:", + "141: txn OnCompletion", + "142: !", + "143: assert", + "144: txn ApplicationID", + "145: assert", + "146: callsub hasGlobalState" + ], + [ + "282: hasGlobalState:", + "285: intc_0", + "286: bytec_2", + "289: app_global_get_ex", + "290: bury 1", + "293: intc_0", + "294: bytec_2", + "295: app_global_get_ex", + "296: assert", + "299: dig 1", + "300: assert", + "303: swap", + "304: retsub" + ], + [ + "147: swap", + "148: itob", + "149: bytec 6", + "150: intc_0", + "151: uncover 3", + "152: setbit", + "153: concat", + "154: bytec 4", + "155: swap", + "156: concat", + "157: log", + "158: intc_1", + "159: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 8 -> 18 -> 9", + "short": "0 -> 1 -> 3 -> 4 -> 10 -> 20 -> 11", "blocks": [ [ "1: #pragma version 10", @@ -229,80 +229,80 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "93: main_writeGlobalState_route@7:", - "96: txn OnCompletion", - "97: !", - "98: assert", - "99: txn ApplicationID", - "100: assert", - "104: txna ApplicationArgs 1", - "105: extract 2 0", - "106: txna ApplicationArgs 2", - "107: intc_0", - "108: getbit", - "109: txna ApplicationArgs 3", - "110: btoi", - "111: txnas Accounts", - "114: callsub writeGlobalState" - ], - [ - "288: writeGlobalState:", - "291: proto 3 0", - "294: bytec_0", - "297: frame_dig -3", - "298: app_global_put", - "301: bytec_1", - "304: frame_dig -2", - "305: app_global_put", - "308: bytec_3", - "311: frame_dig -1", - "312: app_global_put", - "315: intc_0", - "316: bytec_0", - "317: app_global_get_ex", - "318: assert", - "321: frame_dig -3", - "322: ==", - "323: assert", - "326: intc_0", - "327: bytec_1", - "328: app_global_get_ex", - "329: assert", - "332: frame_dig -2", - "333: ==", - "334: assert", - "337: intc_0", - "338: bytec_3", - "339: app_global_get_ex", - "340: assert", - "343: frame_dig -1", - "344: ==", - "345: assert", - "346: retsub" - ], - [ - "115: intc_1", - "116: return" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "113: main_writeGlobalState_route@7:", + "116: txn OnCompletion", + "117: !", + "118: assert", + "119: txn ApplicationID", + "120: assert", + "124: txna ApplicationArgs 1", + "125: extract 2 0", + "126: txna ApplicationArgs 2", + "127: intc_0", + "128: getbit", + "129: txna ApplicationArgs 3", + "130: btoi", + "131: txnas Accounts", + "134: callsub writeGlobalState" + ], + [ + "308: writeGlobalState:", + "311: proto 3 0", + "314: bytec_0", + "317: frame_dig -3", + "318: app_global_put", + "321: bytec_1", + "324: frame_dig -2", + "325: app_global_put", + "328: bytec_3", + "331: frame_dig -1", + "332: app_global_put", + "335: intc_0", + "336: bytec_0", + "337: app_global_get_ex", + "338: assert", + "341: frame_dig -3", + "342: ==", + "343: assert", + "346: intc_0", + "347: bytec_1", + "348: app_global_get_ex", + "349: assert", + "352: frame_dig -2", + "353: ==", + "354: assert", + "357: intc_0", + "358: bytec_3", + "359: app_global_get_ex", + "360: assert", + "363: frame_dig -1", + "364: ==", + "365: assert", + "366: retsub" + ], + [ + "135: intc_1", + "136: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 6 -> 19 -> 7", + "short": "0 -> 1 -> 3 -> 4 -> 8 -> 21 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -311,70 +311,124 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "82: main_writeDynamicGlobalState_route@8:", + "85: txn OnCompletion", + "86: !", + "87: assert", + "88: txn ApplicationID", + "89: assert", + "93: txna ApplicationArgs 1", + "94: extract 2 0", + "95: txna ApplicationArgs 2", + "96: extract 2 0", + "99: callsub writeDynamicGlobalState" + ], + [ + "370: writeDynamicGlobalState:", + "373: proto 2 1", + "376: frame_dig -2", + "377: frame_dig -1", + "378: app_global_put", + "381: intc_0", + "382: frame_dig -2", + "383: app_global_get_ex", + "384: assert", + "385: frame_dig -1", + "386: ==", + "387: assert", + "390: intc_0", + "391: frame_dig -2", + "392: app_global_get_ex", + "393: assert", + "394: retsub" + ], + [ + "100: dup", + "101: len", + "102: itob", + "103: extract 6 2", + "104: swap", + "105: concat", + "106: bytec 4", + "107: swap", + "108: concat", + "109: log", + "110: intc_1", + "111: return" + ] + ] + }, + { + "short": "0 -> 1 -> 3 -> 4 -> 6 -> 22 -> 7", + "blocks": [ + [ + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" + ], + [ + "5: main:", + "6: intcblock 0 1", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", + "8: txn ApplicationID", + "9: bnz main_after_if_else@2" ], [ - "62: main_writeDynamicGlobalState_route@8:", + "45: main_after_if_else@2:", + "49: txn NumAppArgs", + "50: bz main_bare_routing@12" + ], + [ + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", + "52: txna ApplicationArgs 0", + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "62: main_deleteGlobalState_route@9:", "65: txn OnCompletion", "66: !", "67: assert", "68: txn ApplicationID", "69: assert", - "73: txna ApplicationArgs 1", - "74: extract 2 0", - "75: txna ApplicationArgs 2", - "76: extract 2 0", - "79: callsub writeDynamicGlobalState" - ], - [ - "350: writeDynamicGlobalState:", - "353: proto 2 1", - "356: frame_dig -2", - "357: frame_dig -1", - "358: app_global_put", - "361: intc_0", - "362: frame_dig -2", - "363: app_global_get_ex", - "364: assert", - "365: frame_dig -1", - "366: ==", - "367: assert", - "370: intc_0", - "371: frame_dig -2", - "372: app_global_get_ex", - "373: assert", - "374: retsub" - ], - [ - "80: dup", - "81: len", - "82: itob", - "83: extract 6 2", - "84: swap", - "85: concat", - "86: bytec 4", - "87: swap", - "88: concat", - "89: log", - "90: intc_1", - "91: return" + "70: callsub deleteGlobalState" + ], + [ + "398: deleteGlobalState:", + "401: bytec 5", + "404: app_global_del", + "407: intc_1", + "408: retsub" + ], + [ + "71: bytec 6", + "72: intc_0", + "73: uncover 2", + "74: setbit", + "75: bytec 4", + "76: swap", + "77: concat", + "78: log", + "79: intc_1", + "80: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 14 -> 5", + "short": "0 -> 1 -> 3 -> 16 -> 5", "blocks": [ [ "1: #pragma version 10", @@ -383,22 +437,22 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "197: main_bare_routing@11:", - "201: txn OnCompletion", - "202: bnz main_after_if_else@15" + "217: main_bare_routing@12:", + "221: txn OnCompletion", + "222: bnz main_after_if_else@16" ], [ - "55: main_after_if_else@15:", + "55: main_after_if_else@16:", "59: intc_0", "60: return" ] @@ -408,7 +462,7 @@ }, { "type": "ExecutionPaths", - "count": 6, + "count": 7, "description": "\nCheck: \"unprotected-updatable\", Impact: High, Confidence: High\nDescription: Unprotected Upgradable Applications\n\nWiki: https://github.com/crytic/tealer/wiki/Detector-Documentation#unprotected-updatable-application\n", "check": "unprotected-updatable", "impact": "High", @@ -425,29 +479,29 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" ], [ - "55: main_after_if_else@15:", + "55: main_after_if_else@16:", "59: intc_0", "60: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 12 -> 16 -> 13", + "short": "0 -> 1 -> 3 -> 4 -> 14 -> 18 -> 15", "blocks": [ [ "1: #pragma version 10", @@ -456,110 +510,175 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "141: main_readGlobalState_route@5:", - "144: txn OnCompletion", - "145: !", - "146: assert", - "147: txn ApplicationID", - "148: assert", - "149: callsub readGlobalState" - ], - [ - "211: readGlobalState:", - "214: intc_0", - "215: bytec_3", - "216: app_global_get_ex", - "217: assert", - "220: intc_0", - "221: bytec 5", - "222: app_global_get_ex", - "223: assert", - "226: intc_0", - "227: bytec_2", - "228: app_global_get_ex", - "229: assert", - "232: intc_0", - "233: bytec 6", - "234: app_global_get_ex", - "235: assert", - "238: intc_0", - "239: bytec_0", - "240: app_global_get_ex", - "241: assert", - "244: intc_0", - "245: bytec_1", - "246: app_global_get_ex", - "247: assert", - "257: uncover 5", - "258: retsub" - ], - [ - "150: uncover 5", - "151: itob", - "152: uncover 5", - "153: itob", - "154: dig 5", - "155: len", - "156: itob", - "157: extract 6 2", - "158: uncover 6", - "159: concat", - "160: dig 5", - "161: len", - "162: itob", - "163: extract 6 2", - "164: uncover 6", - "165: concat", - "166: pushbytes 0x00", - "167: intc_0", - "168: uncover 7", - "169: setbit", - "170: uncover 4", - "171: uncover 4", - "172: concat", - "173: pushbytes 0x0035", - "174: concat", - "175: dig 3", - "176: len", - "177: pushint 53", - "178: +", - "179: itob", - "180: extract 6 2", - "181: concat", - "182: swap", - "183: concat", - "184: uncover 3", + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "161: main_readGlobalState_route@5:", + "164: txn OnCompletion", + "165: !", + "166: assert", + "167: txn ApplicationID", + "168: assert", + "169: callsub readGlobalState" + ], + [ + "231: readGlobalState:", + "234: intc_0", + "235: bytec_3", + "236: app_global_get_ex", + "237: assert", + "240: intc_0", + "241: bytec 5", + "242: app_global_get_ex", + "243: assert", + "246: intc_0", + "247: bytec_2", + "248: app_global_get_ex", + "249: assert", + "252: intc_0", + "253: bytec 7", + "254: app_global_get_ex", + "255: assert", + "258: intc_0", + "259: bytec_0", + "260: app_global_get_ex", + "261: assert", + "264: intc_0", + "265: bytec_1", + "266: app_global_get_ex", + "267: assert", + "277: uncover 5", + "278: retsub" + ], + [ + "170: uncover 5", + "171: itob", + "172: uncover 5", + "173: itob", + "174: dig 5", + "175: len", + "176: itob", + "177: extract 6 2", + "178: uncover 6", + "179: concat", + "180: dig 5", + "181: len", + "182: itob", + "183: extract 6 2", + "184: uncover 6", "185: concat", - "186: uncover 2", - "187: concat", - "188: swap", - "189: concat", - "190: bytec 4", - "191: swap", + "186: bytec 6", + "187: intc_0", + "188: uncover 7", + "189: setbit", + "190: uncover 4", + "191: uncover 4", "192: concat", - "193: log", - "194: intc_1", - "195: return" + "193: pushbytes 0x0035", + "194: concat", + "195: dig 3", + "196: len", + "197: pushint 53", + "198: +", + "199: itob", + "200: extract 6 2", + "201: concat", + "202: swap", + "203: concat", + "204: uncover 3", + "205: concat", + "206: uncover 2", + "207: concat", + "208: swap", + "209: concat", + "210: bytec 4", + "211: swap", + "212: concat", + "213: log", + "214: intc_1", + "215: return" + ] + ] + }, + { + "short": "0 -> 1 -> 3 -> 4 -> 12 -> 19 -> 13", + "blocks": [ + [ + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" + ], + [ + "5: main:", + "6: intcblock 0 1", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", + "8: txn ApplicationID", + "9: bnz main_after_if_else@2" + ], + [ + "45: main_after_if_else@2:", + "49: txn NumAppArgs", + "50: bz main_bare_routing@12" + ], + [ + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", + "52: txna ApplicationArgs 0", + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "138: main_hasGlobalState_route@6:", + "141: txn OnCompletion", + "142: !", + "143: assert", + "144: txn ApplicationID", + "145: assert", + "146: callsub hasGlobalState" + ], + [ + "282: hasGlobalState:", + "285: intc_0", + "286: bytec_2", + "289: app_global_get_ex", + "290: bury 1", + "293: intc_0", + "294: bytec_2", + "295: app_global_get_ex", + "296: assert", + "299: dig 1", + "300: assert", + "303: swap", + "304: retsub" + ], + [ + "147: swap", + "148: itob", + "149: bytec 6", + "150: intc_0", + "151: uncover 3", + "152: setbit", + "153: concat", + "154: bytec 4", + "155: swap", + "156: concat", + "157: log", + "158: intc_1", + "159: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 10 -> 17 -> 11", + "short": "0 -> 1 -> 3 -> 4 -> 10 -> 20 -> 11", "blocks": [ [ "1: #pragma version 10", @@ -568,63 +687,80 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "118: main_hasGlobalState_route@6:", - "121: txn OnCompletion", - "122: !", - "123: assert", - "124: txn ApplicationID", - "125: assert", - "126: callsub hasGlobalState" - ], - [ - "262: hasGlobalState:", - "265: intc_0", - "266: bytec_2", - "269: app_global_get_ex", - "270: bury 1", - "273: intc_0", - "274: bytec_2", - "275: app_global_get_ex", - "276: assert", - "279: dig 1", - "280: assert", - "283: swap", - "284: retsub" - ], - [ - "127: swap", - "128: itob", - "129: pushbytes 0x00", - "130: intc_0", - "131: uncover 3", - "132: setbit", - "133: concat", - "134: bytec 4", - "135: swap", - "136: concat", - "137: log", - "138: intc_1", - "139: return" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "113: main_writeGlobalState_route@7:", + "116: txn OnCompletion", + "117: !", + "118: assert", + "119: txn ApplicationID", + "120: assert", + "124: txna ApplicationArgs 1", + "125: extract 2 0", + "126: txna ApplicationArgs 2", + "127: intc_0", + "128: getbit", + "129: txna ApplicationArgs 3", + "130: btoi", + "131: txnas Accounts", + "134: callsub writeGlobalState" + ], + [ + "308: writeGlobalState:", + "311: proto 3 0", + "314: bytec_0", + "317: frame_dig -3", + "318: app_global_put", + "321: bytec_1", + "324: frame_dig -2", + "325: app_global_put", + "328: bytec_3", + "331: frame_dig -1", + "332: app_global_put", + "335: intc_0", + "336: bytec_0", + "337: app_global_get_ex", + "338: assert", + "341: frame_dig -3", + "342: ==", + "343: assert", + "346: intc_0", + "347: bytec_1", + "348: app_global_get_ex", + "349: assert", + "352: frame_dig -2", + "353: ==", + "354: assert", + "357: intc_0", + "358: bytec_3", + "359: app_global_get_ex", + "360: assert", + "363: frame_dig -1", + "364: ==", + "365: assert", + "366: retsub" + ], + [ + "135: intc_1", + "136: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 8 -> 18 -> 9", + "short": "0 -> 1 -> 3 -> 4 -> 8 -> 21 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -633,80 +769,70 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "93: main_writeGlobalState_route@7:", - "96: txn OnCompletion", - "97: !", - "98: assert", - "99: txn ApplicationID", - "100: assert", - "104: txna ApplicationArgs 1", - "105: extract 2 0", - "106: txna ApplicationArgs 2", - "107: intc_0", - "108: getbit", - "109: txna ApplicationArgs 3", - "110: btoi", - "111: txnas Accounts", - "114: callsub writeGlobalState" - ], - [ - "288: writeGlobalState:", - "291: proto 3 0", - "294: bytec_0", - "297: frame_dig -3", - "298: app_global_put", - "301: bytec_1", - "304: frame_dig -2", - "305: app_global_put", - "308: bytec_3", - "311: frame_dig -1", - "312: app_global_put", - "315: intc_0", - "316: bytec_0", - "317: app_global_get_ex", - "318: assert", - "321: frame_dig -3", - "322: ==", - "323: assert", - "326: intc_0", - "327: bytec_1", - "328: app_global_get_ex", - "329: assert", - "332: frame_dig -2", - "333: ==", - "334: assert", - "337: intc_0", - "338: bytec_3", - "339: app_global_get_ex", - "340: assert", - "343: frame_dig -1", - "344: ==", - "345: assert", - "346: retsub" - ], - [ - "115: intc_1", - "116: return" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "82: main_writeDynamicGlobalState_route@8:", + "85: txn OnCompletion", + "86: !", + "87: assert", + "88: txn ApplicationID", + "89: assert", + "93: txna ApplicationArgs 1", + "94: extract 2 0", + "95: txna ApplicationArgs 2", + "96: extract 2 0", + "99: callsub writeDynamicGlobalState" + ], + [ + "370: writeDynamicGlobalState:", + "373: proto 2 1", + "376: frame_dig -2", + "377: frame_dig -1", + "378: app_global_put", + "381: intc_0", + "382: frame_dig -2", + "383: app_global_get_ex", + "384: assert", + "385: frame_dig -1", + "386: ==", + "387: assert", + "390: intc_0", + "391: frame_dig -2", + "392: app_global_get_ex", + "393: assert", + "394: retsub" + ], + [ + "100: dup", + "101: len", + "102: itob", + "103: extract 6 2", + "104: swap", + "105: concat", + "106: bytec 4", + "107: swap", + "108: concat", + "109: log", + "110: intc_1", + "111: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 6 -> 19 -> 7", + "short": "0 -> 1 -> 3 -> 4 -> 6 -> 22 -> 7", "blocks": [ [ "1: #pragma version 10", @@ -715,70 +841,52 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" ], [ - "62: main_writeDynamicGlobalState_route@8:", + "62: main_deleteGlobalState_route@9:", "65: txn OnCompletion", "66: !", "67: assert", "68: txn ApplicationID", "69: assert", - "73: txna ApplicationArgs 1", - "74: extract 2 0", - "75: txna ApplicationArgs 2", - "76: extract 2 0", - "79: callsub writeDynamicGlobalState" - ], - [ - "350: writeDynamicGlobalState:", - "353: proto 2 1", - "356: frame_dig -2", - "357: frame_dig -1", - "358: app_global_put", - "361: intc_0", - "362: frame_dig -2", - "363: app_global_get_ex", - "364: assert", - "365: frame_dig -1", - "366: ==", - "367: assert", - "370: intc_0", - "371: frame_dig -2", - "372: app_global_get_ex", - "373: assert", - "374: retsub" - ], - [ - "80: dup", - "81: len", - "82: itob", - "83: extract 6 2", - "84: swap", - "85: concat", - "86: bytec 4", - "87: swap", - "88: concat", - "89: log", - "90: intc_1", - "91: return" + "70: callsub deleteGlobalState" + ], + [ + "398: deleteGlobalState:", + "401: bytec 5", + "404: app_global_del", + "407: intc_1", + "408: retsub" + ], + [ + "71: bytec 6", + "72: intc_0", + "73: uncover 2", + "74: setbit", + "75: bytec 4", + "76: swap", + "77: concat", + "78: log", + "79: intc_1", + "80: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 14 -> 5", + "short": "0 -> 1 -> 3 -> 16 -> 5", "blocks": [ [ "1: #pragma version 10", @@ -787,22 +895,22 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "197: main_bare_routing@11:", - "201: txn OnCompletion", - "202: bnz main_after_if_else@15" + "217: main_bare_routing@12:", + "221: txn OnCompletion", + "222: bnz main_after_if_else@16" ], [ - "55: main_after_if_else@15:", + "55: main_after_if_else@16:", "59: intc_0", "60: return" ] @@ -832,7 +940,7 @@ }, { "type": "ExecutionPaths", - "count": 6, + "count": 7, "description": "\nCheck: \"is-deletable\", Impact: High, Confidence: High\nDescription: Deletable Applications\n\nWiki: https://github.com/crytic/tealer/wiki/Detector-Documentation#deletable-application\n", "check": "is-deletable", "impact": "High", @@ -849,29 +957,29 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" ], [ - "55: main_after_if_else@15:", + "55: main_after_if_else@16:", "59: intc_0", "60: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 12 -> 16 -> 13", + "short": "0 -> 1 -> 3 -> 4 -> 14 -> 18 -> 15", "blocks": [ [ "1: #pragma version 10", @@ -880,110 +988,110 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "141: main_readGlobalState_route@5:", - "144: txn OnCompletion", - "145: !", - "146: assert", - "147: txn ApplicationID", - "148: assert", - "149: callsub readGlobalState" - ], - [ - "211: readGlobalState:", - "214: intc_0", - "215: bytec_3", - "216: app_global_get_ex", - "217: assert", - "220: intc_0", - "221: bytec 5", - "222: app_global_get_ex", - "223: assert", - "226: intc_0", - "227: bytec_2", - "228: app_global_get_ex", - "229: assert", - "232: intc_0", - "233: bytec 6", - "234: app_global_get_ex", - "235: assert", - "238: intc_0", - "239: bytec_0", - "240: app_global_get_ex", - "241: assert", - "244: intc_0", - "245: bytec_1", - "246: app_global_get_ex", - "247: assert", - "257: uncover 5", - "258: retsub" - ], - [ - "150: uncover 5", - "151: itob", - "152: uncover 5", - "153: itob", - "154: dig 5", - "155: len", - "156: itob", - "157: extract 6 2", - "158: uncover 6", - "159: concat", - "160: dig 5", - "161: len", - "162: itob", - "163: extract 6 2", - "164: uncover 6", - "165: concat", - "166: pushbytes 0x00", - "167: intc_0", - "168: uncover 7", - "169: setbit", - "170: uncover 4", - "171: uncover 4", - "172: concat", - "173: pushbytes 0x0035", - "174: concat", - "175: dig 3", - "176: len", - "177: pushint 53", - "178: +", - "179: itob", - "180: extract 6 2", - "181: concat", - "182: swap", - "183: concat", - "184: uncover 3", + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "161: main_readGlobalState_route@5:", + "164: txn OnCompletion", + "165: !", + "166: assert", + "167: txn ApplicationID", + "168: assert", + "169: callsub readGlobalState" + ], + [ + "231: readGlobalState:", + "234: intc_0", + "235: bytec_3", + "236: app_global_get_ex", + "237: assert", + "240: intc_0", + "241: bytec 5", + "242: app_global_get_ex", + "243: assert", + "246: intc_0", + "247: bytec_2", + "248: app_global_get_ex", + "249: assert", + "252: intc_0", + "253: bytec 7", + "254: app_global_get_ex", + "255: assert", + "258: intc_0", + "259: bytec_0", + "260: app_global_get_ex", + "261: assert", + "264: intc_0", + "265: bytec_1", + "266: app_global_get_ex", + "267: assert", + "277: uncover 5", + "278: retsub" + ], + [ + "170: uncover 5", + "171: itob", + "172: uncover 5", + "173: itob", + "174: dig 5", + "175: len", + "176: itob", + "177: extract 6 2", + "178: uncover 6", + "179: concat", + "180: dig 5", + "181: len", + "182: itob", + "183: extract 6 2", + "184: uncover 6", "185: concat", - "186: uncover 2", - "187: concat", - "188: swap", - "189: concat", - "190: bytec 4", - "191: swap", + "186: bytec 6", + "187: intc_0", + "188: uncover 7", + "189: setbit", + "190: uncover 4", + "191: uncover 4", "192: concat", - "193: log", - "194: intc_1", - "195: return" + "193: pushbytes 0x0035", + "194: concat", + "195: dig 3", + "196: len", + "197: pushint 53", + "198: +", + "199: itob", + "200: extract 6 2", + "201: concat", + "202: swap", + "203: concat", + "204: uncover 3", + "205: concat", + "206: uncover 2", + "207: concat", + "208: swap", + "209: concat", + "210: bytec 4", + "211: swap", + "212: concat", + "213: log", + "214: intc_1", + "215: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 10 -> 17 -> 11", + "short": "0 -> 1 -> 3 -> 4 -> 12 -> 19 -> 13", "blocks": [ [ "1: #pragma version 10", @@ -992,63 +1100,63 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "118: main_hasGlobalState_route@6:", - "121: txn OnCompletion", - "122: !", - "123: assert", - "124: txn ApplicationID", - "125: assert", - "126: callsub hasGlobalState" - ], - [ - "262: hasGlobalState:", - "265: intc_0", - "266: bytec_2", - "269: app_global_get_ex", - "270: bury 1", - "273: intc_0", - "274: bytec_2", - "275: app_global_get_ex", - "276: assert", - "279: dig 1", - "280: assert", - "283: swap", - "284: retsub" - ], - [ - "127: swap", - "128: itob", - "129: pushbytes 0x00", - "130: intc_0", - "131: uncover 3", - "132: setbit", - "133: concat", - "134: bytec 4", - "135: swap", - "136: concat", - "137: log", - "138: intc_1", - "139: return" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "138: main_hasGlobalState_route@6:", + "141: txn OnCompletion", + "142: !", + "143: assert", + "144: txn ApplicationID", + "145: assert", + "146: callsub hasGlobalState" + ], + [ + "282: hasGlobalState:", + "285: intc_0", + "286: bytec_2", + "289: app_global_get_ex", + "290: bury 1", + "293: intc_0", + "294: bytec_2", + "295: app_global_get_ex", + "296: assert", + "299: dig 1", + "300: assert", + "303: swap", + "304: retsub" + ], + [ + "147: swap", + "148: itob", + "149: bytec 6", + "150: intc_0", + "151: uncover 3", + "152: setbit", + "153: concat", + "154: bytec 4", + "155: swap", + "156: concat", + "157: log", + "158: intc_1", + "159: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 8 -> 18 -> 9", + "short": "0 -> 1 -> 3 -> 4 -> 10 -> 20 -> 11", "blocks": [ [ "1: #pragma version 10", @@ -1057,80 +1165,80 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "93: main_writeGlobalState_route@7:", - "96: txn OnCompletion", - "97: !", - "98: assert", - "99: txn ApplicationID", - "100: assert", - "104: txna ApplicationArgs 1", - "105: extract 2 0", - "106: txna ApplicationArgs 2", - "107: intc_0", - "108: getbit", - "109: txna ApplicationArgs 3", - "110: btoi", - "111: txnas Accounts", - "114: callsub writeGlobalState" - ], - [ - "288: writeGlobalState:", - "291: proto 3 0", - "294: bytec_0", - "297: frame_dig -3", - "298: app_global_put", - "301: bytec_1", - "304: frame_dig -2", - "305: app_global_put", - "308: bytec_3", - "311: frame_dig -1", - "312: app_global_put", - "315: intc_0", - "316: bytec_0", - "317: app_global_get_ex", - "318: assert", - "321: frame_dig -3", - "322: ==", - "323: assert", - "326: intc_0", - "327: bytec_1", - "328: app_global_get_ex", - "329: assert", - "332: frame_dig -2", - "333: ==", - "334: assert", - "337: intc_0", - "338: bytec_3", - "339: app_global_get_ex", - "340: assert", - "343: frame_dig -1", - "344: ==", - "345: assert", - "346: retsub" - ], - [ - "115: intc_1", - "116: return" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "113: main_writeGlobalState_route@7:", + "116: txn OnCompletion", + "117: !", + "118: assert", + "119: txn ApplicationID", + "120: assert", + "124: txna ApplicationArgs 1", + "125: extract 2 0", + "126: txna ApplicationArgs 2", + "127: intc_0", + "128: getbit", + "129: txna ApplicationArgs 3", + "130: btoi", + "131: txnas Accounts", + "134: callsub writeGlobalState" + ], + [ + "308: writeGlobalState:", + "311: proto 3 0", + "314: bytec_0", + "317: frame_dig -3", + "318: app_global_put", + "321: bytec_1", + "324: frame_dig -2", + "325: app_global_put", + "328: bytec_3", + "331: frame_dig -1", + "332: app_global_put", + "335: intc_0", + "336: bytec_0", + "337: app_global_get_ex", + "338: assert", + "341: frame_dig -3", + "342: ==", + "343: assert", + "346: intc_0", + "347: bytec_1", + "348: app_global_get_ex", + "349: assert", + "352: frame_dig -2", + "353: ==", + "354: assert", + "357: intc_0", + "358: bytec_3", + "359: app_global_get_ex", + "360: assert", + "363: frame_dig -1", + "364: ==", + "365: assert", + "366: retsub" + ], + [ + "135: intc_1", + "136: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 6 -> 19 -> 7", + "short": "0 -> 1 -> 3 -> 4 -> 8 -> 21 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -1139,70 +1247,124 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "82: main_writeDynamicGlobalState_route@8:", + "85: txn OnCompletion", + "86: !", + "87: assert", + "88: txn ApplicationID", + "89: assert", + "93: txna ApplicationArgs 1", + "94: extract 2 0", + "95: txna ApplicationArgs 2", + "96: extract 2 0", + "99: callsub writeDynamicGlobalState" + ], + [ + "370: writeDynamicGlobalState:", + "373: proto 2 1", + "376: frame_dig -2", + "377: frame_dig -1", + "378: app_global_put", + "381: intc_0", + "382: frame_dig -2", + "383: app_global_get_ex", + "384: assert", + "385: frame_dig -1", + "386: ==", + "387: assert", + "390: intc_0", + "391: frame_dig -2", + "392: app_global_get_ex", + "393: assert", + "394: retsub" + ], + [ + "100: dup", + "101: len", + "102: itob", + "103: extract 6 2", + "104: swap", + "105: concat", + "106: bytec 4", + "107: swap", + "108: concat", + "109: log", + "110: intc_1", + "111: return" + ] + ] + }, + { + "short": "0 -> 1 -> 3 -> 4 -> 6 -> 22 -> 7", + "blocks": [ + [ + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" ], [ - "62: main_writeDynamicGlobalState_route@8:", + "5: main:", + "6: intcblock 0 1", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", + "8: txn ApplicationID", + "9: bnz main_after_if_else@2" + ], + [ + "45: main_after_if_else@2:", + "49: txn NumAppArgs", + "50: bz main_bare_routing@12" + ], + [ + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", + "52: txna ApplicationArgs 0", + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "62: main_deleteGlobalState_route@9:", "65: txn OnCompletion", "66: !", "67: assert", "68: txn ApplicationID", "69: assert", - "73: txna ApplicationArgs 1", - "74: extract 2 0", - "75: txna ApplicationArgs 2", - "76: extract 2 0", - "79: callsub writeDynamicGlobalState" - ], - [ - "350: writeDynamicGlobalState:", - "353: proto 2 1", - "356: frame_dig -2", - "357: frame_dig -1", - "358: app_global_put", - "361: intc_0", - "362: frame_dig -2", - "363: app_global_get_ex", - "364: assert", - "365: frame_dig -1", - "366: ==", - "367: assert", - "370: intc_0", - "371: frame_dig -2", - "372: app_global_get_ex", - "373: assert", - "374: retsub" - ], - [ - "80: dup", - "81: len", - "82: itob", - "83: extract 6 2", - "84: swap", - "85: concat", - "86: bytec 4", - "87: swap", - "88: concat", - "89: log", - "90: intc_1", - "91: return" + "70: callsub deleteGlobalState" + ], + [ + "398: deleteGlobalState:", + "401: bytec 5", + "404: app_global_del", + "407: intc_1", + "408: retsub" + ], + [ + "71: bytec 6", + "72: intc_0", + "73: uncover 2", + "74: setbit", + "75: bytec 4", + "76: swap", + "77: concat", + "78: log", + "79: intc_1", + "80: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 14 -> 5", + "short": "0 -> 1 -> 3 -> 16 -> 5", "blocks": [ [ "1: #pragma version 10", @@ -1211,22 +1373,22 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "197: main_bare_routing@11:", - "201: txn OnCompletion", - "202: bnz main_after_if_else@15" + "217: main_bare_routing@12:", + "221: txn OnCompletion", + "222: bnz main_after_if_else@16" ], [ - "55: main_after_if_else@15:", + "55: main_after_if_else@16:", "59: intc_0", "60: return" ] @@ -1236,7 +1398,7 @@ }, { "type": "ExecutionPaths", - "count": 6, + "count": 7, "description": "\nCheck: \"is-updatable\", Impact: High, Confidence: High\nDescription: Upgradable Applications\n\nWiki: https://github.com/crytic/tealer/wiki/Detector-Documentation#upgradable-application\n", "check": "is-updatable", "impact": "High", @@ -1253,29 +1415,29 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" ], [ - "55: main_after_if_else@15:", + "55: main_after_if_else@16:", "59: intc_0", "60: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 12 -> 16 -> 13", + "short": "0 -> 1 -> 3 -> 4 -> 14 -> 18 -> 15", "blocks": [ [ "1: #pragma version 10", @@ -1284,110 +1446,110 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "141: main_readGlobalState_route@5:", - "144: txn OnCompletion", - "145: !", - "146: assert", - "147: txn ApplicationID", - "148: assert", - "149: callsub readGlobalState" - ], - [ - "211: readGlobalState:", - "214: intc_0", - "215: bytec_3", - "216: app_global_get_ex", - "217: assert", - "220: intc_0", - "221: bytec 5", - "222: app_global_get_ex", - "223: assert", - "226: intc_0", - "227: bytec_2", - "228: app_global_get_ex", - "229: assert", - "232: intc_0", - "233: bytec 6", - "234: app_global_get_ex", - "235: assert", - "238: intc_0", - "239: bytec_0", - "240: app_global_get_ex", - "241: assert", - "244: intc_0", - "245: bytec_1", - "246: app_global_get_ex", - "247: assert", - "257: uncover 5", - "258: retsub" - ], - [ - "150: uncover 5", - "151: itob", - "152: uncover 5", - "153: itob", - "154: dig 5", - "155: len", - "156: itob", - "157: extract 6 2", - "158: uncover 6", - "159: concat", - "160: dig 5", - "161: len", - "162: itob", - "163: extract 6 2", - "164: uncover 6", - "165: concat", - "166: pushbytes 0x00", - "167: intc_0", - "168: uncover 7", - "169: setbit", - "170: uncover 4", - "171: uncover 4", - "172: concat", - "173: pushbytes 0x0035", - "174: concat", - "175: dig 3", - "176: len", - "177: pushint 53", - "178: +", - "179: itob", - "180: extract 6 2", - "181: concat", - "182: swap", - "183: concat", - "184: uncover 3", + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "161: main_readGlobalState_route@5:", + "164: txn OnCompletion", + "165: !", + "166: assert", + "167: txn ApplicationID", + "168: assert", + "169: callsub readGlobalState" + ], + [ + "231: readGlobalState:", + "234: intc_0", + "235: bytec_3", + "236: app_global_get_ex", + "237: assert", + "240: intc_0", + "241: bytec 5", + "242: app_global_get_ex", + "243: assert", + "246: intc_0", + "247: bytec_2", + "248: app_global_get_ex", + "249: assert", + "252: intc_0", + "253: bytec 7", + "254: app_global_get_ex", + "255: assert", + "258: intc_0", + "259: bytec_0", + "260: app_global_get_ex", + "261: assert", + "264: intc_0", + "265: bytec_1", + "266: app_global_get_ex", + "267: assert", + "277: uncover 5", + "278: retsub" + ], + [ + "170: uncover 5", + "171: itob", + "172: uncover 5", + "173: itob", + "174: dig 5", + "175: len", + "176: itob", + "177: extract 6 2", + "178: uncover 6", + "179: concat", + "180: dig 5", + "181: len", + "182: itob", + "183: extract 6 2", + "184: uncover 6", "185: concat", - "186: uncover 2", - "187: concat", - "188: swap", - "189: concat", - "190: bytec 4", - "191: swap", + "186: bytec 6", + "187: intc_0", + "188: uncover 7", + "189: setbit", + "190: uncover 4", + "191: uncover 4", "192: concat", - "193: log", - "194: intc_1", - "195: return" + "193: pushbytes 0x0035", + "194: concat", + "195: dig 3", + "196: len", + "197: pushint 53", + "198: +", + "199: itob", + "200: extract 6 2", + "201: concat", + "202: swap", + "203: concat", + "204: uncover 3", + "205: concat", + "206: uncover 2", + "207: concat", + "208: swap", + "209: concat", + "210: bytec 4", + "211: swap", + "212: concat", + "213: log", + "214: intc_1", + "215: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 10 -> 17 -> 11", + "short": "0 -> 1 -> 3 -> 4 -> 12 -> 19 -> 13", "blocks": [ [ "1: #pragma version 10", @@ -1396,63 +1558,63 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "118: main_hasGlobalState_route@6:", - "121: txn OnCompletion", - "122: !", - "123: assert", - "124: txn ApplicationID", - "125: assert", - "126: callsub hasGlobalState" - ], - [ - "262: hasGlobalState:", - "265: intc_0", - "266: bytec_2", - "269: app_global_get_ex", - "270: bury 1", - "273: intc_0", - "274: bytec_2", - "275: app_global_get_ex", - "276: assert", - "279: dig 1", - "280: assert", - "283: swap", - "284: retsub" - ], - [ - "127: swap", - "128: itob", - "129: pushbytes 0x00", - "130: intc_0", - "131: uncover 3", - "132: setbit", - "133: concat", - "134: bytec 4", - "135: swap", - "136: concat", - "137: log", - "138: intc_1", - "139: return" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "138: main_hasGlobalState_route@6:", + "141: txn OnCompletion", + "142: !", + "143: assert", + "144: txn ApplicationID", + "145: assert", + "146: callsub hasGlobalState" + ], + [ + "282: hasGlobalState:", + "285: intc_0", + "286: bytec_2", + "289: app_global_get_ex", + "290: bury 1", + "293: intc_0", + "294: bytec_2", + "295: app_global_get_ex", + "296: assert", + "299: dig 1", + "300: assert", + "303: swap", + "304: retsub" + ], + [ + "147: swap", + "148: itob", + "149: bytec 6", + "150: intc_0", + "151: uncover 3", + "152: setbit", + "153: concat", + "154: bytec 4", + "155: swap", + "156: concat", + "157: log", + "158: intc_1", + "159: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 8 -> 18 -> 9", + "short": "0 -> 1 -> 3 -> 4 -> 10 -> 20 -> 11", "blocks": [ [ "1: #pragma version 10", @@ -1461,80 +1623,80 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "93: main_writeGlobalState_route@7:", - "96: txn OnCompletion", - "97: !", - "98: assert", - "99: txn ApplicationID", - "100: assert", - "104: txna ApplicationArgs 1", - "105: extract 2 0", - "106: txna ApplicationArgs 2", - "107: intc_0", - "108: getbit", - "109: txna ApplicationArgs 3", - "110: btoi", - "111: txnas Accounts", - "114: callsub writeGlobalState" - ], - [ - "288: writeGlobalState:", - "291: proto 3 0", - "294: bytec_0", - "297: frame_dig -3", - "298: app_global_put", - "301: bytec_1", - "304: frame_dig -2", - "305: app_global_put", - "308: bytec_3", - "311: frame_dig -1", - "312: app_global_put", - "315: intc_0", - "316: bytec_0", - "317: app_global_get_ex", - "318: assert", - "321: frame_dig -3", - "322: ==", - "323: assert", - "326: intc_0", - "327: bytec_1", - "328: app_global_get_ex", - "329: assert", - "332: frame_dig -2", - "333: ==", - "334: assert", - "337: intc_0", - "338: bytec_3", - "339: app_global_get_ex", - "340: assert", - "343: frame_dig -1", - "344: ==", - "345: assert", - "346: retsub" - ], - [ - "115: intc_1", - "116: return" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "113: main_writeGlobalState_route@7:", + "116: txn OnCompletion", + "117: !", + "118: assert", + "119: txn ApplicationID", + "120: assert", + "124: txna ApplicationArgs 1", + "125: extract 2 0", + "126: txna ApplicationArgs 2", + "127: intc_0", + "128: getbit", + "129: txna ApplicationArgs 3", + "130: btoi", + "131: txnas Accounts", + "134: callsub writeGlobalState" + ], + [ + "308: writeGlobalState:", + "311: proto 3 0", + "314: bytec_0", + "317: frame_dig -3", + "318: app_global_put", + "321: bytec_1", + "324: frame_dig -2", + "325: app_global_put", + "328: bytec_3", + "331: frame_dig -1", + "332: app_global_put", + "335: intc_0", + "336: bytec_0", + "337: app_global_get_ex", + "338: assert", + "341: frame_dig -3", + "342: ==", + "343: assert", + "346: intc_0", + "347: bytec_1", + "348: app_global_get_ex", + "349: assert", + "352: frame_dig -2", + "353: ==", + "354: assert", + "357: intc_0", + "358: bytec_3", + "359: app_global_get_ex", + "360: assert", + "363: frame_dig -1", + "364: ==", + "365: assert", + "366: retsub" + ], + [ + "135: intc_1", + "136: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 6 -> 19 -> 7", + "short": "0 -> 1 -> 3 -> 4 -> 8 -> 21 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -1543,70 +1705,124 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "82: main_writeDynamicGlobalState_route@8:", + "85: txn OnCompletion", + "86: !", + "87: assert", + "88: txn ApplicationID", + "89: assert", + "93: txna ApplicationArgs 1", + "94: extract 2 0", + "95: txna ApplicationArgs 2", + "96: extract 2 0", + "99: callsub writeDynamicGlobalState" + ], + [ + "370: writeDynamicGlobalState:", + "373: proto 2 1", + "376: frame_dig -2", + "377: frame_dig -1", + "378: app_global_put", + "381: intc_0", + "382: frame_dig -2", + "383: app_global_get_ex", + "384: assert", + "385: frame_dig -1", + "386: ==", + "387: assert", + "390: intc_0", + "391: frame_dig -2", + "392: app_global_get_ex", + "393: assert", + "394: retsub" + ], + [ + "100: dup", + "101: len", + "102: itob", + "103: extract 6 2", + "104: swap", + "105: concat", + "106: bytec 4", + "107: swap", + "108: concat", + "109: log", + "110: intc_1", + "111: return" + ] + ] + }, + { + "short": "0 -> 1 -> 3 -> 4 -> 6 -> 22 -> 7", + "blocks": [ + [ + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" ], [ - "62: main_writeDynamicGlobalState_route@8:", + "5: main:", + "6: intcblock 0 1", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", + "8: txn ApplicationID", + "9: bnz main_after_if_else@2" + ], + [ + "45: main_after_if_else@2:", + "49: txn NumAppArgs", + "50: bz main_bare_routing@12" + ], + [ + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", + "52: txna ApplicationArgs 0", + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "62: main_deleteGlobalState_route@9:", "65: txn OnCompletion", "66: !", "67: assert", "68: txn ApplicationID", "69: assert", - "73: txna ApplicationArgs 1", - "74: extract 2 0", - "75: txna ApplicationArgs 2", - "76: extract 2 0", - "79: callsub writeDynamicGlobalState" - ], - [ - "350: writeDynamicGlobalState:", - "353: proto 2 1", - "356: frame_dig -2", - "357: frame_dig -1", - "358: app_global_put", - "361: intc_0", - "362: frame_dig -2", - "363: app_global_get_ex", - "364: assert", - "365: frame_dig -1", - "366: ==", - "367: assert", - "370: intc_0", - "371: frame_dig -2", - "372: app_global_get_ex", - "373: assert", - "374: retsub" - ], - [ - "80: dup", - "81: len", - "82: itob", - "83: extract 6 2", - "84: swap", - "85: concat", - "86: bytec 4", - "87: swap", - "88: concat", - "89: log", - "90: intc_1", - "91: return" + "70: callsub deleteGlobalState" + ], + [ + "398: deleteGlobalState:", + "401: bytec 5", + "404: app_global_del", + "407: intc_1", + "408: retsub" + ], + [ + "71: bytec 6", + "72: intc_0", + "73: uncover 2", + "74: setbit", + "75: bytec 4", + "76: swap", + "77: concat", + "78: log", + "79: intc_1", + "80: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 14 -> 5", + "short": "0 -> 1 -> 3 -> 16 -> 5", "blocks": [ [ "1: #pragma version 10", @@ -1615,22 +1831,22 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "197: main_bare_routing@11:", - "201: txn OnCompletion", - "202: bnz main_after_if_else@15" + "217: main_bare_routing@12:", + "221: txn OnCompletion", + "222: bnz main_after_if_else@16" ], [ - "55: main_after_if_else@15:", + "55: main_after_if_else@16:", "59: intc_0", "60: return" ] @@ -1640,7 +1856,7 @@ }, { "type": "ExecutionPaths", - "count": 14, + "count": 16, "description": "\nCheck: \"missing-fee-check\", Impact: High, Confidence: High\nDescription: Missing Fee Field Validation\n\nWiki: https://github.com/crytic/tealer/wiki/Detector-Documentation#missing-fee-field-validation\n", "check": "missing-fee-check", "impact": "High", @@ -1657,7 +1873,7 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], @@ -1665,7 +1881,7 @@ "12: bytec 5", "13: pushint 50", "14: app_global_put", - "17: bytec 6", + "17: bytec 7", "18: pushbytes \"Silvio\"", "19: app_global_put", "22: bytec_0", @@ -1684,22 +1900,22 @@ [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" ], [ - "55: main_after_if_else@15:", + "55: main_after_if_else@16:", "59: intc_0", "60: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 3 -> 4 -> 12 -> 16 -> 13", + "short": "0 -> 1 -> 2 -> 3 -> 4 -> 14 -> 18 -> 15", "blocks": [ [ "1: #pragma version 10", @@ -1708,7 +1924,7 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], @@ -1716,7 +1932,7 @@ "12: bytec 5", "13: pushint 50", "14: app_global_put", - "17: bytec 6", + "17: bytec 7", "18: pushbytes \"Silvio\"", "19: app_global_put", "22: bytec_0", @@ -1735,103 +1951,188 @@ [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "141: main_readGlobalState_route@5:", - "144: txn OnCompletion", - "145: !", - "146: assert", - "147: txn ApplicationID", - "148: assert", - "149: callsub readGlobalState" - ], - [ - "211: readGlobalState:", - "214: intc_0", - "215: bytec_3", - "216: app_global_get_ex", - "217: assert", - "220: intc_0", - "221: bytec 5", - "222: app_global_get_ex", - "223: assert", - "226: intc_0", - "227: bytec_2", - "228: app_global_get_ex", - "229: assert", - "232: intc_0", - "233: bytec 6", - "234: app_global_get_ex", - "235: assert", - "238: intc_0", - "239: bytec_0", - "240: app_global_get_ex", - "241: assert", - "244: intc_0", - "245: bytec_1", - "246: app_global_get_ex", - "247: assert", - "257: uncover 5", - "258: retsub" - ], - [ - "150: uncover 5", - "151: itob", - "152: uncover 5", - "153: itob", - "154: dig 5", - "155: len", - "156: itob", - "157: extract 6 2", - "158: uncover 6", - "159: concat", - "160: dig 5", - "161: len", - "162: itob", - "163: extract 6 2", - "164: uncover 6", - "165: concat", - "166: pushbytes 0x00", - "167: intc_0", - "168: uncover 7", - "169: setbit", - "170: uncover 4", - "171: uncover 4", - "172: concat", - "173: pushbytes 0x0035", - "174: concat", - "175: dig 3", - "176: len", - "177: pushint 53", - "178: +", - "179: itob", - "180: extract 6 2", - "181: concat", - "182: swap", - "183: concat", - "184: uncover 3", + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "161: main_readGlobalState_route@5:", + "164: txn OnCompletion", + "165: !", + "166: assert", + "167: txn ApplicationID", + "168: assert", + "169: callsub readGlobalState" + ], + [ + "231: readGlobalState:", + "234: intc_0", + "235: bytec_3", + "236: app_global_get_ex", + "237: assert", + "240: intc_0", + "241: bytec 5", + "242: app_global_get_ex", + "243: assert", + "246: intc_0", + "247: bytec_2", + "248: app_global_get_ex", + "249: assert", + "252: intc_0", + "253: bytec 7", + "254: app_global_get_ex", + "255: assert", + "258: intc_0", + "259: bytec_0", + "260: app_global_get_ex", + "261: assert", + "264: intc_0", + "265: bytec_1", + "266: app_global_get_ex", + "267: assert", + "277: uncover 5", + "278: retsub" + ], + [ + "170: uncover 5", + "171: itob", + "172: uncover 5", + "173: itob", + "174: dig 5", + "175: len", + "176: itob", + "177: extract 6 2", + "178: uncover 6", + "179: concat", + "180: dig 5", + "181: len", + "182: itob", + "183: extract 6 2", + "184: uncover 6", "185: concat", - "186: uncover 2", - "187: concat", - "188: swap", - "189: concat", - "190: bytec 4", - "191: swap", + "186: bytec 6", + "187: intc_0", + "188: uncover 7", + "189: setbit", + "190: uncover 4", + "191: uncover 4", "192: concat", - "193: log", - "194: intc_1", - "195: return" + "193: pushbytes 0x0035", + "194: concat", + "195: dig 3", + "196: len", + "197: pushint 53", + "198: +", + "199: itob", + "200: extract 6 2", + "201: concat", + "202: swap", + "203: concat", + "204: uncover 3", + "205: concat", + "206: uncover 2", + "207: concat", + "208: swap", + "209: concat", + "210: bytec 4", + "211: swap", + "212: concat", + "213: log", + "214: intc_1", + "215: return" + ] + ] + }, + { + "short": "0 -> 1 -> 2 -> 3 -> 4 -> 12 -> 19 -> 13", + "blocks": [ + [ + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" + ], + [ + "5: main:", + "6: intcblock 0 1", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", + "8: txn ApplicationID", + "9: bnz main_after_if_else@2" + ], + [ + "12: bytec 5", + "13: pushint 50", + "14: app_global_put", + "17: bytec 7", + "18: pushbytes \"Silvio\"", + "19: app_global_put", + "22: bytec_0", + "23: pushbytes \"Micali\"", + "24: app_global_put", + "27: bytec_1", + "28: intc_1", + "29: app_global_put", + "32: bytec_2", + "35: intc_0", + "36: app_global_put", + "39: bytec_3", + "42: txn Sender", + "43: app_global_put" + ], + [ + "45: main_after_if_else@2:", + "49: txn NumAppArgs", + "50: bz main_bare_routing@12" + ], + [ + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", + "52: txna ApplicationArgs 0", + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "138: main_hasGlobalState_route@6:", + "141: txn OnCompletion", + "142: !", + "143: assert", + "144: txn ApplicationID", + "145: assert", + "146: callsub hasGlobalState" + ], + [ + "282: hasGlobalState:", + "285: intc_0", + "286: bytec_2", + "289: app_global_get_ex", + "290: bury 1", + "293: intc_0", + "294: bytec_2", + "295: app_global_get_ex", + "296: assert", + "299: dig 1", + "300: assert", + "303: swap", + "304: retsub" + ], + [ + "147: swap", + "148: itob", + "149: bytec 6", + "150: intc_0", + "151: uncover 3", + "152: setbit", + "153: concat", + "154: bytec 4", + "155: swap", + "156: concat", + "157: log", + "158: intc_1", + "159: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 3 -> 4 -> 10 -> 17 -> 11", + "short": "0 -> 1 -> 2 -> 3 -> 4 -> 10 -> 20 -> 11", "blocks": [ [ "1: #pragma version 10", @@ -1840,7 +2141,7 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], @@ -1848,7 +2149,7 @@ "12: bytec 5", "13: pushint 50", "14: app_global_put", - "17: bytec 6", + "17: bytec 7", "18: pushbytes \"Silvio\"", "19: app_global_put", "22: bytec_0", @@ -1867,56 +2168,73 @@ [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "118: main_hasGlobalState_route@6:", - "121: txn OnCompletion", - "122: !", - "123: assert", - "124: txn ApplicationID", - "125: assert", - "126: callsub hasGlobalState" - ], - [ - "262: hasGlobalState:", - "265: intc_0", - "266: bytec_2", - "269: app_global_get_ex", - "270: bury 1", - "273: intc_0", - "274: bytec_2", - "275: app_global_get_ex", - "276: assert", - "279: dig 1", - "280: assert", - "283: swap", - "284: retsub" - ], - [ - "127: swap", - "128: itob", - "129: pushbytes 0x00", - "130: intc_0", - "131: uncover 3", - "132: setbit", - "133: concat", - "134: bytec 4", - "135: swap", - "136: concat", - "137: log", - "138: intc_1", - "139: return" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "113: main_writeGlobalState_route@7:", + "116: txn OnCompletion", + "117: !", + "118: assert", + "119: txn ApplicationID", + "120: assert", + "124: txna ApplicationArgs 1", + "125: extract 2 0", + "126: txna ApplicationArgs 2", + "127: intc_0", + "128: getbit", + "129: txna ApplicationArgs 3", + "130: btoi", + "131: txnas Accounts", + "134: callsub writeGlobalState" + ], + [ + "308: writeGlobalState:", + "311: proto 3 0", + "314: bytec_0", + "317: frame_dig -3", + "318: app_global_put", + "321: bytec_1", + "324: frame_dig -2", + "325: app_global_put", + "328: bytec_3", + "331: frame_dig -1", + "332: app_global_put", + "335: intc_0", + "336: bytec_0", + "337: app_global_get_ex", + "338: assert", + "341: frame_dig -3", + "342: ==", + "343: assert", + "346: intc_0", + "347: bytec_1", + "348: app_global_get_ex", + "349: assert", + "352: frame_dig -2", + "353: ==", + "354: assert", + "357: intc_0", + "358: bytec_3", + "359: app_global_get_ex", + "360: assert", + "363: frame_dig -1", + "364: ==", + "365: assert", + "366: retsub" + ], + [ + "135: intc_1", + "136: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 3 -> 4 -> 8 -> 18 -> 9", + "short": "0 -> 1 -> 2 -> 3 -> 4 -> 8 -> 21 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -1925,7 +2243,7 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], @@ -1933,7 +2251,7 @@ "12: bytec 5", "13: pushint 50", "14: app_global_put", - "17: bytec 6", + "17: bytec 7", "18: pushbytes \"Silvio\"", "19: app_global_put", "22: bytec_0", @@ -1952,73 +2270,63 @@ [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "93: main_writeGlobalState_route@7:", - "96: txn OnCompletion", - "97: !", - "98: assert", - "99: txn ApplicationID", - "100: assert", - "104: txna ApplicationArgs 1", - "105: extract 2 0", - "106: txna ApplicationArgs 2", - "107: intc_0", - "108: getbit", - "109: txna ApplicationArgs 3", - "110: btoi", - "111: txnas Accounts", - "114: callsub writeGlobalState" - ], - [ - "288: writeGlobalState:", - "291: proto 3 0", - "294: bytec_0", - "297: frame_dig -3", - "298: app_global_put", - "301: bytec_1", - "304: frame_dig -2", - "305: app_global_put", - "308: bytec_3", - "311: frame_dig -1", - "312: app_global_put", - "315: intc_0", - "316: bytec_0", - "317: app_global_get_ex", - "318: assert", - "321: frame_dig -3", - "322: ==", - "323: assert", - "326: intc_0", - "327: bytec_1", - "328: app_global_get_ex", - "329: assert", - "332: frame_dig -2", - "333: ==", - "334: assert", - "337: intc_0", - "338: bytec_3", - "339: app_global_get_ex", - "340: assert", - "343: frame_dig -1", - "344: ==", - "345: assert", - "346: retsub" - ], - [ - "115: intc_1", - "116: return" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "82: main_writeDynamicGlobalState_route@8:", + "85: txn OnCompletion", + "86: !", + "87: assert", + "88: txn ApplicationID", + "89: assert", + "93: txna ApplicationArgs 1", + "94: extract 2 0", + "95: txna ApplicationArgs 2", + "96: extract 2 0", + "99: callsub writeDynamicGlobalState" + ], + [ + "370: writeDynamicGlobalState:", + "373: proto 2 1", + "376: frame_dig -2", + "377: frame_dig -1", + "378: app_global_put", + "381: intc_0", + "382: frame_dig -2", + "383: app_global_get_ex", + "384: assert", + "385: frame_dig -1", + "386: ==", + "387: assert", + "390: intc_0", + "391: frame_dig -2", + "392: app_global_get_ex", + "393: assert", + "394: retsub" + ], + [ + "100: dup", + "101: len", + "102: itob", + "103: extract 6 2", + "104: swap", + "105: concat", + "106: bytec 4", + "107: swap", + "108: concat", + "109: log", + "110: intc_1", + "111: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 3 -> 4 -> 6 -> 19 -> 7", + "short": "0 -> 1 -> 2 -> 3 -> 4 -> 6 -> 22 -> 7", "blocks": [ [ "1: #pragma version 10", @@ -2027,7 +2335,7 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], @@ -2035,7 +2343,7 @@ "12: bytec 5", "13: pushint 50", "14: app_global_put", - "17: bytec 6", + "17: bytec 7", "18: pushbytes \"Silvio\"", "19: app_global_put", "22: bytec_0", @@ -2054,63 +2362,45 @@ [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" ], [ - "62: main_writeDynamicGlobalState_route@8:", + "62: main_deleteGlobalState_route@9:", "65: txn OnCompletion", "66: !", "67: assert", "68: txn ApplicationID", "69: assert", - "73: txna ApplicationArgs 1", - "74: extract 2 0", - "75: txna ApplicationArgs 2", - "76: extract 2 0", - "79: callsub writeDynamicGlobalState" - ], - [ - "350: writeDynamicGlobalState:", - "353: proto 2 1", - "356: frame_dig -2", - "357: frame_dig -1", - "358: app_global_put", - "361: intc_0", - "362: frame_dig -2", - "363: app_global_get_ex", - "364: assert", - "365: frame_dig -1", - "366: ==", - "367: assert", - "370: intc_0", - "371: frame_dig -2", - "372: app_global_get_ex", - "373: assert", - "374: retsub" - ], - [ - "80: dup", - "81: len", - "82: itob", - "83: extract 6 2", - "84: swap", - "85: concat", - "86: bytec 4", - "87: swap", - "88: concat", - "89: log", - "90: intc_1", - "91: return" + "70: callsub deleteGlobalState" + ], + [ + "398: deleteGlobalState:", + "401: bytec 5", + "404: app_global_del", + "407: intc_1", + "408: retsub" + ], + [ + "71: bytec 6", + "72: intc_0", + "73: uncover 2", + "74: setbit", + "75: bytec 4", + "76: swap", + "77: concat", + "78: log", + "79: intc_1", + "80: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 3 -> 14 -> 15", + "short": "0 -> 1 -> 2 -> 3 -> 16 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -2119,7 +2409,7 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], @@ -2127,7 +2417,7 @@ "12: bytec 5", "13: pushint 50", "14: app_global_put", - "17: bytec 6", + "17: bytec 7", "18: pushbytes \"Silvio\"", "19: app_global_put", "22: bytec_0", @@ -2146,24 +2436,24 @@ [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "197: main_bare_routing@11:", - "201: txn OnCompletion", - "202: bnz main_after_if_else@15" + "217: main_bare_routing@12:", + "221: txn OnCompletion", + "222: bnz main_after_if_else@16" ], [ - "203: txn ApplicationID", - "204: !", - "205: assert", - "206: intc_1", - "207: return" + "223: txn ApplicationID", + "224: !", + "225: assert", + "226: intc_1", + "227: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 3 -> 14 -> 5", + "short": "0 -> 1 -> 2 -> 3 -> 16 -> 5", "blocks": [ [ "1: #pragma version 10", @@ -2172,7 +2462,7 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], @@ -2180,7 +2470,7 @@ "12: bytec 5", "13: pushint 50", "14: app_global_put", - "17: bytec 6", + "17: bytec 7", "18: pushbytes \"Silvio\"", "19: app_global_put", "22: bytec_0", @@ -2199,15 +2489,15 @@ [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "197: main_bare_routing@11:", - "201: txn OnCompletion", - "202: bnz main_after_if_else@15" + "217: main_bare_routing@12:", + "221: txn OnCompletion", + "222: bnz main_after_if_else@16" ], [ - "55: main_after_if_else@15:", + "55: main_after_if_else@16:", "59: intc_0", "60: return" ] @@ -2223,29 +2513,29 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" ], [ - "55: main_after_if_else@15:", + "55: main_after_if_else@16:", "59: intc_0", "60: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 12 -> 16 -> 13", + "short": "0 -> 1 -> 3 -> 4 -> 14 -> 18 -> 15", "blocks": [ [ "1: #pragma version 10", @@ -2254,110 +2544,175 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "141: main_readGlobalState_route@5:", - "144: txn OnCompletion", - "145: !", - "146: assert", - "147: txn ApplicationID", - "148: assert", - "149: callsub readGlobalState" - ], - [ - "211: readGlobalState:", - "214: intc_0", - "215: bytec_3", - "216: app_global_get_ex", - "217: assert", - "220: intc_0", - "221: bytec 5", - "222: app_global_get_ex", - "223: assert", - "226: intc_0", - "227: bytec_2", - "228: app_global_get_ex", - "229: assert", - "232: intc_0", - "233: bytec 6", - "234: app_global_get_ex", - "235: assert", - "238: intc_0", - "239: bytec_0", - "240: app_global_get_ex", - "241: assert", - "244: intc_0", - "245: bytec_1", - "246: app_global_get_ex", - "247: assert", - "257: uncover 5", - "258: retsub" - ], - [ - "150: uncover 5", - "151: itob", - "152: uncover 5", - "153: itob", - "154: dig 5", - "155: len", - "156: itob", - "157: extract 6 2", - "158: uncover 6", - "159: concat", - "160: dig 5", - "161: len", - "162: itob", - "163: extract 6 2", - "164: uncover 6", - "165: concat", - "166: pushbytes 0x00", - "167: intc_0", - "168: uncover 7", - "169: setbit", - "170: uncover 4", - "171: uncover 4", - "172: concat", - "173: pushbytes 0x0035", - "174: concat", - "175: dig 3", - "176: len", - "177: pushint 53", - "178: +", - "179: itob", - "180: extract 6 2", - "181: concat", - "182: swap", - "183: concat", - "184: uncover 3", + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "161: main_readGlobalState_route@5:", + "164: txn OnCompletion", + "165: !", + "166: assert", + "167: txn ApplicationID", + "168: assert", + "169: callsub readGlobalState" + ], + [ + "231: readGlobalState:", + "234: intc_0", + "235: bytec_3", + "236: app_global_get_ex", + "237: assert", + "240: intc_0", + "241: bytec 5", + "242: app_global_get_ex", + "243: assert", + "246: intc_0", + "247: bytec_2", + "248: app_global_get_ex", + "249: assert", + "252: intc_0", + "253: bytec 7", + "254: app_global_get_ex", + "255: assert", + "258: intc_0", + "259: bytec_0", + "260: app_global_get_ex", + "261: assert", + "264: intc_0", + "265: bytec_1", + "266: app_global_get_ex", + "267: assert", + "277: uncover 5", + "278: retsub" + ], + [ + "170: uncover 5", + "171: itob", + "172: uncover 5", + "173: itob", + "174: dig 5", + "175: len", + "176: itob", + "177: extract 6 2", + "178: uncover 6", + "179: concat", + "180: dig 5", + "181: len", + "182: itob", + "183: extract 6 2", + "184: uncover 6", "185: concat", - "186: uncover 2", - "187: concat", - "188: swap", - "189: concat", - "190: bytec 4", - "191: swap", + "186: bytec 6", + "187: intc_0", + "188: uncover 7", + "189: setbit", + "190: uncover 4", + "191: uncover 4", "192: concat", - "193: log", - "194: intc_1", - "195: return" + "193: pushbytes 0x0035", + "194: concat", + "195: dig 3", + "196: len", + "197: pushint 53", + "198: +", + "199: itob", + "200: extract 6 2", + "201: concat", + "202: swap", + "203: concat", + "204: uncover 3", + "205: concat", + "206: uncover 2", + "207: concat", + "208: swap", + "209: concat", + "210: bytec 4", + "211: swap", + "212: concat", + "213: log", + "214: intc_1", + "215: return" + ] + ] + }, + { + "short": "0 -> 1 -> 3 -> 4 -> 12 -> 19 -> 13", + "blocks": [ + [ + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" + ], + [ + "5: main:", + "6: intcblock 0 1", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", + "8: txn ApplicationID", + "9: bnz main_after_if_else@2" + ], + [ + "45: main_after_if_else@2:", + "49: txn NumAppArgs", + "50: bz main_bare_routing@12" + ], + [ + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", + "52: txna ApplicationArgs 0", + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "138: main_hasGlobalState_route@6:", + "141: txn OnCompletion", + "142: !", + "143: assert", + "144: txn ApplicationID", + "145: assert", + "146: callsub hasGlobalState" + ], + [ + "282: hasGlobalState:", + "285: intc_0", + "286: bytec_2", + "289: app_global_get_ex", + "290: bury 1", + "293: intc_0", + "294: bytec_2", + "295: app_global_get_ex", + "296: assert", + "299: dig 1", + "300: assert", + "303: swap", + "304: retsub" + ], + [ + "147: swap", + "148: itob", + "149: bytec 6", + "150: intc_0", + "151: uncover 3", + "152: setbit", + "153: concat", + "154: bytec 4", + "155: swap", + "156: concat", + "157: log", + "158: intc_1", + "159: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 10 -> 17 -> 11", + "short": "0 -> 1 -> 3 -> 4 -> 10 -> 20 -> 11", "blocks": [ [ "1: #pragma version 10", @@ -2366,63 +2721,80 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "118: main_hasGlobalState_route@6:", - "121: txn OnCompletion", - "122: !", - "123: assert", - "124: txn ApplicationID", - "125: assert", - "126: callsub hasGlobalState" - ], - [ - "262: hasGlobalState:", - "265: intc_0", - "266: bytec_2", - "269: app_global_get_ex", - "270: bury 1", - "273: intc_0", - "274: bytec_2", - "275: app_global_get_ex", - "276: assert", - "279: dig 1", - "280: assert", - "283: swap", - "284: retsub" - ], - [ - "127: swap", - "128: itob", - "129: pushbytes 0x00", - "130: intc_0", - "131: uncover 3", - "132: setbit", - "133: concat", - "134: bytec 4", - "135: swap", - "136: concat", - "137: log", - "138: intc_1", - "139: return" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "113: main_writeGlobalState_route@7:", + "116: txn OnCompletion", + "117: !", + "118: assert", + "119: txn ApplicationID", + "120: assert", + "124: txna ApplicationArgs 1", + "125: extract 2 0", + "126: txna ApplicationArgs 2", + "127: intc_0", + "128: getbit", + "129: txna ApplicationArgs 3", + "130: btoi", + "131: txnas Accounts", + "134: callsub writeGlobalState" + ], + [ + "308: writeGlobalState:", + "311: proto 3 0", + "314: bytec_0", + "317: frame_dig -3", + "318: app_global_put", + "321: bytec_1", + "324: frame_dig -2", + "325: app_global_put", + "328: bytec_3", + "331: frame_dig -1", + "332: app_global_put", + "335: intc_0", + "336: bytec_0", + "337: app_global_get_ex", + "338: assert", + "341: frame_dig -3", + "342: ==", + "343: assert", + "346: intc_0", + "347: bytec_1", + "348: app_global_get_ex", + "349: assert", + "352: frame_dig -2", + "353: ==", + "354: assert", + "357: intc_0", + "358: bytec_3", + "359: app_global_get_ex", + "360: assert", + "363: frame_dig -1", + "364: ==", + "365: assert", + "366: retsub" + ], + [ + "135: intc_1", + "136: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 8 -> 18 -> 9", + "short": "0 -> 1 -> 3 -> 4 -> 8 -> 21 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -2431,80 +2803,70 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "93: main_writeGlobalState_route@7:", - "96: txn OnCompletion", - "97: !", - "98: assert", - "99: txn ApplicationID", - "100: assert", - "104: txna ApplicationArgs 1", - "105: extract 2 0", - "106: txna ApplicationArgs 2", - "107: intc_0", - "108: getbit", - "109: txna ApplicationArgs 3", - "110: btoi", - "111: txnas Accounts", - "114: callsub writeGlobalState" - ], - [ - "288: writeGlobalState:", - "291: proto 3 0", - "294: bytec_0", - "297: frame_dig -3", - "298: app_global_put", - "301: bytec_1", - "304: frame_dig -2", - "305: app_global_put", - "308: bytec_3", - "311: frame_dig -1", - "312: app_global_put", - "315: intc_0", - "316: bytec_0", - "317: app_global_get_ex", - "318: assert", - "321: frame_dig -3", - "322: ==", - "323: assert", - "326: intc_0", - "327: bytec_1", - "328: app_global_get_ex", - "329: assert", - "332: frame_dig -2", - "333: ==", - "334: assert", - "337: intc_0", - "338: bytec_3", - "339: app_global_get_ex", - "340: assert", - "343: frame_dig -1", - "344: ==", - "345: assert", - "346: retsub" - ], - [ - "115: intc_1", - "116: return" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "82: main_writeDynamicGlobalState_route@8:", + "85: txn OnCompletion", + "86: !", + "87: assert", + "88: txn ApplicationID", + "89: assert", + "93: txna ApplicationArgs 1", + "94: extract 2 0", + "95: txna ApplicationArgs 2", + "96: extract 2 0", + "99: callsub writeDynamicGlobalState" + ], + [ + "370: writeDynamicGlobalState:", + "373: proto 2 1", + "376: frame_dig -2", + "377: frame_dig -1", + "378: app_global_put", + "381: intc_0", + "382: frame_dig -2", + "383: app_global_get_ex", + "384: assert", + "385: frame_dig -1", + "386: ==", + "387: assert", + "390: intc_0", + "391: frame_dig -2", + "392: app_global_get_ex", + "393: assert", + "394: retsub" + ], + [ + "100: dup", + "101: len", + "102: itob", + "103: extract 6 2", + "104: swap", + "105: concat", + "106: bytec 4", + "107: swap", + "108: concat", + "109: log", + "110: intc_1", + "111: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 6 -> 19 -> 7", + "short": "0 -> 1 -> 3 -> 4 -> 6 -> 22 -> 7", "blocks": [ [ "1: #pragma version 10", @@ -2513,70 +2875,52 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" ], [ - "62: main_writeDynamicGlobalState_route@8:", + "62: main_deleteGlobalState_route@9:", "65: txn OnCompletion", "66: !", "67: assert", "68: txn ApplicationID", "69: assert", - "73: txna ApplicationArgs 1", - "74: extract 2 0", - "75: txna ApplicationArgs 2", - "76: extract 2 0", - "79: callsub writeDynamicGlobalState" - ], - [ - "350: writeDynamicGlobalState:", - "353: proto 2 1", - "356: frame_dig -2", - "357: frame_dig -1", - "358: app_global_put", - "361: intc_0", - "362: frame_dig -2", - "363: app_global_get_ex", - "364: assert", - "365: frame_dig -1", - "366: ==", - "367: assert", - "370: intc_0", - "371: frame_dig -2", - "372: app_global_get_ex", - "373: assert", - "374: retsub" - ], - [ - "80: dup", - "81: len", - "82: itob", - "83: extract 6 2", - "84: swap", - "85: concat", - "86: bytec 4", - "87: swap", - "88: concat", - "89: log", - "90: intc_1", - "91: return" + "70: callsub deleteGlobalState" + ], + [ + "398: deleteGlobalState:", + "401: bytec 5", + "404: app_global_del", + "407: intc_1", + "408: retsub" + ], + [ + "71: bytec 6", + "72: intc_0", + "73: uncover 2", + "74: setbit", + "75: bytec 4", + "76: swap", + "77: concat", + "78: log", + "79: intc_1", + "80: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 14 -> 15", + "short": "0 -> 1 -> 3 -> 16 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -2585,31 +2929,31 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "197: main_bare_routing@11:", - "201: txn OnCompletion", - "202: bnz main_after_if_else@15" + "217: main_bare_routing@12:", + "221: txn OnCompletion", + "222: bnz main_after_if_else@16" ], [ - "203: txn ApplicationID", - "204: !", - "205: assert", - "206: intc_1", - "207: return" + "223: txn ApplicationID", + "224: !", + "225: assert", + "226: intc_1", + "227: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 14 -> 5", + "short": "0 -> 1 -> 3 -> 16 -> 5", "blocks": [ [ "1: #pragma version 10", @@ -2618,22 +2962,22 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "197: main_bare_routing@11:", - "201: txn OnCompletion", - "202: bnz main_after_if_else@15" + "217: main_bare_routing@12:", + "221: txn OnCompletion", + "222: bnz main_after_if_else@16" ], [ - "55: main_after_if_else@15:", + "55: main_after_if_else@16:", "59: intc_0", "60: return" ] @@ -2653,7 +2997,7 @@ }, { "type": "ExecutionPaths", - "count": 14, + "count": 16, "description": "\nCheck: \"rekey-to\", Impact: High, Confidence: High\nDescription: Rekeyable Logic Signatures\n\nWiki: https://github.com/crytic/tealer/wiki/Detector-Documentation#rekeyable-logicsig\n", "check": "rekey-to", "impact": "High", @@ -2670,7 +3014,7 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], @@ -2678,7 +3022,7 @@ "12: bytec 5", "13: pushint 50", "14: app_global_put", - "17: bytec 6", + "17: bytec 7", "18: pushbytes \"Silvio\"", "19: app_global_put", "22: bytec_0", @@ -2697,22 +3041,22 @@ [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" ], [ - "55: main_after_if_else@15:", + "55: main_after_if_else@16:", "59: intc_0", "60: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 3 -> 4 -> 12 -> 16 -> 13", + "short": "0 -> 1 -> 2 -> 3 -> 4 -> 14 -> 18 -> 15", "blocks": [ [ "1: #pragma version 10", @@ -2721,7 +3065,7 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], @@ -2729,7 +3073,7 @@ "12: bytec 5", "13: pushint 50", "14: app_global_put", - "17: bytec 6", + "17: bytec 7", "18: pushbytes \"Silvio\"", "19: app_global_put", "22: bytec_0", @@ -2748,103 +3092,103 @@ [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "141: main_readGlobalState_route@5:", - "144: txn OnCompletion", - "145: !", - "146: assert", - "147: txn ApplicationID", - "148: assert", - "149: callsub readGlobalState" - ], - [ - "211: readGlobalState:", - "214: intc_0", - "215: bytec_3", - "216: app_global_get_ex", - "217: assert", - "220: intc_0", - "221: bytec 5", - "222: app_global_get_ex", - "223: assert", - "226: intc_0", - "227: bytec_2", - "228: app_global_get_ex", - "229: assert", - "232: intc_0", - "233: bytec 6", - "234: app_global_get_ex", - "235: assert", - "238: intc_0", - "239: bytec_0", - "240: app_global_get_ex", - "241: assert", - "244: intc_0", - "245: bytec_1", - "246: app_global_get_ex", - "247: assert", - "257: uncover 5", - "258: retsub" - ], - [ - "150: uncover 5", - "151: itob", - "152: uncover 5", - "153: itob", - "154: dig 5", - "155: len", - "156: itob", - "157: extract 6 2", - "158: uncover 6", - "159: concat", - "160: dig 5", - "161: len", - "162: itob", - "163: extract 6 2", - "164: uncover 6", - "165: concat", - "166: pushbytes 0x00", - "167: intc_0", - "168: uncover 7", - "169: setbit", - "170: uncover 4", - "171: uncover 4", - "172: concat", - "173: pushbytes 0x0035", - "174: concat", - "175: dig 3", - "176: len", - "177: pushint 53", - "178: +", - "179: itob", - "180: extract 6 2", - "181: concat", - "182: swap", - "183: concat", - "184: uncover 3", + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "161: main_readGlobalState_route@5:", + "164: txn OnCompletion", + "165: !", + "166: assert", + "167: txn ApplicationID", + "168: assert", + "169: callsub readGlobalState" + ], + [ + "231: readGlobalState:", + "234: intc_0", + "235: bytec_3", + "236: app_global_get_ex", + "237: assert", + "240: intc_0", + "241: bytec 5", + "242: app_global_get_ex", + "243: assert", + "246: intc_0", + "247: bytec_2", + "248: app_global_get_ex", + "249: assert", + "252: intc_0", + "253: bytec 7", + "254: app_global_get_ex", + "255: assert", + "258: intc_0", + "259: bytec_0", + "260: app_global_get_ex", + "261: assert", + "264: intc_0", + "265: bytec_1", + "266: app_global_get_ex", + "267: assert", + "277: uncover 5", + "278: retsub" + ], + [ + "170: uncover 5", + "171: itob", + "172: uncover 5", + "173: itob", + "174: dig 5", + "175: len", + "176: itob", + "177: extract 6 2", + "178: uncover 6", + "179: concat", + "180: dig 5", + "181: len", + "182: itob", + "183: extract 6 2", + "184: uncover 6", "185: concat", - "186: uncover 2", - "187: concat", - "188: swap", - "189: concat", - "190: bytec 4", - "191: swap", + "186: bytec 6", + "187: intc_0", + "188: uncover 7", + "189: setbit", + "190: uncover 4", + "191: uncover 4", "192: concat", - "193: log", - "194: intc_1", - "195: return" + "193: pushbytes 0x0035", + "194: concat", + "195: dig 3", + "196: len", + "197: pushint 53", + "198: +", + "199: itob", + "200: extract 6 2", + "201: concat", + "202: swap", + "203: concat", + "204: uncover 3", + "205: concat", + "206: uncover 2", + "207: concat", + "208: swap", + "209: concat", + "210: bytec 4", + "211: swap", + "212: concat", + "213: log", + "214: intc_1", + "215: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 3 -> 4 -> 10 -> 17 -> 11", + "short": "0 -> 1 -> 2 -> 3 -> 4 -> 12 -> 19 -> 13", "blocks": [ [ "1: #pragma version 10", @@ -2853,7 +3197,7 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], @@ -2861,7 +3205,7 @@ "12: bytec 5", "13: pushint 50", "14: app_global_put", - "17: bytec 6", + "17: bytec 7", "18: pushbytes \"Silvio\"", "19: app_global_put", "22: bytec_0", @@ -2880,56 +3224,56 @@ [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "118: main_hasGlobalState_route@6:", - "121: txn OnCompletion", - "122: !", - "123: assert", - "124: txn ApplicationID", - "125: assert", - "126: callsub hasGlobalState" - ], - [ - "262: hasGlobalState:", - "265: intc_0", - "266: bytec_2", - "269: app_global_get_ex", - "270: bury 1", - "273: intc_0", - "274: bytec_2", - "275: app_global_get_ex", - "276: assert", - "279: dig 1", - "280: assert", - "283: swap", - "284: retsub" - ], - [ - "127: swap", - "128: itob", - "129: pushbytes 0x00", - "130: intc_0", - "131: uncover 3", - "132: setbit", - "133: concat", - "134: bytec 4", - "135: swap", - "136: concat", - "137: log", - "138: intc_1", - "139: return" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "138: main_hasGlobalState_route@6:", + "141: txn OnCompletion", + "142: !", + "143: assert", + "144: txn ApplicationID", + "145: assert", + "146: callsub hasGlobalState" + ], + [ + "282: hasGlobalState:", + "285: intc_0", + "286: bytec_2", + "289: app_global_get_ex", + "290: bury 1", + "293: intc_0", + "294: bytec_2", + "295: app_global_get_ex", + "296: assert", + "299: dig 1", + "300: assert", + "303: swap", + "304: retsub" + ], + [ + "147: swap", + "148: itob", + "149: bytec 6", + "150: intc_0", + "151: uncover 3", + "152: setbit", + "153: concat", + "154: bytec 4", + "155: swap", + "156: concat", + "157: log", + "158: intc_1", + "159: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 3 -> 4 -> 8 -> 18 -> 9", + "short": "0 -> 1 -> 2 -> 3 -> 4 -> 10 -> 20 -> 11", "blocks": [ [ "1: #pragma version 10", @@ -2938,7 +3282,7 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], @@ -2946,7 +3290,7 @@ "12: bytec 5", "13: pushint 50", "14: app_global_put", - "17: bytec 6", + "17: bytec 7", "18: pushbytes \"Silvio\"", "19: app_global_put", "22: bytec_0", @@ -2965,73 +3309,73 @@ [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "93: main_writeGlobalState_route@7:", - "96: txn OnCompletion", - "97: !", - "98: assert", - "99: txn ApplicationID", - "100: assert", - "104: txna ApplicationArgs 1", - "105: extract 2 0", - "106: txna ApplicationArgs 2", - "107: intc_0", - "108: getbit", - "109: txna ApplicationArgs 3", - "110: btoi", - "111: txnas Accounts", - "114: callsub writeGlobalState" - ], - [ - "288: writeGlobalState:", - "291: proto 3 0", - "294: bytec_0", - "297: frame_dig -3", - "298: app_global_put", - "301: bytec_1", - "304: frame_dig -2", - "305: app_global_put", - "308: bytec_3", - "311: frame_dig -1", - "312: app_global_put", - "315: intc_0", - "316: bytec_0", - "317: app_global_get_ex", - "318: assert", - "321: frame_dig -3", - "322: ==", - "323: assert", - "326: intc_0", - "327: bytec_1", - "328: app_global_get_ex", - "329: assert", - "332: frame_dig -2", - "333: ==", - "334: assert", - "337: intc_0", - "338: bytec_3", - "339: app_global_get_ex", - "340: assert", - "343: frame_dig -1", - "344: ==", - "345: assert", - "346: retsub" - ], - [ - "115: intc_1", - "116: return" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "113: main_writeGlobalState_route@7:", + "116: txn OnCompletion", + "117: !", + "118: assert", + "119: txn ApplicationID", + "120: assert", + "124: txna ApplicationArgs 1", + "125: extract 2 0", + "126: txna ApplicationArgs 2", + "127: intc_0", + "128: getbit", + "129: txna ApplicationArgs 3", + "130: btoi", + "131: txnas Accounts", + "134: callsub writeGlobalState" + ], + [ + "308: writeGlobalState:", + "311: proto 3 0", + "314: bytec_0", + "317: frame_dig -3", + "318: app_global_put", + "321: bytec_1", + "324: frame_dig -2", + "325: app_global_put", + "328: bytec_3", + "331: frame_dig -1", + "332: app_global_put", + "335: intc_0", + "336: bytec_0", + "337: app_global_get_ex", + "338: assert", + "341: frame_dig -3", + "342: ==", + "343: assert", + "346: intc_0", + "347: bytec_1", + "348: app_global_get_ex", + "349: assert", + "352: frame_dig -2", + "353: ==", + "354: assert", + "357: intc_0", + "358: bytec_3", + "359: app_global_get_ex", + "360: assert", + "363: frame_dig -1", + "364: ==", + "365: assert", + "366: retsub" + ], + [ + "135: intc_1", + "136: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 3 -> 4 -> 6 -> 19 -> 7", + "short": "0 -> 1 -> 2 -> 3 -> 4 -> 8 -> 21 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -3040,7 +3384,7 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], @@ -3048,7 +3392,7 @@ "12: bytec 5", "13: pushint 50", "14: app_global_put", - "17: bytec 6", + "17: bytec 7", "18: pushbytes \"Silvio\"", "19: app_global_put", "22: bytec_0", @@ -3067,63 +3411,137 @@ [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "82: main_writeDynamicGlobalState_route@8:", + "85: txn OnCompletion", + "86: !", + "87: assert", + "88: txn ApplicationID", + "89: assert", + "93: txna ApplicationArgs 1", + "94: extract 2 0", + "95: txna ApplicationArgs 2", + "96: extract 2 0", + "99: callsub writeDynamicGlobalState" + ], + [ + "370: writeDynamicGlobalState:", + "373: proto 2 1", + "376: frame_dig -2", + "377: frame_dig -1", + "378: app_global_put", + "381: intc_0", + "382: frame_dig -2", + "383: app_global_get_ex", + "384: assert", + "385: frame_dig -1", + "386: ==", + "387: assert", + "390: intc_0", + "391: frame_dig -2", + "392: app_global_get_ex", + "393: assert", + "394: retsub" + ], + [ + "100: dup", + "101: len", + "102: itob", + "103: extract 6 2", + "104: swap", + "105: concat", + "106: bytec 4", + "107: swap", + "108: concat", + "109: log", + "110: intc_1", + "111: return" + ] + ] + }, + { + "short": "0 -> 1 -> 2 -> 3 -> 4 -> 6 -> 22 -> 7", + "blocks": [ + [ + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" ], [ - "62: main_writeDynamicGlobalState_route@8:", + "5: main:", + "6: intcblock 0 1", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", + "8: txn ApplicationID", + "9: bnz main_after_if_else@2" + ], + [ + "12: bytec 5", + "13: pushint 50", + "14: app_global_put", + "17: bytec 7", + "18: pushbytes \"Silvio\"", + "19: app_global_put", + "22: bytec_0", + "23: pushbytes \"Micali\"", + "24: app_global_put", + "27: bytec_1", + "28: intc_1", + "29: app_global_put", + "32: bytec_2", + "35: intc_0", + "36: app_global_put", + "39: bytec_3", + "42: txn Sender", + "43: app_global_put" + ], + [ + "45: main_after_if_else@2:", + "49: txn NumAppArgs", + "50: bz main_bare_routing@12" + ], + [ + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", + "52: txna ApplicationArgs 0", + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "62: main_deleteGlobalState_route@9:", "65: txn OnCompletion", "66: !", "67: assert", "68: txn ApplicationID", "69: assert", - "73: txna ApplicationArgs 1", - "74: extract 2 0", - "75: txna ApplicationArgs 2", - "76: extract 2 0", - "79: callsub writeDynamicGlobalState" - ], - [ - "350: writeDynamicGlobalState:", - "353: proto 2 1", - "356: frame_dig -2", - "357: frame_dig -1", - "358: app_global_put", - "361: intc_0", - "362: frame_dig -2", - "363: app_global_get_ex", - "364: assert", - "365: frame_dig -1", - "366: ==", - "367: assert", - "370: intc_0", - "371: frame_dig -2", - "372: app_global_get_ex", - "373: assert", - "374: retsub" - ], - [ - "80: dup", - "81: len", - "82: itob", - "83: extract 6 2", - "84: swap", - "85: concat", - "86: bytec 4", - "87: swap", - "88: concat", - "89: log", - "90: intc_1", - "91: return" + "70: callsub deleteGlobalState" + ], + [ + "398: deleteGlobalState:", + "401: bytec 5", + "404: app_global_del", + "407: intc_1", + "408: retsub" + ], + [ + "71: bytec 6", + "72: intc_0", + "73: uncover 2", + "74: setbit", + "75: bytec 4", + "76: swap", + "77: concat", + "78: log", + "79: intc_1", + "80: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 3 -> 14 -> 15", + "short": "0 -> 1 -> 2 -> 3 -> 16 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -3132,7 +3550,7 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], @@ -3140,7 +3558,7 @@ "12: bytec 5", "13: pushint 50", "14: app_global_put", - "17: bytec 6", + "17: bytec 7", "18: pushbytes \"Silvio\"", "19: app_global_put", "22: bytec_0", @@ -3159,24 +3577,24 @@ [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "197: main_bare_routing@11:", - "201: txn OnCompletion", - "202: bnz main_after_if_else@15" + "217: main_bare_routing@12:", + "221: txn OnCompletion", + "222: bnz main_after_if_else@16" ], [ - "203: txn ApplicationID", - "204: !", - "205: assert", - "206: intc_1", - "207: return" + "223: txn ApplicationID", + "224: !", + "225: assert", + "226: intc_1", + "227: return" ] ] }, { - "short": "0 -> 1 -> 2 -> 3 -> 14 -> 5", + "short": "0 -> 1 -> 2 -> 3 -> 16 -> 5", "blocks": [ [ "1: #pragma version 10", @@ -3185,7 +3603,7 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], @@ -3193,7 +3611,7 @@ "12: bytec 5", "13: pushint 50", "14: app_global_put", - "17: bytec 6", + "17: bytec 7", "18: pushbytes \"Silvio\"", "19: app_global_put", "22: bytec_0", @@ -3212,15 +3630,15 @@ [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "197: main_bare_routing@11:", - "201: txn OnCompletion", - "202: bnz main_after_if_else@15" + "217: main_bare_routing@12:", + "221: txn OnCompletion", + "222: bnz main_after_if_else@16" ], [ - "55: main_after_if_else@15:", + "55: main_after_if_else@16:", "59: intc_0", "60: return" ] @@ -3236,29 +3654,29 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" ], [ - "55: main_after_if_else@15:", + "55: main_after_if_else@16:", "59: intc_0", "60: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 12 -> 16 -> 13", + "short": "0 -> 1 -> 3 -> 4 -> 14 -> 18 -> 15", "blocks": [ [ "1: #pragma version 10", @@ -3267,110 +3685,175 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "141: main_readGlobalState_route@5:", - "144: txn OnCompletion", - "145: !", - "146: assert", - "147: txn ApplicationID", - "148: assert", - "149: callsub readGlobalState" - ], - [ - "211: readGlobalState:", - "214: intc_0", - "215: bytec_3", - "216: app_global_get_ex", - "217: assert", - "220: intc_0", - "221: bytec 5", - "222: app_global_get_ex", - "223: assert", - "226: intc_0", - "227: bytec_2", - "228: app_global_get_ex", - "229: assert", - "232: intc_0", - "233: bytec 6", - "234: app_global_get_ex", - "235: assert", - "238: intc_0", - "239: bytec_0", - "240: app_global_get_ex", - "241: assert", - "244: intc_0", - "245: bytec_1", - "246: app_global_get_ex", - "247: assert", - "257: uncover 5", - "258: retsub" - ], - [ - "150: uncover 5", - "151: itob", - "152: uncover 5", - "153: itob", - "154: dig 5", - "155: len", - "156: itob", - "157: extract 6 2", - "158: uncover 6", - "159: concat", - "160: dig 5", - "161: len", - "162: itob", - "163: extract 6 2", - "164: uncover 6", - "165: concat", - "166: pushbytes 0x00", - "167: intc_0", - "168: uncover 7", - "169: setbit", - "170: uncover 4", - "171: uncover 4", - "172: concat", - "173: pushbytes 0x0035", - "174: concat", - "175: dig 3", - "176: len", - "177: pushint 53", - "178: +", - "179: itob", - "180: extract 6 2", - "181: concat", - "182: swap", - "183: concat", - "184: uncover 3", + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "161: main_readGlobalState_route@5:", + "164: txn OnCompletion", + "165: !", + "166: assert", + "167: txn ApplicationID", + "168: assert", + "169: callsub readGlobalState" + ], + [ + "231: readGlobalState:", + "234: intc_0", + "235: bytec_3", + "236: app_global_get_ex", + "237: assert", + "240: intc_0", + "241: bytec 5", + "242: app_global_get_ex", + "243: assert", + "246: intc_0", + "247: bytec_2", + "248: app_global_get_ex", + "249: assert", + "252: intc_0", + "253: bytec 7", + "254: app_global_get_ex", + "255: assert", + "258: intc_0", + "259: bytec_0", + "260: app_global_get_ex", + "261: assert", + "264: intc_0", + "265: bytec_1", + "266: app_global_get_ex", + "267: assert", + "277: uncover 5", + "278: retsub" + ], + [ + "170: uncover 5", + "171: itob", + "172: uncover 5", + "173: itob", + "174: dig 5", + "175: len", + "176: itob", + "177: extract 6 2", + "178: uncover 6", + "179: concat", + "180: dig 5", + "181: len", + "182: itob", + "183: extract 6 2", + "184: uncover 6", "185: concat", - "186: uncover 2", - "187: concat", - "188: swap", - "189: concat", - "190: bytec 4", - "191: swap", + "186: bytec 6", + "187: intc_0", + "188: uncover 7", + "189: setbit", + "190: uncover 4", + "191: uncover 4", "192: concat", - "193: log", - "194: intc_1", - "195: return" + "193: pushbytes 0x0035", + "194: concat", + "195: dig 3", + "196: len", + "197: pushint 53", + "198: +", + "199: itob", + "200: extract 6 2", + "201: concat", + "202: swap", + "203: concat", + "204: uncover 3", + "205: concat", + "206: uncover 2", + "207: concat", + "208: swap", + "209: concat", + "210: bytec 4", + "211: swap", + "212: concat", + "213: log", + "214: intc_1", + "215: return" + ] + ] + }, + { + "short": "0 -> 1 -> 3 -> 4 -> 12 -> 19 -> 13", + "blocks": [ + [ + "1: #pragma version 10", + "2: UNSUPPORTED #pragma typetrack false" + ], + [ + "5: main:", + "6: intcblock 0 1", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", + "8: txn ApplicationID", + "9: bnz main_after_if_else@2" + ], + [ + "45: main_after_if_else@2:", + "49: txn NumAppArgs", + "50: bz main_bare_routing@12" + ], + [ + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", + "52: txna ApplicationArgs 0", + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "138: main_hasGlobalState_route@6:", + "141: txn OnCompletion", + "142: !", + "143: assert", + "144: txn ApplicationID", + "145: assert", + "146: callsub hasGlobalState" + ], + [ + "282: hasGlobalState:", + "285: intc_0", + "286: bytec_2", + "289: app_global_get_ex", + "290: bury 1", + "293: intc_0", + "294: bytec_2", + "295: app_global_get_ex", + "296: assert", + "299: dig 1", + "300: assert", + "303: swap", + "304: retsub" + ], + [ + "147: swap", + "148: itob", + "149: bytec 6", + "150: intc_0", + "151: uncover 3", + "152: setbit", + "153: concat", + "154: bytec 4", + "155: swap", + "156: concat", + "157: log", + "158: intc_1", + "159: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 10 -> 17 -> 11", + "short": "0 -> 1 -> 3 -> 4 -> 10 -> 20 -> 11", "blocks": [ [ "1: #pragma version 10", @@ -3379,63 +3862,80 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "118: main_hasGlobalState_route@6:", - "121: txn OnCompletion", - "122: !", - "123: assert", - "124: txn ApplicationID", - "125: assert", - "126: callsub hasGlobalState" - ], - [ - "262: hasGlobalState:", - "265: intc_0", - "266: bytec_2", - "269: app_global_get_ex", - "270: bury 1", - "273: intc_0", - "274: bytec_2", - "275: app_global_get_ex", - "276: assert", - "279: dig 1", - "280: assert", - "283: swap", - "284: retsub" - ], - [ - "127: swap", - "128: itob", - "129: pushbytes 0x00", - "130: intc_0", - "131: uncover 3", - "132: setbit", - "133: concat", - "134: bytec 4", - "135: swap", - "136: concat", - "137: log", - "138: intc_1", - "139: return" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "113: main_writeGlobalState_route@7:", + "116: txn OnCompletion", + "117: !", + "118: assert", + "119: txn ApplicationID", + "120: assert", + "124: txna ApplicationArgs 1", + "125: extract 2 0", + "126: txna ApplicationArgs 2", + "127: intc_0", + "128: getbit", + "129: txna ApplicationArgs 3", + "130: btoi", + "131: txnas Accounts", + "134: callsub writeGlobalState" + ], + [ + "308: writeGlobalState:", + "311: proto 3 0", + "314: bytec_0", + "317: frame_dig -3", + "318: app_global_put", + "321: bytec_1", + "324: frame_dig -2", + "325: app_global_put", + "328: bytec_3", + "331: frame_dig -1", + "332: app_global_put", + "335: intc_0", + "336: bytec_0", + "337: app_global_get_ex", + "338: assert", + "341: frame_dig -3", + "342: ==", + "343: assert", + "346: intc_0", + "347: bytec_1", + "348: app_global_get_ex", + "349: assert", + "352: frame_dig -2", + "353: ==", + "354: assert", + "357: intc_0", + "358: bytec_3", + "359: app_global_get_ex", + "360: assert", + "363: frame_dig -1", + "364: ==", + "365: assert", + "366: retsub" + ], + [ + "135: intc_1", + "136: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 8 -> 18 -> 9", + "short": "0 -> 1 -> 3 -> 4 -> 8 -> 21 -> 9", "blocks": [ [ "1: #pragma version 10", @@ -3444,80 +3944,70 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" - ], - [ - "93: main_writeGlobalState_route@7:", - "96: txn OnCompletion", - "97: !", - "98: assert", - "99: txn ApplicationID", - "100: assert", - "104: txna ApplicationArgs 1", - "105: extract 2 0", - "106: txna ApplicationArgs 2", - "107: intc_0", - "108: getbit", - "109: txna ApplicationArgs 3", - "110: btoi", - "111: txnas Accounts", - "114: callsub writeGlobalState" - ], - [ - "288: writeGlobalState:", - "291: proto 3 0", - "294: bytec_0", - "297: frame_dig -3", - "298: app_global_put", - "301: bytec_1", - "304: frame_dig -2", - "305: app_global_put", - "308: bytec_3", - "311: frame_dig -1", - "312: app_global_put", - "315: intc_0", - "316: bytec_0", - "317: app_global_get_ex", - "318: assert", - "321: frame_dig -3", - "322: ==", - "323: assert", - "326: intc_0", - "327: bytec_1", - "328: app_global_get_ex", - "329: assert", - "332: frame_dig -2", - "333: ==", - "334: assert", - "337: intc_0", - "338: bytec_3", - "339: app_global_get_ex", - "340: assert", - "343: frame_dig -1", - "344: ==", - "345: assert", - "346: retsub" - ], - [ - "115: intc_1", - "116: return" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" + ], + [ + "82: main_writeDynamicGlobalState_route@8:", + "85: txn OnCompletion", + "86: !", + "87: assert", + "88: txn ApplicationID", + "89: assert", + "93: txna ApplicationArgs 1", + "94: extract 2 0", + "95: txna ApplicationArgs 2", + "96: extract 2 0", + "99: callsub writeDynamicGlobalState" + ], + [ + "370: writeDynamicGlobalState:", + "373: proto 2 1", + "376: frame_dig -2", + "377: frame_dig -1", + "378: app_global_put", + "381: intc_0", + "382: frame_dig -2", + "383: app_global_get_ex", + "384: assert", + "385: frame_dig -1", + "386: ==", + "387: assert", + "390: intc_0", + "391: frame_dig -2", + "392: app_global_get_ex", + "393: assert", + "394: retsub" + ], + [ + "100: dup", + "101: len", + "102: itob", + "103: extract 6 2", + "104: swap", + "105: concat", + "106: bytec 4", + "107: swap", + "108: concat", + "109: log", + "110: intc_1", + "111: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 6 -> 19 -> 7", + "short": "0 -> 1 -> 3 -> 4 -> 6 -> 22 -> 7", "blocks": [ [ "1: #pragma version 10", @@ -3526,70 +4016,52 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6", + "51: pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00", "52: txna ApplicationArgs 0", - "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8" + "53: match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9" ], [ - "62: main_writeDynamicGlobalState_route@8:", + "62: main_deleteGlobalState_route@9:", "65: txn OnCompletion", "66: !", "67: assert", "68: txn ApplicationID", "69: assert", - "73: txna ApplicationArgs 1", - "74: extract 2 0", - "75: txna ApplicationArgs 2", - "76: extract 2 0", - "79: callsub writeDynamicGlobalState" - ], - [ - "350: writeDynamicGlobalState:", - "353: proto 2 1", - "356: frame_dig -2", - "357: frame_dig -1", - "358: app_global_put", - "361: intc_0", - "362: frame_dig -2", - "363: app_global_get_ex", - "364: assert", - "365: frame_dig -1", - "366: ==", - "367: assert", - "370: intc_0", - "371: frame_dig -2", - "372: app_global_get_ex", - "373: assert", - "374: retsub" - ], - [ - "80: dup", - "81: len", - "82: itob", - "83: extract 6 2", - "84: swap", - "85: concat", - "86: bytec 4", - "87: swap", - "88: concat", - "89: log", - "90: intc_1", - "91: return" + "70: callsub deleteGlobalState" + ], + [ + "398: deleteGlobalState:", + "401: bytec 5", + "404: app_global_del", + "407: intc_1", + "408: retsub" + ], + [ + "71: bytec 6", + "72: intc_0", + "73: uncover 2", + "74: setbit", + "75: bytec 4", + "76: swap", + "77: concat", + "78: log", + "79: intc_1", + "80: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 14 -> 15", + "short": "0 -> 1 -> 3 -> 16 -> 17", "blocks": [ [ "1: #pragma version 10", @@ -3598,31 +4070,31 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "197: main_bare_routing@11:", - "201: txn OnCompletion", - "202: bnz main_after_if_else@15" + "217: main_bare_routing@12:", + "221: txn OnCompletion", + "222: bnz main_after_if_else@16" ], [ - "203: txn ApplicationID", - "204: !", - "205: assert", - "206: intc_1", - "207: return" + "223: txn ApplicationID", + "224: !", + "225: assert", + "226: intc_1", + "227: return" ] ] }, { - "short": "0 -> 1 -> 3 -> 14 -> 5", + "short": "0 -> 1 -> 3 -> 16 -> 5", "blocks": [ [ "1: #pragma version 10", @@ -3631,22 +4103,22 @@ [ "5: main:", "6: intcblock 0 1", - "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"", + "7: bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"", "8: txn ApplicationID", "9: bnz main_after_if_else@2" ], [ "45: main_after_if_else@2:", "49: txn NumAppArgs", - "50: bz main_bare_routing@11" + "50: bz main_bare_routing@12" ], [ - "197: main_bare_routing@11:", - "201: txn OnCompletion", - "202: bnz main_after_if_else@15" + "217: main_bare_routing@12:", + "221: txn OnCompletion", + "222: bnz main_after_if_else@16" ], [ - "55: main_after_if_else@15:", + "55: main_after_if_else@16:", "59: intc_0", "60: return" ] diff --git a/projects/typescript-examples/contracts/BoxStorage/contract.algo.ts b/projects/typescript-examples/contracts/BoxStorage/contract.algo.ts index 9d12332..17af998 100644 --- a/projects/typescript-examples/contracts/BoxStorage/contract.algo.ts +++ b/projects/typescript-examples/contracts/BoxStorage/contract.algo.ts @@ -47,8 +47,7 @@ export default class BoxStorage extends Contract { public boxMapStruct = BoxMap({ keyPrefix: 'users' }) // example: INIT_BOX_STORAGE - // Basic Box Operations (Int, String, DynamicBytes) - // example: GET_BOX_STORAGE_INT + // example: GET_BOX_STORAGE /** * Retrieves the value stored in the boxInt box * @returns The uint64 value stored in boxInt @@ -57,9 +56,7 @@ export default class BoxStorage extends Contract { public getBox(): uint64 { return this.boxInt.value } - // example: GET_BOX_STORAGE_INT - // example: GET_BOX_STORAGE_VALUE /** * Retrieves the value of the boxInt box */ @@ -67,54 +64,7 @@ export default class BoxStorage extends Contract { public valueBox(): uint64 { return this.boxInt.value } - // example: GET_BOX_STORAGE_VALUE - // example: SET_BOX_STORAGE - /** - * Sets the value of the boxInt box - * @param valueInt The uint64 value to set in the boxInt box - */ - public setBox(valueInt: uint64): void { - this.boxInt.value = valueInt - } - // example: SET_BOX_STORAGE - - // example: SET_BOX_STORAGE_STRING - /** - * Sets the value of the boxString box - * @param value The string value to set in the boxString box - */ - public setBoxString(value: string): void { - this.boxString.value = value - } - // example: SET_BOX_STORAGE_STRING - - // example: SET_BOX_STORAGE_DYNAMIC_BYTES - /** - * Sets the value of the boxDynamicBytes box - * @param value The dynamic bytes value to set in the boxDynamicBytes box - */ - public setBoxDynamicBytes(value: arc4.DynamicBytes): void { - this.boxDynamicBytes.value = value - } - // example: SET_BOX_STORAGE_DYNAMIC_BYTES - - // example: DELETE_BOX_STORAGE - /** - * Deletes the value of the boxInt box - */ - public deleteBox(): void { - this.boxInt.delete() - this.boxDynamicBytes.delete() - this.boxString.delete() - - assert(this.boxInt.get({ default: Uint64(42) }) === 42) - assert(this.boxDynamicBytes.get({ default: new arc4.DynamicBytes('42') }).native === Bytes('42')) - assert(this.boxString.get({ default: '42' }) === '42') - } - // example: DELETE_BOX_STORAGE - - // example: GET_BOX_STORAGE_MAYBE_BOX /** * Retrieves the value stored in the boxInt box and checks if it exists * @returns A tuple containing the value and a boolean indicating if the box exists @@ -124,10 +74,7 @@ export default class BoxStorage extends Contract { const [boxIntValue, boxIntExists] = this.boxInt.maybe() return [boxIntValue, boxIntExists] } - // example: GET_BOX_STORAGE_MAYBE_BOX - // BoxMap Operations - // example: GET_BOX_STORAGE_MAP /** * Retrieves the value stored in the boxMap box * @param key The key of the boxMap to retrieve the value from @@ -137,9 +84,7 @@ export default class BoxStorage extends Contract { public getBoxMap(key: uint64): string { return this.boxMap(key).value } - // example: GET_BOX_STORAGE_MAP - // example: GET_BOX_STORAGE_MAP_DEFAULT /** * Retrieves the value stored in the boxMap box with a default value if the key does not exist * @param key The key of the boxMap to retrieve the value from @@ -149,30 +94,7 @@ export default class BoxStorage extends Contract { public getBoxMapWithDefault(key: uint64): string { return this.boxMap(key).get({ default: 'default' }) } - // example: GET_BOX_STORAGE_MAP_DEFAULT - - // example: SET_BOX_STORAGE_MAP - /** - * Sets the value of the boxMap box - * @param key The key to set the value for - * @param value The value to set in the boxMap box - */ - public setBoxMap(key: uint64, value: string): void { - this.boxMap(key).value = value - } - // example: SET_BOX_STORAGE_MAP - - // example: DELETE_BOX_STORAGE_MAP - /** - * Deletes the value of the boxMap box - * @param key The key to delete the value from - */ - public deleteBoxMap(key: uint64): void { - this.boxMap(key).delete() - } - // example: DELETE_BOX_STORAGE_MAP - // example: GET_BOX_STORAGE_MAYBE_BOX_MAP /** * Retrieves the value stored in the boxMap box and checks if it exists * @param key The key to check in the boxMap @@ -183,25 +105,29 @@ export default class BoxStorage extends Contract { const [value, exists] = this.boxMap(key).maybe() return [exists ? value : '', exists] } - // example: GET_BOX_STORAGE_MAYBE_BOX_MAP - // example: LENGTH_BOX_STORAGE_MAP /** - * Retrieves the length of the boxMap box - * @param key The key to get the length for - * @returns The length of the boxMap box + * Retrieves the key prefix of the boxMap box + * @returns The key prefix of the boxMap box */ @abimethod({ readonly: true }) - public boxMapLength(key: uint64): uint64 { - if (!this.boxMap(key).exists) { - return Uint64(0) - } + public keyPrefixBoxMap(): bytes { + return this.boxMap.keyPrefix + } - return this.boxMap(key).length + /** + * Retrieves the value stored in the boxRef box + * @returns The value stored in the boxRef box + */ + public getBoxRef(): arc4.Address { + this.boxRef.create({ size: 32 }) + const senderBytes = Txn.sender.bytes + this.boxRef.put(senderBytes) + const value = this.boxRef.get({ default: senderBytes }) + assert(value === senderBytes, 'boxRef value mismatch') + return new arc4.Address(value) } - // example: LENGTH_BOX_STORAGE_MAP - // example: CHECK_BOX_STORAGE_MAP_EXISTS /** * Checks if the boxMap box exists * @param key The key to check for @@ -211,106 +137,53 @@ export default class BoxStorage extends Contract { public boxMapExists(key: uint64): boolean { return this.boxMap(key).exists } - // example: CHECK_BOX_STORAGE_MAP_EXISTS - - // example: GET_BOX_STORAGE_MAP_KEY_PREFIX - /** - * Retrieves the key prefix of the boxMap box - * @returns The key prefix of the boxMap box - */ - @abimethod({ readonly: true }) - public keyPrefixBoxMap(): bytes { - return this.boxMap.keyPrefix - } - // example: GET_BOX_STORAGE_MAP_KEY_PREFIX - // BoxMapStruct Operations - // example: GET_BOX_STORAGE_MAP_STRUCT /** - * Retrieves the value stored in the boxMapStruct box - * @param key The key to retrieve the value from - * @returns The value stored in the boxMapStruct box + * Retrieves the value stored in the boxRef box and checks if it exists + * @returns A tuple containing the value and a boolean indicating if the box exists */ @abimethod({ readonly: true }) - public getBoxMapStruct(key: uint64): UserStruct { - return this.boxMapStruct(key).value + public maybeBoxRef(key: string): [bytes, boolean] { + const boxRef = BoxRef({ key }) + const [value, exists] = boxRef.maybe() + return [value, exists] } - // example: GET_BOX_STORAGE_MAP_STRUCT + // example: GET_BOX_STORAGE - // example: SET_BOX_STORAGE_MAP_STRUCT + // example: SET_BOX_STORAGE /** - * Sets the value of the boxMapStruct box - * @param key The key to set the value for - * @param value The value to set in the boxMapStruct box + * Sets the value of the boxInt box + * @param valueInt The uint64 value to set in the boxInt box */ - public setBoxMapStruct(key: uint64, value: UserStruct): boolean { - // Mutable references to ARC4-encoded values must be copied using .copy() when being assigned to another variable - this.boxMapStruct(key).value = value.copy() - assertMatch( - this.boxMapStruct(key).value, - { - name: value.name, - id: value.id, - asset: value.asset, - }, - 'boxMapStruct value mismatch', - ) - return true + public setBox(valueInt: uint64): void { + this.boxInt.value = valueInt } - // example: SET_BOX_STORAGE_MAP_STRUCT - // example: LENGTH_BOX_STORAGE_MAP_STRUCT /** - * Retrieves the length of the boxMapStruct box - * @param key The key to get the length for - * @returns The length of the boxMapStruct box + * Sets the value of the boxString box + * @param value The string value to set in the boxString box */ - public boxMapStructLength(key: uint64): boolean { - const value = new UserStruct({ - name: new arc4.Str('testName'), - id: new arc4.UintN64(70), - asset: new arc4.UintN64(1234), - }) - - // Mutable references to ARC4-encoded values must be copied using .copy() when being assigned to another variable - this.boxMapStruct(key).value = value.copy() - - assert(this.boxMapStruct(key).value.bytes.length === value.bytes.length, 'boxMapStruct bytes length mismatch') - assert(this.boxMapStruct(key).length === value.bytes.length, 'boxMapStruct length mismatch') - - return true + public setBoxString(value: string): void { + this.boxString.value = value } - // example: LENGTH_BOX_STORAGE_MAP_STRUCT - // example: CHECK_BOX_STORAGE_MAP_STRUCT_EXISTS /** - * Checks if the boxMapStruct box exists - * @param key The key to check for - * @returns true if the box exists, false otherwise + * Sets the value of the boxDynamicBytes box + * @param value The dynamic bytes value to set in the boxDynamicBytes box */ - @abimethod({ readonly: true }) - public boxMapStructExists(key: uint64): boolean { - return this.boxMapStruct(key).exists + public setBoxDynamicBytes(value: arc4.DynamicBytes): void { + this.boxDynamicBytes.value = value } - // example: CHECK_BOX_STORAGE_MAP_STRUCT_EXISTS - // BoxRef Operations - // example: GET_BOX_STORAGE_REF /** - * Retrieves the value stored in the boxRef box - * @returns The value stored in the boxRef box + * Sets the value of the boxMap box + * @param key The key to set the value for + * @param value The value to set in the boxMap box */ - public getBoxRef(): arc4.Address { - this.boxRef.create({ size: 32 }) - const senderBytes = Txn.sender.bytes - this.boxRef.put(senderBytes) - const value = this.boxRef.get({ default: senderBytes }) - assert(value === senderBytes, 'boxRef value mismatch') - return new arc4.Address(value) + public setBoxMap(key: uint64, value: string): void { + this.boxMap(key).value = value } - // example: GET_BOX_STORAGE_REF - // example: SET_BOX_STORAGE_REF /** * Creates a box ref with the given key and sets its value to the sender's address * @param key The key to use for the box ref @@ -321,34 +194,23 @@ export default class BoxStorage extends Contract { const senderBytes = Txn.sender.bytes boxRef.put(senderBytes) } - // example: SET_BOX_STORAGE_REF - - // example: DELETE_BOX_STORAGE_REF - /** - * Deletes the value of the boxRef box - * @param key The key to delete the value from - */ - public deleteBoxRef(key: string): void { - const boxRef = BoxRef({ key }) - boxRef.delete() - assertMatch(boxRef.maybe(), [Bytes(''), false]) - } - // example: DELETE_BOX_STORAGE_REF + // example: SET_BOX_STORAGE - // example: GET_BOX_STORAGE_MAYBE_BOX_REF + // example: LENGTH_BOX_STORAGE /** - * Retrieves the value stored in the boxRef box and checks if it exists - * @returns A tuple containing the value and a boolean indicating if the box exists + * Retrieves the length of the boxMap box + * @param key The key to get the length for + * @returns The length of the boxMap box */ @abimethod({ readonly: true }) - public maybeBoxRef(key: string): [bytes, boolean] { - const boxRef = BoxRef({ key }) - const [value, exists] = boxRef.maybe() - return [value, exists] + public boxMapLength(key: uint64): uint64 { + if (!this.boxMap(key).exists) { + return Uint64(0) + } + + return this.boxMap(key).length } - // example: GET_BOX_STORAGE_MAYBE_BOX_REF - // example: LENGTH_BOX_STORAGE_REF /** * Retrieves the length of the boxRef box * @param key The key to get the length for @@ -359,9 +221,42 @@ export default class BoxStorage extends Contract { assert(boxRef.create({ size: 32 }), 'boxRef creation failed') return boxRef.length } - // example: LENGTH_BOX_STORAGE_REF + // example: LENGTH_BOX_STORAGE + + // example: DELETE_BOX_STORAGE + /** + * Deletes the value of the boxInt box + */ + public deleteBox(): void { + this.boxInt.delete() + this.boxDynamicBytes.delete() + this.boxString.delete() + + assert(this.boxInt.get({ default: Uint64(42) }) === 42) + assert(this.boxDynamicBytes.get({ default: new arc4.DynamicBytes('42') }).native === Bytes('42')) + assert(this.boxString.get({ default: '42' }) === '42') + } + + /** + * Deletes the value of the boxMap box + * @param key The key to delete the value from + */ + public deleteBoxMap(key: uint64): void { + this.boxMap(key).delete() + } - // example: EXTRACT_BOX_STORAGE_REF + /** + * Deletes the value of the boxRef box + * @param key The key to delete the value from + */ + public deleteBoxRef(key: string): void { + const boxRef = BoxRef({ key }) + boxRef.delete() + assertMatch(boxRef.maybe(), [Bytes(''), false]) + } + // example: DELETE_BOX_STORAGE + + // example: EXTRACT_BOX_STORAGE /** * Extracts a value from the boxRef box * @param key The key to extract from @@ -384,10 +279,71 @@ export default class BoxStorage extends Contract { assert(part1.equals(appAddress), 'First part should match app address') assert(part2.equals(senderBytes), 'Second part should match sender bytes') } - // example: EXTRACT_BOX_STORAGE_REF + // example: EXTRACT_BOX_STORAGE + + // example: STRUCT_BOX_STORAGE + /** + * Retrieves the value stored in the boxMapStruct box + * @param key The key to retrieve the value from + * @returns The value stored in the boxMapStruct box + */ + @abimethod({ readonly: true }) + public getBoxMapStruct(key: uint64): UserStruct { + return this.boxMapStruct(key).value + } + + /** + * Checks if the boxMapStruct box exists + * @param key The key to check for + * @returns true if the box exists, false otherwise + */ + @abimethod({ readonly: true }) + public boxMapStructExists(key: uint64): boolean { + return this.boxMapStruct(key).exists + } + + /** + * Sets the value of the boxMapStruct box + * @param key The key to set the value for + * @param value The value to set in the boxMapStruct box + */ + public setBoxMapStruct(key: uint64, value: UserStruct): boolean { + // Mutable references to ARC4-encoded values must be copied using .copy() when being assigned to another variable + this.boxMapStruct(key).value = value.copy() + assertMatch( + this.boxMapStruct(key).value, + { + name: value.name, + id: value.id, + asset: value.asset, + }, + 'boxMapStruct value mismatch', + ) + return true + } + + /** + * Retrieves the length of the boxMapStruct box + * @param key The key to get the length for + * @returns The length of the boxMapStruct box + */ + public boxMapStructLength(key: uint64): boolean { + const value = new UserStruct({ + name: new arc4.Str('testName'), + id: new arc4.UintN64(70), + asset: new arc4.UintN64(1234), + }) + + this.boxMapStruct(key).value = value.copy() + + assert(this.boxMapStruct(key).value.bytes.length === value.bytes.length, 'boxMapStruct bytes length mismatch') + assert(this.boxMapStruct(key).length === value.bytes.length, 'boxMapStruct length mismatch') + + return true + } + // example: STRUCT_BOX_STORAGE - // Special Operations - // example: CREATE_BOX_STORAGE_ARC4 + // example: OTHER_OPS_BOX /** * Creates and manipulates a box containing a static array of 8-bit unsigned integers * @param key The key for the static array box @@ -410,5 +366,5 @@ export default class BoxStorage extends Contract { return staticIntBox.value } - // example: CREATE_BOX_STORAGE_ARC4 + // example: OTHER_OPS_BOX } diff --git a/projects/typescript-examples/contracts/GlobalStorage/contract.algo.ts b/projects/typescript-examples/contracts/GlobalStorage/contract.algo.ts index 5b036d3..d6341c1 100644 --- a/projects/typescript-examples/contracts/GlobalStorage/contract.algo.ts +++ b/projects/typescript-examples/contracts/GlobalStorage/contract.algo.ts @@ -106,12 +106,11 @@ export default class GlobalStorage extends Contract { return globalDynamicAccess.value } - // @TODO: Not yet implemented in puya-ts // example: DELETE_GLOBAL_STATE - // @arc4.abimethod() - // public deleteGlobalState(): boolean { - // this.globalInt.delete() - // return true - // } + @arc4.abimethod() + public deleteGlobalState(): boolean { + this.globalInt.delete() + return true + } // example: DELETE_GLOBAL_STATE } diff --git a/projects/typescript-examples/contracts/ScratchStorage/contract.algo.ts b/projects/typescript-examples/contracts/ScratchStorage/contract.algo.ts index 9e0b9b5..32061c2 100644 --- a/projects/typescript-examples/contracts/ScratchStorage/contract.algo.ts +++ b/projects/typescript-examples/contracts/ScratchStorage/contract.algo.ts @@ -1,3 +1,4 @@ +// example: SCRATCH_STORAGE import { abimethod, uint64, @@ -25,7 +26,6 @@ import { Scratch, gloadBytes, gloadUint64 } from '@algorandfoundation/algorand-t */ @contract({ scratchSlots: [0, 1, 2, { from: 10, to: 20 }] }) // This reserves slots 0, 1, 2 and slots 10-20 export default class ScratchStorage extends Contract { - // example: STORE_SCRATCH_VALUES /** * Stores values in scratch space * This method demonstrates how to store different types of values in scratch slots @@ -36,9 +36,7 @@ export default class ScratchStorage extends Contract { Scratch.store(2, Uint64(100)) Scratch.store(15, Uint64(999)) } - // example: STORE_SCRATCH_VALUES - // example: LOAD_SCRATCH_VALUES /** * Reads values from scratch space * This method demonstrates how to read different types of values from scratch slots @@ -55,9 +53,7 @@ export default class ScratchStorage extends Contract { assert(value2 === 100, 'Value in slot 2 should be 100') assert(value3 === 999, 'Value in slot 15 should be 999') } - // example: LOAD_SCRATCH_VALUES - // example: DEMONSTRATE_SCRATCH_STORAGE /** * Demonstrates basic scratch storage operations * @returns true if all operations succeed @@ -68,9 +64,7 @@ export default class ScratchStorage extends Contract { return true } - // example: DEMONSTRATE_SCRATCH_STORAGE - // example: READ_FROM_GROUP_TRANSACTION /** * Demonstrates reading values from another transaction in the same group * @param groupIndex The index of the transaction in the group to read from @@ -81,9 +75,7 @@ export default class ScratchStorage extends Contract { public readFromGroupTransaction(groupIndex: uint64, scratchSlot: uint64): uint64 { return gloadUint64(groupIndex, scratchSlot) } - // example: READ_FROM_GROUP_TRANSACTION - // example: READ_BYTES_FROM_GROUP_TRANSACTION /** * Demonstrates reading bytes values from another transaction in the same group * @param groupIndex The index of the transaction in the group to read from @@ -94,5 +86,5 @@ export default class ScratchStorage extends Contract { public readBytesFromGroupTransaction(groupIndex: uint64, scratchSlot: uint64): bytes { return gloadBytes(groupIndex, scratchSlot) } - // example: READ_BYTES_FROM_GROUP_TRANSACTION } +// example: SCRATCH_STORAGE diff --git a/projects/typescript-examples/contracts/artifacts/clients/BoxStorage/BoxStorageClient.ts b/projects/typescript-examples/contracts/artifacts/clients/BoxStorage/BoxStorageClient.ts index cdc2d22..b516b4b 100644 --- a/projects/typescript-examples/contracts/artifacts/clients/BoxStorage/BoxStorageClient.ts +++ b/projects/typescript-examples/contracts/artifacts/clients/BoxStorage/BoxStorageClient.ts @@ -24,7 +24,7 @@ import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerR import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' import SimulateResponse = modelsv2.SimulateResponse -export const APP_SPEC: Arc56Contract = {"name":"BoxStorage","structs":{"UserStruct":[{"name":"name","type":"string"},{"name":"id","type":"uint64"},{"name":"asset","type":"uint64"}]},"methods":[{"name":"getBox","args":[],"returns":{"type":"uint64","desc":"The uint64 value stored in boxInt"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the value stored in the boxInt box","events":[],"recommendations":{}},{"name":"valueBox","args":[],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the value of the boxInt box","events":[],"recommendations":{}},{"name":"setBox","args":[{"type":"uint64","name":"valueInt","desc":"The uint64 value to set in the boxInt box"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Sets the value of the boxInt box","events":[],"recommendations":{}},{"name":"setBoxString","args":[{"type":"string","name":"value","desc":"The string value to set in the boxString box"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Sets the value of the boxString box","events":[],"recommendations":{}},{"name":"setBoxDynamicBytes","args":[{"type":"byte[]","name":"value","desc":"The dynamic bytes value to set in the boxDynamicBytes box"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Sets the value of the boxDynamicBytes box","events":[],"recommendations":{}},{"name":"deleteBox","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Deletes the value of the boxInt box","events":[],"recommendations":{}},{"name":"maybeBox","args":[],"returns":{"type":"(uint64,bool)","desc":"A tuple containing the value and a boolean indicating if the box exists"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the value stored in the boxInt box and checks if it exists","events":[],"recommendations":{}},{"name":"getBoxMap","args":[{"type":"uint64","name":"key","desc":"The key of the boxMap to retrieve the value from"}],"returns":{"type":"string","desc":"The value stored in the boxMap box"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the value stored in the boxMap box","events":[],"recommendations":{}},{"name":"getBoxMapWithDefault","args":[{"type":"uint64","name":"key","desc":"The key of the boxMap to retrieve the value from"}],"returns":{"type":"string","desc":"The value stored in the boxMap box"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the value stored in the boxMap box with a default value if the key does not exist","events":[],"recommendations":{}},{"name":"setBoxMap","args":[{"type":"uint64","name":"key","desc":"The key to set the value for"},{"type":"string","name":"value","desc":"The value to set in the boxMap box"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Sets the value of the boxMap box","events":[],"recommendations":{}},{"name":"deleteBoxMap","args":[{"type":"uint64","name":"key","desc":"The key to delete the value from"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Deletes the value of the boxMap box","events":[],"recommendations":{}},{"name":"maybeBoxMap","args":[{"type":"uint64","name":"key","desc":"The key to check in the boxMap"}],"returns":{"type":"(string,bool)","desc":"A tuple containing the value and a boolean indicating if the box exists"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the value stored in the boxMap box and checks if it exists","events":[],"recommendations":{}},{"name":"boxMapLength","args":[{"type":"uint64","name":"key","desc":"The key to get the length for"}],"returns":{"type":"uint64","desc":"The length of the boxMap box"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the length of the boxMap box","events":[],"recommendations":{}},{"name":"boxMapExists","args":[{"type":"uint64","name":"key","desc":"The key to check for"}],"returns":{"type":"bool","desc":"true if the box exists, false otherwise"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Checks if the boxMap box exists","events":[],"recommendations":{}},{"name":"keyPrefixBoxMap","args":[],"returns":{"type":"byte[]","desc":"The key prefix of the boxMap box"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the key prefix of the boxMap box","events":[],"recommendations":{}},{"name":"getBoxMapStruct","args":[{"type":"uint64","name":"key","desc":"The key to retrieve the value from"}],"returns":{"type":"(string,uint64,uint64)","struct":"UserStruct","desc":"The value stored in the boxMapStruct box"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the value stored in the boxMapStruct box","events":[],"recommendations":{}},{"name":"setBoxMapStruct","args":[{"type":"uint64","name":"key","desc":"The key to set the value for"},{"type":"(string,uint64,uint64)","struct":"UserStruct","name":"value","desc":"The value to set in the boxMapStruct box"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Sets the value of the boxMapStruct box","events":[],"recommendations":{}},{"name":"boxMapStructLength","args":[{"type":"uint64","name":"key","desc":"The key to get the length for"}],"returns":{"type":"bool","desc":"The length of the boxMapStruct box"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Retrieves the length of the boxMapStruct box","events":[],"recommendations":{}},{"name":"boxMapStructExists","args":[{"type":"uint64","name":"key","desc":"The key to check for"}],"returns":{"type":"bool","desc":"true if the box exists, false otherwise"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Checks if the boxMapStruct box exists","events":[],"recommendations":{}},{"name":"getBoxRef","args":[],"returns":{"type":"address","desc":"The value stored in the boxRef box"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Retrieves the value stored in the boxRef box","events":[],"recommendations":{}},{"name":"setBoxRef","args":[{"type":"string","name":"key","desc":"The key to use for the box ref"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Creates a box ref with the given key and sets its value to the sender's address","events":[],"recommendations":{}},{"name":"deleteBoxRef","args":[{"type":"string","name":"key","desc":"The key to delete the value from"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Deletes the value of the boxRef box","events":[],"recommendations":{}},{"name":"maybeBoxRef","args":[{"type":"string","name":"key"}],"returns":{"type":"(byte[],bool)","desc":"A tuple containing the value and a boolean indicating if the box exists"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the value stored in the boxRef box and checks if it exists","events":[],"recommendations":{}},{"name":"lengthBoxRef","args":[{"type":"string","name":"key","desc":"The key to get the length for"}],"returns":{"type":"uint64","desc":"The length of the boxRef box"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Retrieves the length of the boxRef box","events":[],"recommendations":{}},{"name":"extractBoxRef","args":[{"type":"string","name":"key","desc":"The key to extract from"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Extracts a value from the boxRef box","events":[],"recommendations":{}},{"name":"arc4Box","args":[{"type":"string","name":"key","desc":"The key for the static array box"}],"returns":{"type":"uint8[4]","desc":"The static array stored in the box"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Creates and manipulates a box containing a static array of 8-bit unsigned integers","events":[],"recommendations":{}}],"arcs":[22,28],"desc":"BoxStorage Contract\n\nThis contract demonstrates various box storage operations in Algorand smart contracts.\nIt shows how to:\n- Create and manage different types of boxes (int, bytes, dynamic bytes, string)\n- Use BoxMap for key-value storage\n- Work with BoxRef for direct box manipulation\n- Perform operations like get, set, delete, and length calculations\n- Handle complex data structures in boxes\n\nThe contract implements the same functionality as its Python counterpart\nin python-examples/smart_contracts/box_storage/contract.py","networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{"boxString":{"keyType":"AVMString","valueType":"AVMString","key":"Ym94U3RyaW5n"},"boxInt":{"keyType":"AVMString","valueType":"AVMUint64","key":"Ym94SW50"},"boxBytes":{"keyType":"AVMString","valueType":"AVMBytes","key":"Ym94Qnl0ZXM="},"boxDynamicBytes":{"keyType":"AVMString","valueType":"byte[]","key":"Ym94RHluYW1pY0J5dGVz"},"boxRef":{"keyType":"AVMString","valueType":"AVMBytes","key":"Ym94UmVm"},"boxMap":{"keyType":"AVMString","valueType":"AVMString","key":"Ym94TWFw"},"boxMapStruct":{"keyType":"AVMString","valueType":"UserStruct","key":"dXNlcnM="}}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[867,874,983,1089,1116,1137,1164,1180,1249,1256,1367,1433,1441,1450,1461,1472],"errorMessage":"Box must have value"},{"pc":[1414],"errorMessage":"First part should match app address"},{"pc":[1165,1170,1181,1186],"errorMessage":"Index access is out of bounds"},{"pc":[274,296,314,337,380,398,416,432,457,482,510,530,554,579,600,641,657,679,707,735,759,771,786,804,820,837],"errorMessage":"OnCompletion is not NoOp"},{"pc":[1416],"errorMessage":"Second part should match sender bytes"},{"pc":[1343],"errorMessage":"assert target is match for conditions"},{"pc":[1254],"errorMessage":"boxMapStruct bytes length mismatch"},{"pc":[1260],"errorMessage":"boxMapStruct length mismatch"},{"pc":[1194],"errorMessage":"boxMapStruct value mismatch"},{"pc":[1363,1386],"errorMessage":"boxRef creation failed"},{"pc":[1301],"errorMessage":"boxRef value mismatch"},{"pc":[859],"errorMessage":"can only call when creating"},{"pc":[277,299,317,340,383,401,419,435,460,485,513,533,557,582,603,644,660,682,710,738,762,774,789,807,823,840],"errorMessage":"can only call when not creating"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDMyIDQyCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgMHgwMCAiYm94TWFwIiAiYm94SW50IiAiYm94U3RyaW5nIiAiYm94RHluYW1pY0J5dGVzIiAidXNlcnMiICI0MiIgImJveFJlZiIgMHgwMDAzCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDMxCiAgICBwdXNoYnl0ZXNzIDB4Yjc0OTEzNDQgMHg0OWNmNDEwNSAweGZhMTU2MmY3IDB4YzQ5N2JjNmYgMHhmNGY5Y2JhZCAweDkxMDFhN2RlIDB4NmFiM2U5YmMgMHgyNmNhNjQ4YSAweDI4Y2M3MTM5IDB4OWUxMWZkN2EgMHhhNDU1MmViNSAweDY0NGEzOTk0IDB4ZjUzNDE4YzQgMHhkODI5ZDJhMyAweGIxZjVhOWI2IDB4NTNjMjg4MjAgMHhkNWRkOTIyYyAweDU5NWI4N2JiIDB4ZjE4MzIwN2EgMHgwM2U4Yzc3ZSAweDVlNmNlYWMwIDB4MzhhY2Y1M2UgMHg4YzIyYmZkNSAweDM5ZTliMjI2IDB4ODYwMGUwZWIgMHg1NDdmMGE3NCAvLyBtZXRob2QgImdldEJveCgpdWludDY0IiwgbWV0aG9kICJ2YWx1ZUJveCgpdWludDY0IiwgbWV0aG9kICJzZXRCb3godWludDY0KXZvaWQiLCBtZXRob2QgInNldEJveFN0cmluZyhzdHJpbmcpdm9pZCIsIG1ldGhvZCAic2V0Qm94RHluYW1pY0J5dGVzKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJkZWxldGVCb3goKXZvaWQiLCBtZXRob2QgIm1heWJlQm94KCkodWludDY0LGJvb2wpIiwgbWV0aG9kICJnZXRCb3hNYXAodWludDY0KXN0cmluZyIsIG1ldGhvZCAiZ2V0Qm94TWFwV2l0aERlZmF1bHQodWludDY0KXN0cmluZyIsIG1ldGhvZCAic2V0Qm94TWFwKHVpbnQ2NCxzdHJpbmcpdm9pZCIsIG1ldGhvZCAiZGVsZXRlQm94TWFwKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJtYXliZUJveE1hcCh1aW50NjQpKHN0cmluZyxib29sKSIsIG1ldGhvZCAiYm94TWFwTGVuZ3RoKHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgImJveE1hcEV4aXN0cyh1aW50NjQpYm9vbCIsIG1ldGhvZCAia2V5UHJlZml4Qm94TWFwKClieXRlW10iLCBtZXRob2QgImdldEJveE1hcFN0cnVjdCh1aW50NjQpKHN0cmluZyx1aW50NjQsdWludDY0KSIsIG1ldGhvZCAic2V0Qm94TWFwU3RydWN0KHVpbnQ2NCwoc3RyaW5nLHVpbnQ2NCx1aW50NjQpKWJvb2wiLCBtZXRob2QgImJveE1hcFN0cnVjdExlbmd0aCh1aW50NjQpYm9vbCIsIG1ldGhvZCAiYm94TWFwU3RydWN0RXhpc3RzKHVpbnQ2NClib29sIiwgbWV0aG9kICJnZXRCb3hSZWYoKWFkZHJlc3MiLCBtZXRob2QgInNldEJveFJlZihzdHJpbmcpdm9pZCIsIG1ldGhvZCAiZGVsZXRlQm94UmVmKHN0cmluZyl2b2lkIiwgbWV0aG9kICJtYXliZUJveFJlZihzdHJpbmcpKGJ5dGVbXSxib29sKSIsIG1ldGhvZCAibGVuZ3RoQm94UmVmKHN0cmluZyl1aW50NjQiLCBtZXRob2QgImV4dHJhY3RCb3hSZWYoc3RyaW5nKXZvaWQiLCBtZXRob2QgImFyYzRCb3goc3RyaW5nKXVpbnQ4WzRdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9nZXRCb3hfcm91dGVAMyBtYWluX3ZhbHVlQm94X3JvdXRlQDQgbWFpbl9zZXRCb3hfcm91dGVANSBtYWluX3NldEJveFN0cmluZ19yb3V0ZUA2IG1haW5fc2V0Qm94RHluYW1pY0J5dGVzX3JvdXRlQDcgbWFpbl9kZWxldGVCb3hfcm91dGVAOCBtYWluX21heWJlQm94X3JvdXRlQDkgbWFpbl9nZXRCb3hNYXBfcm91dGVAMTAgbWFpbl9nZXRCb3hNYXBXaXRoRGVmYXVsdF9yb3V0ZUAxMSBtYWluX3NldEJveE1hcF9yb3V0ZUAxMiBtYWluX2RlbGV0ZUJveE1hcF9yb3V0ZUAxMyBtYWluX21heWJlQm94TWFwX3JvdXRlQDE0IG1haW5fYm94TWFwTGVuZ3RoX3JvdXRlQDE1IG1haW5fYm94TWFwRXhpc3RzX3JvdXRlQDE2IG1haW5fa2V5UHJlZml4Qm94TWFwX3JvdXRlQDE3IG1haW5fZ2V0Qm94TWFwU3RydWN0X3JvdXRlQDE4IG1haW5fc2V0Qm94TWFwU3RydWN0X3JvdXRlQDE5IG1haW5fYm94TWFwU3RydWN0TGVuZ3RoX3JvdXRlQDIwIG1haW5fYm94TWFwU3RydWN0RXhpc3RzX3JvdXRlQDIxIG1haW5fZ2V0Qm94UmVmX3JvdXRlQDIyIG1haW5fc2V0Qm94UmVmX3JvdXRlQDIzIG1haW5fZGVsZXRlQm94UmVmX3JvdXRlQDI0IG1haW5fbWF5YmVCb3hSZWZfcm91dGVAMjUgbWFpbl9sZW5ndGhCb3hSZWZfcm91dGVAMjYgbWFpbl9leHRyYWN0Qm94UmVmX3JvdXRlQDI3IG1haW5fYXJjNEJveF9yb3V0ZUAyOAoKbWFpbl9hZnRlcl9pZl9lbHNlQDM1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fYXJjNEJveF9yb3V0ZUAyODoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mzk2CiAgICAvLyBwdWJsaWMgYXJjNEJveChrZXk6IHN0cmluZyk6IFN0YXRpY0ludHMgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mzk2CiAgICAvLyBwdWJsaWMgYXJjNEJveChrZXk6IHN0cmluZyk6IFN0YXRpY0ludHMgewogICAgY2FsbHN1YiBhcmM0Qm94CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2V4dHJhY3RCb3hSZWZfcm91dGVAMjc6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gcHVibGljIGV4dHJhY3RCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gcHVibGljIGV4dHJhY3RCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIGNhbGxzdWIgZXh0cmFjdEJveFJlZgogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9sZW5ndGhCb3hSZWZfcm91dGVAMjY6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM1NwogICAgLy8gcHVibGljIGxlbmd0aEJveFJlZihrZXk6IHN0cmluZyk6IHVpbnQ2NCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNTcKICAgIC8vIHB1YmxpYyBsZW5ndGhCb3hSZWYoa2V5OiBzdHJpbmcpOiB1aW50NjQgewogICAgY2FsbHN1YiBsZW5ndGhCb3hSZWYKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWF5YmVCb3hSZWZfcm91dGVAMjU6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM0MwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNDMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBtYXliZUJveFJlZgogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgYnl0ZWMgOSAvLyAweDAwMDMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2RlbGV0ZUJveFJlZl9yb3V0ZUAyNDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzMxCiAgICAvLyBwdWJsaWMgZGVsZXRlQm94UmVmKGtleTogc3RyaW5nKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzEKICAgIC8vIHB1YmxpYyBkZWxldGVCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIGNhbGxzdWIgZGVsZXRlQm94UmVmCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3NldEJveFJlZl9yb3V0ZUAyMzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBwdWJsaWMgc2V0Qm94UmVmKGtleTogc3RyaW5nKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTgKICAgIC8vIHB1YmxpYyBzZXRCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIGNhbGxzdWIgc2V0Qm94UmVmCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveFJlZl9yb3V0ZUAyMjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzAzCiAgICAvLyBwdWJsaWMgZ2V0Qm94UmVmKCk6IGFyYzQuQWRkcmVzcyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qm94UmVmCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JveE1hcFN0cnVjdEV4aXN0c19yb3V0ZUAyMToKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjkxCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjkxCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgYm94TWFwU3RydWN0RXhpc3RzCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hNYXBTdHJ1Y3RMZW5ndGhfcm91dGVAMjA6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI2OAogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdExlbmd0aChrZXk6IHVpbnQ2NCk6IGJvb2xlYW4gewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIHB1YmxpYyBib3hNYXBTdHJ1Y3RMZW5ndGgoa2V5OiB1aW50NjQpOiBib29sZWFuIHsKICAgIGNhbGxzdWIgYm94TWFwU3RydWN0TGVuZ3RoCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRCb3hNYXBTdHJ1Y3Rfcm91dGVAMTk6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0NgogICAgLy8gcHVibGljIHNldEJveE1hcFN0cnVjdChrZXk6IHVpbnQ2NCwgdmFsdWU6IFVzZXJTdHJ1Y3QpOiBib29sZWFuIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQ2CiAgICAvLyBwdWJsaWMgc2V0Qm94TWFwU3RydWN0KGtleTogdWludDY0LCB2YWx1ZTogVXNlclN0cnVjdCk6IGJvb2xlYW4gewogICAgY2FsbHN1YiBzZXRCb3hNYXBTdHJ1Y3QKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveE1hcFN0cnVjdF9yb3V0ZUAxODoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjM0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjM0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0Qm94TWFwU3RydWN0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2tleVByZWZpeEJveE1hcF9yb3V0ZUAxNzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjIxCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUwMDA2NjI2Zjc4NGQ2MTcwCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94TWFwRXhpc3RzX3JvdXRlQDE2OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBib3hNYXBFeGlzdHMKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JveE1hcExlbmd0aF9yb3V0ZUAxNToKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTk0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTk0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgYm94TWFwTGVuZ3RoCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21heWJlQm94TWFwX3JvdXRlQDE0OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBtYXliZUJveE1hcAogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgYnl0ZWMgOSAvLyAweDAwMDMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2RlbGV0ZUJveE1hcF9yb3V0ZUAxMzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTcwCiAgICAvLyBwdWJsaWMgZGVsZXRlQm94TWFwKGtleTogdWludDY0KTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3MAogICAgLy8gcHVibGljIGRlbGV0ZUJveE1hcChrZXk6IHVpbnQ2NCk6IHZvaWQgewogICAgY2FsbHN1YiBkZWxldGVCb3hNYXAKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0Qm94TWFwX3JvdXRlQDEyOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNjAKICAgIC8vIHB1YmxpYyBzZXRCb3hNYXAoa2V5OiB1aW50NjQsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2MAogICAgLy8gcHVibGljIHNldEJveE1hcChrZXk6IHVpbnQ2NCwgdmFsdWU6IHN0cmluZyk6IHZvaWQgewogICAgY2FsbHN1YiBzZXRCb3hNYXAKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0Qm94TWFwV2l0aERlZmF1bHRfcm91dGVAMTE6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE0OAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE0OAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGdldEJveE1hcFdpdGhEZWZhdWx0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRCb3hNYXBfcm91dGVAMTA6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEzNgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEzNgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGdldEJveE1hcAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWF5YmVCb3hfcm91dGVAOToKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTIyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZUJveAogICAgc3dhcAogICAgaXRvYgogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZWxldGVCb3hfcm91dGVAODoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTA2CiAgICAvLyBwdWJsaWMgZGVsZXRlQm94KCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZUJveAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRCb3hEeW5hbWljQnl0ZXNfcm91dGVANzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTcKICAgIC8vIHB1YmxpYyBzZXRCb3hEeW5hbWljQnl0ZXModmFsdWU6IGFyYzQuRHluYW1pY0J5dGVzKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjk3CiAgICAvLyBwdWJsaWMgc2V0Qm94RHluYW1pY0J5dGVzKHZhbHVlOiBhcmM0LkR5bmFtaWNCeXRlcyk6IHZvaWQgewogICAgY2FsbHN1YiBzZXRCb3hEeW5hbWljQnl0ZXMKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0Qm94U3RyaW5nX3JvdXRlQDY6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyBwdWJsaWMgc2V0Qm94U3RyaW5nKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyBwdWJsaWMgc2V0Qm94U3RyaW5nKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsKICAgIGNhbGxzdWIgc2V0Qm94U3RyaW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3NldEJveF9yb3V0ZUA1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo3NwogICAgLy8gcHVibGljIHNldEJveCh2YWx1ZUludDogdWludDY0KTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjc3CiAgICAvLyBwdWJsaWMgc2V0Qm94KHZhbHVlSW50OiB1aW50NjQpOiB2b2lkIHsKICAgIGNhbGxzdWIgc2V0Qm94CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZhbHVlQm94X3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjY2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB2YWx1ZUJveAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRCb3hfcm91dGVAMzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldEJveAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMzE6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAzNQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmdldEJveCgpIC0+IHVpbnQ2NDoKZ2V0Qm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcHVibGljIGJveEludCA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94SW50JyB9KQogICAgYnl0ZWNfMyAvLyAiYm94SW50IgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo1OAogICAgLy8gcmV0dXJuIHRoaXMuYm94SW50LnZhbHVlCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS52YWx1ZUJveCgpIC0+IHVpbnQ2NDoKdmFsdWVCb3g6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyBwdWJsaWMgYm94SW50ID0gQm94PHVpbnQ2ND4oeyBrZXk6ICdib3hJbnQnIH0pCiAgICBieXRlY18zIC8vICJib3hJbnQiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyByZXR1cm4gdGhpcy5ib3hJbnQudmFsdWUKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLnNldEJveCh2YWx1ZUludDogdWludDY0KSAtPiB2b2lkOgpzZXRCb3g6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjc3CiAgICAvLyBwdWJsaWMgc2V0Qm94KHZhbHVlSW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo3OAogICAgLy8gdGhpcy5ib3hJbnQudmFsdWUgPSB2YWx1ZUludAogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyBwdWJsaWMgYm94SW50ID0gQm94PHVpbnQ2ND4oeyBrZXk6ICdib3hJbnQnIH0pCiAgICBieXRlY18zIC8vICJib3hJbnQiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjc4CiAgICAvLyB0aGlzLmJveEludC52YWx1ZSA9IHZhbHVlSW50CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLnNldEJveFN0cmluZyh2YWx1ZTogYnl0ZXMpIC0+IHZvaWQ6CnNldEJveFN0cmluZzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIHB1YmxpYyBzZXRCb3hTdHJpbmcodmFsdWU6IHN0cmluZyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBwdWJsaWMgYm94U3RyaW5nID0gQm94PHN0cmluZz4oeyBrZXk6ICdib3hTdHJpbmcnIH0pCiAgICBieXRlYyA0IC8vICJib3hTdHJpbmciCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg4CiAgICAvLyB0aGlzLmJveFN0cmluZy52YWx1ZSA9IHZhbHVlCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHB1YmxpYyBib3hTdHJpbmcgPSBCb3g8c3RyaW5nPih7IGtleTogJ2JveFN0cmluZycgfSkKICAgIGJ5dGVjIDQgLy8gImJveFN0cmluZyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIHRoaXMuYm94U3RyaW5nLnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5zZXRCb3hEeW5hbWljQnl0ZXModmFsdWU6IGJ5dGVzKSAtPiB2b2lkOgpzZXRCb3hEeW5hbWljQnl0ZXM6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjk3CiAgICAvLyBwdWJsaWMgc2V0Qm94RHluYW1pY0J5dGVzKHZhbHVlOiBhcmM0LkR5bmFtaWNCeXRlcyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBwdWJsaWMgYm94RHluYW1pY0J5dGVzID0gQm94PGFyYzQuRHluYW1pY0J5dGVzPih7IGtleTogJ2JveER5bmFtaWNCeXRlcycgfSkKICAgIGJ5dGVjIDUgLy8gImJveER5bmFtaWNCeXRlcyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTgKICAgIC8vIHRoaXMuYm94RHluYW1pY0J5dGVzLnZhbHVlID0gdmFsdWUKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcHVibGljIGJveER5bmFtaWNCeXRlcyA9IEJveDxhcmM0LkR5bmFtaWNCeXRlcz4oeyBrZXk6ICdib3hEeW5hbWljQnl0ZXMnIH0pCiAgICBieXRlYyA1IC8vICJib3hEeW5hbWljQnl0ZXMiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjk4CiAgICAvLyB0aGlzLmJveER5bmFtaWNCeXRlcy52YWx1ZSA9IHZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZGVsZXRlQm94KCkgLT4gdm9pZDoKZGVsZXRlQm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcHVibGljIGJveEludCA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94SW50JyB9KQogICAgYnl0ZWNfMyAvLyAiYm94SW50IgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIHRoaXMuYm94SW50LmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHB1YmxpYyBib3hEeW5hbWljQnl0ZXMgPSBCb3g8YXJjNC5EeW5hbWljQnl0ZXM+KHsga2V5OiAnYm94RHluYW1pY0J5dGVzJyB9KQogICAgYnl0ZWMgNSAvLyAiYm94RHluYW1pY0J5dGVzIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDgKICAgIC8vIHRoaXMuYm94RHluYW1pY0J5dGVzLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHB1YmxpYyBib3hTdHJpbmcgPSBCb3g8c3RyaW5nPih7IGtleTogJ2JveFN0cmluZycgfSkKICAgIGJ5dGVjIDQgLy8gImJveFN0cmluZyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTA5CiAgICAvLyB0aGlzLmJveFN0cmluZy5kZWxldGUoKQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyBwdWJsaWMgYm94SW50ID0gQm94PHVpbnQ2ND4oeyBrZXk6ICdib3hJbnQnIH0pCiAgICBieXRlY18zIC8vICJib3hJbnQiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gYXNzZXJ0KHRoaXMuYm94SW50LmdldCh7IGRlZmF1bHQ6IFVpbnQ2NCg0MikgfSkgPT09IDQyKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18zIC8vIDQyCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgaW50Y18zIC8vIDQyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBwdWJsaWMgYm94RHluYW1pY0J5dGVzID0gQm94PGFyYzQuRHluYW1pY0J5dGVzPih7IGtleTogJ2JveER5bmFtaWNCeXRlcycgfSkKICAgIGJ5dGVjIDUgLy8gImJveER5bmFtaWNCeXRlcyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTEyCiAgICAvLyBhc3NlcnQodGhpcy5ib3hEeW5hbWljQnl0ZXMuZ2V0KHsgZGVmYXVsdDogbmV3IGFyYzQuRHluYW1pY0J5dGVzKCc0MicpIH0pLm5hdGl2ZSA9PT0gQnl0ZXMoJzQyJykpCiAgICBib3hfZ2V0CiAgICBwdXNoYnl0ZXMgMHgwMDAyMzQzMgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICBleHRyYWN0IDIgMAogICAgYnl0ZWMgNyAvLyAiNDIiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBwdWJsaWMgYm94U3RyaW5nID0gQm94PHN0cmluZz4oeyBrZXk6ICdib3hTdHJpbmcnIH0pCiAgICBieXRlYyA0IC8vICJib3hTdHJpbmciCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjExMwogICAgLy8gYXNzZXJ0KHRoaXMuYm94U3RyaW5nLmdldCh7IGRlZmF1bHQ6ICc0MicgfSkgPT09ICc0MicpCiAgICBib3hfZ2V0CiAgICBieXRlYyA3IC8vICI0MiIKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgYnl0ZWMgNyAvLyAiNDIiCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLm1heWJlQm94KCkgLT4gdWludDY0LCB1aW50NjQ6Cm1heWJlQm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcHVibGljIGJveEludCA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94SW50JyB9KQogICAgYnl0ZWNfMyAvLyAiYm94SW50IgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMjQKICAgIC8vIGNvbnN0IFtib3hJbnRWYWx1ZSwgYm94SW50RXhpc3RzXSA9IHRoaXMuYm94SW50Lm1heWJlKCkKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTI1CiAgICAvLyByZXR1cm4gW2JveEludFZhbHVlLCBib3hJbnRFeGlzdHNdCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmdldEJveE1hcChrZXk6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldEJveE1hcDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTM2LTEzNwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0Qm94TWFwKGtleTogdWludDY0KTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMzgKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLnZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHB1YmxpYyBib3hNYXAgPSBCb3hNYXA8dWludDY0LCBzdHJpbmc+KHsga2V5UHJlZml4OiAnYm94TWFwJyB9KQogICAgYnl0ZWNfMiAvLyAiYm94TWFwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEzOAogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwKGtleSkudmFsdWUKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmdldEJveE1hcFdpdGhEZWZhdWx0KGtleTogdWludDY0KSAtPiBieXRlczoKZ2V0Qm94TWFwV2l0aERlZmF1bHQ6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE0OC0xNDkKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldEJveE1hcFdpdGhEZWZhdWx0KGtleTogdWludDY0KTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLmdldCh7IGRlZmF1bHQ6ICdkZWZhdWx0JyB9KQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBwdWJsaWMgYm94TWFwID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2JveE1hcCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveE1hcCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLmdldCh7IGRlZmF1bHQ6ICdkZWZhdWx0JyB9KQogICAgYm94X2dldAogICAgcHVzaGJ5dGVzICJkZWZhdWx0IgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLnNldEJveE1hcChrZXk6IHVpbnQ2NCwgdmFsdWU6IGJ5dGVzKSAtPiB2b2lkOgpzZXRCb3hNYXA6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2MAogICAgLy8gcHVibGljIHNldEJveE1hcChrZXk6IHVpbnQ2NCwgdmFsdWU6IHN0cmluZyk6IHZvaWQgewogICAgcHJvdG8gMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gdGhpcy5ib3hNYXAoa2V5KS52YWx1ZSA9IHZhbHVlCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHB1YmxpYyBib3hNYXAgPSBCb3hNYXA8dWludDY0LCBzdHJpbmc+KHsga2V5UHJlZml4OiAnYm94TWFwJyB9KQogICAgYnl0ZWNfMiAvLyAiYm94TWFwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gdGhpcy5ib3hNYXAoa2V5KS52YWx1ZSA9IHZhbHVlCiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmRlbGV0ZUJveE1hcChrZXk6IHVpbnQ2NCkgLT4gdm9pZDoKZGVsZXRlQm94TWFwOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNzAKICAgIC8vIHB1YmxpYyBkZWxldGVCb3hNYXAoa2V5OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNzEKICAgIC8vIHRoaXMuYm94TWFwKGtleSkuZGVsZXRlKCkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NgogICAgLy8gcHVibGljIGJveE1hcCA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdib3hNYXAnIH0pCiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTcxCiAgICAvLyB0aGlzLmJveE1hcChrZXkpLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UubWF5YmVCb3hNYXAoa2V5OiB1aW50NjQpIC0+IGJ5dGVzLCB1aW50NjQ6Cm1heWJlQm94TWFwOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODEtMTgyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBtYXliZUJveE1hcChrZXk6IHVpbnQ2NCk6IFtzdHJpbmcsIGJvb2xlYW5dIHsKICAgIHByb3RvIDEgMgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IHRoaXMuYm94TWFwKGtleSkubWF5YmUoKQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBwdWJsaWMgYm94TWFwID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2JveE1hcCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveE1hcCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IHRoaXMuYm94TWFwKGtleSkubWF5YmUoKQogICAgYm94X2dldAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTg0CiAgICAvLyByZXR1cm4gW2V4aXN0cyA/IHZhbHVlIDogJycsIGV4aXN0c10KICAgIGJ6IG1heWJlQm94TWFwX3Rlcm5hcnlfZmFsc2VAMgogICAgZnJhbWVfZGlnIDEKCm1heWJlQm94TWFwX3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTg0CiAgICAvLyByZXR1cm4gW2V4aXN0cyA/IHZhbHVlIDogJycsIGV4aXN0c10KICAgIGZyYW1lX2RpZyAwCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgcmV0c3ViCgptYXliZUJveE1hcF90ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE4NAogICAgLy8gcmV0dXJuIFtleGlzdHMgPyB2YWx1ZSA6ICcnLCBleGlzdHNdCiAgICBwdXNoYnl0ZXMgIiIKICAgIGIgbWF5YmVCb3hNYXBfdGVybmFyeV9tZXJnZUAzCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5ib3hNYXBMZW5ndGgoa2V5OiB1aW50NjQpIC0+IHVpbnQ2NDoKYm94TWFwTGVuZ3RoOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxOTQtMTk1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBib3hNYXBMZW5ndGgoa2V5OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE5NgogICAgLy8gaWYgKCF0aGlzLmJveE1hcChrZXkpLmV4aXN0cykgewogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBwdWJsaWMgYm94TWFwID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2JveE1hcCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveE1hcCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE5NgogICAgLy8gaWYgKCF0aGlzLmJveE1hcChrZXkpLmV4aXN0cykgewogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBibnogYm94TWFwTGVuZ3RoX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxOTcKICAgIC8vIHJldHVybiBVaW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmJveE1hcExlbmd0aF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIwMAogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwKGtleSkubGVuZ3RoCiAgICBmcmFtZV9kaWcgMAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuYm94TWFwRXhpc3RzKGtleTogdWludDY0KSAtPiB1aW50NjQ6CmJveE1hcEV4aXN0czoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjEwLTIxMQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgYm94TWFwRXhpc3RzKGtleTogdWludDY0KTogYm9vbGVhbiB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjEyCiAgICAvLyByZXR1cm4gdGhpcy5ib3hNYXAoa2V5KS5leGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NgogICAgLy8gcHVibGljIGJveE1hcCA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdib3hNYXAnIH0pCiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjEyCiAgICAvLyByZXR1cm4gdGhpcy5ib3hNYXAoa2V5KS5leGlzdHMKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5nZXRCb3hNYXBTdHJ1Y3Qoa2V5OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRCb3hNYXBTdHJ1Y3Q6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIzNC0yMzUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldEJveE1hcFN0cnVjdChrZXk6IHVpbnQ2NCk6IFVzZXJTdHJ1Y3QgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIzNgogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdCA9IEJveE1hcDx1aW50NjQsIFVzZXJTdHJ1Y3Q+KHsga2V5UHJlZml4OiAndXNlcnMnIH0pCiAgICBieXRlYyA2IC8vICJ1c2VycyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMzYKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcFN0cnVjdChrZXkpLnZhbHVlCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5zZXRCb3hNYXBTdHJ1Y3Qoa2V5OiB1aW50NjQsIHZhbHVlOiBieXRlcykgLT4gdWludDY0OgpzZXRCb3hNYXBTdHJ1Y3Q6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0NgogICAgLy8gcHVibGljIHNldEJveE1hcFN0cnVjdChrZXk6IHVpbnQ2NCwgdmFsdWU6IFVzZXJTdHJ1Y3QpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDgKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdCA9IEJveE1hcDx1aW50NjQsIFVzZXJTdHJ1Y3Q+KHsga2V5UHJlZml4OiAndXNlcnMnIH0pCiAgICBieXRlYyA2IC8vICJ1c2VycyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwbiAyCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0OAogICAgLy8gdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSA9IHZhbHVlLmNvcHkoKQogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNTAKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDktMjU3CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSwKICAgIC8vICAgewogICAgLy8gICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAvLyAgICAgaWQ6IHZhbHVlLmlkLAogICAgLy8gICAgIGFzc2V0OiB2YWx1ZS5hc3NldCwKICAgIC8vICAgfSwKICAgIC8vICAgJ2JveE1hcFN0cnVjdCB2YWx1ZSBtaXNtYXRjaCcsCiAgICAvLyApCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGxlbgogICAgc3Vic3RyaW5nMwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNTIKICAgIC8vIG5hbWU6IHZhbHVlLm5hbWUsCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMQogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDktMjU3CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSwKICAgIC8vICAgewogICAgLy8gICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAvLyAgICAgaWQ6IHZhbHVlLmlkLAogICAgLy8gICAgIGFzc2V0OiB2YWx1ZS5hc3NldCwKICAgIC8vICAgfSwKICAgIC8vICAgJ2JveE1hcFN0cnVjdCB2YWx1ZSBtaXNtYXRjaCcsCiAgICAvLyApCiAgICA9PQogICAgYnogc2V0Qm94TWFwU3RydWN0X2Jvb2xfZmFsc2VANAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNTAKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICBmcmFtZV9kaWcgMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQ5LTI1NwogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICAvLyAgIHsKICAgIC8vICAgICBuYW1lOiB2YWx1ZS5uYW1lLAogICAgLy8gICAgIGlkOiB2YWx1ZS5pZCwKICAgIC8vICAgICBhc3NldDogdmFsdWUuYXNzZXQsCiAgICAvLyAgIH0sCiAgICAvLyAgICdib3hNYXBTdHJ1Y3QgdmFsdWUgbWlzbWF0Y2gnLAogICAgLy8gKQogICAgZXh0cmFjdCAyIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1MwogICAgLy8gaWQ6IHZhbHVlLmlkLAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQ5LTI1NwogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICAvLyAgIHsKICAgIC8vICAgICBuYW1lOiB2YWx1ZS5uYW1lLAogICAgLy8gICAgIGlkOiB2YWx1ZS5pZCwKICAgIC8vICAgICBhc3NldDogdmFsdWUuYXNzZXQsCiAgICAvLyAgIH0sCiAgICAvLyAgICdib3hNYXBTdHJ1Y3QgdmFsdWUgbWlzbWF0Y2gnLAogICAgLy8gKQogICAgPT0KICAgIGJ6IHNldEJveE1hcFN0cnVjdF9ib29sX2ZhbHNlQDQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjUwCiAgICAvLyB0aGlzLmJveE1hcFN0cnVjdChrZXkpLnZhbHVlLAogICAgZnJhbWVfZGlnIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0OS0yNTcKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICB0aGlzLmJveE1hcFN0cnVjdChrZXkpLnZhbHVlLAogICAgLy8gICB7CiAgICAvLyAgICAgbmFtZTogdmFsdWUubmFtZSwKICAgIC8vICAgICBpZDogdmFsdWUuaWQsCiAgICAvLyAgICAgYXNzZXQ6IHZhbHVlLmFzc2V0LAogICAgLy8gICB9LAogICAgLy8gICAnYm94TWFwU3RydWN0IHZhbHVlIG1pc21hdGNoJywKICAgIC8vICkKICAgIGV4dHJhY3QgMTAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjU0CiAgICAvLyBhc3NldDogdmFsdWUuYXNzZXQsCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMTAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQ5LTI1NwogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICAvLyAgIHsKICAgIC8vICAgICBuYW1lOiB2YWx1ZS5uYW1lLAogICAgLy8gICAgIGlkOiB2YWx1ZS5pZCwKICAgIC8vICAgICBhc3NldDogdmFsdWUuYXNzZXQsCiAgICAvLyAgIH0sCiAgICAvLyAgICdib3hNYXBTdHJ1Y3QgdmFsdWUgbWlzbWF0Y2gnLAogICAgLy8gKQogICAgPT0KICAgIGJ6IHNldEJveE1hcFN0cnVjdF9ib29sX2ZhbHNlQDQKICAgIGludGNfMCAvLyAxCgpzZXRCb3hNYXBTdHJ1Y3RfYm9vbF9tZXJnZUA1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDktMjU3CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSwKICAgIC8vICAgewogICAgLy8gICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAvLyAgICAgaWQ6IHZhbHVlLmlkLAogICAgLy8gICAgIGFzc2V0OiB2YWx1ZS5hc3NldCwKICAgIC8vICAgfSwKICAgIC8vICAgJ2JveE1hcFN0cnVjdCB2YWx1ZSBtaXNtYXRjaCcsCiAgICAvLyApCiAgICBhc3NlcnQgLy8gYm94TWFwU3RydWN0IHZhbHVlIG1pc21hdGNoCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1OAogICAgLy8gcmV0dXJuIHRydWUKICAgIGludGNfMCAvLyAxCiAgICBzd2FwCiAgICByZXRzdWIKCnNldEJveE1hcFN0cnVjdF9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzEgLy8gMAogICAgYiBzZXRCb3hNYXBTdHJ1Y3RfYm9vbF9tZXJnZUA1CgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5ib3hNYXBTdHJ1Y3RMZW5ndGgoa2V5OiB1aW50NjQpIC0+IHVpbnQ2NDoKYm94TWFwU3RydWN0TGVuZ3RoOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIHB1YmxpYyBib3hNYXBTdHJ1Y3RMZW5ndGgoa2V5OiB1aW50NjQpOiBib29sZWFuIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdCA9IEJveE1hcDx1aW50NjQsIFVzZXJTdHJ1Y3Q+KHsga2V5UHJlZml4OiAndXNlcnMnIH0pCiAgICBieXRlYyA2IC8vICJ1c2VycyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjY5LTI3MwogICAgLy8gY29uc3QgdmFsdWUgPSBuZXcgVXNlclN0cnVjdCh7CiAgICAvLyAgIG5hbWU6IG5ldyBhcmM0LlN0cigndGVzdE5hbWUnKSwKICAgIC8vICAgaWQ6IG5ldyBhcmM0LlVpbnRONjQoNzApLAogICAgLy8gICBhc3NldDogbmV3IGFyYzQuVWludE42NCgxMjM0KSwKICAgIC8vIH0pCiAgICBwdXNoYnl0ZXMgMHgwMDEyMDAwMDAwMDAwMDAwMDA0NjAwMDAwMDAwMDAwMDA0ZDIwMDA4NzQ2NTczNzQ0ZTYxNmQ2NQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mjc4CiAgICAvLyBhc3NlcnQodGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZS5ieXRlcy5sZW5ndGggPT09IHZhbHVlLmJ5dGVzLmxlbmd0aCwgJ2JveE1hcFN0cnVjdCBieXRlcyBsZW5ndGggbWlzbWF0Y2gnKQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgbGVuCiAgICBwdXNoaW50IDI4IC8vIDI4CiAgICA9PQogICAgYXNzZXJ0IC8vIGJveE1hcFN0cnVjdCBieXRlcyBsZW5ndGggbWlzbWF0Y2gKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mjc5CiAgICAvLyBhc3NlcnQodGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS5sZW5ndGggPT09IHZhbHVlLmJ5dGVzLmxlbmd0aCwgJ2JveE1hcFN0cnVjdCBsZW5ndGggbWlzbWF0Y2gnKQogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHB1c2hpbnQgMjggLy8gMjgKICAgID09CiAgICBhc3NlcnQgLy8gYm94TWFwU3RydWN0IGxlbmd0aCBtaXNtYXRjaAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyODEKICAgIC8vIHJldHVybiB0cnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5ib3hNYXBTdHJ1Y3RFeGlzdHMoa2V5OiB1aW50NjQpIC0+IHVpbnQ2NDoKYm94TWFwU3RydWN0RXhpc3RzOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyOTEtMjkyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBib3hNYXBTdHJ1Y3RFeGlzdHMoa2V5OiB1aW50NjQpOiBib29sZWFuIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyOTMKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcFN0cnVjdChrZXkpLmV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyBwdWJsaWMgYm94TWFwU3RydWN0ID0gQm94TWFwPHVpbnQ2NCwgVXNlclN0cnVjdD4oeyBrZXlQcmVmaXg6ICd1c2VycycgfSkKICAgIGJ5dGVjIDYgLy8gInVzZXJzIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI5MwogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwU3RydWN0KGtleSkuZXhpc3RzCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZ2V0Qm94UmVmKCkgLT4gYnl0ZXM6CmdldEJveFJlZjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIHB1YmxpYyBib3hSZWYgPSBCb3hSZWYoeyBrZXk6ICdib3hSZWYnIH0pCiAgICBieXRlYyA4IC8vICJib3hSZWYiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gdGhpcy5ib3hSZWYuY3JlYXRlKHsgc2l6ZTogMzIgfSkKICAgIGludGNfMiAvLyAzMgogICAgYm94X2NyZWF0ZQogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMwNQogICAgLy8gY29uc3Qgc2VuZGVyQnl0ZXMgPSBUeG4uc2VuZGVyLmJ5dGVzCiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBwdWJsaWMgYm94UmVmID0gQm94UmVmKHsga2V5OiAnYm94UmVmJyB9KQogICAgYnl0ZWMgOCAvLyAiYm94UmVmIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMDYKICAgIC8vIHRoaXMuYm94UmVmLnB1dChzZW5kZXJCeXRlcykKICAgIGRpZyAxCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBwdWJsaWMgYm94UmVmID0gQm94UmVmKHsga2V5OiAnYm94UmVmJyB9KQogICAgYnl0ZWMgOCAvLyAiYm94UmVmIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMDcKICAgIC8vIGNvbnN0IHZhbHVlID0gdGhpcy5ib3hSZWYuZ2V0KHsgZGVmYXVsdDogc2VuZGVyQnl0ZXMgfSkKICAgIGJveF9nZXQKICAgIGRpZyAyCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzA4CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHNlbmRlckJ5dGVzLCAnYm94UmVmIHZhbHVlIG1pc21hdGNoJykKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGJveFJlZiB2YWx1ZSBtaXNtYXRjaAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMDkKICAgIC8vIHJldHVybiBuZXcgYXJjNC5BZGRyZXNzKHZhbHVlKQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5zZXRCb3hSZWYoa2V5OiBieXRlcykgLT4gdm9pZDoKc2V0Qm94UmVmOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTgKICAgIC8vIHB1YmxpYyBzZXRCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMjAKICAgIC8vIGJveFJlZi5jcmVhdGUoeyBzaXplOiAzMiB9KQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMjIKICAgIC8vIGJveFJlZi5wdXQoc2VuZGVyQnl0ZXMpCiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzIxCiAgICAvLyBjb25zdCBzZW5kZXJCeXRlcyA9IFR4bi5zZW5kZXIuYnl0ZXMKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzIyCiAgICAvLyBib3hSZWYucHV0KHNlbmRlckJ5dGVzKQogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5kZWxldGVCb3hSZWYoa2V5OiBieXRlcykgLT4gdm9pZDoKZGVsZXRlQm94UmVmOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzEKICAgIC8vIHB1YmxpYyBkZWxldGVCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzMKICAgIC8vIGJveFJlZi5kZWxldGUoKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzM0CiAgICAvLyBhc3NlcnRNYXRjaChib3hSZWYubWF5YmUoKSwgW0J5dGVzKCcnKSwgZmFsc2VdKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIHB1c2hieXRlcyAiIgogICAgPT0KICAgIGJ6IGRlbGV0ZUJveFJlZl9ib29sX2ZhbHNlQDQKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgYnVyeSAxCiAgICBibnogZGVsZXRlQm94UmVmX2Jvb2xfZmFsc2VANAogICAgaW50Y18wIC8vIDEKCmRlbGV0ZUJveFJlZl9ib29sX21lcmdlQDU6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMzNAogICAgLy8gYXNzZXJ0TWF0Y2goYm94UmVmLm1heWJlKCksIFtCeXRlcygnJyksIGZhbHNlXSkKICAgIGFzc2VydCAvLyBhc3NlcnQgdGFyZ2V0IGlzIG1hdGNoIGZvciBjb25kaXRpb25zCiAgICByZXRzdWIKCmRlbGV0ZUJveFJlZl9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzEgLy8gMAogICAgYiBkZWxldGVCb3hSZWZfYm9vbF9tZXJnZUA1CgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5tYXliZUJveFJlZihrZXk6IGJ5dGVzKSAtPiBieXRlcywgdWludDY0OgptYXliZUJveFJlZjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzQzLTM0NAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgbWF5YmVCb3hSZWYoa2V5OiBzdHJpbmcpOiBbYnl0ZXMsIGJvb2xlYW5dIHsKICAgIHByb3RvIDEgMgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNDYKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IGJveFJlZi5tYXliZSgpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzQ3CiAgICAvLyByZXR1cm4gW3ZhbHVlLCBleGlzdHNdCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmxlbmd0aEJveFJlZihrZXk6IGJ5dGVzKSAtPiB1aW50NjQ6Cmxlbmd0aEJveFJlZjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzU3CiAgICAvLyBwdWJsaWMgbGVuZ3RoQm94UmVmKGtleTogc3RyaW5nKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNTkKICAgIC8vIGFzc2VydChib3hSZWYuY3JlYXRlKHsgc2l6ZTogMzIgfSksICdib3hSZWYgY3JlYXRpb24gZmFpbGVkJykKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQgLy8gYm94UmVmIGNyZWF0aW9uIGZhaWxlZAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNjAKICAgIC8vIHJldHVybiBib3hSZWYubGVuZ3RoCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmV4dHJhY3RCb3hSZWYoa2V5OiBieXRlcykgLT4gdm9pZDoKZXh0cmFjdEJveFJlZjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBwdWJsaWMgZXh0cmFjdEJveFJlZihrZXk6IHN0cmluZyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM3MAogICAgLy8gY29uc3Qgc2VuZGVyQnl0ZXMgPSBUeG4uc2VuZGVyLmJ5dGVzCiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM3MQogICAgLy8gY29uc3QgYXBwQWRkcmVzcyA9IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLmJ5dGVzCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNzMKICAgIC8vIGNvbnN0IHRvdGFsU2l6ZSA9IFVpbnQ2NChhcHBBZGRyZXNzLmxlbmd0aCArIHNlbmRlckJ5dGVzLmxlbmd0aCkKICAgIGR1cAogICAgbGVuCiAgICBkaWcgMgogICAgbGVuCiAgICArCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM3NgogICAgLy8gYXNzZXJ0KGJveFJlZi5jcmVhdGUoeyBzaXplOiB0b3RhbFNpemUgfSksICdib3hSZWYgY3JlYXRpb24gZmFpbGVkJykKICAgIGZyYW1lX2RpZyAtMQogICAgc3dhcAogICAgYm94X2NyZWF0ZQogICAgYXNzZXJ0IC8vIGJveFJlZiBjcmVhdGlvbiBmYWlsZWQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mzc4CiAgICAvLyBib3hSZWYucmVwbGFjZSgwLCBzZW5kZXJCeXRlcykKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIGRpZyAzCiAgICBib3hfcmVwbGFjZQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNzkKICAgIC8vIGJveFJlZi5zcGxpY2UoMCwgMCwgYXBwQWRkcmVzcykKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIGR1cAogICAgZGlnIDMKICAgIGJveF9zcGxpY2UKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzgxCiAgICAvLyBjb25zdCBwYXJ0MSA9IGJveFJlZi5leHRyYWN0KDAsIDMyKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18yIC8vIDMyCiAgICBib3hfZXh0cmFjdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozODIKICAgIC8vIGNvbnN0IHBhcnQyID0gYm94UmVmLmV4dHJhY3QoMzIsIDMyKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMzIKICAgIGR1cAogICAgYm94X2V4dHJhY3QKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mzg0CiAgICAvLyBhc3NlcnQocGFydDEuZXF1YWxzKGFwcEFkZHJlc3MpLCAnRmlyc3QgcGFydCBzaG91bGQgbWF0Y2ggYXBwIGFkZHJlc3MnKQogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIEZpcnN0IHBhcnQgc2hvdWxkIG1hdGNoIGFwcCBhZGRyZXNzCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM4NQogICAgLy8gYXNzZXJ0KHBhcnQyLmVxdWFscyhzZW5kZXJCeXRlcyksICdTZWNvbmQgcGFydCBzaG91bGQgbWF0Y2ggc2VuZGVyIGJ5dGVzJykKICAgID09CiAgICBhc3NlcnQgLy8gU2Vjb25kIHBhcnQgc2hvdWxkIG1hdGNoIHNlbmRlciBieXRlcwogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5hcmM0Qm94KGtleTogYnl0ZXMpIC0+IGJ5dGVzOgphcmM0Qm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOTYKICAgIC8vIHB1YmxpYyBhcmM0Qm94KGtleTogc3RyaW5nKTogU3RhdGljSW50cyB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mzk5LTQwNAogICAgLy8gc3RhdGljSW50Qm94LnZhbHVlID0gbmV3IGFyYzQuU3RhdGljQXJyYXk8YXJjNC5VaW50TjgsIDQ+KAogICAgLy8gICBuZXcgYXJjNC5VaW50TjgoMCksCiAgICAvLyAgIG5ldyBhcmM0LlVpbnROOCgxKSwKICAgIC8vICAgbmV3IGFyYzQuVWludE44KDIpLAogICAgLy8gICBuZXcgYXJjNC5VaW50TjgoMyksCiAgICAvLyApCiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweDAwMDEwMjAzCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQwNgogICAgLy8gYXNzZXJ0KHN0YXRpY0ludEJveC52YWx1ZVswXS5uYXRpdmUgPT09IDApCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Ynl0ZQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQwNwogICAgLy8gYXNzZXJ0KHN0YXRpY0ludEJveC52YWx1ZVsxXS5uYXRpdmUgPT09IDEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpbnRjXzAgLy8gMQogICAgZ2V0Ynl0ZQogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDA4CiAgICAvLyBhc3NlcnQoc3RhdGljSW50Qm94LnZhbHVlWzJdLm5hdGl2ZSA9PT0gMikKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBnZXRieXRlCiAgICBwdXNoaW50IDIgLy8gMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MDkKICAgIC8vIGFzc2VydChzdGF0aWNJbnRCb3gudmFsdWVbM10ubmF0aXZlID09PSAzKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcHVzaGludCAzIC8vIDMKICAgIGdldGJ5dGUKICAgIHB1c2hpbnQgMyAvLyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQxMQogICAgLy8gcmV0dXJuIHN0YXRpY0ludEJveC52YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiAEAQAgKiYKBBUffHUBAAZib3hNYXAGYm94SW50CWJveFN0cmluZw9ib3hEeW5hbWljQnl0ZXMFdXNlcnMCNDIGYm94UmVmAgADMRtBAwOCGgS3SRNEBEnPQQUE+hVi9wTEl7xvBPT5y60EkQGn3gRqs+m8BCbKZIoEKMxxOQSeEf16BKRVLrUEZEo5lAT1NBjEBNgp0qMEsfWptgRTwoggBNXdkiwEWVuHuwTxgyB6BAPox34EXmzqwAQ4rPU+BIwiv9UEOemyJgSGAODrBFR/CnQ2GgCOGgI1AiQCFAICAfMB5wHPAbMBlwGBAXEBSAEzARoBAgDuANIAuQCgAJAAfgBsAEEAKgAYAAIjQzEZFEQxGEQ2GgFXAgCIBGsoTFCwIkMxGRREMRhENhoBVwIAiAQkIkMxGRREMRhENhoBVwIAiAQFFihMULAiQzEZFEQxGEQ2GgFXAgCIA+dLARUWVwYCTwJQKSNPA1QnCUxQTFAoTFCwIkMxGRREMRhENhoBVwIAiAOcIkMxGRREMRhENhoBVwIAiAN8IkMxGRREMRhEiANWKExQsCJDMRkURDEYRDYaAReIAzQpI08CVChMULAiQzEZFEQxGEQ2GgEXiALeKSNPAlQoTFCwIkMxGRREMRhENhoBFzYaAogCbikjTwJUKExQsCJDMRkURDEYRDYaAReIAkgoTFCwIkMxGRREMRhEgAwVH3x1AAZib3hNYXCwIkMxGRREMRhENhoBF4gCDykjTwJUKExQsCJDMRkURDEYRDYaAReIAd0WKExQsCJDMRkURDEYRDYaAReIAalLARUWVwYCTwJQKSNPA1QnCUxQTFAoTFCwIkMxGRREMRhENhoBF4gBdCJDMRkURDEYRDYaARc2GgJXAgCIAU4iQzEZFEQxGEQ2GgEXiAEnSRUWVwYCTFAoTFCwIkMxGRREMRhENhoBF4gA/0kVFlcGAkxQKExQsCJDMRkURDEYRIgA4UwWKSNPA1RQKExQsCJDMRkURDEYRIgAkiJDMRkURDEYRDYaAYgAdiJDMRkURDEYRDYaAVcCAIgAVyJDMRkURDEYRDYaAReIAD0iQzEZFEQxGESIACoWKExQsCJDMRkURDEYRIgAEhYoTFCwIkMxGUD9tTEYFEQiQyu+TBdMRIkrvkwXTESJigEAi/8WK0y/iYoBACcEvEgnBIv/v4mKAQAnBbxIJwWL/7+JK7xIJwW8SCcEvEgrvkwXJUxPAk0lEkQnBb6ABAACNDJOAk1XAgAnBxJEJwS+JwdOAk0nBxJEiSu+TBdMiYoBAYv/FipMUL5EiYoBAYv/FipMUL6AB2RlZmF1bHROAk2JigIAi/4WKkxQSbxIi/+/iYoBAIv/FipMULxIiYoBAov/FipMUL5JTwJMQQAJiwGLAE8DTwOJgABC//SKAQGL/xYqTFBJvUUBQAADI0yJiwC9REyJigEBi/8WKkxQvUUBiYoBAYv/FicGTFC+RImKAgGL/hYnBkxQRwK8SEmL/7++REkjWUsBFVKL/yNZi/8Vi/9OAlISQQAliwC+RFcCCIv/VwIIEkEAFYsAvkRXCgiL/1cKCBJBAAUiRCJMiSNC//iKAQGL/xYnBkxQSbxISYAcABIAAAAAAAAARgAAAAAAAATSAAh0ZXN0TmFtZb9JvkQVgRwSRL1EgRwSRCKJigEBi/8WJwZMUL1FAYknCCS5SDEAJwhLAb8nCL5LAk4CTUlPAhJEiYoBAIv/JLlIi/8xAL+JigEAi/+8SIv/vkiAABJBAAuL/75FAUAAAyJEiSNC//qKAQKL/76JigEBi/8kuUSL/71EiYoBADEAMgpJFUsCFQiL/0y5RIv/I0sDu4v/I0lLA9KL/yMkuov/JEm6TE8CEkQSRImKAQGL/4AEAAECA7+L/75EI1UURIv/vkQiVSISRIv/vkSBAlWBAhJEi/++RIEDVYEDEkSL/75EiQ==","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract +export const APP_SPEC: Arc56Contract = {"name":"BoxStorage","structs":{"UserStruct":[{"name":"name","type":"string"},{"name":"id","type":"uint64"},{"name":"asset","type":"uint64"}]},"methods":[{"name":"getBox","args":[],"returns":{"type":"uint64","desc":"The uint64 value stored in boxInt"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the value stored in the boxInt box","events":[],"recommendations":{}},{"name":"valueBox","args":[],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the value of the boxInt box","events":[],"recommendations":{}},{"name":"maybeBox","args":[],"returns":{"type":"(uint64,bool)","desc":"A tuple containing the value and a boolean indicating if the box exists"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the value stored in the boxInt box and checks if it exists","events":[],"recommendations":{}},{"name":"getBoxMap","args":[{"type":"uint64","name":"key","desc":"The key of the boxMap to retrieve the value from"}],"returns":{"type":"string","desc":"The value stored in the boxMap box"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the value stored in the boxMap box","events":[],"recommendations":{}},{"name":"getBoxMapWithDefault","args":[{"type":"uint64","name":"key","desc":"The key of the boxMap to retrieve the value from"}],"returns":{"type":"string","desc":"The value stored in the boxMap box"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the value stored in the boxMap box with a default value if the key does not exist","events":[],"recommendations":{}},{"name":"maybeBoxMap","args":[{"type":"uint64","name":"key","desc":"The key to check in the boxMap"}],"returns":{"type":"(string,bool)","desc":"A tuple containing the value and a boolean indicating if the box exists"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the value stored in the boxMap box and checks if it exists","events":[],"recommendations":{}},{"name":"keyPrefixBoxMap","args":[],"returns":{"type":"byte[]","desc":"The key prefix of the boxMap box"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the key prefix of the boxMap box","events":[],"recommendations":{}},{"name":"getBoxRef","args":[],"returns":{"type":"address","desc":"The value stored in the boxRef box"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Retrieves the value stored in the boxRef box","events":[],"recommendations":{}},{"name":"boxMapExists","args":[{"type":"uint64","name":"key","desc":"The key to check for"}],"returns":{"type":"bool","desc":"true if the box exists, false otherwise"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Checks if the boxMap box exists","events":[],"recommendations":{}},{"name":"maybeBoxRef","args":[{"type":"string","name":"key"}],"returns":{"type":"(byte[],bool)","desc":"A tuple containing the value and a boolean indicating if the box exists"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the value stored in the boxRef box and checks if it exists","events":[],"recommendations":{}},{"name":"setBox","args":[{"type":"uint64","name":"valueInt","desc":"The uint64 value to set in the boxInt box"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Sets the value of the boxInt box","events":[],"recommendations":{}},{"name":"setBoxString","args":[{"type":"string","name":"value","desc":"The string value to set in the boxString box"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Sets the value of the boxString box","events":[],"recommendations":{}},{"name":"setBoxDynamicBytes","args":[{"type":"byte[]","name":"value","desc":"The dynamic bytes value to set in the boxDynamicBytes box"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Sets the value of the boxDynamicBytes box","events":[],"recommendations":{}},{"name":"setBoxMap","args":[{"type":"uint64","name":"key","desc":"The key to set the value for"},{"type":"string","name":"value","desc":"The value to set in the boxMap box"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Sets the value of the boxMap box","events":[],"recommendations":{}},{"name":"setBoxRef","args":[{"type":"string","name":"key","desc":"The key to use for the box ref"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Creates a box ref with the given key and sets its value to the sender's address","events":[],"recommendations":{}},{"name":"boxMapLength","args":[{"type":"uint64","name":"key","desc":"The key to get the length for"}],"returns":{"type":"uint64","desc":"The length of the boxMap box"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the length of the boxMap box","events":[],"recommendations":{}},{"name":"lengthBoxRef","args":[{"type":"string","name":"key","desc":"The key to get the length for"}],"returns":{"type":"uint64","desc":"The length of the boxRef box"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Retrieves the length of the boxRef box","events":[],"recommendations":{}},{"name":"deleteBox","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Deletes the value of the boxInt box","events":[],"recommendations":{}},{"name":"deleteBoxMap","args":[{"type":"uint64","name":"key","desc":"The key to delete the value from"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Deletes the value of the boxMap box","events":[],"recommendations":{}},{"name":"deleteBoxRef","args":[{"type":"string","name":"key","desc":"The key to delete the value from"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Deletes the value of the boxRef box","events":[],"recommendations":{}},{"name":"extractBoxRef","args":[{"type":"string","name":"key","desc":"The key to extract from"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Extracts a value from the boxRef box","events":[],"recommendations":{}},{"name":"getBoxMapStruct","args":[{"type":"uint64","name":"key","desc":"The key to retrieve the value from"}],"returns":{"type":"(string,uint64,uint64)","struct":"UserStruct","desc":"The value stored in the boxMapStruct box"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Retrieves the value stored in the boxMapStruct box","events":[],"recommendations":{}},{"name":"boxMapStructExists","args":[{"type":"uint64","name":"key","desc":"The key to check for"}],"returns":{"type":"bool","desc":"true if the box exists, false otherwise"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Checks if the boxMapStruct box exists","events":[],"recommendations":{}},{"name":"setBoxMapStruct","args":[{"type":"uint64","name":"key","desc":"The key to set the value for"},{"type":"(string,uint64,uint64)","struct":"UserStruct","name":"value","desc":"The value to set in the boxMapStruct box"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Sets the value of the boxMapStruct box","events":[],"recommendations":{}},{"name":"boxMapStructLength","args":[{"type":"uint64","name":"key","desc":"The key to get the length for"}],"returns":{"type":"bool","desc":"The length of the boxMapStruct box"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Retrieves the length of the boxMapStruct box","events":[],"recommendations":{}},{"name":"arc4Box","args":[{"type":"string","name":"key","desc":"The key for the static array box"}],"returns":{"type":"uint8[4]","desc":"The static array stored in the box"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Creates and manipulates a box containing a static array of 8-bit unsigned integers","events":[],"recommendations":{}}],"arcs":[22,28],"desc":"BoxStorage Contract\n\nThis contract demonstrates various box storage operations in Algorand smart contracts.\nIt shows how to:\n- Create and manage different types of boxes (int, bytes, dynamic bytes, string)\n- Use BoxMap for key-value storage\n- Work with BoxRef for direct box manipulation\n- Perform operations like get, set, delete, and length calculations\n- Handle complex data structures in boxes\n\nThe contract implements the same functionality as its Python counterpart\nin python-examples/smart_contracts/box_storage/contract.py","networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{"boxString":{"keyType":"AVMString","valueType":"AVMString","key":"Ym94U3RyaW5n"},"boxInt":{"keyType":"AVMString","valueType":"AVMUint64","key":"Ym94SW50"},"boxBytes":{"keyType":"AVMString","valueType":"AVMBytes","key":"Ym94Qnl0ZXM="},"boxDynamicBytes":{"keyType":"AVMString","valueType":"byte[]","key":"Ym94RHluYW1pY0J5dGVz"},"boxRef":{"keyType":"AVMString","valueType":"AVMBytes","key":"Ym94UmVm"},"boxMap":{"keyType":"AVMString","valueType":"AVMString","key":"Ym94TWFw"},"boxMapStruct":{"keyType":"AVMString","valueType":"UserStruct","key":"dXNlcnM="}}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[867,874,892,1082,1096,1257,1292,1319,1335,1404,1411,1433,1441,1450,1461,1472],"errorMessage":"Box must have value"},{"pc":[1242],"errorMessage":"First part should match app address"},{"pc":[1320,1325,1336,1341],"errorMessage":"Index access is out of bounds"},{"pc":[274,296,321,349,374,394,412,430,446,458,481,502,520,542,557,575,591,634,659,675,699,740,768,796,820,837],"errorMessage":"OnCompletion is not NoOp"},{"pc":[1244],"errorMessage":"Second part should match sender bytes"},{"pc":[1191],"errorMessage":"assert target is match for conditions"},{"pc":[1409],"errorMessage":"boxMapStruct bytes length mismatch"},{"pc":[1415],"errorMessage":"boxMapStruct length mismatch"},{"pc":[1349],"errorMessage":"boxMapStruct value mismatch"},{"pc":[1092,1214],"errorMessage":"boxRef creation failed"},{"pc":[972],"errorMessage":"boxRef value mismatch"},{"pc":[859],"errorMessage":"can only call when creating"},{"pc":[277,299,324,352,377,397,415,433,449,461,484,505,523,545,560,578,594,637,662,678,702,743,771,799,823,840],"errorMessage":"can only call when not creating"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDMyIDQyCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgMHgwMCAiYm94TWFwIiAiYm94SW50IiAiYm94U3RyaW5nIiAiYm94RHluYW1pY0J5dGVzIiAidXNlcnMiICJib3hSZWYiICI0MiIgMHgwMDAzCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDMxCiAgICBwdXNoYnl0ZXNzIDB4Yjc0OTEzNDQgMHg0OWNmNDEwNSAweDZhYjNlOWJjIDB4MjZjYTY0OGEgMHgyOGNjNzEzOSAweDY0NGEzOTk0IDB4YjFmNWE5YjYgMHgwM2U4Yzc3ZSAweGQ4MjlkMmEzIDB4OGMyMmJmZDUgMHhmYTE1NjJmNyAweGM0OTdiYzZmIDB4ZjRmOWNiYWQgMHg5ZTExZmQ3YSAweDVlNmNlYWMwIDB4ZjUzNDE4YzQgMHgzOWU5YjIyNiAweDkxMDFhN2RlIDB4YTQ1NTJlYjUgMHgzOGFjZjUzZSAweDg2MDBlMGViIDB4NTNjMjg4MjAgMHhmMTgzMjA3YSAweGQ1ZGQ5MjJjIDB4NTk1Yjg3YmIgMHg1NDdmMGE3NCAvLyBtZXRob2QgImdldEJveCgpdWludDY0IiwgbWV0aG9kICJ2YWx1ZUJveCgpdWludDY0IiwgbWV0aG9kICJtYXliZUJveCgpKHVpbnQ2NCxib29sKSIsIG1ldGhvZCAiZ2V0Qm94TWFwKHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImdldEJveE1hcFdpdGhEZWZhdWx0KHVpbnQ2NClzdHJpbmciLCBtZXRob2QgIm1heWJlQm94TWFwKHVpbnQ2NCkoc3RyaW5nLGJvb2wpIiwgbWV0aG9kICJrZXlQcmVmaXhCb3hNYXAoKWJ5dGVbXSIsIG1ldGhvZCAiZ2V0Qm94UmVmKClhZGRyZXNzIiwgbWV0aG9kICJib3hNYXBFeGlzdHModWludDY0KWJvb2wiLCBtZXRob2QgIm1heWJlQm94UmVmKHN0cmluZykoYnl0ZVtdLGJvb2wpIiwgbWV0aG9kICJzZXRCb3godWludDY0KXZvaWQiLCBtZXRob2QgInNldEJveFN0cmluZyhzdHJpbmcpdm9pZCIsIG1ldGhvZCAic2V0Qm94RHluYW1pY0J5dGVzKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJzZXRCb3hNYXAodWludDY0LHN0cmluZyl2b2lkIiwgbWV0aG9kICJzZXRCb3hSZWYoc3RyaW5nKXZvaWQiLCBtZXRob2QgImJveE1hcExlbmd0aCh1aW50NjQpdWludDY0IiwgbWV0aG9kICJsZW5ndGhCb3hSZWYoc3RyaW5nKXVpbnQ2NCIsIG1ldGhvZCAiZGVsZXRlQm94KCl2b2lkIiwgbWV0aG9kICJkZWxldGVCb3hNYXAodWludDY0KXZvaWQiLCBtZXRob2QgImRlbGV0ZUJveFJlZihzdHJpbmcpdm9pZCIsIG1ldGhvZCAiZXh0cmFjdEJveFJlZihzdHJpbmcpdm9pZCIsIG1ldGhvZCAiZ2V0Qm94TWFwU3RydWN0KHVpbnQ2NCkoc3RyaW5nLHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJib3hNYXBTdHJ1Y3RFeGlzdHModWludDY0KWJvb2wiLCBtZXRob2QgInNldEJveE1hcFN0cnVjdCh1aW50NjQsKHN0cmluZyx1aW50NjQsdWludDY0KSlib29sIiwgbWV0aG9kICJib3hNYXBTdHJ1Y3RMZW5ndGgodWludDY0KWJvb2wiLCBtZXRob2QgImFyYzRCb3goc3RyaW5nKXVpbnQ4WzRdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9nZXRCb3hfcm91dGVAMyBtYWluX3ZhbHVlQm94X3JvdXRlQDQgbWFpbl9tYXliZUJveF9yb3V0ZUA1IG1haW5fZ2V0Qm94TWFwX3JvdXRlQDYgbWFpbl9nZXRCb3hNYXBXaXRoRGVmYXVsdF9yb3V0ZUA3IG1haW5fbWF5YmVCb3hNYXBfcm91dGVAOCBtYWluX2tleVByZWZpeEJveE1hcF9yb3V0ZUA5IG1haW5fZ2V0Qm94UmVmX3JvdXRlQDEwIG1haW5fYm94TWFwRXhpc3RzX3JvdXRlQDExIG1haW5fbWF5YmVCb3hSZWZfcm91dGVAMTIgbWFpbl9zZXRCb3hfcm91dGVAMTMgbWFpbl9zZXRCb3hTdHJpbmdfcm91dGVAMTQgbWFpbl9zZXRCb3hEeW5hbWljQnl0ZXNfcm91dGVAMTUgbWFpbl9zZXRCb3hNYXBfcm91dGVAMTYgbWFpbl9zZXRCb3hSZWZfcm91dGVAMTcgbWFpbl9ib3hNYXBMZW5ndGhfcm91dGVAMTggbWFpbl9sZW5ndGhCb3hSZWZfcm91dGVAMTkgbWFpbl9kZWxldGVCb3hfcm91dGVAMjAgbWFpbl9kZWxldGVCb3hNYXBfcm91dGVAMjEgbWFpbl9kZWxldGVCb3hSZWZfcm91dGVAMjIgbWFpbl9leHRyYWN0Qm94UmVmX3JvdXRlQDIzIG1haW5fZ2V0Qm94TWFwU3RydWN0X3JvdXRlQDI0IG1haW5fYm94TWFwU3RydWN0RXhpc3RzX3JvdXRlQDI1IG1haW5fc2V0Qm94TWFwU3RydWN0X3JvdXRlQDI2IG1haW5fYm94TWFwU3RydWN0TGVuZ3RoX3JvdXRlQDI3IG1haW5fYXJjNEJveF9yb3V0ZUAyOAoKbWFpbl9hZnRlcl9pZl9lbHNlQDM1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fYXJjNEJveF9yb3V0ZUAyODoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzUyCiAgICAvLyBwdWJsaWMgYXJjNEJveChrZXk6IHN0cmluZyk6IFN0YXRpY0ludHMgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzUyCiAgICAvLyBwdWJsaWMgYXJjNEJveChrZXk6IHN0cmluZyk6IFN0YXRpY0ludHMgewogICAgY2FsbHN1YiBhcmM0Qm94CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JveE1hcFN0cnVjdExlbmd0aF9yb3V0ZUAyNzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzMwCiAgICAvLyBwdWJsaWMgYm94TWFwU3RydWN0TGVuZ3RoKGtleTogdWludDY0KTogYm9vbGVhbiB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMzMAogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdExlbmd0aChrZXk6IHVpbnQ2NCk6IGJvb2xlYW4gewogICAgY2FsbHN1YiBib3hNYXBTdHJ1Y3RMZW5ndGgKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3NldEJveE1hcFN0cnVjdF9yb3V0ZUAyNjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzEwCiAgICAvLyBwdWJsaWMgc2V0Qm94TWFwU3RydWN0KGtleTogdWludDY0LCB2YWx1ZTogVXNlclN0cnVjdCk6IGJvb2xlYW4gewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTAKICAgIC8vIHB1YmxpYyBzZXRCb3hNYXBTdHJ1Y3Qoa2V5OiB1aW50NjQsIHZhbHVlOiBVc2VyU3RydWN0KTogYm9vbGVhbiB7CiAgICBjYWxsc3ViIHNldEJveE1hcFN0cnVjdAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94TWFwU3RydWN0RXhpc3RzX3JvdXRlQDI1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMDAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMDAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBib3hNYXBTdHJ1Y3RFeGlzdHMKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveE1hcFN0cnVjdF9yb3V0ZUAyNDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0Qm94TWFwU3RydWN0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2V4dHJhY3RCb3hSZWZfcm91dGVAMjM6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI2NAogICAgLy8gcHVibGljIGV4dHJhY3RCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI2NAogICAgLy8gcHVibGljIGV4dHJhY3RCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIGNhbGxzdWIgZXh0cmFjdEJveFJlZgogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZWxldGVCb3hSZWZfcm91dGVAMjI6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gcHVibGljIGRlbGV0ZUJveFJlZihrZXk6IHN0cmluZyk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjUyCiAgICAvLyBwdWJsaWMgZGVsZXRlQm94UmVmKGtleTogc3RyaW5nKTogdm9pZCB7CiAgICBjYWxsc3ViIGRlbGV0ZUJveFJlZgogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZWxldGVCb3hNYXBfcm91dGVAMjE6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0NAogICAgLy8gcHVibGljIGRlbGV0ZUJveE1hcChrZXk6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDQKICAgIC8vIHB1YmxpYyBkZWxldGVCb3hNYXAoa2V5OiB1aW50NjQpOiB2b2lkIHsKICAgIGNhbGxzdWIgZGVsZXRlQm94TWFwCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2RlbGV0ZUJveF9yb3V0ZUAyMDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjMwCiAgICAvLyBwdWJsaWMgZGVsZXRlQm94KCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZUJveAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9sZW5ndGhCb3hSZWZfcm91dGVAMTk6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIxOQogICAgLy8gcHVibGljIGxlbmd0aEJveFJlZihrZXk6IHN0cmluZyk6IHVpbnQ2NCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIHB1YmxpYyBsZW5ndGhCb3hSZWYoa2V5OiBzdHJpbmcpOiB1aW50NjQgewogICAgY2FsbHN1YiBsZW5ndGhCb3hSZWYKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94TWFwTGVuZ3RoX3JvdXRlQDE4OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMDUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMDUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBib3hNYXBMZW5ndGgKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0Qm94UmVmX3JvdXRlQDE3OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIHB1YmxpYyBzZXRCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE5MQogICAgLy8gcHVibGljIHNldEJveFJlZihrZXk6IHN0cmluZyk6IHZvaWQgewogICAgY2FsbHN1YiBzZXRCb3hSZWYKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0Qm94TWFwX3JvdXRlQDE2OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHB1YmxpYyBzZXRCb3hNYXAoa2V5OiB1aW50NjQsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE4MwogICAgLy8gcHVibGljIHNldEJveE1hcChrZXk6IHVpbnQ2NCwgdmFsdWU6IHN0cmluZyk6IHZvaWQgewogICAgY2FsbHN1YiBzZXRCb3hNYXAKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0Qm94RHluYW1pY0J5dGVzX3JvdXRlQDE1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNzQKICAgIC8vIHB1YmxpYyBzZXRCb3hEeW5hbWljQnl0ZXModmFsdWU6IGFyYzQuRHluYW1pY0J5dGVzKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3NAogICAgLy8gcHVibGljIHNldEJveER5bmFtaWNCeXRlcyh2YWx1ZTogYXJjNC5EeW5hbWljQnl0ZXMpOiB2b2lkIHsKICAgIGNhbGxzdWIgc2V0Qm94RHluYW1pY0J5dGVzCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3NldEJveFN0cmluZ19yb3V0ZUAxNDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBwdWJsaWMgc2V0Qm94U3RyaW5nKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2NgogICAgLy8gcHVibGljIHNldEJveFN0cmluZyh2YWx1ZTogc3RyaW5nKTogdm9pZCB7CiAgICBjYWxsc3ViIHNldEJveFN0cmluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRCb3hfcm91dGVAMTM6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE1OAogICAgLy8gcHVibGljIHNldEJveCh2YWx1ZUludDogdWludDY0KTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE1OAogICAgLy8gcHVibGljIHNldEJveCh2YWx1ZUludDogdWludDY0KTogdm9pZCB7CiAgICBjYWxsc3ViIHNldEJveAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tYXliZUJveFJlZl9yb3V0ZUAxMjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTQ1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE0NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIG1heWJlQm94UmVmCiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBieXRlYyA5IC8vIDB4MDAwMwogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94TWFwRXhpc3RzX3JvdXRlQDExOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMzYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMzYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBib3hNYXBFeGlzdHMKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveFJlZl9yb3V0ZUAxMDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTIyCiAgICAvLyBwdWJsaWMgZ2V0Qm94UmVmKCk6IGFyYzQuQWRkcmVzcyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qm94UmVmCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2tleVByZWZpeEJveE1hcF9yb3V0ZUA5OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDY2MjZmNzg0ZDYxNzAKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tYXliZUJveE1hcF9yb3V0ZUA4OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBtYXliZUJveE1hcAogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgYnl0ZWMgOSAvLyAweDAwMDMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveE1hcFdpdGhEZWZhdWx0X3JvdXRlQDc6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjkzCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXRCb3hNYXBXaXRoRGVmYXVsdAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0Qm94TWFwX3JvdXRlQDY6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXRCb3hNYXAKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21heWJlQm94X3JvdXRlQDU6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjcyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZUJveAogICAgc3dhcAogICAgaXRvYgogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92YWx1ZUJveF9yb3V0ZUA0OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdmFsdWVCb3gKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0Qm94X3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRCb3gKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDMxOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5nZXRCb3goKSAtPiB1aW50NjQ6CmdldEJveDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIHB1YmxpYyBib3hJbnQgPSBCb3g8dWludDY0Pih7IGtleTogJ2JveEludCcgfSkKICAgIGJ5dGVjXzMgLy8gImJveEludCIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIHJldHVybiB0aGlzLmJveEludC52YWx1ZQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UudmFsdWVCb3goKSAtPiB1aW50NjQ6CnZhbHVlQm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcHVibGljIGJveEludCA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94SW50JyB9KQogICAgYnl0ZWNfMyAvLyAiYm94SW50IgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo2NQogICAgLy8gcmV0dXJuIHRoaXMuYm94SW50LnZhbHVlCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5tYXliZUJveCgpIC0+IHVpbnQ2NCwgdWludDY0OgptYXliZUJveDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIHB1YmxpYyBib3hJbnQgPSBCb3g8dWludDY0Pih7IGtleTogJ2JveEludCcgfSkKICAgIGJ5dGVjXzMgLy8gImJveEludCIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NzQKICAgIC8vIGNvbnN0IFtib3hJbnRWYWx1ZSwgYm94SW50RXhpc3RzXSA9IHRoaXMuYm94SW50Lm1heWJlKCkKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NzUKICAgIC8vIHJldHVybiBbYm94SW50VmFsdWUsIGJveEludEV4aXN0c10KICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZ2V0Qm94TWFwKGtleTogdWludDY0KSAtPiBieXRlczoKZ2V0Qm94TWFwOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4My04NAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0Qm94TWFwKGtleTogdWludDY0KTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4NQogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwKGtleSkudmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NgogICAgLy8gcHVibGljIGJveE1hcCA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdib3hNYXAnIH0pCiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLnZhbHVlCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5nZXRCb3hNYXBXaXRoRGVmYXVsdChrZXk6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldEJveE1hcFdpdGhEZWZhdWx0OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo5My05NAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0Qm94TWFwV2l0aERlZmF1bHQoa2V5OiB1aW50NjQpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjk1CiAgICAvLyByZXR1cm4gdGhpcy5ib3hNYXAoa2V5KS5nZXQoeyBkZWZhdWx0OiAnZGVmYXVsdCcgfSkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NgogICAgLy8gcHVibGljIGJveE1hcCA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdib3hNYXAnIH0pCiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTUKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLmdldCh7IGRlZmF1bHQ6ICdkZWZhdWx0JyB9KQogICAgYm94X2dldAogICAgcHVzaGJ5dGVzICJkZWZhdWx0IgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLm1heWJlQm94TWFwKGtleTogdWludDY0KSAtPiBieXRlcywgdWludDY0OgptYXliZUJveE1hcDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTAzLTEwNAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgbWF5YmVCb3hNYXAoa2V5OiB1aW50NjQpOiBbc3RyaW5nLCBib29sZWFuXSB7CiAgICBwcm90byAxIDIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTA1CiAgICAvLyBjb25zdCBbdmFsdWUsIGV4aXN0c10gPSB0aGlzLmJveE1hcChrZXkpLm1heWJlKCkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NgogICAgLy8gcHVibGljIGJveE1hcCA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdib3hNYXAnIH0pCiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTA1CiAgICAvLyBjb25zdCBbdmFsdWUsIGV4aXN0c10gPSB0aGlzLmJveE1hcChrZXkpLm1heWJlKCkKICAgIGJveF9nZXQKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEwNgogICAgLy8gcmV0dXJuIFtleGlzdHMgPyB2YWx1ZSA6ICcnLCBleGlzdHNdCiAgICBieiBtYXliZUJveE1hcF90ZXJuYXJ5X2ZhbHNlQDIKICAgIGZyYW1lX2RpZyAxCgptYXliZUJveE1hcF90ZXJuYXJ5X21lcmdlQDM6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEwNgogICAgLy8gcmV0dXJuIFtleGlzdHMgPyB2YWx1ZSA6ICcnLCBleGlzdHNdCiAgICBmcmFtZV9kaWcgMAogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDMKICAgIHJldHN1YgoKbWF5YmVCb3hNYXBfdGVybmFyeV9mYWxzZUAyOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIHJldHVybiBbZXhpc3RzID8gdmFsdWUgOiAnJywgZXhpc3RzXQogICAgcHVzaGJ5dGVzICIiCiAgICBiIG1heWJlQm94TWFwX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZ2V0Qm94UmVmKCkgLT4gYnl0ZXM6CmdldEJveFJlZjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIHB1YmxpYyBib3hSZWYgPSBCb3hSZWYoeyBrZXk6ICdib3hSZWYnIH0pCiAgICBieXRlYyA3IC8vICJib3hSZWYiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEyMwogICAgLy8gdGhpcy5ib3hSZWYuY3JlYXRlKHsgc2l6ZTogMzIgfSkKICAgIGludGNfMiAvLyAzMgogICAgYm94X2NyZWF0ZQogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEyNAogICAgLy8gY29uc3Qgc2VuZGVyQnl0ZXMgPSBUeG4uc2VuZGVyLmJ5dGVzCiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBwdWJsaWMgYm94UmVmID0gQm94UmVmKHsga2V5OiAnYm94UmVmJyB9KQogICAgYnl0ZWMgNyAvLyAiYm94UmVmIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMjUKICAgIC8vIHRoaXMuYm94UmVmLnB1dChzZW5kZXJCeXRlcykKICAgIGRpZyAxCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBwdWJsaWMgYm94UmVmID0gQm94UmVmKHsga2V5OiAnYm94UmVmJyB9KQogICAgYnl0ZWMgNyAvLyAiYm94UmVmIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMjYKICAgIC8vIGNvbnN0IHZhbHVlID0gdGhpcy5ib3hSZWYuZ2V0KHsgZGVmYXVsdDogc2VuZGVyQnl0ZXMgfSkKICAgIGJveF9nZXQKICAgIGRpZyAyCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTI3CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHNlbmRlckJ5dGVzLCAnYm94UmVmIHZhbHVlIG1pc21hdGNoJykKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGJveFJlZiB2YWx1ZSBtaXNtYXRjaAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIHJldHVybiBuZXcgYXJjNC5BZGRyZXNzKHZhbHVlKQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5ib3hNYXBFeGlzdHMoa2V5OiB1aW50NjQpIC0+IHVpbnQ2NDoKYm94TWFwRXhpc3RzOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMzYtMTM3CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBib3hNYXBFeGlzdHMoa2V5OiB1aW50NjQpOiBib29sZWFuIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMzgKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLmV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBwdWJsaWMgYm94TWFwID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2JveE1hcCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveE1hcCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMzgKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLmV4aXN0cwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLm1heWJlQm94UmVmKGtleTogYnl0ZXMpIC0+IGJ5dGVzLCB1aW50NjQ6Cm1heWJlQm94UmVmOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNDUtMTQ2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBtYXliZUJveFJlZihrZXk6IHN0cmluZyk6IFtieXRlcywgYm9vbGVhbl0gewogICAgcHJvdG8gMSAyCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE0OAogICAgLy8gY29uc3QgW3ZhbHVlLCBleGlzdHNdID0gYm94UmVmLm1heWJlKCkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIHJldHVybiBbdmFsdWUsIGV4aXN0c10KICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2Uuc2V0Qm94KHZhbHVlSW50OiB1aW50NjQpIC0+IHZvaWQ6CnNldEJveDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTU4CiAgICAvLyBwdWJsaWMgc2V0Qm94KHZhbHVlSW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNTkKICAgIC8vIHRoaXMuYm94SW50LnZhbHVlID0gdmFsdWVJbnQKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcHVibGljIGJveEludCA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94SW50JyB9KQogICAgYnl0ZWNfMyAvLyAiYm94SW50IgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNTkKICAgIC8vIHRoaXMuYm94SW50LnZhbHVlID0gdmFsdWVJbnQKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2Uuc2V0Qm94U3RyaW5nKHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0Qm94U3RyaW5nOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNjYKICAgIC8vIHB1YmxpYyBzZXRCb3hTdHJpbmcodmFsdWU6IHN0cmluZyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBwdWJsaWMgYm94U3RyaW5nID0gQm94PHN0cmluZz4oeyBrZXk6ICdib3hTdHJpbmcnIH0pCiAgICBieXRlYyA0IC8vICJib3hTdHJpbmciCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2NwogICAgLy8gdGhpcy5ib3hTdHJpbmcudmFsdWUgPSB2YWx1ZQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBwdWJsaWMgYm94U3RyaW5nID0gQm94PHN0cmluZz4oeyBrZXk6ICdib3hTdHJpbmcnIH0pCiAgICBieXRlYyA0IC8vICJib3hTdHJpbmciCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2NwogICAgLy8gdGhpcy5ib3hTdHJpbmcudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLnNldEJveER5bmFtaWNCeXRlcyh2YWx1ZTogYnl0ZXMpIC0+IHZvaWQ6CnNldEJveER5bmFtaWNCeXRlczoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTc0CiAgICAvLyBwdWJsaWMgc2V0Qm94RHluYW1pY0J5dGVzKHZhbHVlOiBhcmM0LkR5bmFtaWNCeXRlcyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBwdWJsaWMgYm94RHluYW1pY0J5dGVzID0gQm94PGFyYzQuRHluYW1pY0J5dGVzPih7IGtleTogJ2JveER5bmFtaWNCeXRlcycgfSkKICAgIGJ5dGVjIDUgLy8gImJveER5bmFtaWNCeXRlcyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTc1CiAgICAvLyB0aGlzLmJveER5bmFtaWNCeXRlcy52YWx1ZSA9IHZhbHVlCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHB1YmxpYyBib3hEeW5hbWljQnl0ZXMgPSBCb3g8YXJjNC5EeW5hbWljQnl0ZXM+KHsga2V5OiAnYm94RHluYW1pY0J5dGVzJyB9KQogICAgYnl0ZWMgNSAvLyAiYm94RHluYW1pY0J5dGVzIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNzUKICAgIC8vIHRoaXMuYm94RHluYW1pY0J5dGVzLnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5zZXRCb3hNYXAoa2V5OiB1aW50NjQsIHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0Qm94TWFwOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHB1YmxpYyBzZXRCb3hNYXAoa2V5OiB1aW50NjQsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsKICAgIHByb3RvIDIgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODQKICAgIC8vIHRoaXMuYm94TWFwKGtleSkudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0yCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBwdWJsaWMgYm94TWFwID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2JveE1hcCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveE1hcCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODQKICAgIC8vIHRoaXMuYm94TWFwKGtleSkudmFsdWUgPSB2YWx1ZQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5zZXRCb3hSZWYoa2V5OiBieXRlcykgLT4gdm9pZDoKc2V0Qm94UmVmOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIHB1YmxpYyBzZXRCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxOTMKICAgIC8vIGJveFJlZi5jcmVhdGUoeyBzaXplOiAzMiB9KQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxOTUKICAgIC8vIGJveFJlZi5wdXQoc2VuZGVyQnl0ZXMpCiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTk0CiAgICAvLyBjb25zdCBzZW5kZXJCeXRlcyA9IFR4bi5zZW5kZXIuYnl0ZXMKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTk1CiAgICAvLyBib3hSZWYucHV0KHNlbmRlckJ5dGVzKQogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5ib3hNYXBMZW5ndGgoa2V5OiB1aW50NjQpIC0+IHVpbnQ2NDoKYm94TWFwTGVuZ3RoOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMDUtMjA2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBib3hNYXBMZW5ndGgoa2V5OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gaWYgKCF0aGlzLmJveE1hcChrZXkpLmV4aXN0cykgewogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBwdWJsaWMgYm94TWFwID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2JveE1hcCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveE1hcCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gaWYgKCF0aGlzLmJveE1hcChrZXkpLmV4aXN0cykgewogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBibnogYm94TWFwTGVuZ3RoX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMDgKICAgIC8vIHJldHVybiBVaW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmJveE1hcExlbmd0aF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIxMQogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwKGtleSkubGVuZ3RoCiAgICBmcmFtZV9kaWcgMAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UubGVuZ3RoQm94UmVmKGtleTogYnl0ZXMpIC0+IHVpbnQ2NDoKbGVuZ3RoQm94UmVmOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIHB1YmxpYyBsZW5ndGhCb3hSZWYoa2V5OiBzdHJpbmcpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIyMQogICAgLy8gYXNzZXJ0KGJveFJlZi5jcmVhdGUoeyBzaXplOiAzMiB9KSwgJ2JveFJlZiBjcmVhdGlvbiBmYWlsZWQnKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9jcmVhdGUKICAgIGFzc2VydCAvLyBib3hSZWYgY3JlYXRpb24gZmFpbGVkCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIyMgogICAgLy8gcmV0dXJuIGJveFJlZi5sZW5ndGgKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZGVsZXRlQm94KCkgLT4gdm9pZDoKZGVsZXRlQm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcHVibGljIGJveEludCA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94SW50JyB9KQogICAgYnl0ZWNfMyAvLyAiYm94SW50IgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMzEKICAgIC8vIHRoaXMuYm94SW50LmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHB1YmxpYyBib3hEeW5hbWljQnl0ZXMgPSBCb3g8YXJjNC5EeW5hbWljQnl0ZXM+KHsga2V5OiAnYm94RHluYW1pY0J5dGVzJyB9KQogICAgYnl0ZWMgNSAvLyAiYm94RHluYW1pY0J5dGVzIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMzIKICAgIC8vIHRoaXMuYm94RHluYW1pY0J5dGVzLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHB1YmxpYyBib3hTdHJpbmcgPSBCb3g8c3RyaW5nPih7IGtleTogJ2JveFN0cmluZycgfSkKICAgIGJ5dGVjIDQgLy8gImJveFN0cmluZyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjMzCiAgICAvLyB0aGlzLmJveFN0cmluZy5kZWxldGUoKQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyBwdWJsaWMgYm94SW50ID0gQm94PHVpbnQ2ND4oeyBrZXk6ICdib3hJbnQnIH0pCiAgICBieXRlY18zIC8vICJib3hJbnQiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIzNQogICAgLy8gYXNzZXJ0KHRoaXMuYm94SW50LmdldCh7IGRlZmF1bHQ6IFVpbnQ2NCg0MikgfSkgPT09IDQyKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18zIC8vIDQyCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgaW50Y18zIC8vIDQyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBwdWJsaWMgYm94RHluYW1pY0J5dGVzID0gQm94PGFyYzQuRHluYW1pY0J5dGVzPih7IGtleTogJ2JveER5bmFtaWNCeXRlcycgfSkKICAgIGJ5dGVjIDUgLy8gImJveER5bmFtaWNCeXRlcyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjM2CiAgICAvLyBhc3NlcnQodGhpcy5ib3hEeW5hbWljQnl0ZXMuZ2V0KHsgZGVmYXVsdDogbmV3IGFyYzQuRHluYW1pY0J5dGVzKCc0MicpIH0pLm5hdGl2ZSA9PT0gQnl0ZXMoJzQyJykpCiAgICBib3hfZ2V0CiAgICBwdXNoYnl0ZXMgMHgwMDAyMzQzMgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICBleHRyYWN0IDIgMAogICAgYnl0ZWMgOCAvLyAiNDIiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBwdWJsaWMgYm94U3RyaW5nID0gQm94PHN0cmluZz4oeyBrZXk6ICdib3hTdHJpbmcnIH0pCiAgICBieXRlYyA0IC8vICJib3hTdHJpbmciCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIzNwogICAgLy8gYXNzZXJ0KHRoaXMuYm94U3RyaW5nLmdldCh7IGRlZmF1bHQ6ICc0MicgfSkgPT09ICc0MicpCiAgICBib3hfZ2V0CiAgICBieXRlYyA4IC8vICI0MiIKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgYnl0ZWMgOCAvLyAiNDIiCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmRlbGV0ZUJveE1hcChrZXk6IHVpbnQ2NCkgLT4gdm9pZDoKZGVsZXRlQm94TWFwOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDQKICAgIC8vIHB1YmxpYyBkZWxldGVCb3hNYXAoa2V5OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDUKICAgIC8vIHRoaXMuYm94TWFwKGtleSkuZGVsZXRlKCkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NgogICAgLy8gcHVibGljIGJveE1hcCA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdib3hNYXAnIH0pCiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQ1CiAgICAvLyB0aGlzLmJveE1hcChrZXkpLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZGVsZXRlQm94UmVmKGtleTogYnl0ZXMpIC0+IHZvaWQ6CmRlbGV0ZUJveFJlZjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjUyCiAgICAvLyBwdWJsaWMgZGVsZXRlQm94UmVmKGtleTogc3RyaW5nKTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjU0CiAgICAvLyBib3hSZWYuZGVsZXRlKCkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1NQogICAgLy8gYXNzZXJ0TWF0Y2goYm94UmVmLm1heWJlKCksIFtCeXRlcygnJyksIGZhbHNlXSkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgcG9wCiAgICBwdXNoYnl0ZXMgIiIKICAgID09CiAgICBieiBkZWxldGVCb3hSZWZfYm9vbF9mYWxzZUA0CiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGJ1cnkgMQogICAgYm56IGRlbGV0ZUJveFJlZl9ib29sX2ZhbHNlQDQKICAgIGludGNfMCAvLyAxCgpkZWxldGVCb3hSZWZfYm9vbF9tZXJnZUA1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIGFzc2VydE1hdGNoKGJveFJlZi5tYXliZSgpLCBbQnl0ZXMoJycpLCBmYWxzZV0pCiAgICBhc3NlcnQgLy8gYXNzZXJ0IHRhcmdldCBpcyBtYXRjaCBmb3IgY29uZGl0aW9ucwogICAgcmV0c3ViCgpkZWxldGVCb3hSZWZfYm9vbF9mYWxzZUA0OgogICAgaW50Y18xIC8vIDAKICAgIGIgZGVsZXRlQm94UmVmX2Jvb2xfbWVyZ2VANQoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZXh0cmFjdEJveFJlZihrZXk6IGJ5dGVzKSAtPiB2b2lkOgpleHRyYWN0Qm94UmVmOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHB1YmxpYyBleHRyYWN0Qm94UmVmKGtleTogc3RyaW5nKTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjY1CiAgICAvLyBjb25zdCBzZW5kZXJCeXRlcyA9IFR4bi5zZW5kZXIuYnl0ZXMKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjY2CiAgICAvLyBjb25zdCBhcHBBZGRyZXNzID0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MuYnl0ZXMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI2OAogICAgLy8gY29uc3QgdG90YWxTaXplID0gVWludDY0KGFwcEFkZHJlc3MubGVuZ3RoICsgc2VuZGVyQnl0ZXMubGVuZ3RoKQogICAgZHVwCiAgICBsZW4KICAgIGRpZyAyCiAgICBsZW4KICAgICsKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjcxCiAgICAvLyBhc3NlcnQoYm94UmVmLmNyZWF0ZSh7IHNpemU6IHRvdGFsU2l6ZSB9KSwgJ2JveFJlZiBjcmVhdGlvbiBmYWlsZWQnKQogICAgZnJhbWVfZGlnIC0xCiAgICBzd2FwCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQgLy8gYm94UmVmIGNyZWF0aW9uIGZhaWxlZAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIGJveFJlZi5yZXBsYWNlKDAsIHNlbmRlckJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgZGlnIDMKICAgIGJveF9yZXBsYWNlCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gYm94UmVmLnNwbGljZSgwLCAwLCBhcHBBZGRyZXNzKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgZHVwCiAgICBkaWcgMwogICAgYm94X3NwbGljZQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIGNvbnN0IHBhcnQxID0gYm94UmVmLmV4dHJhY3QoMCwgMzIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9leHRyYWN0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI3NwogICAgLy8gY29uc3QgcGFydDIgPSBib3hSZWYuZXh0cmFjdCgzMiwgMzIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMiAvLyAzMgogICAgZHVwCiAgICBib3hfZXh0cmFjdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNzkKICAgIC8vIGFzc2VydChwYXJ0MS5lcXVhbHMoYXBwQWRkcmVzcyksICdGaXJzdCBwYXJ0IHNob3VsZCBtYXRjaCBhcHAgYWRkcmVzcycpCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gRmlyc3QgcGFydCBzaG91bGQgbWF0Y2ggYXBwIGFkZHJlc3MKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjgwCiAgICAvLyBhc3NlcnQocGFydDIuZXF1YWxzKHNlbmRlckJ5dGVzKSwgJ1NlY29uZCBwYXJ0IHNob3VsZCBtYXRjaCBzZW5kZXIgYnl0ZXMnKQogICAgPT0KICAgIGFzc2VydCAvLyBTZWNvbmQgcGFydCBzaG91bGQgbWF0Y2ggc2VuZGVyIGJ5dGVzCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmdldEJveE1hcFN0cnVjdChrZXk6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldEJveE1hcFN0cnVjdDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjkwLTI5MQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0Qm94TWFwU3RydWN0KGtleTogdWludDY0KTogVXNlclN0cnVjdCB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjkyCiAgICAvLyByZXR1cm4gdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyBwdWJsaWMgYm94TWFwU3RydWN0ID0gQm94TWFwPHVpbnQ2NCwgVXNlclN0cnVjdD4oeyBrZXlQcmVmaXg6ICd1c2VycycgfSkKICAgIGJ5dGVjIDYgLy8gInVzZXJzIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI5MgogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmJveE1hcFN0cnVjdEV4aXN0cyhrZXk6IHVpbnQ2NCkgLT4gdWludDY0Ogpib3hNYXBTdHJ1Y3RFeGlzdHM6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMwMC0zMDEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdEV4aXN0cyhrZXk6IHVpbnQ2NCk6IGJvb2xlYW4gewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMwMgogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwU3RydWN0KGtleSkuZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHB1YmxpYyBib3hNYXBTdHJ1Y3QgPSBCb3hNYXA8dWludDY0LCBVc2VyU3RydWN0Pih7IGtleVByZWZpeDogJ3VzZXJzJyB9KQogICAgYnl0ZWMgNiAvLyAidXNlcnMiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzAyCiAgICAvLyByZXR1cm4gdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS5leGlzdHMKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5zZXRCb3hNYXBTdHJ1Y3Qoa2V5OiB1aW50NjQsIHZhbHVlOiBieXRlcykgLT4gdWludDY0OgpzZXRCb3hNYXBTdHJ1Y3Q6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMxMAogICAgLy8gcHVibGljIHNldEJveE1hcFN0cnVjdChrZXk6IHVpbnQ2NCwgdmFsdWU6IFVzZXJTdHJ1Y3QpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdCA9IEJveE1hcDx1aW50NjQsIFVzZXJTdHJ1Y3Q+KHsga2V5UHJlZml4OiAndXNlcnMnIH0pCiAgICBieXRlYyA2IC8vICJ1c2VycyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwbiAyCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMxMgogICAgLy8gdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSA9IHZhbHVlLmNvcHkoKQogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTQKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTMtMzIxCiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSwKICAgIC8vICAgewogICAgLy8gICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAvLyAgICAgaWQ6IHZhbHVlLmlkLAogICAgLy8gICAgIGFzc2V0OiB2YWx1ZS5hc3NldCwKICAgIC8vICAgfSwKICAgIC8vICAgJ2JveE1hcFN0cnVjdCB2YWx1ZSBtaXNtYXRjaCcsCiAgICAvLyApCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGxlbgogICAgc3Vic3RyaW5nMwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTYKICAgIC8vIG5hbWU6IHZhbHVlLm5hbWUsCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMQogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTMtMzIxCiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSwKICAgIC8vICAgewogICAgLy8gICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAvLyAgICAgaWQ6IHZhbHVlLmlkLAogICAgLy8gICAgIGFzc2V0OiB2YWx1ZS5hc3NldCwKICAgIC8vICAgfSwKICAgIC8vICAgJ2JveE1hcFN0cnVjdCB2YWx1ZSBtaXNtYXRjaCcsCiAgICAvLyApCiAgICA9PQogICAgYnogc2V0Qm94TWFwU3RydWN0X2Jvb2xfZmFsc2VANAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTQKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICBmcmFtZV9kaWcgMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzEzLTMyMQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICAvLyAgIHsKICAgIC8vICAgICBuYW1lOiB2YWx1ZS5uYW1lLAogICAgLy8gICAgIGlkOiB2YWx1ZS5pZCwKICAgIC8vICAgICBhc3NldDogdmFsdWUuYXNzZXQsCiAgICAvLyAgIH0sCiAgICAvLyAgICdib3hNYXBTdHJ1Y3QgdmFsdWUgbWlzbWF0Y2gnLAogICAgLy8gKQogICAgZXh0cmFjdCAyIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMxNwogICAgLy8gaWQ6IHZhbHVlLmlkLAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzEzLTMyMQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICAvLyAgIHsKICAgIC8vICAgICBuYW1lOiB2YWx1ZS5uYW1lLAogICAgLy8gICAgIGlkOiB2YWx1ZS5pZCwKICAgIC8vICAgICBhc3NldDogdmFsdWUuYXNzZXQsCiAgICAvLyAgIH0sCiAgICAvLyAgICdib3hNYXBTdHJ1Y3QgdmFsdWUgbWlzbWF0Y2gnLAogICAgLy8gKQogICAgPT0KICAgIGJ6IHNldEJveE1hcFN0cnVjdF9ib29sX2ZhbHNlQDQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLmJveE1hcFN0cnVjdChrZXkpLnZhbHVlLAogICAgZnJhbWVfZGlnIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMxMy0zMjEKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICB0aGlzLmJveE1hcFN0cnVjdChrZXkpLnZhbHVlLAogICAgLy8gICB7CiAgICAvLyAgICAgbmFtZTogdmFsdWUubmFtZSwKICAgIC8vICAgICBpZDogdmFsdWUuaWQsCiAgICAvLyAgICAgYXNzZXQ6IHZhbHVlLmFzc2V0LAogICAgLy8gICB9LAogICAgLy8gICAnYm94TWFwU3RydWN0IHZhbHVlIG1pc21hdGNoJywKICAgIC8vICkKICAgIGV4dHJhY3QgMTAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBhc3NldDogdmFsdWUuYXNzZXQsCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMTAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzEzLTMyMQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICAvLyAgIHsKICAgIC8vICAgICBuYW1lOiB2YWx1ZS5uYW1lLAogICAgLy8gICAgIGlkOiB2YWx1ZS5pZCwKICAgIC8vICAgICBhc3NldDogdmFsdWUuYXNzZXQsCiAgICAvLyAgIH0sCiAgICAvLyAgICdib3hNYXBTdHJ1Y3QgdmFsdWUgbWlzbWF0Y2gnLAogICAgLy8gKQogICAgPT0KICAgIGJ6IHNldEJveE1hcFN0cnVjdF9ib29sX2ZhbHNlQDQKICAgIGludGNfMCAvLyAxCgpzZXRCb3hNYXBTdHJ1Y3RfYm9vbF9tZXJnZUA1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTMtMzIxCiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSwKICAgIC8vICAgewogICAgLy8gICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAvLyAgICAgaWQ6IHZhbHVlLmlkLAogICAgLy8gICAgIGFzc2V0OiB2YWx1ZS5hc3NldCwKICAgIC8vICAgfSwKICAgIC8vICAgJ2JveE1hcFN0cnVjdCB2YWx1ZSBtaXNtYXRjaCcsCiAgICAvLyApCiAgICBhc3NlcnQgLy8gYm94TWFwU3RydWN0IHZhbHVlIG1pc21hdGNoCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gcmV0dXJuIHRydWUKICAgIGludGNfMCAvLyAxCiAgICBzd2FwCiAgICByZXRzdWIKCnNldEJveE1hcFN0cnVjdF9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzEgLy8gMAogICAgYiBzZXRCb3hNYXBTdHJ1Y3RfYm9vbF9tZXJnZUA1CgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5ib3hNYXBTdHJ1Y3RMZW5ndGgoa2V5OiB1aW50NjQpIC0+IHVpbnQ2NDoKYm94TWFwU3RydWN0TGVuZ3RoOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzAKICAgIC8vIHB1YmxpYyBib3hNYXBTdHJ1Y3RMZW5ndGgoa2V5OiB1aW50NjQpOiBib29sZWFuIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzcKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdCA9IEJveE1hcDx1aW50NjQsIFVzZXJTdHJ1Y3Q+KHsga2V5UHJlZml4OiAndXNlcnMnIH0pCiAgICBieXRlYyA2IC8vICJ1c2VycyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzcKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzMxLTMzNQogICAgLy8gY29uc3QgdmFsdWUgPSBuZXcgVXNlclN0cnVjdCh7CiAgICAvLyAgIG5hbWU6IG5ldyBhcmM0LlN0cigndGVzdE5hbWUnKSwKICAgIC8vICAgaWQ6IG5ldyBhcmM0LlVpbnRONjQoNzApLAogICAgLy8gICBhc3NldDogbmV3IGFyYzQuVWludE42NCgxMjM0KSwKICAgIC8vIH0pCiAgICBwdXNoYnl0ZXMgMHgwMDEyMDAwMDAwMDAwMDAwMDA0NjAwMDAwMDAwMDAwMDA0ZDIwMDA4NzQ2NTczNzQ0ZTYxNmQ2NQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzcKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzM5CiAgICAvLyBhc3NlcnQodGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZS5ieXRlcy5sZW5ndGggPT09IHZhbHVlLmJ5dGVzLmxlbmd0aCwgJ2JveE1hcFN0cnVjdCBieXRlcyBsZW5ndGggbWlzbWF0Y2gnKQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgbGVuCiAgICBwdXNoaW50IDI4IC8vIDI4CiAgICA9PQogICAgYXNzZXJ0IC8vIGJveE1hcFN0cnVjdCBieXRlcyBsZW5ndGggbWlzbWF0Y2gKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzQwCiAgICAvLyBhc3NlcnQodGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS5sZW5ndGggPT09IHZhbHVlLmJ5dGVzLmxlbmd0aCwgJ2JveE1hcFN0cnVjdCBsZW5ndGggbWlzbWF0Y2gnKQogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHB1c2hpbnQgMjggLy8gMjgKICAgID09CiAgICBhc3NlcnQgLy8gYm94TWFwU3RydWN0IGxlbmd0aCBtaXNtYXRjaAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNDIKICAgIC8vIHJldHVybiB0cnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5hcmM0Qm94KGtleTogYnl0ZXMpIC0+IGJ5dGVzOgphcmM0Qm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNTIKICAgIC8vIHB1YmxpYyBhcmM0Qm94KGtleTogc3RyaW5nKTogU3RhdGljSW50cyB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzU1LTM2MAogICAgLy8gc3RhdGljSW50Qm94LnZhbHVlID0gbmV3IGFyYzQuU3RhdGljQXJyYXk8YXJjNC5VaW50TjgsIDQ+KAogICAgLy8gICBuZXcgYXJjNC5VaW50TjgoMCksCiAgICAvLyAgIG5ldyBhcmM0LlVpbnROOCgxKSwKICAgIC8vICAgbmV3IGFyYzQuVWludE44KDIpLAogICAgLy8gICBuZXcgYXJjNC5VaW50TjgoMyksCiAgICAvLyApCiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweDAwMDEwMjAzCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM2MgogICAgLy8gYXNzZXJ0KHN0YXRpY0ludEJveC52YWx1ZVswXS5uYXRpdmUgPT09IDApCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Ynl0ZQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM2MwogICAgLy8gYXNzZXJ0KHN0YXRpY0ludEJveC52YWx1ZVsxXS5uYXRpdmUgPT09IDEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpbnRjXzAgLy8gMQogICAgZ2V0Ynl0ZQogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzY0CiAgICAvLyBhc3NlcnQoc3RhdGljSW50Qm94LnZhbHVlWzJdLm5hdGl2ZSA9PT0gMikKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBnZXRieXRlCiAgICBwdXNoaW50IDIgLy8gMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNjUKICAgIC8vIGFzc2VydChzdGF0aWNJbnRCb3gudmFsdWVbM10ubmF0aXZlID09PSAzKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcHVzaGludCAzIC8vIDMKICAgIGdldGJ5dGUKICAgIHB1c2hpbnQgMyAvLyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM2NwogICAgLy8gcmV0dXJuIHN0YXRpY0ludEJveC52YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiAEAQAgKiYKBBUffHUBAAZib3hNYXAGYm94SW50CWJveFN0cmluZw9ib3hEeW5hbWljQnl0ZXMFdXNlcnMGYm94UmVmAjQyAgADMRtBAwOCGgS3SRNEBEnPQQUEarPpvAQmymSKBCjMcTkEZEo5lASx9am2BAPox34E2CnSowSMIr/VBPoVYvcExJe8bwT0+cutBJ4R/XoEXmzqwAT1NBjEBDnpsiYEkQGn3gSkVS61BDis9T4EhgDg6wRTwoggBPGDIHoE1d2SLARZW4e7BFR/CnQ2GgCOGgI1AiQCDAHwAdQBqwGTAYMBagE/AS8BHQEOAPgA5gDRALoArgCeAIwAegBmAE0AMQAYAAIjQzEZFEQxGEQ2GgFXAgCIBGsoTFCwIkMxGRREMRhENhoBF4gEGikjTwJUKExQsCJDMRkURDEYRDYaARc2GgKIA6opI08CVChMULAiQzEZFEQxGEQ2GgEXiAODKSNPAlQoTFCwIkMxGRREMRhENhoBF4gDXShMULAiQzEZFEQxGEQ2GgFXAgCIAxYiQzEZFEQxGEQ2GgFXAgCIAuQiQzEZFEQxGEQ2GgEXiALIIkMxGRREMRhEiAKFIkMxGRREMRhENhoBVwIAiAJmFihMULAiQzEZFEQxGEQ2GgEXiAI4FihMULAiQzEZFEQxGEQ2GgFXAgCIAhMiQzEZFEQxGEQ2GgEXNhoCVwIAiAHtIkMxGRREMRhENhoBiAHRIkMxGRREMRhENhoBVwIAiAGyIkMxGRREMRhENhoBF4gBmCJDMRkURDEYRDYaAVcCAIgBf0sBFRZXBgJPAlApI08DVCcJTFBMUChMULAiQzEZFEQxGEQ2GgEXiAFJKSNPAlQoTFCwIkMxGRREMRhEiAEaKExQsCJDMRkURDEYRIAMFR98dQAGYm94TWFwsCJDMRkURDEYRDYaAReIAM9LARUWVwYCTwJQKSNPA1QnCUxQTFAoTFCwIkMxGRREMRhENhoBF4gAj0kVFlcGAkxQKExQsCJDMRkURDEYRDYaAReIAGdJFRZXBgJMUChMULAiQzEZFEQxGESIAElMFikjTwNUUChMULAiQzEZFEQxGESIACoWKExQsCJDMRkURDEYRIgAEhYoTFCwIkMxGUD9tTEYFEQiQyu+TBdMRIkrvkwXTESJK75MF0yJigEBi/8WKkxQvkSJigEBi/8WKkxQvoAHZGVmYXVsdE4CTYmKAQKL/xYqTFC+SU8CTEEACYsBiwBPA08DiYAAQv/0JwckuUgxACcHSwG/Jwe+SwJOAk1JTwISRImKAQGL/xYqTFC9RQGJigECi/++iYoBAIv/FitMv4mKAQAnBLxIJwSL/7+JigEAJwW8SCcFi/+/iYoCAIv+FipMUEm8SIv/v4mKAQCL/yS5SIv/MQC/iYoBAYv/FipMUEm9RQFAAAMjTImLAL1ETImKAQGL/yS5RIv/vUSJK7xIJwW8SCcEvEgrvkwXJUxPAk0lEkQnBb6ABAACNDJOAk1XAgAnCBJEJwS+JwhOAk0nCBJEiYoBAIv/FipMULxIiYoBAIv/vEiL/75IgAASQQALi/++RQFAAAMiRIkjQv/6igEAMQAyCkkVSwIVCIv/TLlEi/8jSwO7i/8jSUsD0ov/IyS6i/8kSbpMTwISRBJEiYoBAYv/FicGTFC+RImKAQGL/xYnBkxQvUUBiYoCAYv+FicGTFBHArxISYv/v75ESSNZSwEVUov/I1mL/xWL/04CUhJBACWLAL5EVwIIi/9XAggSQQAViwC+RFcKCIv/VwoIEkEABSJEIkyJI0L/+IoBAYv/FicGTFBJvEhJgBwAEgAAAAAAAABGAAAAAAAABNIACHRlc3ROYW1lv0m+RBWBHBJEvUSBHBJEIomKAQGL/4AEAAECA7+L/75EI1UURIv/vkQiVSISRIv/vkSBAlWBAhJEi/++RIEDVYEDEkSL/75EiQ==","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract /** * A state record containing binary data @@ -89,6 +89,36 @@ export type BoxStorageArgs = { obj: { 'getBox()uint64': Record 'valueBox()uint64': Record + 'maybeBox()(uint64,bool)': Record + 'getBoxMap(uint64)string': { + /** + * The key of the boxMap to retrieve the value from + */ + key: bigint | number + } + 'getBoxMapWithDefault(uint64)string': { + /** + * The key of the boxMap to retrieve the value from + */ + key: bigint | number + } + 'maybeBoxMap(uint64)(string,bool)': { + /** + * The key to check in the boxMap + */ + key: bigint | number + } + 'keyPrefixBoxMap()byte[]': Record + 'getBoxRef()address': Record + 'boxMapExists(uint64)bool': { + /** + * The key to check for + */ + key: bigint | number + } + 'maybeBoxRef(string)(byte[],bool)': { + key: string + } 'setBox(uint64)void': { /** * The uint64 value to set in the boxInt box @@ -107,20 +137,6 @@ export type BoxStorageArgs = { */ value: Uint8Array } - 'deleteBox()void': Record - 'maybeBox()(uint64,bool)': Record - 'getBoxMap(uint64)string': { - /** - * The key of the boxMap to retrieve the value from - */ - key: bigint | number - } - 'getBoxMapWithDefault(uint64)string': { - /** - * The key of the boxMap to retrieve the value from - */ - key: bigint | number - } 'setBoxMap(uint64,string)void': { /** * The key to set the value for @@ -131,17 +147,11 @@ export type BoxStorageArgs = { */ value: string } - 'deleteBoxMap(uint64)void': { - /** - * The key to delete the value from - */ - key: bigint | number - } - 'maybeBoxMap(uint64)(string,bool)': { + 'setBoxRef(string)void': { /** - * The key to check in the boxMap + * The key to use for the box ref */ - key: bigint | number + key: string } 'boxMapLength(uint64)uint64': { /** @@ -149,32 +159,34 @@ export type BoxStorageArgs = { */ key: bigint | number } - 'boxMapExists(uint64)bool': { + 'lengthBoxRef(string)uint64': { /** - * The key to check for + * The key to get the length for */ - key: bigint | number + key: string } - 'keyPrefixBoxMap()byte[]': Record - 'getBoxMapStruct(uint64)(string,uint64,uint64)': { + 'deleteBox()void': Record + 'deleteBoxMap(uint64)void': { /** - * The key to retrieve the value from + * The key to delete the value from */ key: bigint | number } - 'setBoxMapStruct(uint64,(string,uint64,uint64))bool': { + 'deleteBoxRef(string)void': { /** - * The key to set the value for + * The key to delete the value from */ - key: bigint | number + key: string + } + 'extractBoxRef(string)void': { /** - * The value to set in the boxMapStruct box + * The key to extract from */ - value: UserStruct + key: string } - 'boxMapStructLength(uint64)bool': { + 'getBoxMapStruct(uint64)(string,uint64,uint64)': { /** - * The key to get the length for + * The key to retrieve the value from */ key: bigint | number } @@ -184,33 +196,21 @@ export type BoxStorageArgs = { */ key: bigint | number } - 'getBoxRef()address': Record - 'setBoxRef(string)void': { + 'setBoxMapStruct(uint64,(string,uint64,uint64))bool': { /** - * The key to use for the box ref + * The key to set the value for */ - key: string - } - 'deleteBoxRef(string)void': { + key: bigint | number /** - * The key to delete the value from + * The value to set in the boxMapStruct box */ - key: string - } - 'maybeBoxRef(string)(byte[],bool)': { - key: string + value: UserStruct } - 'lengthBoxRef(string)uint64': { + 'boxMapStructLength(uint64)bool': { /** * The key to get the length for */ - key: string - } - 'extractBoxRef(string)void': { - /** - * The key to extract from - */ - key: string + key: bigint | number } 'arc4Box(string)uint8[4]': { /** @@ -225,29 +225,29 @@ export type BoxStorageArgs = { tuple: { 'getBox()uint64': [] 'valueBox()uint64': [] - 'setBox(uint64)void': [valueInt: bigint | number] - 'setBoxString(string)void': [value: string] - 'setBoxDynamicBytes(byte[])void': [value: Uint8Array] - 'deleteBox()void': [] 'maybeBox()(uint64,bool)': [] 'getBoxMap(uint64)string': [key: bigint | number] 'getBoxMapWithDefault(uint64)string': [key: bigint | number] - 'setBoxMap(uint64,string)void': [key: bigint | number, value: string] - 'deleteBoxMap(uint64)void': [key: bigint | number] 'maybeBoxMap(uint64)(string,bool)': [key: bigint | number] - 'boxMapLength(uint64)uint64': [key: bigint | number] - 'boxMapExists(uint64)bool': [key: bigint | number] 'keyPrefixBoxMap()byte[]': [] - 'getBoxMapStruct(uint64)(string,uint64,uint64)': [key: bigint | number] - 'setBoxMapStruct(uint64,(string,uint64,uint64))bool': [key: bigint | number, value: UserStruct] - 'boxMapStructLength(uint64)bool': [key: bigint | number] - 'boxMapStructExists(uint64)bool': [key: bigint | number] 'getBoxRef()address': [] - 'setBoxRef(string)void': [key: string] - 'deleteBoxRef(string)void': [key: string] + 'boxMapExists(uint64)bool': [key: bigint | number] 'maybeBoxRef(string)(byte[],bool)': [key: string] + 'setBox(uint64)void': [valueInt: bigint | number] + 'setBoxString(string)void': [value: string] + 'setBoxDynamicBytes(byte[])void': [value: Uint8Array] + 'setBoxMap(uint64,string)void': [key: bigint | number, value: string] + 'setBoxRef(string)void': [key: string] + 'boxMapLength(uint64)uint64': [key: bigint | number] 'lengthBoxRef(string)uint64': [key: string] + 'deleteBox()void': [] + 'deleteBoxMap(uint64)void': [key: bigint | number] + 'deleteBoxRef(string)void': [key: string] 'extractBoxRef(string)void': [key: string] + 'getBoxMapStruct(uint64)(string,uint64,uint64)': [key: bigint | number] + 'boxMapStructExists(uint64)bool': [key: bigint | number] + 'setBoxMapStruct(uint64,(string,uint64,uint64))bool': [key: bigint | number, value: UserStruct] + 'boxMapStructLength(uint64)bool': [key: bigint | number] 'arc4Box(string)uint8[4]': [key: string] } } @@ -258,29 +258,29 @@ export type BoxStorageArgs = { export type BoxStorageReturns = { 'getBox()uint64': bigint 'valueBox()uint64': bigint - 'setBox(uint64)void': void - 'setBoxString(string)void': void - 'setBoxDynamicBytes(byte[])void': void - 'deleteBox()void': void 'maybeBox()(uint64,bool)': [bigint, boolean] 'getBoxMap(uint64)string': string 'getBoxMapWithDefault(uint64)string': string - 'setBoxMap(uint64,string)void': void - 'deleteBoxMap(uint64)void': void 'maybeBoxMap(uint64)(string,bool)': [string, boolean] - 'boxMapLength(uint64)uint64': bigint - 'boxMapExists(uint64)bool': boolean 'keyPrefixBoxMap()byte[]': Uint8Array - 'getBoxMapStruct(uint64)(string,uint64,uint64)': UserStruct - 'setBoxMapStruct(uint64,(string,uint64,uint64))bool': boolean - 'boxMapStructLength(uint64)bool': boolean - 'boxMapStructExists(uint64)bool': boolean 'getBoxRef()address': string - 'setBoxRef(string)void': void - 'deleteBoxRef(string)void': void + 'boxMapExists(uint64)bool': boolean 'maybeBoxRef(string)(byte[],bool)': [Uint8Array, boolean] + 'setBox(uint64)void': void + 'setBoxString(string)void': void + 'setBoxDynamicBytes(byte[])void': void + 'setBoxMap(uint64,string)void': void + 'setBoxRef(string)void': void + 'boxMapLength(uint64)uint64': bigint 'lengthBoxRef(string)uint64': bigint + 'deleteBox()void': void + 'deleteBoxMap(uint64)void': void + 'deleteBoxRef(string)void': void 'extractBoxRef(string)void': void + 'getBoxMapStruct(uint64)(string,uint64,uint64)': UserStruct + 'boxMapStructExists(uint64)bool': boolean + 'setBoxMapStruct(uint64,(string,uint64,uint64))bool': boolean + 'boxMapStructLength(uint64)bool': boolean 'arc4Box(string)uint8[4]': [number, number, number, number] } @@ -305,26 +305,6 @@ export type BoxStorageTypes = { argsTuple: BoxStorageArgs['tuple']['valueBox()uint64'] returns: BoxStorageReturns['valueBox()uint64'] }> - & Record<'setBox(uint64)void' | 'setBox', { - argsObj: BoxStorageArgs['obj']['setBox(uint64)void'] - argsTuple: BoxStorageArgs['tuple']['setBox(uint64)void'] - returns: BoxStorageReturns['setBox(uint64)void'] - }> - & Record<'setBoxString(string)void' | 'setBoxString', { - argsObj: BoxStorageArgs['obj']['setBoxString(string)void'] - argsTuple: BoxStorageArgs['tuple']['setBoxString(string)void'] - returns: BoxStorageReturns['setBoxString(string)void'] - }> - & Record<'setBoxDynamicBytes(byte[])void' | 'setBoxDynamicBytes', { - argsObj: BoxStorageArgs['obj']['setBoxDynamicBytes(byte[])void'] - argsTuple: BoxStorageArgs['tuple']['setBoxDynamicBytes(byte[])void'] - returns: BoxStorageReturns['setBoxDynamicBytes(byte[])void'] - }> - & Record<'deleteBox()void' | 'deleteBox', { - argsObj: BoxStorageArgs['obj']['deleteBox()void'] - argsTuple: BoxStorageArgs['tuple']['deleteBox()void'] - returns: BoxStorageReturns['deleteBox()void'] - }> & Record<'maybeBox()(uint64,bool)' | 'maybeBox', { argsObj: BoxStorageArgs['obj']['maybeBox()(uint64,bool)'] argsTuple: BoxStorageArgs['tuple']['maybeBox()(uint64,bool)'] @@ -349,16 +329,6 @@ export type BoxStorageTypes = { */ returns: BoxStorageReturns['getBoxMapWithDefault(uint64)string'] }> - & Record<'setBoxMap(uint64,string)void' | 'setBoxMap', { - argsObj: BoxStorageArgs['obj']['setBoxMap(uint64,string)void'] - argsTuple: BoxStorageArgs['tuple']['setBoxMap(uint64,string)void'] - returns: BoxStorageReturns['setBoxMap(uint64,string)void'] - }> - & Record<'deleteBoxMap(uint64)void' | 'deleteBoxMap', { - argsObj: BoxStorageArgs['obj']['deleteBoxMap(uint64)void'] - argsTuple: BoxStorageArgs['tuple']['deleteBoxMap(uint64)void'] - returns: BoxStorageReturns['deleteBoxMap(uint64)void'] - }> & Record<'maybeBoxMap(uint64)(string,bool)' | 'maybeBoxMap', { argsObj: BoxStorageArgs['obj']['maybeBoxMap(uint64)(string,bool)'] argsTuple: BoxStorageArgs['tuple']['maybeBoxMap(uint64)(string,bool)'] @@ -367,22 +337,6 @@ export type BoxStorageTypes = { */ returns: BoxStorageReturns['maybeBoxMap(uint64)(string,bool)'] }> - & Record<'boxMapLength(uint64)uint64' | 'boxMapLength', { - argsObj: BoxStorageArgs['obj']['boxMapLength(uint64)uint64'] - argsTuple: BoxStorageArgs['tuple']['boxMapLength(uint64)uint64'] - /** - * The length of the boxMap box - */ - returns: BoxStorageReturns['boxMapLength(uint64)uint64'] - }> - & Record<'boxMapExists(uint64)bool' | 'boxMapExists', { - argsObj: BoxStorageArgs['obj']['boxMapExists(uint64)bool'] - argsTuple: BoxStorageArgs['tuple']['boxMapExists(uint64)bool'] - /** - * true if the box exists, false otherwise - */ - returns: BoxStorageReturns['boxMapExists(uint64)bool'] - }> & Record<'keyPrefixBoxMap()byte[]' | 'keyPrefixBoxMap', { argsObj: BoxStorageArgs['obj']['keyPrefixBoxMap()byte[]'] argsTuple: BoxStorageArgs['tuple']['keyPrefixBoxMap()byte[]'] @@ -391,60 +345,62 @@ export type BoxStorageTypes = { */ returns: BoxStorageReturns['keyPrefixBoxMap()byte[]'] }> - & Record<'getBoxMapStruct(uint64)(string,uint64,uint64)' | 'getBoxMapStruct', { - argsObj: BoxStorageArgs['obj']['getBoxMapStruct(uint64)(string,uint64,uint64)'] - argsTuple: BoxStorageArgs['tuple']['getBoxMapStruct(uint64)(string,uint64,uint64)'] - /** - * The value stored in the boxMapStruct box - */ - returns: BoxStorageReturns['getBoxMapStruct(uint64)(string,uint64,uint64)'] - }> - & Record<'setBoxMapStruct(uint64,(string,uint64,uint64))bool' | 'setBoxMapStruct', { - argsObj: BoxStorageArgs['obj']['setBoxMapStruct(uint64,(string,uint64,uint64))bool'] - argsTuple: BoxStorageArgs['tuple']['setBoxMapStruct(uint64,(string,uint64,uint64))bool'] - returns: BoxStorageReturns['setBoxMapStruct(uint64,(string,uint64,uint64))bool'] - }> - & Record<'boxMapStructLength(uint64)bool' | 'boxMapStructLength', { - argsObj: BoxStorageArgs['obj']['boxMapStructLength(uint64)bool'] - argsTuple: BoxStorageArgs['tuple']['boxMapStructLength(uint64)bool'] + & Record<'getBoxRef()address' | 'getBoxRef', { + argsObj: BoxStorageArgs['obj']['getBoxRef()address'] + argsTuple: BoxStorageArgs['tuple']['getBoxRef()address'] /** - * The length of the boxMapStruct box + * The value stored in the boxRef box */ - returns: BoxStorageReturns['boxMapStructLength(uint64)bool'] + returns: BoxStorageReturns['getBoxRef()address'] }> - & Record<'boxMapStructExists(uint64)bool' | 'boxMapStructExists', { - argsObj: BoxStorageArgs['obj']['boxMapStructExists(uint64)bool'] - argsTuple: BoxStorageArgs['tuple']['boxMapStructExists(uint64)bool'] + & Record<'boxMapExists(uint64)bool' | 'boxMapExists', { + argsObj: BoxStorageArgs['obj']['boxMapExists(uint64)bool'] + argsTuple: BoxStorageArgs['tuple']['boxMapExists(uint64)bool'] /** * true if the box exists, false otherwise */ - returns: BoxStorageReturns['boxMapStructExists(uint64)bool'] + returns: BoxStorageReturns['boxMapExists(uint64)bool'] }> - & Record<'getBoxRef()address' | 'getBoxRef', { - argsObj: BoxStorageArgs['obj']['getBoxRef()address'] - argsTuple: BoxStorageArgs['tuple']['getBoxRef()address'] + & Record<'maybeBoxRef(string)(byte[],bool)' | 'maybeBoxRef', { + argsObj: BoxStorageArgs['obj']['maybeBoxRef(string)(byte[],bool)'] + argsTuple: BoxStorageArgs['tuple']['maybeBoxRef(string)(byte[],bool)'] /** - * The value stored in the boxRef box + * A tuple containing the value and a boolean indicating if the box exists */ - returns: BoxStorageReturns['getBoxRef()address'] + returns: BoxStorageReturns['maybeBoxRef(string)(byte[],bool)'] + }> + & Record<'setBox(uint64)void' | 'setBox', { + argsObj: BoxStorageArgs['obj']['setBox(uint64)void'] + argsTuple: BoxStorageArgs['tuple']['setBox(uint64)void'] + returns: BoxStorageReturns['setBox(uint64)void'] + }> + & Record<'setBoxString(string)void' | 'setBoxString', { + argsObj: BoxStorageArgs['obj']['setBoxString(string)void'] + argsTuple: BoxStorageArgs['tuple']['setBoxString(string)void'] + returns: BoxStorageReturns['setBoxString(string)void'] + }> + & Record<'setBoxDynamicBytes(byte[])void' | 'setBoxDynamicBytes', { + argsObj: BoxStorageArgs['obj']['setBoxDynamicBytes(byte[])void'] + argsTuple: BoxStorageArgs['tuple']['setBoxDynamicBytes(byte[])void'] + returns: BoxStorageReturns['setBoxDynamicBytes(byte[])void'] + }> + & Record<'setBoxMap(uint64,string)void' | 'setBoxMap', { + argsObj: BoxStorageArgs['obj']['setBoxMap(uint64,string)void'] + argsTuple: BoxStorageArgs['tuple']['setBoxMap(uint64,string)void'] + returns: BoxStorageReturns['setBoxMap(uint64,string)void'] }> & Record<'setBoxRef(string)void' | 'setBoxRef', { argsObj: BoxStorageArgs['obj']['setBoxRef(string)void'] argsTuple: BoxStorageArgs['tuple']['setBoxRef(string)void'] returns: BoxStorageReturns['setBoxRef(string)void'] }> - & Record<'deleteBoxRef(string)void' | 'deleteBoxRef', { - argsObj: BoxStorageArgs['obj']['deleteBoxRef(string)void'] - argsTuple: BoxStorageArgs['tuple']['deleteBoxRef(string)void'] - returns: BoxStorageReturns['deleteBoxRef(string)void'] - }> - & Record<'maybeBoxRef(string)(byte[],bool)' | 'maybeBoxRef', { - argsObj: BoxStorageArgs['obj']['maybeBoxRef(string)(byte[],bool)'] - argsTuple: BoxStorageArgs['tuple']['maybeBoxRef(string)(byte[],bool)'] + & Record<'boxMapLength(uint64)uint64' | 'boxMapLength', { + argsObj: BoxStorageArgs['obj']['boxMapLength(uint64)uint64'] + argsTuple: BoxStorageArgs['tuple']['boxMapLength(uint64)uint64'] /** - * A tuple containing the value and a boolean indicating if the box exists + * The length of the boxMap box */ - returns: BoxStorageReturns['maybeBoxRef(string)(byte[],bool)'] + returns: BoxStorageReturns['boxMapLength(uint64)uint64'] }> & Record<'lengthBoxRef(string)uint64' | 'lengthBoxRef', { argsObj: BoxStorageArgs['obj']['lengthBoxRef(string)uint64'] @@ -454,11 +410,55 @@ export type BoxStorageTypes = { */ returns: BoxStorageReturns['lengthBoxRef(string)uint64'] }> + & Record<'deleteBox()void' | 'deleteBox', { + argsObj: BoxStorageArgs['obj']['deleteBox()void'] + argsTuple: BoxStorageArgs['tuple']['deleteBox()void'] + returns: BoxStorageReturns['deleteBox()void'] + }> + & Record<'deleteBoxMap(uint64)void' | 'deleteBoxMap', { + argsObj: BoxStorageArgs['obj']['deleteBoxMap(uint64)void'] + argsTuple: BoxStorageArgs['tuple']['deleteBoxMap(uint64)void'] + returns: BoxStorageReturns['deleteBoxMap(uint64)void'] + }> + & Record<'deleteBoxRef(string)void' | 'deleteBoxRef', { + argsObj: BoxStorageArgs['obj']['deleteBoxRef(string)void'] + argsTuple: BoxStorageArgs['tuple']['deleteBoxRef(string)void'] + returns: BoxStorageReturns['deleteBoxRef(string)void'] + }> & Record<'extractBoxRef(string)void' | 'extractBoxRef', { argsObj: BoxStorageArgs['obj']['extractBoxRef(string)void'] argsTuple: BoxStorageArgs['tuple']['extractBoxRef(string)void'] returns: BoxStorageReturns['extractBoxRef(string)void'] }> + & Record<'getBoxMapStruct(uint64)(string,uint64,uint64)' | 'getBoxMapStruct', { + argsObj: BoxStorageArgs['obj']['getBoxMapStruct(uint64)(string,uint64,uint64)'] + argsTuple: BoxStorageArgs['tuple']['getBoxMapStruct(uint64)(string,uint64,uint64)'] + /** + * The value stored in the boxMapStruct box + */ + returns: BoxStorageReturns['getBoxMapStruct(uint64)(string,uint64,uint64)'] + }> + & Record<'boxMapStructExists(uint64)bool' | 'boxMapStructExists', { + argsObj: BoxStorageArgs['obj']['boxMapStructExists(uint64)bool'] + argsTuple: BoxStorageArgs['tuple']['boxMapStructExists(uint64)bool'] + /** + * true if the box exists, false otherwise + */ + returns: BoxStorageReturns['boxMapStructExists(uint64)bool'] + }> + & Record<'setBoxMapStruct(uint64,(string,uint64,uint64))bool' | 'setBoxMapStruct', { + argsObj: BoxStorageArgs['obj']['setBoxMapStruct(uint64,(string,uint64,uint64))bool'] + argsTuple: BoxStorageArgs['tuple']['setBoxMapStruct(uint64,(string,uint64,uint64))bool'] + returns: BoxStorageReturns['setBoxMapStruct(uint64,(string,uint64,uint64))bool'] + }> + & Record<'boxMapStructLength(uint64)bool' | 'boxMapStructLength', { + argsObj: BoxStorageArgs['obj']['boxMapStructLength(uint64)bool'] + argsTuple: BoxStorageArgs['tuple']['boxMapStructLength(uint64)bool'] + /** + * The length of the boxMapStruct box + */ + returns: BoxStorageReturns['boxMapStructLength(uint64)bool'] + }> & Record<'arc4Box(string)uint8[4]' | 'arc4Box', { argsObj: BoxStorageArgs['obj']['arc4Box(string)uint8[4]'] argsTuple: BoxStorageArgs['tuple']['arc4Box(string)uint8[4]'] @@ -570,347 +570,347 @@ export abstract class BoxStorageParamsFactory { } } /** - * Constructs a no op call for the setBox(uint64)void ABI method + * Constructs a no op call for the maybeBox()(uint64,bool) ABI method * - * Sets the value of the boxInt box + * Retrieves the value stored in the boxInt box and checks if it exists * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static setBox(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static maybeBox(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'setBox(uint64)void' as const, - args: Array.isArray(params.args) ? params.args : [params.args.valueInt], + method: 'maybeBox()(uint64,bool)' as const, + args: Array.isArray(params.args) ? params.args : [], } } /** - * Constructs a no op call for the setBoxString(string)void ABI method + * Constructs a no op call for the getBoxMap(uint64)string ABI method * - * Sets the value of the boxString box + * Retrieves the value stored in the boxMap box * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static setBoxString(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static getBoxMap(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'setBoxString(string)void' as const, - args: Array.isArray(params.args) ? params.args : [params.args.value], + method: 'getBoxMap(uint64)string' as const, + args: Array.isArray(params.args) ? params.args : [params.args.key], } } /** - * Constructs a no op call for the setBoxDynamicBytes(byte[])void ABI method + * Constructs a no op call for the getBoxMapWithDefault(uint64)string ABI method * - * Sets the value of the boxDynamicBytes box + * Retrieves the value stored in the boxMap box with a default value if the key does not exist * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static setBoxDynamicBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static getBoxMapWithDefault(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'setBoxDynamicBytes(byte[])void' as const, - args: Array.isArray(params.args) ? params.args : [params.args.value], + method: 'getBoxMapWithDefault(uint64)string' as const, + args: Array.isArray(params.args) ? params.args : [params.args.key], } } /** - * Constructs a no op call for the deleteBox()void ABI method + * Constructs a no op call for the maybeBoxMap(uint64)(string,bool) ABI method * - * Deletes the value of the boxInt box + * Retrieves the value stored in the boxMap box and checks if it exists * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static deleteBox(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static maybeBoxMap(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'deleteBox()void' as const, - args: Array.isArray(params.args) ? params.args : [], + method: 'maybeBoxMap(uint64)(string,bool)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.key], } } /** - * Constructs a no op call for the maybeBox()(uint64,bool) ABI method + * Constructs a no op call for the keyPrefixBoxMap()byte[] ABI method * - * Retrieves the value stored in the boxInt box and checks if it exists + * Retrieves the key prefix of the boxMap box * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static maybeBox(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static keyPrefixBoxMap(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'maybeBox()(uint64,bool)' as const, + method: 'keyPrefixBoxMap()byte[]' as const, args: Array.isArray(params.args) ? params.args : [], } } /** - * Constructs a no op call for the getBoxMap(uint64)string ABI method + * Constructs a no op call for the getBoxRef()address ABI method * - * Retrieves the value stored in the boxMap box + * Retrieves the value stored in the boxRef box * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static getBoxMap(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static getBoxRef(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'getBoxMap(uint64)string' as const, - args: Array.isArray(params.args) ? params.args : [params.args.key], + method: 'getBoxRef()address' as const, + args: Array.isArray(params.args) ? params.args : [], } } /** - * Constructs a no op call for the getBoxMapWithDefault(uint64)string ABI method + * Constructs a no op call for the boxMapExists(uint64)bool ABI method * - * Retrieves the value stored in the boxMap box with a default value if the key does not exist + * Checks if the boxMap box exists * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static getBoxMapWithDefault(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static boxMapExists(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'getBoxMapWithDefault(uint64)string' as const, + method: 'boxMapExists(uint64)bool' as const, args: Array.isArray(params.args) ? params.args : [params.args.key], } } /** - * Constructs a no op call for the setBoxMap(uint64,string)void ABI method + * Constructs a no op call for the maybeBoxRef(string)(byte[],bool) ABI method * - * Sets the value of the boxMap box + * Retrieves the value stored in the boxRef box and checks if it exists * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static setBoxMap(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static maybeBoxRef(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'setBoxMap(uint64,string)void' as const, - args: Array.isArray(params.args) ? params.args : [params.args.key, params.args.value], + method: 'maybeBoxRef(string)(byte[],bool)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.key], } } /** - * Constructs a no op call for the deleteBoxMap(uint64)void ABI method + * Constructs a no op call for the setBox(uint64)void ABI method * - * Deletes the value of the boxMap box + * Sets the value of the boxInt box * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static deleteBoxMap(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static setBox(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'deleteBoxMap(uint64)void' as const, - args: Array.isArray(params.args) ? params.args : [params.args.key], + method: 'setBox(uint64)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.valueInt], } } /** - * Constructs a no op call for the maybeBoxMap(uint64)(string,bool) ABI method + * Constructs a no op call for the setBoxString(string)void ABI method * - * Retrieves the value stored in the boxMap box and checks if it exists + * Sets the value of the boxString box * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static maybeBoxMap(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static setBoxString(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'maybeBoxMap(uint64)(string,bool)' as const, - args: Array.isArray(params.args) ? params.args : [params.args.key], + method: 'setBoxString(string)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value], } } /** - * Constructs a no op call for the boxMapLength(uint64)uint64 ABI method + * Constructs a no op call for the setBoxDynamicBytes(byte[])void ABI method * - * Retrieves the length of the boxMap box + * Sets the value of the boxDynamicBytes box * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static boxMapLength(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static setBoxDynamicBytes(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'boxMapLength(uint64)uint64' as const, - args: Array.isArray(params.args) ? params.args : [params.args.key], + method: 'setBoxDynamicBytes(byte[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.value], } } /** - * Constructs a no op call for the boxMapExists(uint64)bool ABI method + * Constructs a no op call for the setBoxMap(uint64,string)void ABI method * - * Checks if the boxMap box exists + * Sets the value of the boxMap box * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static boxMapExists(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static setBoxMap(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'boxMapExists(uint64)bool' as const, - args: Array.isArray(params.args) ? params.args : [params.args.key], + method: 'setBoxMap(uint64,string)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.key, params.args.value], } } /** - * Constructs a no op call for the keyPrefixBoxMap()byte[] ABI method + * Constructs a no op call for the setBoxRef(string)void ABI method * - * Retrieves the key prefix of the boxMap box + * Creates a box ref with the given key and sets its value to the sender's address * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static keyPrefixBoxMap(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static setBoxRef(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'keyPrefixBoxMap()byte[]' as const, - args: Array.isArray(params.args) ? params.args : [], + method: 'setBoxRef(string)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.key], } } /** - * Constructs a no op call for the getBoxMapStruct(uint64)(string,uint64,uint64) ABI method + * Constructs a no op call for the boxMapLength(uint64)uint64 ABI method * - * Retrieves the value stored in the boxMapStruct box + * Retrieves the length of the boxMap box * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static getBoxMapStruct(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static boxMapLength(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'getBoxMapStruct(uint64)(string,uint64,uint64)' as const, + method: 'boxMapLength(uint64)uint64' as const, args: Array.isArray(params.args) ? params.args : [params.args.key], } } /** - * Constructs a no op call for the setBoxMapStruct(uint64,(string,uint64,uint64))bool ABI method + * Constructs a no op call for the lengthBoxRef(string)uint64 ABI method * - * Sets the value of the boxMapStruct box + * Retrieves the length of the boxRef box * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static setBoxMapStruct(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static lengthBoxRef(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'setBoxMapStruct(uint64,(string,uint64,uint64))bool' as const, - args: Array.isArray(params.args) ? params.args : [params.args.key, params.args.value], + method: 'lengthBoxRef(string)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.key], } } /** - * Constructs a no op call for the boxMapStructLength(uint64)bool ABI method + * Constructs a no op call for the deleteBox()void ABI method * - * Retrieves the length of the boxMapStruct box + * Deletes the value of the boxInt box * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static boxMapStructLength(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static deleteBox(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'boxMapStructLength(uint64)bool' as const, - args: Array.isArray(params.args) ? params.args : [params.args.key], + method: 'deleteBox()void' as const, + args: Array.isArray(params.args) ? params.args : [], } } /** - * Constructs a no op call for the boxMapStructExists(uint64)bool ABI method + * Constructs a no op call for the deleteBoxMap(uint64)void ABI method * - * Checks if the boxMapStruct box exists + * Deletes the value of the boxMap box * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static boxMapStructExists(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static deleteBoxMap(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'boxMapStructExists(uint64)bool' as const, + method: 'deleteBoxMap(uint64)void' as const, args: Array.isArray(params.args) ? params.args : [params.args.key], } } /** - * Constructs a no op call for the getBoxRef()address ABI method + * Constructs a no op call for the deleteBoxRef(string)void ABI method * - * Retrieves the value stored in the boxRef box + * Deletes the value of the boxRef box * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static getBoxRef(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static deleteBoxRef(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'getBoxRef()address' as const, - args: Array.isArray(params.args) ? params.args : [], + method: 'deleteBoxRef(string)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.key], } } /** - * Constructs a no op call for the setBoxRef(string)void ABI method + * Constructs a no op call for the extractBoxRef(string)void ABI method * - * Creates a box ref with the given key and sets its value to the sender's address + * Extracts a value from the boxRef box * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static setBoxRef(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static extractBoxRef(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'setBoxRef(string)void' as const, + method: 'extractBoxRef(string)void' as const, args: Array.isArray(params.args) ? params.args : [params.args.key], } } /** - * Constructs a no op call for the deleteBoxRef(string)void ABI method + * Constructs a no op call for the getBoxMapStruct(uint64)(string,uint64,uint64) ABI method * - * Deletes the value of the boxRef box + * Retrieves the value stored in the boxMapStruct box * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static deleteBoxRef(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static getBoxMapStruct(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'deleteBoxRef(string)void' as const, + method: 'getBoxMapStruct(uint64)(string,uint64,uint64)' as const, args: Array.isArray(params.args) ? params.args : [params.args.key], } } /** - * Constructs a no op call for the maybeBoxRef(string)(byte[],bool) ABI method + * Constructs a no op call for the boxMapStructExists(uint64)bool ABI method * - * Retrieves the value stored in the boxRef box and checks if it exists + * Checks if the boxMapStruct box exists * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static maybeBoxRef(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static boxMapStructExists(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'maybeBoxRef(string)(byte[],bool)' as const, + method: 'boxMapStructExists(uint64)bool' as const, args: Array.isArray(params.args) ? params.args : [params.args.key], } } /** - * Constructs a no op call for the lengthBoxRef(string)uint64 ABI method + * Constructs a no op call for the setBoxMapStruct(uint64,(string,uint64,uint64))bool ABI method * - * Retrieves the length of the boxRef box + * Sets the value of the boxMapStruct box * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static lengthBoxRef(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static setBoxMapStruct(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'lengthBoxRef(string)uint64' as const, - args: Array.isArray(params.args) ? params.args : [params.args.key], + method: 'setBoxMapStruct(uint64,(string,uint64,uint64))bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.key, params.args.value], } } /** - * Constructs a no op call for the extractBoxRef(string)void ABI method + * Constructs a no op call for the boxMapStructLength(uint64)bool ABI method * - * Extracts a value from the boxRef box + * Retrieves the length of the boxMapStruct box * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call */ - static extractBoxRef(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + static boxMapStructLength(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { return { ...params, - method: 'extractBoxRef(string)void' as const, + method: 'boxMapStructLength(uint64)bool' as const, args: Array.isArray(params.args) ? params.args : [params.args.key], } } @@ -1198,299 +1198,299 @@ export class BoxStorageClient { }, /** - * Makes a call to the BoxStorage smart contract using the `setBox(uint64)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `maybeBox()(uint64,bool)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Sets the value of the boxInt box + * Retrieves the value stored in the boxInt box and checks if it exists * * @param params The params for the smart contract call - * @returns The call params + * @returns The call params: A tuple containing the value and a boolean indicating if the box exists */ - setBox: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(BoxStorageParamsFactory.setBox(params)) + maybeBox: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + return this.appClient.params.call(BoxStorageParamsFactory.maybeBox(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `setBoxString(string)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `getBoxMap(uint64)string` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Sets the value of the boxString box + * Retrieves the value stored in the boxMap box * * @param params The params for the smart contract call - * @returns The call params + * @returns The call params: The value stored in the boxMap box */ - setBoxString: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(BoxStorageParamsFactory.setBoxString(params)) + getBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(BoxStorageParamsFactory.getBoxMap(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `setBoxDynamicBytes(byte[])void` ABI method. + * Makes a call to the BoxStorage smart contract using the `getBoxMapWithDefault(uint64)string` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Sets the value of the boxDynamicBytes box + * Retrieves the value stored in the boxMap box with a default value if the key does not exist * * @param params The params for the smart contract call - * @returns The call params + * @returns The call params: The value stored in the boxMap box */ - setBoxDynamicBytes: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(BoxStorageParamsFactory.setBoxDynamicBytes(params)) + getBoxMapWithDefault: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(BoxStorageParamsFactory.getBoxMapWithDefault(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `deleteBox()void` ABI method. + * Makes a call to the BoxStorage smart contract using the `maybeBoxMap(uint64)(string,bool)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Deletes the value of the boxInt box + * Retrieves the value stored in the boxMap box and checks if it exists * * @param params The params for the smart contract call - * @returns The call params + * @returns The call params: A tuple containing the value and a boolean indicating if the box exists */ - deleteBox: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { - return this.appClient.params.call(BoxStorageParamsFactory.deleteBox(params)) + maybeBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(BoxStorageParamsFactory.maybeBoxMap(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `maybeBox()(uint64,bool)` ABI method. + * Makes a call to the BoxStorage smart contract using the `keyPrefixBoxMap()byte[]` ABI method. * * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Retrieves the value stored in the boxInt box and checks if it exists + * Retrieves the key prefix of the boxMap box * * @param params The params for the smart contract call - * @returns The call params: A tuple containing the value and a boolean indicating if the box exists + * @returns The call params: The key prefix of the boxMap box */ - maybeBox: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { - return this.appClient.params.call(BoxStorageParamsFactory.maybeBox(params)) + keyPrefixBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + return this.appClient.params.call(BoxStorageParamsFactory.keyPrefixBoxMap(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `getBoxMap(uint64)string` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * Makes a call to the BoxStorage smart contract using the `getBoxRef()address` ABI method. * - * Retrieves the value stored in the boxMap box + * Retrieves the value stored in the boxRef box * * @param params The params for the smart contract call - * @returns The call params: The value stored in the boxMap box + * @returns The call params: The value stored in the boxRef box */ - getBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(BoxStorageParamsFactory.getBoxMap(params)) + getBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + return this.appClient.params.call(BoxStorageParamsFactory.getBoxRef(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `getBoxMapWithDefault(uint64)string` ABI method. + * Makes a call to the BoxStorage smart contract using the `boxMapExists(uint64)bool` ABI method. * * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Retrieves the value stored in the boxMap box with a default value if the key does not exist + * Checks if the boxMap box exists * * @param params The params for the smart contract call - * @returns The call params: The value stored in the boxMap box + * @returns The call params: true if the box exists, false otherwise */ - getBoxMapWithDefault: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(BoxStorageParamsFactory.getBoxMapWithDefault(params)) + boxMapExists: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(BoxStorageParamsFactory.boxMapExists(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `setBoxMap(uint64,string)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `maybeBoxRef(string)(byte[],bool)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Sets the value of the boxMap box + * Retrieves the value stored in the boxRef box and checks if it exists * * @param params The params for the smart contract call - * @returns The call params + * @returns The call params: A tuple containing the value and a boolean indicating if the box exists */ - setBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(BoxStorageParamsFactory.setBoxMap(params)) + maybeBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(BoxStorageParamsFactory.maybeBoxRef(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `deleteBoxMap(uint64)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `setBox(uint64)void` ABI method. * - * Deletes the value of the boxMap box + * Sets the value of the boxInt box * * @param params The params for the smart contract call * @returns The call params */ - deleteBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(BoxStorageParamsFactory.deleteBoxMap(params)) + setBox: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(BoxStorageParamsFactory.setBox(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `maybeBoxMap(uint64)(string,bool)` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * Makes a call to the BoxStorage smart contract using the `setBoxString(string)void` ABI method. * - * Retrieves the value stored in the boxMap box and checks if it exists + * Sets the value of the boxString box * * @param params The params for the smart contract call - * @returns The call params: A tuple containing the value and a boolean indicating if the box exists + * @returns The call params */ - maybeBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(BoxStorageParamsFactory.maybeBoxMap(params)) + setBoxString: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(BoxStorageParamsFactory.setBoxString(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `boxMapLength(uint64)uint64` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * Makes a call to the BoxStorage smart contract using the `setBoxDynamicBytes(byte[])void` ABI method. * - * Retrieves the length of the boxMap box + * Sets the value of the boxDynamicBytes box * * @param params The params for the smart contract call - * @returns The call params: The length of the boxMap box + * @returns The call params */ - boxMapLength: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(BoxStorageParamsFactory.boxMapLength(params)) + setBoxDynamicBytes: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(BoxStorageParamsFactory.setBoxDynamicBytes(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `boxMapExists(uint64)bool` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * Makes a call to the BoxStorage smart contract using the `setBoxMap(uint64,string)void` ABI method. * - * Checks if the boxMap box exists + * Sets the value of the boxMap box * * @param params The params for the smart contract call - * @returns The call params: true if the box exists, false otherwise + * @returns The call params */ - boxMapExists: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(BoxStorageParamsFactory.boxMapExists(params)) + setBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(BoxStorageParamsFactory.setBoxMap(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `keyPrefixBoxMap()byte[]` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * Makes a call to the BoxStorage smart contract using the `setBoxRef(string)void` ABI method. * - * Retrieves the key prefix of the boxMap box + * Creates a box ref with the given key and sets its value to the sender's address * * @param params The params for the smart contract call - * @returns The call params: The key prefix of the boxMap box + * @returns The call params */ - keyPrefixBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { - return this.appClient.params.call(BoxStorageParamsFactory.keyPrefixBoxMap(params)) + setBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(BoxStorageParamsFactory.setBoxRef(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `getBoxMapStruct(uint64)(string,uint64,uint64)` ABI method. + * Makes a call to the BoxStorage smart contract using the `boxMapLength(uint64)uint64` ABI method. * * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Retrieves the value stored in the boxMapStruct box + * Retrieves the length of the boxMap box * * @param params The params for the smart contract call - * @returns The call params: The value stored in the boxMapStruct box + * @returns The call params: The length of the boxMap box */ - getBoxMapStruct: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(BoxStorageParamsFactory.getBoxMapStruct(params)) + boxMapLength: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(BoxStorageParamsFactory.boxMapLength(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `setBoxMapStruct(uint64,(string,uint64,uint64))bool` ABI method. + * Makes a call to the BoxStorage smart contract using the `lengthBoxRef(string)uint64` ABI method. * - * Sets the value of the boxMapStruct box + * Retrieves the length of the boxRef box * * @param params The params for the smart contract call - * @returns The call params + * @returns The call params: The length of the boxRef box */ - setBoxMapStruct: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(BoxStorageParamsFactory.setBoxMapStruct(params)) + lengthBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(BoxStorageParamsFactory.lengthBoxRef(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `boxMapStructLength(uint64)bool` ABI method. + * Makes a call to the BoxStorage smart contract using the `deleteBox()void` ABI method. * - * Retrieves the length of the boxMapStruct box + * Deletes the value of the boxInt box * * @param params The params for the smart contract call - * @returns The call params: The length of the boxMapStruct box + * @returns The call params */ - boxMapStructLength: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(BoxStorageParamsFactory.boxMapStructLength(params)) + deleteBox: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + return this.appClient.params.call(BoxStorageParamsFactory.deleteBox(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `boxMapStructExists(uint64)bool` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * Makes a call to the BoxStorage smart contract using the `deleteBoxMap(uint64)void` ABI method. * - * Checks if the boxMapStruct box exists + * Deletes the value of the boxMap box * * @param params The params for the smart contract call - * @returns The call params: true if the box exists, false otherwise + * @returns The call params */ - boxMapStructExists: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(BoxStorageParamsFactory.boxMapStructExists(params)) + deleteBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(BoxStorageParamsFactory.deleteBoxMap(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `getBoxRef()address` ABI method. + * Makes a call to the BoxStorage smart contract using the `deleteBoxRef(string)void` ABI method. * - * Retrieves the value stored in the boxRef box + * Deletes the value of the boxRef box * * @param params The params for the smart contract call - * @returns The call params: The value stored in the boxRef box + * @returns The call params */ - getBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { - return this.appClient.params.call(BoxStorageParamsFactory.getBoxRef(params)) + deleteBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(BoxStorageParamsFactory.deleteBoxRef(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `setBoxRef(string)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `extractBoxRef(string)void` ABI method. * - * Creates a box ref with the given key and sets its value to the sender's address + * Extracts a value from the boxRef box * * @param params The params for the smart contract call * @returns The call params */ - setBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(BoxStorageParamsFactory.setBoxRef(params)) + extractBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(BoxStorageParamsFactory.extractBoxRef(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `deleteBoxRef(string)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `getBoxMapStruct(uint64)(string,uint64,uint64)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Deletes the value of the boxRef box + * Retrieves the value stored in the boxMapStruct box * * @param params The params for the smart contract call - * @returns The call params + * @returns The call params: The value stored in the boxMapStruct box */ - deleteBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(BoxStorageParamsFactory.deleteBoxRef(params)) + getBoxMapStruct: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(BoxStorageParamsFactory.getBoxMapStruct(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `maybeBoxRef(string)(byte[],bool)` ABI method. + * Makes a call to the BoxStorage smart contract using the `boxMapStructExists(uint64)bool` ABI method. * * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Retrieves the value stored in the boxRef box and checks if it exists + * Checks if the boxMapStruct box exists * * @param params The params for the smart contract call - * @returns The call params: A tuple containing the value and a boolean indicating if the box exists + * @returns The call params: true if the box exists, false otherwise */ - maybeBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(BoxStorageParamsFactory.maybeBoxRef(params)) + boxMapStructExists: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(BoxStorageParamsFactory.boxMapStructExists(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `lengthBoxRef(string)uint64` ABI method. + * Makes a call to the BoxStorage smart contract using the `setBoxMapStruct(uint64,(string,uint64,uint64))bool` ABI method. * - * Retrieves the length of the boxRef box + * Sets the value of the boxMapStruct box * * @param params The params for the smart contract call - * @returns The call params: The length of the boxRef box + * @returns The call params */ - lengthBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(BoxStorageParamsFactory.lengthBoxRef(params)) + setBoxMapStruct: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(BoxStorageParamsFactory.setBoxMapStruct(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `extractBoxRef(string)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `boxMapStructLength(uint64)bool` ABI method. * - * Extracts a value from the boxRef box + * Retrieves the length of the boxMapStruct box * * @param params The params for the smart contract call - * @returns The call params + * @returns The call params: The length of the boxMapStruct box */ - extractBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(BoxStorageParamsFactory.extractBoxRef(params)) + boxMapStructLength: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(BoxStorageParamsFactory.boxMapStructLength(params)) }, /** @@ -1550,299 +1550,299 @@ export class BoxStorageClient { }, /** - * Makes a call to the BoxStorage smart contract using the `setBox(uint64)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `maybeBox()(uint64,bool)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Sets the value of the boxInt box + * Retrieves the value stored in the boxInt box and checks if it exists * * @param params The params for the smart contract call - * @returns The call transaction + * @returns The call transaction: A tuple containing the value and a boolean indicating if the box exists */ - setBox: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.setBox(params)) + maybeBox: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.maybeBox(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `setBoxString(string)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `getBoxMap(uint64)string` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Sets the value of the boxString box + * Retrieves the value stored in the boxMap box * * @param params The params for the smart contract call - * @returns The call transaction + * @returns The call transaction: The value stored in the boxMap box */ - setBoxString: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.setBoxString(params)) + getBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.getBoxMap(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `setBoxDynamicBytes(byte[])void` ABI method. + * Makes a call to the BoxStorage smart contract using the `getBoxMapWithDefault(uint64)string` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Sets the value of the boxDynamicBytes box + * Retrieves the value stored in the boxMap box with a default value if the key does not exist * * @param params The params for the smart contract call - * @returns The call transaction + * @returns The call transaction: The value stored in the boxMap box */ - setBoxDynamicBytes: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.setBoxDynamicBytes(params)) + getBoxMapWithDefault: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.getBoxMapWithDefault(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `deleteBox()void` ABI method. + * Makes a call to the BoxStorage smart contract using the `maybeBoxMap(uint64)(string,bool)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Deletes the value of the boxInt box + * Retrieves the value stored in the boxMap box and checks if it exists * * @param params The params for the smart contract call - * @returns The call transaction + * @returns The call transaction: A tuple containing the value and a boolean indicating if the box exists */ - deleteBox: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.deleteBox(params)) + maybeBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.maybeBoxMap(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `maybeBox()(uint64,bool)` ABI method. + * Makes a call to the BoxStorage smart contract using the `keyPrefixBoxMap()byte[]` ABI method. * * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Retrieves the value stored in the boxInt box and checks if it exists + * Retrieves the key prefix of the boxMap box * * @param params The params for the smart contract call - * @returns The call transaction: A tuple containing the value and a boolean indicating if the box exists + * @returns The call transaction: The key prefix of the boxMap box */ - maybeBox: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.maybeBox(params)) + keyPrefixBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.keyPrefixBoxMap(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `getBoxMap(uint64)string` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * Makes a call to the BoxStorage smart contract using the `getBoxRef()address` ABI method. * - * Retrieves the value stored in the boxMap box + * Retrieves the value stored in the boxRef box * * @param params The params for the smart contract call - * @returns The call transaction: The value stored in the boxMap box + * @returns The call transaction: The value stored in the boxRef box */ - getBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.getBoxMap(params)) + getBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.getBoxRef(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `getBoxMapWithDefault(uint64)string` ABI method. + * Makes a call to the BoxStorage smart contract using the `boxMapExists(uint64)bool` ABI method. * * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Retrieves the value stored in the boxMap box with a default value if the key does not exist + * Checks if the boxMap box exists * * @param params The params for the smart contract call - * @returns The call transaction: The value stored in the boxMap box + * @returns The call transaction: true if the box exists, false otherwise */ - getBoxMapWithDefault: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.getBoxMapWithDefault(params)) + boxMapExists: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.boxMapExists(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `setBoxMap(uint64,string)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `maybeBoxRef(string)(byte[],bool)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Sets the value of the boxMap box + * Retrieves the value stored in the boxRef box and checks if it exists * * @param params The params for the smart contract call - * @returns The call transaction + * @returns The call transaction: A tuple containing the value and a boolean indicating if the box exists */ - setBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.setBoxMap(params)) + maybeBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.maybeBoxRef(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `deleteBoxMap(uint64)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `setBox(uint64)void` ABI method. * - * Deletes the value of the boxMap box + * Sets the value of the boxInt box * * @param params The params for the smart contract call * @returns The call transaction */ - deleteBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.deleteBoxMap(params)) + setBox: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.setBox(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `maybeBoxMap(uint64)(string,bool)` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * Makes a call to the BoxStorage smart contract using the `setBoxString(string)void` ABI method. * - * Retrieves the value stored in the boxMap box and checks if it exists + * Sets the value of the boxString box * * @param params The params for the smart contract call - * @returns The call transaction: A tuple containing the value and a boolean indicating if the box exists + * @returns The call transaction */ - maybeBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.maybeBoxMap(params)) + setBoxString: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.setBoxString(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `boxMapLength(uint64)uint64` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * Makes a call to the BoxStorage smart contract using the `setBoxDynamicBytes(byte[])void` ABI method. * - * Retrieves the length of the boxMap box + * Sets the value of the boxDynamicBytes box * * @param params The params for the smart contract call - * @returns The call transaction: The length of the boxMap box + * @returns The call transaction */ - boxMapLength: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.boxMapLength(params)) + setBoxDynamicBytes: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.setBoxDynamicBytes(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `boxMapExists(uint64)bool` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * Makes a call to the BoxStorage smart contract using the `setBoxMap(uint64,string)void` ABI method. * - * Checks if the boxMap box exists + * Sets the value of the boxMap box * * @param params The params for the smart contract call - * @returns The call transaction: true if the box exists, false otherwise + * @returns The call transaction */ - boxMapExists: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.boxMapExists(params)) + setBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.setBoxMap(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `keyPrefixBoxMap()byte[]` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * Makes a call to the BoxStorage smart contract using the `setBoxRef(string)void` ABI method. * - * Retrieves the key prefix of the boxMap box + * Creates a box ref with the given key and sets its value to the sender's address * * @param params The params for the smart contract call - * @returns The call transaction: The key prefix of the boxMap box + * @returns The call transaction */ - keyPrefixBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.keyPrefixBoxMap(params)) + setBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.setBoxRef(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `getBoxMapStruct(uint64)(string,uint64,uint64)` ABI method. + * Makes a call to the BoxStorage smart contract using the `boxMapLength(uint64)uint64` ABI method. * * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Retrieves the value stored in the boxMapStruct box + * Retrieves the length of the boxMap box * * @param params The params for the smart contract call - * @returns The call transaction: The value stored in the boxMapStruct box + * @returns The call transaction: The length of the boxMap box */ - getBoxMapStruct: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.getBoxMapStruct(params)) + boxMapLength: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.boxMapLength(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `setBoxMapStruct(uint64,(string,uint64,uint64))bool` ABI method. + * Makes a call to the BoxStorage smart contract using the `lengthBoxRef(string)uint64` ABI method. * - * Sets the value of the boxMapStruct box + * Retrieves the length of the boxRef box * * @param params The params for the smart contract call - * @returns The call transaction + * @returns The call transaction: The length of the boxRef box */ - setBoxMapStruct: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.setBoxMapStruct(params)) + lengthBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.lengthBoxRef(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `boxMapStructLength(uint64)bool` ABI method. + * Makes a call to the BoxStorage smart contract using the `deleteBox()void` ABI method. * - * Retrieves the length of the boxMapStruct box + * Deletes the value of the boxInt box * * @param params The params for the smart contract call - * @returns The call transaction: The length of the boxMapStruct box + * @returns The call transaction */ - boxMapStructLength: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.boxMapStructLength(params)) + deleteBox: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.deleteBox(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `boxMapStructExists(uint64)bool` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * Makes a call to the BoxStorage smart contract using the `deleteBoxMap(uint64)void` ABI method. * - * Checks if the boxMapStruct box exists + * Deletes the value of the boxMap box * * @param params The params for the smart contract call - * @returns The call transaction: true if the box exists, false otherwise + * @returns The call transaction */ - boxMapStructExists: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.boxMapStructExists(params)) + deleteBoxMap: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.deleteBoxMap(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `getBoxRef()address` ABI method. + * Makes a call to the BoxStorage smart contract using the `deleteBoxRef(string)void` ABI method. * - * Retrieves the value stored in the boxRef box + * Deletes the value of the boxRef box * * @param params The params for the smart contract call - * @returns The call transaction: The value stored in the boxRef box + * @returns The call transaction */ - getBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.getBoxRef(params)) + deleteBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.deleteBoxRef(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `setBoxRef(string)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `extractBoxRef(string)void` ABI method. * - * Creates a box ref with the given key and sets its value to the sender's address + * Extracts a value from the boxRef box * * @param params The params for the smart contract call * @returns The call transaction */ - setBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.setBoxRef(params)) + extractBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.extractBoxRef(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `deleteBoxRef(string)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `getBoxMapStruct(uint64)(string,uint64,uint64)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Deletes the value of the boxRef box + * Retrieves the value stored in the boxMapStruct box * * @param params The params for the smart contract call - * @returns The call transaction + * @returns The call transaction: The value stored in the boxMapStruct box */ - deleteBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.deleteBoxRef(params)) + getBoxMapStruct: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.getBoxMapStruct(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `maybeBoxRef(string)(byte[],bool)` ABI method. + * Makes a call to the BoxStorage smart contract using the `boxMapStructExists(uint64)bool` ABI method. * * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Retrieves the value stored in the boxRef box and checks if it exists + * Checks if the boxMapStruct box exists * * @param params The params for the smart contract call - * @returns The call transaction: A tuple containing the value and a boolean indicating if the box exists + * @returns The call transaction: true if the box exists, false otherwise */ - maybeBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.maybeBoxRef(params)) + boxMapStructExists: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.boxMapStructExists(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `lengthBoxRef(string)uint64` ABI method. + * Makes a call to the BoxStorage smart contract using the `setBoxMapStruct(uint64,(string,uint64,uint64))bool` ABI method. * - * Retrieves the length of the boxRef box + * Sets the value of the boxMapStruct box * * @param params The params for the smart contract call - * @returns The call transaction: The length of the boxRef box + * @returns The call transaction */ - lengthBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.lengthBoxRef(params)) + setBoxMapStruct: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.setBoxMapStruct(params)) }, /** - * Makes a call to the BoxStorage smart contract using the `extractBoxRef(string)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `boxMapStructLength(uint64)bool` ABI method. * - * Extracts a value from the boxRef box + * Retrieves the length of the boxMapStruct box * * @param params The params for the smart contract call - * @returns The call transaction + * @returns The call transaction: The length of the boxMapStruct box */ - extractBoxRef: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.createTransaction.call(BoxStorageParamsFactory.extractBoxRef(params)) + boxMapStructLength: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(BoxStorageParamsFactory.boxMapStructLength(params)) }, /** @@ -1904,322 +1904,322 @@ export class BoxStorageClient { }, /** - * Makes a call to the BoxStorage smart contract using the `setBox(uint64)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `maybeBox()(uint64,bool)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Sets the value of the boxInt box + * Retrieves the value stored in the boxInt box and checks if it exists * * @param params The params for the smart contract call - * @returns The call result + * @returns The call result: A tuple containing the value and a boolean indicating if the box exists */ - setBox: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.setBox(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['setBox(uint64)void'])} + maybeBox: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.maybeBox(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['maybeBox()(uint64,bool)'])} }, /** - * Makes a call to the BoxStorage smart contract using the `setBoxString(string)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `getBoxMap(uint64)string` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Sets the value of the boxString box + * Retrieves the value stored in the boxMap box * * @param params The params for the smart contract call - * @returns The call result + * @returns The call result: The value stored in the boxMap box */ - setBoxString: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.setBoxString(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['setBoxString(string)void'])} + getBoxMap: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.getBoxMap(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['getBoxMap(uint64)string'])} }, /** - * Makes a call to the BoxStorage smart contract using the `setBoxDynamicBytes(byte[])void` ABI method. + * Makes a call to the BoxStorage smart contract using the `getBoxMapWithDefault(uint64)string` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Sets the value of the boxDynamicBytes box + * Retrieves the value stored in the boxMap box with a default value if the key does not exist * * @param params The params for the smart contract call - * @returns The call result + * @returns The call result: The value stored in the boxMap box */ - setBoxDynamicBytes: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.setBoxDynamicBytes(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['setBoxDynamicBytes(byte[])void'])} + getBoxMapWithDefault: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.getBoxMapWithDefault(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['getBoxMapWithDefault(uint64)string'])} }, /** - * Makes a call to the BoxStorage smart contract using the `deleteBox()void` ABI method. + * Makes a call to the BoxStorage smart contract using the `maybeBoxMap(uint64)(string,bool)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Deletes the value of the boxInt box + * Retrieves the value stored in the boxMap box and checks if it exists * * @param params The params for the smart contract call - * @returns The call result + * @returns The call result: A tuple containing the value and a boolean indicating if the box exists */ - deleteBox: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.deleteBox(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['deleteBox()void'])} + maybeBoxMap: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.maybeBoxMap(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['maybeBoxMap(uint64)(string,bool)'])} }, /** - * Makes a call to the BoxStorage smart contract using the `maybeBox()(uint64,bool)` ABI method. + * Makes a call to the BoxStorage smart contract using the `keyPrefixBoxMap()byte[]` ABI method. * * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Retrieves the value stored in the boxInt box and checks if it exists + * Retrieves the key prefix of the boxMap box * * @param params The params for the smart contract call - * @returns The call result: A tuple containing the value and a boolean indicating if the box exists + * @returns The call result: The key prefix of the boxMap box */ - maybeBox: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.maybeBox(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['maybeBox()(uint64,bool)'])} + keyPrefixBoxMap: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.keyPrefixBoxMap(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['keyPrefixBoxMap()byte[]'])} }, /** - * Makes a call to the BoxStorage smart contract using the `getBoxMap(uint64)string` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * Makes a call to the BoxStorage smart contract using the `getBoxRef()address` ABI method. * - * Retrieves the value stored in the boxMap box + * Retrieves the value stored in the boxRef box * * @param params The params for the smart contract call - * @returns The call result: The value stored in the boxMap box + * @returns The call result: The value stored in the boxRef box */ - getBoxMap: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.getBoxMap(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['getBoxMap(uint64)string'])} + getBoxRef: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.getBoxRef(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['getBoxRef()address'])} }, /** - * Makes a call to the BoxStorage smart contract using the `getBoxMapWithDefault(uint64)string` ABI method. + * Makes a call to the BoxStorage smart contract using the `boxMapExists(uint64)bool` ABI method. * * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Retrieves the value stored in the boxMap box with a default value if the key does not exist + * Checks if the boxMap box exists * * @param params The params for the smart contract call - * @returns The call result: The value stored in the boxMap box + * @returns The call result: true if the box exists, false otherwise */ - getBoxMapWithDefault: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.getBoxMapWithDefault(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['getBoxMapWithDefault(uint64)string'])} + boxMapExists: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.boxMapExists(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['boxMapExists(uint64)bool'])} }, /** - * Makes a call to the BoxStorage smart contract using the `setBoxMap(uint64,string)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `maybeBoxRef(string)(byte[],bool)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Sets the value of the boxMap box + * Retrieves the value stored in the boxRef box and checks if it exists * * @param params The params for the smart contract call - * @returns The call result + * @returns The call result: A tuple containing the value and a boolean indicating if the box exists */ - setBoxMap: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.setBoxMap(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['setBoxMap(uint64,string)void'])} + maybeBoxRef: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.maybeBoxRef(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['maybeBoxRef(string)(byte[],bool)'])} }, /** - * Makes a call to the BoxStorage smart contract using the `deleteBoxMap(uint64)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `setBox(uint64)void` ABI method. * - * Deletes the value of the boxMap box + * Sets the value of the boxInt box * * @param params The params for the smart contract call * @returns The call result */ - deleteBoxMap: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.deleteBoxMap(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['deleteBoxMap(uint64)void'])} + setBox: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.setBox(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['setBox(uint64)void'])} }, /** - * Makes a call to the BoxStorage smart contract using the `maybeBoxMap(uint64)(string,bool)` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * Makes a call to the BoxStorage smart contract using the `setBoxString(string)void` ABI method. * - * Retrieves the value stored in the boxMap box and checks if it exists + * Sets the value of the boxString box * * @param params The params for the smart contract call - * @returns The call result: A tuple containing the value and a boolean indicating if the box exists + * @returns The call result */ - maybeBoxMap: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.maybeBoxMap(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['maybeBoxMap(uint64)(string,bool)'])} + setBoxString: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.setBoxString(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['setBoxString(string)void'])} }, /** - * Makes a call to the BoxStorage smart contract using the `boxMapLength(uint64)uint64` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * Makes a call to the BoxStorage smart contract using the `setBoxDynamicBytes(byte[])void` ABI method. * - * Retrieves the length of the boxMap box + * Sets the value of the boxDynamicBytes box * * @param params The params for the smart contract call - * @returns The call result: The length of the boxMap box + * @returns The call result */ - boxMapLength: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.boxMapLength(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['boxMapLength(uint64)uint64'])} + setBoxDynamicBytes: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.setBoxDynamicBytes(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['setBoxDynamicBytes(byte[])void'])} }, /** - * Makes a call to the BoxStorage smart contract using the `boxMapExists(uint64)bool` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * Makes a call to the BoxStorage smart contract using the `setBoxMap(uint64,string)void` ABI method. * - * Checks if the boxMap box exists + * Sets the value of the boxMap box * * @param params The params for the smart contract call - * @returns The call result: true if the box exists, false otherwise - */ - boxMapExists: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.boxMapExists(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['boxMapExists(uint64)bool'])} + * @returns The call result + */ + setBoxMap: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.setBoxMap(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['setBoxMap(uint64,string)void'])} }, /** - * Makes a call to the BoxStorage smart contract using the `keyPrefixBoxMap()byte[]` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * Makes a call to the BoxStorage smart contract using the `setBoxRef(string)void` ABI method. * - * Retrieves the key prefix of the boxMap box + * Creates a box ref with the given key and sets its value to the sender's address * * @param params The params for the smart contract call - * @returns The call result: The key prefix of the boxMap box + * @returns The call result */ - keyPrefixBoxMap: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.keyPrefixBoxMap(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['keyPrefixBoxMap()byte[]'])} + setBoxRef: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.setBoxRef(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['setBoxRef(string)void'])} }, /** - * Makes a call to the BoxStorage smart contract using the `getBoxMapStruct(uint64)(string,uint64,uint64)` ABI method. + * Makes a call to the BoxStorage smart contract using the `boxMapLength(uint64)uint64` ABI method. * * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Retrieves the value stored in the boxMapStruct box + * Retrieves the length of the boxMap box * * @param params The params for the smart contract call - * @returns The call result: The value stored in the boxMapStruct box + * @returns The call result: The length of the boxMap box */ - getBoxMapStruct: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.getBoxMapStruct(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['getBoxMapStruct(uint64)(string,uint64,uint64)'])} + boxMapLength: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.boxMapLength(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['boxMapLength(uint64)uint64'])} }, /** - * Makes a call to the BoxStorage smart contract using the `setBoxMapStruct(uint64,(string,uint64,uint64))bool` ABI method. + * Makes a call to the BoxStorage smart contract using the `lengthBoxRef(string)uint64` ABI method. * - * Sets the value of the boxMapStruct box + * Retrieves the length of the boxRef box * * @param params The params for the smart contract call - * @returns The call result + * @returns The call result: The length of the boxRef box */ - setBoxMapStruct: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.setBoxMapStruct(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['setBoxMapStruct(uint64,(string,uint64,uint64))bool'])} + lengthBoxRef: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.lengthBoxRef(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['lengthBoxRef(string)uint64'])} }, /** - * Makes a call to the BoxStorage smart contract using the `boxMapStructLength(uint64)bool` ABI method. + * Makes a call to the BoxStorage smart contract using the `deleteBox()void` ABI method. * - * Retrieves the length of the boxMapStruct box + * Deletes the value of the boxInt box * * @param params The params for the smart contract call - * @returns The call result: The length of the boxMapStruct box + * @returns The call result */ - boxMapStructLength: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.boxMapStructLength(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['boxMapStructLength(uint64)bool'])} + deleteBox: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.deleteBox(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['deleteBox()void'])} }, /** - * Makes a call to the BoxStorage smart contract using the `boxMapStructExists(uint64)bool` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * Makes a call to the BoxStorage smart contract using the `deleteBoxMap(uint64)void` ABI method. * - * Checks if the boxMapStruct box exists + * Deletes the value of the boxMap box * * @param params The params for the smart contract call - * @returns The call result: true if the box exists, false otherwise + * @returns The call result */ - boxMapStructExists: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.boxMapStructExists(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['boxMapStructExists(uint64)bool'])} + deleteBoxMap: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.deleteBoxMap(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['deleteBoxMap(uint64)void'])} }, /** - * Makes a call to the BoxStorage smart contract using the `getBoxRef()address` ABI method. + * Makes a call to the BoxStorage smart contract using the `deleteBoxRef(string)void` ABI method. * - * Retrieves the value stored in the boxRef box + * Deletes the value of the boxRef box * * @param params The params for the smart contract call - * @returns The call result: The value stored in the boxRef box + * @returns The call result */ - getBoxRef: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.getBoxRef(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['getBoxRef()address'])} + deleteBoxRef: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.deleteBoxRef(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['deleteBoxRef(string)void'])} }, /** - * Makes a call to the BoxStorage smart contract using the `setBoxRef(string)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `extractBoxRef(string)void` ABI method. * - * Creates a box ref with the given key and sets its value to the sender's address + * Extracts a value from the boxRef box * * @param params The params for the smart contract call * @returns The call result */ - setBoxRef: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.setBoxRef(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['setBoxRef(string)void'])} + extractBoxRef: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.extractBoxRef(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['extractBoxRef(string)void'])} }, /** - * Makes a call to the BoxStorage smart contract using the `deleteBoxRef(string)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `getBoxMapStruct(uint64)(string,uint64,uint64)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Deletes the value of the boxRef box + * Retrieves the value stored in the boxMapStruct box * * @param params The params for the smart contract call - * @returns The call result + * @returns The call result: The value stored in the boxMapStruct box */ - deleteBoxRef: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.deleteBoxRef(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['deleteBoxRef(string)void'])} + getBoxMapStruct: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.getBoxMapStruct(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['getBoxMapStruct(uint64)(string,uint64,uint64)'])} }, /** - * Makes a call to the BoxStorage smart contract using the `maybeBoxRef(string)(byte[],bool)` ABI method. + * Makes a call to the BoxStorage smart contract using the `boxMapStructExists(uint64)bool` ABI method. * * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Retrieves the value stored in the boxRef box and checks if it exists + * Checks if the boxMapStruct box exists * * @param params The params for the smart contract call - * @returns The call result: A tuple containing the value and a boolean indicating if the box exists + * @returns The call result: true if the box exists, false otherwise */ - maybeBoxRef: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.maybeBoxRef(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['maybeBoxRef(string)(byte[],bool)'])} + boxMapStructExists: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.boxMapStructExists(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['boxMapStructExists(uint64)bool'])} }, /** - * Makes a call to the BoxStorage smart contract using the `lengthBoxRef(string)uint64` ABI method. + * Makes a call to the BoxStorage smart contract using the `setBoxMapStruct(uint64,(string,uint64,uint64))bool` ABI method. * - * Retrieves the length of the boxRef box + * Sets the value of the boxMapStruct box * * @param params The params for the smart contract call - * @returns The call result: The length of the boxRef box + * @returns The call result */ - lengthBoxRef: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.lengthBoxRef(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['lengthBoxRef(string)uint64'])} + setBoxMapStruct: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.setBoxMapStruct(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['setBoxMapStruct(uint64,(string,uint64,uint64))bool'])} }, /** - * Makes a call to the BoxStorage smart contract using the `extractBoxRef(string)void` ABI method. + * Makes a call to the BoxStorage smart contract using the `boxMapStructLength(uint64)bool` ABI method. * - * Extracts a value from the boxRef box + * Retrieves the length of the boxMapStruct box * * @param params The params for the smart contract call - * @returns The call result + * @returns The call result: The length of the boxMapStruct box */ - extractBoxRef: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(BoxStorageParamsFactory.extractBoxRef(params)) - return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['extractBoxRef(string)void'])} + boxMapStructLength: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(BoxStorageParamsFactory.boxMapStructLength(params)) + return {...result, return: result.return as unknown as (undefined | BoxStorageReturns['boxMapStructLength(uint64)bool'])} }, /** @@ -2338,18 +2338,18 @@ export class BoxStorageClient { } /** - * Makes a readonly (simulated) call to the BoxStorage smart contract using the `boxMapLength(uint64)uint64` ABI method. + * Makes a readonly (simulated) call to the BoxStorage smart contract using the `keyPrefixBoxMap()byte[]` ABI method. * * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Retrieves the length of the boxMap box + * Retrieves the key prefix of the boxMap box * * @param params The params for the smart contract call - * @returns The call result: The length of the boxMap box + * @returns The call result: The key prefix of the boxMap box */ - async boxMapLength(params: CallParams) { - const result = await this.appClient.send.call(BoxStorageParamsFactory.boxMapLength(params)) - return result.return as unknown as BoxStorageReturns['boxMapLength(uint64)uint64'] + async keyPrefixBoxMap(params: CallParams = {args: []}) { + const result = await this.appClient.send.call(BoxStorageParamsFactory.keyPrefixBoxMap(params)) + return result.return as unknown as BoxStorageReturns['keyPrefixBoxMap()byte[]'] } /** @@ -2368,18 +2368,33 @@ export class BoxStorageClient { } /** - * Makes a readonly (simulated) call to the BoxStorage smart contract using the `keyPrefixBoxMap()byte[]` ABI method. + * Makes a readonly (simulated) call to the BoxStorage smart contract using the `maybeBoxRef(string)(byte[],bool)` ABI method. * * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * Retrieves the key prefix of the boxMap box + * Retrieves the value stored in the boxRef box and checks if it exists * * @param params The params for the smart contract call - * @returns The call result: The key prefix of the boxMap box + * @returns The call result: A tuple containing the value and a boolean indicating if the box exists */ - async keyPrefixBoxMap(params: CallParams = {args: []}) { - const result = await this.appClient.send.call(BoxStorageParamsFactory.keyPrefixBoxMap(params)) - return result.return as unknown as BoxStorageReturns['keyPrefixBoxMap()byte[]'] + async maybeBoxRef(params: CallParams) { + const result = await this.appClient.send.call(BoxStorageParamsFactory.maybeBoxRef(params)) + return result.return as unknown as BoxStorageReturns['maybeBoxRef(string)(byte[],bool)'] + } + + /** + * Makes a readonly (simulated) call to the BoxStorage smart contract using the `boxMapLength(uint64)uint64` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * Retrieves the length of the boxMap box + * + * @param params The params for the smart contract call + * @returns The call result: The length of the boxMap box + */ + async boxMapLength(params: CallParams) { + const result = await this.appClient.send.call(BoxStorageParamsFactory.boxMapLength(params)) + return result.return as unknown as BoxStorageReturns['boxMapLength(uint64)uint64'] } /** @@ -2412,21 +2427,6 @@ export class BoxStorageClient { return result.return as unknown as BoxStorageReturns['boxMapStructExists(uint64)bool'] } - /** - * Makes a readonly (simulated) call to the BoxStorage smart contract using the `maybeBoxRef(string)(byte[],bool)` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. - * - * Retrieves the value stored in the boxRef box and checks if it exists - * - * @param params The params for the smart contract call - * @returns The call result: A tuple containing the value and a boolean indicating if the box exists - */ - async maybeBoxRef(params: CallParams) { - const result = await this.appClient.send.call(BoxStorageParamsFactory.maybeBoxRef(params)) - return result.return as unknown as BoxStorageReturns['maybeBoxRef(string)(byte[],bool)'] - } - /** * Methods to access state for the current BoxStorage app */ @@ -2504,187 +2504,187 @@ export class BoxStorageClient { return this }, /** - * Add a setBox(uint64)void method call against the BoxStorage contract + * Add a maybeBox()(uint64,bool) method call against the BoxStorage contract */ - setBox(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setBox(params))) - resultMappers.push(undefined) + maybeBox(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.maybeBox(params))) + resultMappers.push((v) => client.decodeReturnValue('maybeBox()(uint64,bool)', v)) return this }, /** - * Add a setBoxString(string)void method call against the BoxStorage contract + * Add a getBoxMap(uint64)string method call against the BoxStorage contract */ - setBoxString(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setBoxString(params))) - resultMappers.push(undefined) + getBoxMap(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getBoxMap(params))) + resultMappers.push((v) => client.decodeReturnValue('getBoxMap(uint64)string', v)) return this }, /** - * Add a setBoxDynamicBytes(byte[])void method call against the BoxStorage contract + * Add a getBoxMapWithDefault(uint64)string method call against the BoxStorage contract */ - setBoxDynamicBytes(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setBoxDynamicBytes(params))) - resultMappers.push(undefined) + getBoxMapWithDefault(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getBoxMapWithDefault(params))) + resultMappers.push((v) => client.decodeReturnValue('getBoxMapWithDefault(uint64)string', v)) return this }, /** - * Add a deleteBox()void method call against the BoxStorage contract + * Add a maybeBoxMap(uint64)(string,bool) method call against the BoxStorage contract */ - deleteBox(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.deleteBox(params))) - resultMappers.push(undefined) + maybeBoxMap(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.maybeBoxMap(params))) + resultMappers.push((v) => client.decodeReturnValue('maybeBoxMap(uint64)(string,bool)', v)) return this }, /** - * Add a maybeBox()(uint64,bool) method call against the BoxStorage contract + * Add a keyPrefixBoxMap()byte[] method call against the BoxStorage contract */ - maybeBox(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.maybeBox(params))) - resultMappers.push((v) => client.decodeReturnValue('maybeBox()(uint64,bool)', v)) + keyPrefixBoxMap(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.keyPrefixBoxMap(params))) + resultMappers.push((v) => client.decodeReturnValue('keyPrefixBoxMap()byte[]', v)) return this }, /** - * Add a getBoxMap(uint64)string method call against the BoxStorage contract + * Add a getBoxRef()address method call against the BoxStorage contract */ - getBoxMap(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getBoxMap(params))) - resultMappers.push((v) => client.decodeReturnValue('getBoxMap(uint64)string', v)) + getBoxRef(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getBoxRef(params))) + resultMappers.push((v) => client.decodeReturnValue('getBoxRef()address', v)) return this }, /** - * Add a getBoxMapWithDefault(uint64)string method call against the BoxStorage contract + * Add a boxMapExists(uint64)bool method call against the BoxStorage contract */ - getBoxMapWithDefault(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getBoxMapWithDefault(params))) - resultMappers.push((v) => client.decodeReturnValue('getBoxMapWithDefault(uint64)string', v)) + boxMapExists(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.boxMapExists(params))) + resultMappers.push((v) => client.decodeReturnValue('boxMapExists(uint64)bool', v)) return this }, /** - * Add a setBoxMap(uint64,string)void method call against the BoxStorage contract + * Add a maybeBoxRef(string)(byte[],bool) method call against the BoxStorage contract */ - setBoxMap(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setBoxMap(params))) - resultMappers.push(undefined) + maybeBoxRef(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.maybeBoxRef(params))) + resultMappers.push((v) => client.decodeReturnValue('maybeBoxRef(string)(byte[],bool)', v)) return this }, /** - * Add a deleteBoxMap(uint64)void method call against the BoxStorage contract + * Add a setBox(uint64)void method call against the BoxStorage contract */ - deleteBoxMap(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.deleteBoxMap(params))) + setBox(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setBox(params))) resultMappers.push(undefined) return this }, /** - * Add a maybeBoxMap(uint64)(string,bool) method call against the BoxStorage contract + * Add a setBoxString(string)void method call against the BoxStorage contract */ - maybeBoxMap(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.maybeBoxMap(params))) - resultMappers.push((v) => client.decodeReturnValue('maybeBoxMap(uint64)(string,bool)', v)) + setBoxString(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setBoxString(params))) + resultMappers.push(undefined) return this }, /** - * Add a boxMapLength(uint64)uint64 method call against the BoxStorage contract + * Add a setBoxDynamicBytes(byte[])void method call against the BoxStorage contract */ - boxMapLength(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.boxMapLength(params))) - resultMappers.push((v) => client.decodeReturnValue('boxMapLength(uint64)uint64', v)) + setBoxDynamicBytes(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setBoxDynamicBytes(params))) + resultMappers.push(undefined) return this }, /** - * Add a boxMapExists(uint64)bool method call against the BoxStorage contract + * Add a setBoxMap(uint64,string)void method call against the BoxStorage contract */ - boxMapExists(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.boxMapExists(params))) - resultMappers.push((v) => client.decodeReturnValue('boxMapExists(uint64)bool', v)) + setBoxMap(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setBoxMap(params))) + resultMappers.push(undefined) return this }, /** - * Add a keyPrefixBoxMap()byte[] method call against the BoxStorage contract + * Add a setBoxRef(string)void method call against the BoxStorage contract */ - keyPrefixBoxMap(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.keyPrefixBoxMap(params))) - resultMappers.push((v) => client.decodeReturnValue('keyPrefixBoxMap()byte[]', v)) + setBoxRef(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setBoxRef(params))) + resultMappers.push(undefined) return this }, /** - * Add a getBoxMapStruct(uint64)(string,uint64,uint64) method call against the BoxStorage contract + * Add a boxMapLength(uint64)uint64 method call against the BoxStorage contract */ - getBoxMapStruct(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getBoxMapStruct(params))) - resultMappers.push((v) => client.decodeReturnValue('getBoxMapStruct(uint64)(string,uint64,uint64)', v)) + boxMapLength(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.boxMapLength(params))) + resultMappers.push((v) => client.decodeReturnValue('boxMapLength(uint64)uint64', v)) return this }, /** - * Add a setBoxMapStruct(uint64,(string,uint64,uint64))bool method call against the BoxStorage contract + * Add a lengthBoxRef(string)uint64 method call against the BoxStorage contract */ - setBoxMapStruct(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setBoxMapStruct(params))) - resultMappers.push((v) => client.decodeReturnValue('setBoxMapStruct(uint64,(string,uint64,uint64))bool', v)) + lengthBoxRef(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.lengthBoxRef(params))) + resultMappers.push((v) => client.decodeReturnValue('lengthBoxRef(string)uint64', v)) return this }, /** - * Add a boxMapStructLength(uint64)bool method call against the BoxStorage contract + * Add a deleteBox()void method call against the BoxStorage contract */ - boxMapStructLength(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.boxMapStructLength(params))) - resultMappers.push((v) => client.decodeReturnValue('boxMapStructLength(uint64)bool', v)) + deleteBox(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.deleteBox(params))) + resultMappers.push(undefined) return this }, /** - * Add a boxMapStructExists(uint64)bool method call against the BoxStorage contract + * Add a deleteBoxMap(uint64)void method call against the BoxStorage contract */ - boxMapStructExists(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.boxMapStructExists(params))) - resultMappers.push((v) => client.decodeReturnValue('boxMapStructExists(uint64)bool', v)) + deleteBoxMap(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.deleteBoxMap(params))) + resultMappers.push(undefined) return this }, /** - * Add a getBoxRef()address method call against the BoxStorage contract + * Add a deleteBoxRef(string)void method call against the BoxStorage contract */ - getBoxRef(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getBoxRef(params))) - resultMappers.push((v) => client.decodeReturnValue('getBoxRef()address', v)) + deleteBoxRef(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.deleteBoxRef(params))) + resultMappers.push(undefined) return this }, /** - * Add a setBoxRef(string)void method call against the BoxStorage contract + * Add a extractBoxRef(string)void method call against the BoxStorage contract */ - setBoxRef(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setBoxRef(params))) + extractBoxRef(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.extractBoxRef(params))) resultMappers.push(undefined) return this }, /** - * Add a deleteBoxRef(string)void method call against the BoxStorage contract + * Add a getBoxMapStruct(uint64)(string,uint64,uint64) method call against the BoxStorage contract */ - deleteBoxRef(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.deleteBoxRef(params))) - resultMappers.push(undefined) + getBoxMapStruct(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getBoxMapStruct(params))) + resultMappers.push((v) => client.decodeReturnValue('getBoxMapStruct(uint64)(string,uint64,uint64)', v)) return this }, /** - * Add a maybeBoxRef(string)(byte[],bool) method call against the BoxStorage contract + * Add a boxMapStructExists(uint64)bool method call against the BoxStorage contract */ - maybeBoxRef(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.maybeBoxRef(params))) - resultMappers.push((v) => client.decodeReturnValue('maybeBoxRef(string)(byte[],bool)', v)) + boxMapStructExists(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.boxMapStructExists(params))) + resultMappers.push((v) => client.decodeReturnValue('boxMapStructExists(uint64)bool', v)) return this }, /** - * Add a lengthBoxRef(string)uint64 method call against the BoxStorage contract + * Add a setBoxMapStruct(uint64,(string,uint64,uint64))bool method call against the BoxStorage contract */ - lengthBoxRef(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.lengthBoxRef(params))) - resultMappers.push((v) => client.decodeReturnValue('lengthBoxRef(string)uint64', v)) + setBoxMapStruct(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.setBoxMapStruct(params))) + resultMappers.push((v) => client.decodeReturnValue('setBoxMapStruct(uint64,(string,uint64,uint64))bool', v)) return this }, /** - * Add a extractBoxRef(string)void method call against the BoxStorage contract + * Add a boxMapStructLength(uint64)bool method call against the BoxStorage contract */ - extractBoxRef(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { - promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.extractBoxRef(params))) - resultMappers.push(undefined) + boxMapStructLength(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.boxMapStructLength(params))) + resultMappers.push((v) => client.decodeReturnValue('boxMapStructLength(uint64)bool', v)) return this }, /** @@ -2753,257 +2753,257 @@ export type BoxStorageComposer = { valueBox(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['valueBox()uint64'] | undefined]> /** - * Calls the setBox(uint64)void ABI method. + * Calls the maybeBox()(uint64,bool) ABI method. * - * Sets the value of the boxInt box + * Retrieves the value stored in the boxInt box and checks if it exists * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - setBox(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['setBox(uint64)void'] | undefined]> + maybeBox(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['maybeBox()(uint64,bool)'] | undefined]> /** - * Calls the setBoxString(string)void ABI method. + * Calls the getBoxMap(uint64)string ABI method. * - * Sets the value of the boxString box + * Retrieves the value stored in the boxMap box * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - setBoxString(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['setBoxString(string)void'] | undefined]> + getBoxMap(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['getBoxMap(uint64)string'] | undefined]> /** - * Calls the setBoxDynamicBytes(byte[])void ABI method. + * Calls the getBoxMapWithDefault(uint64)string ABI method. * - * Sets the value of the boxDynamicBytes box + * Retrieves the value stored in the boxMap box with a default value if the key does not exist * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - setBoxDynamicBytes(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['setBoxDynamicBytes(byte[])void'] | undefined]> + getBoxMapWithDefault(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['getBoxMapWithDefault(uint64)string'] | undefined]> /** - * Calls the deleteBox()void ABI method. + * Calls the maybeBoxMap(uint64)(string,bool) ABI method. * - * Deletes the value of the boxInt box + * Retrieves the value stored in the boxMap box and checks if it exists * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - deleteBox(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['deleteBox()void'] | undefined]> + maybeBoxMap(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['maybeBoxMap(uint64)(string,bool)'] | undefined]> /** - * Calls the maybeBox()(uint64,bool) ABI method. + * Calls the keyPrefixBoxMap()byte[] ABI method. * - * Retrieves the value stored in the boxInt box and checks if it exists + * Retrieves the key prefix of the boxMap box * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - maybeBox(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['maybeBox()(uint64,bool)'] | undefined]> + keyPrefixBoxMap(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['keyPrefixBoxMap()byte[]'] | undefined]> /** - * Calls the getBoxMap(uint64)string ABI method. + * Calls the getBoxRef()address ABI method. * - * Retrieves the value stored in the boxMap box + * Retrieves the value stored in the boxRef box * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - getBoxMap(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['getBoxMap(uint64)string'] | undefined]> + getBoxRef(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['getBoxRef()address'] | undefined]> /** - * Calls the getBoxMapWithDefault(uint64)string ABI method. + * Calls the boxMapExists(uint64)bool ABI method. * - * Retrieves the value stored in the boxMap box with a default value if the key does not exist + * Checks if the boxMap box exists * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - getBoxMapWithDefault(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['getBoxMapWithDefault(uint64)string'] | undefined]> + boxMapExists(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['boxMapExists(uint64)bool'] | undefined]> /** - * Calls the setBoxMap(uint64,string)void ABI method. + * Calls the maybeBoxRef(string)(byte[],bool) ABI method. * - * Sets the value of the boxMap box + * Retrieves the value stored in the boxRef box and checks if it exists * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - setBoxMap(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['setBoxMap(uint64,string)void'] | undefined]> + maybeBoxRef(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['maybeBoxRef(string)(byte[],bool)'] | undefined]> /** - * Calls the deleteBoxMap(uint64)void ABI method. + * Calls the setBox(uint64)void ABI method. * - * Deletes the value of the boxMap box + * Sets the value of the boxInt box * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - deleteBoxMap(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['deleteBoxMap(uint64)void'] | undefined]> + setBox(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['setBox(uint64)void'] | undefined]> /** - * Calls the maybeBoxMap(uint64)(string,bool) ABI method. + * Calls the setBoxString(string)void ABI method. * - * Retrieves the value stored in the boxMap box and checks if it exists + * Sets the value of the boxString box * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - maybeBoxMap(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['maybeBoxMap(uint64)(string,bool)'] | undefined]> + setBoxString(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['setBoxString(string)void'] | undefined]> /** - * Calls the boxMapLength(uint64)uint64 ABI method. + * Calls the setBoxDynamicBytes(byte[])void ABI method. * - * Retrieves the length of the boxMap box + * Sets the value of the boxDynamicBytes box * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - boxMapLength(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['boxMapLength(uint64)uint64'] | undefined]> + setBoxDynamicBytes(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['setBoxDynamicBytes(byte[])void'] | undefined]> /** - * Calls the boxMapExists(uint64)bool ABI method. + * Calls the setBoxMap(uint64,string)void ABI method. * - * Checks if the boxMap box exists + * Sets the value of the boxMap box * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - boxMapExists(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['boxMapExists(uint64)bool'] | undefined]> + setBoxMap(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['setBoxMap(uint64,string)void'] | undefined]> /** - * Calls the keyPrefixBoxMap()byte[] ABI method. + * Calls the setBoxRef(string)void ABI method. * - * Retrieves the key prefix of the boxMap box + * Creates a box ref with the given key and sets its value to the sender's address * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - keyPrefixBoxMap(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['keyPrefixBoxMap()byte[]'] | undefined]> + setBoxRef(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['setBoxRef(string)void'] | undefined]> /** - * Calls the getBoxMapStruct(uint64)(string,uint64,uint64) ABI method. + * Calls the boxMapLength(uint64)uint64 ABI method. * - * Retrieves the value stored in the boxMapStruct box + * Retrieves the length of the boxMap box * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - getBoxMapStruct(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['getBoxMapStruct(uint64)(string,uint64,uint64)'] | undefined]> + boxMapLength(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['boxMapLength(uint64)uint64'] | undefined]> /** - * Calls the setBoxMapStruct(uint64,(string,uint64,uint64))bool ABI method. + * Calls the lengthBoxRef(string)uint64 ABI method. * - * Sets the value of the boxMapStruct box + * Retrieves the length of the boxRef box * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - setBoxMapStruct(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['setBoxMapStruct(uint64,(string,uint64,uint64))bool'] | undefined]> + lengthBoxRef(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['lengthBoxRef(string)uint64'] | undefined]> /** - * Calls the boxMapStructLength(uint64)bool ABI method. + * Calls the deleteBox()void ABI method. * - * Retrieves the length of the boxMapStruct box + * Deletes the value of the boxInt box * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - boxMapStructLength(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['boxMapStructLength(uint64)bool'] | undefined]> + deleteBox(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['deleteBox()void'] | undefined]> /** - * Calls the boxMapStructExists(uint64)bool ABI method. + * Calls the deleteBoxMap(uint64)void ABI method. * - * Checks if the boxMapStruct box exists + * Deletes the value of the boxMap box * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - boxMapStructExists(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['boxMapStructExists(uint64)bool'] | undefined]> + deleteBoxMap(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['deleteBoxMap(uint64)void'] | undefined]> /** - * Calls the getBoxRef()address ABI method. + * Calls the deleteBoxRef(string)void ABI method. * - * Retrieves the value stored in the boxRef box + * Deletes the value of the boxRef box * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - getBoxRef(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['getBoxRef()address'] | undefined]> + deleteBoxRef(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['deleteBoxRef(string)void'] | undefined]> /** - * Calls the setBoxRef(string)void ABI method. + * Calls the extractBoxRef(string)void ABI method. * - * Creates a box ref with the given key and sets its value to the sender's address + * Extracts a value from the boxRef box * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - setBoxRef(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['setBoxRef(string)void'] | undefined]> + extractBoxRef(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['extractBoxRef(string)void'] | undefined]> /** - * Calls the deleteBoxRef(string)void ABI method. + * Calls the getBoxMapStruct(uint64)(string,uint64,uint64) ABI method. * - * Deletes the value of the boxRef box + * Retrieves the value stored in the boxMapStruct box * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - deleteBoxRef(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['deleteBoxRef(string)void'] | undefined]> + getBoxMapStruct(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['getBoxMapStruct(uint64)(string,uint64,uint64)'] | undefined]> /** - * Calls the maybeBoxRef(string)(byte[],bool) ABI method. + * Calls the boxMapStructExists(uint64)bool ABI method. * - * Retrieves the value stored in the boxRef box and checks if it exists + * Checks if the boxMapStruct box exists * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - maybeBoxRef(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['maybeBoxRef(string)(byte[],bool)'] | undefined]> + boxMapStructExists(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['boxMapStructExists(uint64)bool'] | undefined]> /** - * Calls the lengthBoxRef(string)uint64 ABI method. + * Calls the setBoxMapStruct(uint64,(string,uint64,uint64))bool ABI method. * - * Retrieves the length of the boxRef box + * Sets the value of the boxMapStruct box * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - lengthBoxRef(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['lengthBoxRef(string)uint64'] | undefined]> + setBoxMapStruct(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['setBoxMapStruct(uint64,(string,uint64,uint64))bool'] | undefined]> /** - * Calls the extractBoxRef(string)void ABI method. + * Calls the boxMapStructLength(uint64)bool ABI method. * - * Extracts a value from the boxRef box + * Retrieves the length of the boxMapStruct box * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ - extractBoxRef(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['extractBoxRef(string)void'] | undefined]> + boxMapStructLength(params?: CallParams): BoxStorageComposer<[...TReturns, BoxStorageReturns['boxMapStructLength(uint64)bool'] | undefined]> /** * Calls the arc4Box(string)uint8[4] ABI method. diff --git a/projects/typescript-examples/contracts/artifacts/clients/GlobalStorage/GlobalStorageClient.ts b/projects/typescript-examples/contracts/artifacts/clients/GlobalStorage/GlobalStorageClient.ts index f8cb875..5febb17 100644 --- a/projects/typescript-examples/contracts/artifacts/clients/GlobalStorage/GlobalStorageClient.ts +++ b/projects/typescript-examples/contracts/artifacts/clients/GlobalStorage/GlobalStorageClient.ts @@ -24,7 +24,7 @@ import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerR import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' import SimulateResponse = modelsv2.SimulateResponse -export const APP_SPEC: Arc56Contract = {"name":"GlobalStorage","structs":{},"methods":[{"name":"readGlobalState","args":[],"returns":{"type":"(uint64,uint64,byte[],string,bool,address)","desc":"A tuple containing [globalInt, globalIntNoDefault, globalBytes, globalString, globalBool, globalAccount]\nwhere each value corresponds to the current state of the respective global variable"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Reads and returns all global state values from the contract","events":[],"recommendations":{}},{"name":"hasGlobalState","args":[],"returns":{"type":"(uint64,bool)","desc":"A tuple containing [value, hasValue] where value is the current globalIntNoDefault value\nand hasValue indicates if the value has been initialized"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Checks if a global state value exists and returns it","events":[],"recommendations":{}},{"name":"writeGlobalState","args":[{"type":"string","name":"valueString"},{"type":"bool","name":"valueBool","desc":"New value for globalBool"},{"type":"account","name":"valueAccount","desc":"New value for globalAccount"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Updates multiple global state values","events":[],"recommendations":{}},{"name":"writeDynamicGlobalState","args":[{"type":"string","name":"key","desc":"The key to store the value under in global state"},{"type":"string","name":"value","desc":"The string value to store in global state"}],"returns":{"type":"string","desc":"The stored string value, confirming successful storage"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Writes a value to global state using a dynamic key and returns the stored value","events":[],"recommendations":{}}],"arcs":[22,28],"desc":"A contract demonstrating global storage functionality","networks":{},"state":{"schema":{"global":{"ints":3,"bytes":4},"local":{"ints":0,"bytes":0}},"keys":{"global":{"globalInt":{"keyType":"AVMString","valueType":"AVMUint64","key":"Z2xvYmFsSW50"},"globalIntNoDefault":{"keyType":"AVMString","valueType":"AVMUint64","key":"Z2xvYmFsSW50Tm9EZWZhdWx0"},"globalBytes":{"keyType":"AVMString","valueType":"AVMBytes","key":"Z2xvYmFsQnl0ZXM="},"globalString":{"keyType":"AVMString","valueType":"AVMString","key":"Z2xvYmFsU3RyaW5n"},"globalBool":{"keyType":"AVMString","valueType":"AVMUint64","key":"Z2xvYmFsQm9vbA=="},"globalAccount":{"keyType":"AVMString","valueType":"AVMBytes","key":"Z2xvYmFsQWNjb3VudA=="}},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[399],"errorMessage":"Global state not set."},{"pc":[177,214,243,270],"errorMessage":"OnCompletion is not NoOp"},{"pc":[356],"errorMessage":"can only call when creating"},{"pc":[180,217,246,273],"errorMessage":"can only call when not creating"},{"pc":[362,367,371,376,380,384,396,420,428,436,454,463],"errorMessage":"check GlobalState exists"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJnbG9iYWxTdHJpbmciICJnbG9iYWxCb29sIiAiZ2xvYmFsSW50Tm9EZWZhdWx0IiAiZ2xvYmFsQWNjb3VudCIgMHgxNTFmN2M3NSAiZ2xvYmFsSW50IiAiZ2xvYmFsQnl0ZXMiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBwdWJsaWMgZ2xvYmFsSW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDUwKSB9KSAvLyBVSW50NjQgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBieXRlYyA1IC8vICJnbG9iYWxJbnQiCiAgICBwdXNoaW50IDUwIC8vIDUwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gcHVibGljIGdsb2JhbEJ5dGVzID0gR2xvYmFsU3RhdGU8Ynl0ZXM+KHsgaW5pdGlhbFZhbHVlOiBCeXRlcygnU2lsdmlvJykgfSkgLy8gQnl0ZXMgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBieXRlYyA2IC8vICJnbG9iYWxCeXRlcyIKICAgIHB1c2hieXRlcyAiU2lsdmlvIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHB1YmxpYyBnbG9iYWxTdHJpbmcgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsgaW5pdGlhbFZhbHVlOiAnTWljYWxpJyB9KSAvLyBCeXRlcyB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjXzAgLy8gImdsb2JhbFN0cmluZyIKICAgIHB1c2hieXRlcyAiTWljYWxpIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIHB1YmxpYyBnbG9iYWxCb29sID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IHRydWUgfSkgLy8gQm9vbCB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjXzEgLy8gImdsb2JhbEJvb2wiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjEKICAgIC8vIHB1YmxpYyBnbG9iYWxJbnROb0RlZmF1bHQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gVUludDY0IHdpdGggbm8gZGVmYXVsdCB2YWx1ZQogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsSW50Tm9EZWZhdWx0IgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMwogICAgLy8gdGhpcy5nbG9iYWxJbnROb0RlZmF1bHQudmFsdWUgPSBVaW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gcHVibGljIGdsb2JhbEFjY291bnQgPSBHbG9iYWxTdGF0ZTxBY2NvdW50PigpIC8vIEFkZHJlc3Mgd2l0aCBubyBkZWZhdWx0IHZhbHVlCiAgICBieXRlY18zIC8vICJnbG9iYWxBY2NvdW50IgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNAogICAgLy8gdGhpcy5nbG9iYWxBY2NvdW50LnZhbHVlID0gVHhuLnNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNy0xOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsQnl0ZXM6IDQsIGdsb2JhbFVpbnRzOiAzIH0gfSkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEdsb2JhbFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTEKICAgIHB1c2hieXRlc3MgMHhkMzhmNjA3MiAweDQ3YjQ1Y2QxIDB4ZjdhMDRlZGUgMHg0YTRjNmJmNiAvLyBtZXRob2QgInJlYWRHbG9iYWxTdGF0ZSgpKHVpbnQ2NCx1aW50NjQsYnl0ZVtdLHN0cmluZyxib29sLGFkZHJlc3MpIiwgbWV0aG9kICJoYXNHbG9iYWxTdGF0ZSgpKHVpbnQ2NCxib29sKSIsIG1ldGhvZCAid3JpdGVHbG9iYWxTdGF0ZShzdHJpbmcsYm9vbCxhY2NvdW50KXZvaWQiLCBtZXRob2QgIndyaXRlRHluYW1pY0dsb2JhbFN0YXRlKHN0cmluZyxzdHJpbmcpc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9yZWFkR2xvYmFsU3RhdGVfcm91dGVANSBtYWluX2hhc0dsb2JhbFN0YXRlX3JvdXRlQDYgbWFpbl93cml0ZUdsb2JhbFN0YXRlX3JvdXRlQDcgbWFpbl93cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZV9yb3V0ZUA4CgptYWluX2FmdGVyX2lmX2Vsc2VAMTU6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3LTE4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxCeXRlczogNCwgZ2xvYmFsVWludHM6IDMgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xvYmFsU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fd3JpdGVEeW5hbWljR2xvYmFsU3RhdGVfcm91dGVAODoKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIHB1YmxpYyB3cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTctMTgKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbEJ5dGVzOiA0LCBnbG9iYWxVaW50czogMyB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBHbG9iYWxTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyBwdWJsaWMgd3JpdGVEeW5hbWljR2xvYmFsU3RhdGUoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgewogICAgY2FsbHN1YiB3cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fd3JpdGVHbG9iYWxTdGF0ZV9yb3V0ZUA3OgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gcHVibGljIHdyaXRlR2xvYmFsU3RhdGUodmFsdWVTdHJpbmc6IHN0cmluZywgdmFsdWVCb29sOiBib29sZWFuLCB2YWx1ZUFjY291bnQ6IEFjY291bnQpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNy0xOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsQnl0ZXM6IDQsIGdsb2JhbFVpbnRzOiAzIH0gfSkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEdsb2JhbFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIHB1YmxpYyB3cml0ZUdsb2JhbFN0YXRlKHZhbHVlU3RyaW5nOiBzdHJpbmcsIHZhbHVlQm9vbDogYm9vbGVhbiwgdmFsdWVBY2NvdW50OiBBY2NvdW50KTogdm9pZCB7CiAgICBjYWxsc3ViIHdyaXRlR2xvYmFsU3RhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5faGFzR2xvYmFsU3RhdGVfcm91dGVANjoKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIHB1YmxpYyBoYXNHbG9iYWxTdGF0ZSgpOiBbdWludDY0LCBib29sZWFuXSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgaGFzR2xvYmFsU3RhdGUKICAgIHN3YXAKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZWFkR2xvYmFsU3RhdGVfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHB1YmxpYyByZWFkR2xvYmFsU3RhdGUoKTogW3VpbnQ2NCwgdWludDY0LCBieXRlcywgc3RyaW5nLCBib29sZWFuLCBhcmM0LkFkZHJlc3NdIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiByZWFkR2xvYmFsU3RhdGUKICAgIHVuY292ZXIgNQogICAgaXRvYgogICAgdW5jb3ZlciA1CiAgICBpdG9iCiAgICBkaWcgNQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciA2CiAgICBjb25jYXQKICAgIGRpZyA1CiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDYKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDcKICAgIHNldGJpdAogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDAzNQogICAgY29uY2F0CiAgICBkaWcgMwogICAgbGVuCiAgICBwdXNoaW50IDUzIC8vIDUzCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxMToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTctMTgKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbEJ5dGVzOiA0LCBnbG9iYWxVaW50czogMyB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBHbG9iYWxTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxNQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdG9yYWdlLnJlYWRHbG9iYWxTdGF0ZSgpIC0+IHVpbnQ2NCwgdWludDY0LCBieXRlcywgYnl0ZXMsIHVpbnQ2NCwgYnl0ZXM6CnJlYWRHbG9iYWxTdGF0ZToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyBnbG9iYWxBY2NvdW50ID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKSAvLyBBZGRyZXNzIHdpdGggbm8gZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImdsb2JhbEFjY291bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcHVibGljIGdsb2JhbEludCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg1MCkgfSkgLy8gVUludDY0IHdpdGggZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImdsb2JhbEludCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIxCiAgICAvLyBwdWJsaWMgZ2xvYmFsSW50Tm9EZWZhdWx0ID0gR2xvYmFsU3RhdGU8dWludDY0PigpIC8vIFVJbnQ2NCB3aXRoIG5vIGRlZmF1bHQgdmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJnbG9iYWxJbnROb0RlZmF1bHQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gcHVibGljIGdsb2JhbEJ5dGVzID0gR2xvYmFsU3RhdGU8Ynl0ZXM+KHsgaW5pdGlhbFZhbHVlOiBCeXRlcygnU2lsdmlvJykgfSkgLy8gQnl0ZXMgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAiZ2xvYmFsQnl0ZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMwogICAgLy8gcHVibGljIGdsb2JhbFN0cmluZyA9IEdsb2JhbFN0YXRlPHN0cmluZz4oeyBpbml0aWFsVmFsdWU6ICdNaWNhbGknIH0pIC8vIEJ5dGVzIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImdsb2JhbFN0cmluZyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBwdWJsaWMgZ2xvYmFsQm9vbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pIC8vIEJvb2wgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiZ2xvYmFsQm9vbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ4LTU1CiAgICAvLyByZXR1cm4gWwogICAgLy8gICB0aGlzLmdsb2JhbEludC52YWx1ZSwKICAgIC8vICAgdGhpcy5nbG9iYWxJbnROb0RlZmF1bHQudmFsdWUsCiAgICAvLyAgIHRoaXMuZ2xvYmFsQnl0ZXMudmFsdWUsCiAgICAvLyAgIHRoaXMuZ2xvYmFsU3RyaW5nLnZhbHVlLAogICAgLy8gICB0aGlzLmdsb2JhbEJvb2wudmFsdWUsCiAgICAvLyAgIGFjY291bnRBZGRyZXNzLAogICAgLy8gXQogICAgdW5jb3ZlciA1CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdG9yYWdlLmhhc0dsb2JhbFN0YXRlKCkgLT4gdWludDY0LCB1aW50NjQ6Cmhhc0dsb2JhbFN0YXRlOgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gcHVibGljIGdsb2JhbEludE5vRGVmYXVsdCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBVSW50NjQgd2l0aCBubyBkZWZhdWx0IHZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsSW50Tm9EZWZhdWx0IgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo2NgogICAgLy8gY29uc3QgaGFzVmFsdWUgPSB0aGlzLmdsb2JhbEludE5vRGVmYXVsdC5oYXNWYWx1ZQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gcHVibGljIGdsb2JhbEludE5vRGVmYXVsdCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBVSW50NjQgd2l0aCBubyBkZWZhdWx0IHZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsSW50Tm9EZWZhdWx0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIGFzc2VydChoYXNWYWx1ZSwgJ0dsb2JhbCBzdGF0ZSBub3Qgc2V0LicpCiAgICBkaWcgMQogICAgYXNzZXJ0IC8vIEdsb2JhbCBzdGF0ZSBub3Qgc2V0LgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo3MQogICAgLy8gcmV0dXJuIFt2YWx1ZSwgaGFzVmFsdWVdCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdG9yYWdlLndyaXRlR2xvYmFsU3RhdGUodmFsdWVTdHJpbmc6IGJ5dGVzLCB2YWx1ZUJvb2w6IHVpbnQ2NCwgdmFsdWVBY2NvdW50OiBieXRlcykgLT4gdm9pZDoKd3JpdGVHbG9iYWxTdGF0ZToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIHB1YmxpYyB3cml0ZUdsb2JhbFN0YXRlKHZhbHVlU3RyaW5nOiBzdHJpbmcsIHZhbHVlQm9vbDogYm9vbGVhbiwgdmFsdWVBY2NvdW50OiBBY2NvdW50KTogdm9pZCB7CiAgICBwcm90byAzIDAKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHB1YmxpYyBnbG9iYWxTdHJpbmcgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsgaW5pdGlhbFZhbHVlOiAnTWljYWxpJyB9KSAvLyBCeXRlcyB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjXzAgLy8gImdsb2JhbFN0cmluZyIKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODMKICAgIC8vIHRoaXMuZ2xvYmFsU3RyaW5nLnZhbHVlID0gdmFsdWVTdHJpbmcKICAgIGZyYW1lX2RpZyAtMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIHB1YmxpYyBnbG9iYWxCb29sID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IHRydWUgfSkgLy8gQm9vbCB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjXzEgLy8gImdsb2JhbEJvb2wiCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyB0aGlzLmdsb2JhbEJvb2wudmFsdWUgPSB2YWx1ZUJvb2wKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyBnbG9iYWxBY2NvdW50ID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKSAvLyBBZGRyZXNzIHdpdGggbm8gZGVmYXVsdCB2YWx1ZQogICAgYnl0ZWNfMyAvLyAiZ2xvYmFsQWNjb3VudCIKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIHRoaXMuZ2xvYmFsQWNjb3VudC52YWx1ZSA9IHZhbHVlQWNjb3VudAogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMwogICAgLy8gcHVibGljIGdsb2JhbFN0cmluZyA9IEdsb2JhbFN0YXRlPHN0cmluZz4oeyBpbml0aWFsVmFsdWU6ICdNaWNhbGknIH0pIC8vIEJ5dGVzIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImdsb2JhbFN0cmluZyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyBhc3NlcnQodGhpcy5nbG9iYWxTdHJpbmcudmFsdWUgPT09IHZhbHVlU3RyaW5nKQogICAgZnJhbWVfZGlnIC0zCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBwdWJsaWMgZ2xvYmFsQm9vbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pIC8vIEJvb2wgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiZ2xvYmFsQm9vbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg4CiAgICAvLyBhc3NlcnQodGhpcy5nbG9iYWxCb29sLnZhbHVlID09PSB2YWx1ZUJvb2wpCiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyBnbG9iYWxBY2NvdW50ID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKSAvLyBBZGRyZXNzIHdpdGggbm8gZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImdsb2JhbEFjY291bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4OQogICAgLy8gYXNzZXJ0KHRoaXMuZ2xvYmFsQWNjb3VudC52YWx1ZSA9PT0gdmFsdWVBY2NvdW50KQogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdG9yYWdlLndyaXRlRHluYW1pY0dsb2JhbFN0YXRlKGtleTogYnl0ZXMsIHZhbHVlOiBieXRlcykgLT4gYnl0ZXM6CndyaXRlRHluYW1pY0dsb2JhbFN0YXRlOgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo5OQogICAgLy8gcHVibGljIHdyaXRlRHluYW1pY0dsb2JhbFN0YXRlKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDIKICAgIC8vIGdsb2JhbER5bmFtaWNBY2Nlc3MudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEwNAogICAgLy8gYXNzZXJ0KGdsb2JhbER5bmFtaWNBY2Nlc3MudmFsdWUgPT09IHZhbHVlKQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIHJldHVybiBnbG9iYWxEeW5hbWljQWNjZXNzLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfZGlnIC0yCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiACAAEmBwxnbG9iYWxTdHJpbmcKZ2xvYmFsQm9vbBJnbG9iYWxJbnROb0RlZmF1bHQNZ2xvYmFsQWNjb3VudAQVH3x1CWdsb2JhbEludAtnbG9iYWxCeXRlczEYQAAkJwWBMmcnBoAGU2lsdmlvZyiABk1pY2FsaWcpI2cqImcrMQBnMRtBANOCBATTj2ByBEe0XNEE96BO3gRKTGv2NhoAjgQAXwBEACcAAiJDMRkURDEYRDYaAVcCADYaAlcCAIgA9kkVFlcGAkxQJwRMULAjQzEZFEQxGEQ2GgFXAgA2GgIiUzYaAxfAHIgApCNDMRkURDEYRIgAikwWgAEAIk8DVFAnBExQsCNDMRkURDEYRIgAUk8FFk8FFksFFRZXBgJPBlBLBRUWVwYCTwZQgAEAIk8HVE8ETwRQgAIANVBLAxWBNQgWVwYCUExQTwNQTwJQTFAnBExQsCNDMRlA/0sxGBREI0MiK2VEIicFZUQiKmVEIicGZUQiKGVEIillRE8FiSIqZUUBIiplREsBREyJigMAKIv9ZymL/mcri/9nIihlRIv9EkQiKWVEi/4SRCIrZUSL/xJEiYoCAYv+i/9nIov+ZUSL/xJEIov+ZUSJ","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract +export const APP_SPEC: Arc56Contract = {"name":"GlobalStorage","structs":{},"methods":[{"name":"readGlobalState","args":[],"returns":{"type":"(uint64,uint64,byte[],string,bool,address)","desc":"A tuple containing [globalInt, globalIntNoDefault, globalBytes, globalString, globalBool, globalAccount]\nwhere each value corresponds to the current state of the respective global variable"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Reads and returns all global state values from the contract","events":[],"recommendations":{}},{"name":"hasGlobalState","args":[],"returns":{"type":"(uint64,bool)","desc":"A tuple containing [value, hasValue] where value is the current globalIntNoDefault value\nand hasValue indicates if the value has been initialized"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Checks if a global state value exists and returns it","events":[],"recommendations":{}},{"name":"writeGlobalState","args":[{"type":"string","name":"valueString"},{"type":"bool","name":"valueBool","desc":"New value for globalBool"},{"type":"account","name":"valueAccount","desc":"New value for globalAccount"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Updates multiple global state values","events":[],"recommendations":{}},{"name":"writeDynamicGlobalState","args":[{"type":"string","name":"key","desc":"The key to store the value under in global state"},{"type":"string","name":"value","desc":"The string value to store in global state"}],"returns":{"type":"string","desc":"The stored string value, confirming successful storage"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Writes a value to global state using a dynamic key and returns the stored value","events":[],"recommendations":{}},{"name":"deleteGlobalState","args":[],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"desc":"A contract demonstrating global storage functionality","networks":{},"state":{"schema":{"global":{"ints":3,"bytes":4},"local":{"ints":0,"bytes":0}},"keys":{"global":{"globalInt":{"keyType":"AVMString","valueType":"AVMUint64","key":"Z2xvYmFsSW50"},"globalIntNoDefault":{"keyType":"AVMString","valueType":"AVMUint64","key":"Z2xvYmFsSW50Tm9EZWZhdWx0"},"globalBytes":{"keyType":"AVMString","valueType":"AVMBytes","key":"Z2xvYmFsQnl0ZXM="},"globalString":{"keyType":"AVMString","valueType":"AVMString","key":"Z2xvYmFsU3RyaW5n"},"globalBool":{"keyType":"AVMString","valueType":"AVMUint64","key":"Z2xvYmFsQm9vbA=="},"globalAccount":{"keyType":"AVMString","valueType":"AVMBytes","key":"Z2xvYmFsQWNjb3VudA=="}},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[429],"errorMessage":"Global state not set."},{"pc":[186,209,246,275,301],"errorMessage":"OnCompletion is not NoOp"},{"pc":[386],"errorMessage":"can only call when creating"},{"pc":[189,212,249,278,304],"errorMessage":"can only call when not creating"},{"pc":[392,397,401,406,410,414,426,450,458,466,484,493],"errorMessage":"check GlobalState exists"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJnbG9iYWxTdHJpbmciICJnbG9iYWxCb29sIiAiZ2xvYmFsSW50Tm9EZWZhdWx0IiAiZ2xvYmFsQWNjb3VudCIgMHgxNTFmN2M3NSAiZ2xvYmFsSW50IiAweDAwICJnbG9iYWxCeXRlcyIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHB1YmxpYyBnbG9iYWxJbnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoNTApIH0pIC8vIFVJbnQ2NCB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjIDUgLy8gImdsb2JhbEludCIKICAgIHB1c2hpbnQgNTAgLy8gNTAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBwdWJsaWMgZ2xvYmFsQnl0ZXMgPSBHbG9iYWxTdGF0ZTxieXRlcz4oeyBpbml0aWFsVmFsdWU6IEJ5dGVzKCdTaWx2aW8nKSB9KSAvLyBCeXRlcyB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjIDcgLy8gImdsb2JhbEJ5dGVzIgogICAgcHVzaGJ5dGVzICJTaWx2aW8iCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMwogICAgLy8gcHVibGljIGdsb2JhbFN0cmluZyA9IEdsb2JhbFN0YXRlPHN0cmluZz4oeyBpbml0aWFsVmFsdWU6ICdNaWNhbGknIH0pIC8vIEJ5dGVzIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgYnl0ZWNfMCAvLyAiZ2xvYmFsU3RyaW5nIgogICAgcHVzaGJ5dGVzICJNaWNhbGkiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gcHVibGljIGdsb2JhbEJvb2wgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KSAvLyBCb29sIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgYnl0ZWNfMSAvLyAiZ2xvYmFsQm9vbCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gcHVibGljIGdsb2JhbEludE5vRGVmYXVsdCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBVSW50NjQgd2l0aCBubyBkZWZhdWx0IHZhbHVlCiAgICBieXRlY18yIC8vICJnbG9iYWxJbnROb0RlZmF1bHQiCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyB0aGlzLmdsb2JhbEludE5vRGVmYXVsdC52YWx1ZSA9IFVpbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMgZ2xvYmFsQWNjb3VudCA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCkgLy8gQWRkcmVzcyB3aXRoIG5vIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjXzMgLy8gImdsb2JhbEFjY291bnQiCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM0CiAgICAvLyB0aGlzLmdsb2JhbEFjY291bnQudmFsdWUgPSBUeG4uc2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3LTE4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxCeXRlczogNCwgZ2xvYmFsVWludHM6IDMgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xvYmFsU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxMgogICAgcHVzaGJ5dGVzcyAweGQzOGY2MDcyIDB4NDdiNDVjZDEgMHhmN2EwNGVkZSAweDRhNGM2YmY2IDB4M2M3YjFmMDAgLy8gbWV0aG9kICJyZWFkR2xvYmFsU3RhdGUoKSh1aW50NjQsdWludDY0LGJ5dGVbXSxzdHJpbmcsYm9vbCxhZGRyZXNzKSIsIG1ldGhvZCAiaGFzR2xvYmFsU3RhdGUoKSh1aW50NjQsYm9vbCkiLCBtZXRob2QgIndyaXRlR2xvYmFsU3RhdGUoc3RyaW5nLGJvb2wsYWNjb3VudCl2b2lkIiwgbWV0aG9kICJ3cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZShzdHJpbmcsc3RyaW5nKXN0cmluZyIsIG1ldGhvZCAiZGVsZXRlR2xvYmFsU3RhdGUoKWJvb2wiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX3JlYWRHbG9iYWxTdGF0ZV9yb3V0ZUA1IG1haW5faGFzR2xvYmFsU3RhdGVfcm91dGVANiBtYWluX3dyaXRlR2xvYmFsU3RhdGVfcm91dGVANyBtYWluX3dyaXRlRHluYW1pY0dsb2JhbFN0YXRlX3JvdXRlQDggbWFpbl9kZWxldGVHbG9iYWxTdGF0ZV9yb3V0ZUA5CgptYWluX2FmdGVyX2lmX2Vsc2VAMTY6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3LTE4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxCeXRlczogNCwgZ2xvYmFsVWludHM6IDMgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xvYmFsU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fZGVsZXRlR2xvYmFsU3RhdGVfcm91dGVAOToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZUdsb2JhbFN0YXRlCiAgICBieXRlYyA2IC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl93cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZV9yb3V0ZUA4OgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo5OQogICAgLy8gcHVibGljIHdyaXRlRHluYW1pY0dsb2JhbFN0YXRlKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNy0xOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsQnl0ZXM6IDQsIGdsb2JhbFVpbnRzOiAzIH0gfSkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEdsb2JhbFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIHB1YmxpYyB3cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBjYWxsc3ViIHdyaXRlRHluYW1pY0dsb2JhbFN0YXRlCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl93cml0ZUdsb2JhbFN0YXRlX3JvdXRlQDc6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjgyCiAgICAvLyBwdWJsaWMgd3JpdGVHbG9iYWxTdGF0ZSh2YWx1ZVN0cmluZzogc3RyaW5nLCB2YWx1ZUJvb2w6IGJvb2xlYW4sIHZhbHVlQWNjb3VudDogQWNjb3VudCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3LTE4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxCeXRlczogNCwgZ2xvYmFsVWludHM6IDMgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xvYmFsU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gcHVibGljIHdyaXRlR2xvYmFsU3RhdGUodmFsdWVTdHJpbmc6IHN0cmluZywgdmFsdWVCb29sOiBib29sZWFuLCB2YWx1ZUFjY291bnQ6IEFjY291bnQpOiB2b2lkIHsKICAgIGNhbGxzdWIgd3JpdGVHbG9iYWxTdGF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9oYXNHbG9iYWxTdGF0ZV9yb3V0ZUA2OgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo2NQogICAgLy8gcHVibGljIGhhc0dsb2JhbFN0YXRlKCk6IFt1aW50NjQsIGJvb2xlYW5dIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBoYXNHbG9iYWxTdGF0ZQogICAgc3dhcAogICAgaXRvYgogICAgYnl0ZWMgNiAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZWFkR2xvYmFsU3RhdGVfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHB1YmxpYyByZWFkR2xvYmFsU3RhdGUoKTogW3VpbnQ2NCwgdWludDY0LCBieXRlcywgc3RyaW5nLCBib29sZWFuLCBhcmM0LkFkZHJlc3NdIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiByZWFkR2xvYmFsU3RhdGUKICAgIHVuY292ZXIgNQogICAgaXRvYgogICAgdW5jb3ZlciA1CiAgICBpdG9iCiAgICBkaWcgNQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciA2CiAgICBjb25jYXQKICAgIGRpZyA1CiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDYKICAgIGNvbmNhdAogICAgYnl0ZWMgNiAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciA3CiAgICBzZXRiaXQKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwMzUKICAgIGNvbmNhdAogICAgZGlnIDMKICAgIGxlbgogICAgcHVzaGludCA1MyAvLyA1MwogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMTI6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3LTE4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxCeXRlczogNCwgZ2xvYmFsVWludHM6IDMgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xvYmFsU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTYKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RvcmFnZS5yZWFkR2xvYmFsU3RhdGUoKSAtPiB1aW50NjQsIHVpbnQ2NCwgYnl0ZXMsIGJ5dGVzLCB1aW50NjQsIGJ5dGVzOgpyZWFkR2xvYmFsU3RhdGU6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMgZ2xvYmFsQWNjb3VudCA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCkgLy8gQWRkcmVzcyB3aXRoIG5vIGRlZmF1bHQgdmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJnbG9iYWxBY2NvdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHB1YmxpYyBnbG9iYWxJbnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoNTApIH0pIC8vIFVJbnQ2NCB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJnbG9iYWxJbnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gcHVibGljIGdsb2JhbEludE5vRGVmYXVsdCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBVSW50NjQgd2l0aCBubyBkZWZhdWx0IHZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsSW50Tm9EZWZhdWx0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIHB1YmxpYyBnbG9iYWxCeXRlcyA9IEdsb2JhbFN0YXRlPGJ5dGVzPih7IGluaXRpYWxWYWx1ZTogQnl0ZXMoJ1NpbHZpbycpIH0pIC8vIEJ5dGVzIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gImdsb2JhbEJ5dGVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHB1YmxpYyBnbG9iYWxTdHJpbmcgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsgaW5pdGlhbFZhbHVlOiAnTWljYWxpJyB9KSAvLyBCeXRlcyB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJnbG9iYWxTdHJpbmciCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gcHVibGljIGdsb2JhbEJvb2wgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KSAvLyBCb29sIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbEJvb2wiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0OC01NQogICAgLy8gcmV0dXJuIFsKICAgIC8vICAgdGhpcy5nbG9iYWxJbnQudmFsdWUsCiAgICAvLyAgIHRoaXMuZ2xvYmFsSW50Tm9EZWZhdWx0LnZhbHVlLAogICAgLy8gICB0aGlzLmdsb2JhbEJ5dGVzLnZhbHVlLAogICAgLy8gICB0aGlzLmdsb2JhbFN0cmluZy52YWx1ZSwKICAgIC8vICAgdGhpcy5nbG9iYWxCb29sLnZhbHVlLAogICAgLy8gICBhY2NvdW50QWRkcmVzcywKICAgIC8vIF0KICAgIHVuY292ZXIgNQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RvcmFnZS5oYXNHbG9iYWxTdGF0ZSgpIC0+IHVpbnQ2NCwgdWludDY0OgpoYXNHbG9iYWxTdGF0ZToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjEKICAgIC8vIHB1YmxpYyBnbG9iYWxJbnROb0RlZmF1bHQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gVUludDY0IHdpdGggbm8gZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImdsb2JhbEludE5vRGVmYXVsdCIKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIGNvbnN0IGhhc1ZhbHVlID0gdGhpcy5nbG9iYWxJbnROb0RlZmF1bHQuaGFzVmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjEKICAgIC8vIHB1YmxpYyBnbG9iYWxJbnROb0RlZmF1bHQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gVUludDY0IHdpdGggbm8gZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImdsb2JhbEludE5vRGVmYXVsdCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBhc3NlcnQoaGFzVmFsdWUsICdHbG9iYWwgc3RhdGUgbm90IHNldC4nKQogICAgZGlnIDEKICAgIGFzc2VydCAvLyBHbG9iYWwgc3RhdGUgbm90IHNldC4KICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NzEKICAgIC8vIHJldHVybiBbdmFsdWUsIGhhc1ZhbHVlXQogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RvcmFnZS53cml0ZUdsb2JhbFN0YXRlKHZhbHVlU3RyaW5nOiBieXRlcywgdmFsdWVCb29sOiB1aW50NjQsIHZhbHVlQWNjb3VudDogYnl0ZXMpIC0+IHZvaWQ6CndyaXRlR2xvYmFsU3RhdGU6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjgyCiAgICAvLyBwdWJsaWMgd3JpdGVHbG9iYWxTdGF0ZSh2YWx1ZVN0cmluZzogc3RyaW5nLCB2YWx1ZUJvb2w6IGJvb2xlYW4sIHZhbHVlQWNjb3VudDogQWNjb3VudCk6IHZvaWQgewogICAgcHJvdG8gMyAwCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIzCiAgICAvLyBwdWJsaWMgZ2xvYmFsU3RyaW5nID0gR2xvYmFsU3RhdGU8c3RyaW5nPih7IGluaXRpYWxWYWx1ZTogJ01pY2FsaScgfSkgLy8gQnl0ZXMgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBieXRlY18wIC8vICJnbG9iYWxTdHJpbmciCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyB0aGlzLmdsb2JhbFN0cmluZy52YWx1ZSA9IHZhbHVlU3RyaW5nCiAgICBmcmFtZV9kaWcgLTMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBwdWJsaWMgZ2xvYmFsQm9vbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pIC8vIEJvb2wgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBieXRlY18xIC8vICJnbG9iYWxCb29sIgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4NAogICAgLy8gdGhpcy5nbG9iYWxCb29sLnZhbHVlID0gdmFsdWVCb29sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMgZ2xvYmFsQWNjb3VudCA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCkgLy8gQWRkcmVzcyB3aXRoIG5vIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjXzMgLy8gImdsb2JhbEFjY291bnQiCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg1CiAgICAvLyB0aGlzLmdsb2JhbEFjY291bnQudmFsdWUgPSB2YWx1ZUFjY291bnQKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHB1YmxpYyBnbG9iYWxTdHJpbmcgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsgaW5pdGlhbFZhbHVlOiAnTWljYWxpJyB9KSAvLyBCeXRlcyB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJnbG9iYWxTdHJpbmciCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4NwogICAgLy8gYXNzZXJ0KHRoaXMuZ2xvYmFsU3RyaW5nLnZhbHVlID09PSB2YWx1ZVN0cmluZykKICAgIGZyYW1lX2RpZyAtMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gcHVibGljIGdsb2JhbEJvb2wgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KSAvLyBCb29sIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbEJvb2wiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4OAogICAgLy8gYXNzZXJ0KHRoaXMuZ2xvYmFsQm9vbC52YWx1ZSA9PT0gdmFsdWVCb29sKQogICAgZnJhbWVfZGlnIC0yCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMgZ2xvYmFsQWNjb3VudCA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCkgLy8gQWRkcmVzcyB3aXRoIG5vIGRlZmF1bHQgdmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJnbG9iYWxBY2NvdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODkKICAgIC8vIGFzc2VydCh0aGlzLmdsb2JhbEFjY291bnQudmFsdWUgPT09IHZhbHVlQWNjb3VudCkKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RvcmFnZS53cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZShrZXk6IGJ5dGVzLCB2YWx1ZTogYnl0ZXMpIC0+IGJ5dGVzOgp3cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIHB1YmxpYyB3cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBwcm90byAyIDEKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTAyCiAgICAvLyBnbG9iYWxEeW5hbWljQWNjZXNzLnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDQKICAgIC8vIGFzc2VydChnbG9iYWxEeW5hbWljQWNjZXNzLnZhbHVlID09PSB2YWx1ZSkKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9kaWcgLTIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTA2CiAgICAvLyByZXR1cm4gZ2xvYmFsRHluYW1pY0FjY2Vzcy52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0b3JhZ2UuZGVsZXRlR2xvYmFsU3RhdGUoKSAtPiB1aW50NjQ6CmRlbGV0ZUdsb2JhbFN0YXRlOgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcHVibGljIGdsb2JhbEludCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg1MCkgfSkgLy8gVUludDY0IHdpdGggZGVmYXVsdCB2YWx1ZQogICAgYnl0ZWMgNSAvLyAiZ2xvYmFsSW50IgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMTIKICAgIC8vIHRoaXMuZ2xvYmFsSW50LmRlbGV0ZSgpCiAgICBhcHBfZ2xvYmFsX2RlbAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMTMKICAgIC8vIHJldHVybiB0cnVlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiACAAEmCAxnbG9iYWxTdHJpbmcKZ2xvYmFsQm9vbBJnbG9iYWxJbnROb0RlZmF1bHQNZ2xvYmFsQWNjb3VudAQVH3x1CWdsb2JhbEludAEAC2dsb2JhbEJ5dGVzMRhAACQnBYEyZycHgAZTaWx2aW9nKIAGTWljYWxpZykjZyoiZysxAGcxG0EA74IFBNOPYHIER7Rc0QT3oE7eBEpMa/YEPHsfADYaAI4FAHUAWwA+ABkAAiJDMRkURDEYRIgBLicGIk8CVCcETFCwI0MxGRREMRhENhoBVwIANhoCVwIAiAD0SRUWVwYCTFAnBExQsCNDMRkURDEYRDYaAVcCADYaAiJTNhoDF8AciACiI0MxGRREMRhEiACITBYnBiJPA1RQJwRMULAjQzEZFEQxGESIAFFPBRZPBRZLBRUWVwYCTwZQSwUVFlcGAk8GUCcGIk8HVE8ETwRQgAIANVBLAxWBNQgWVwYCUExQTwNQTwJQTFAnBExQsCNDMRlA/zYxGBREI0MiK2VEIicFZUQiKmVEIicHZUQiKGVEIillRE8FiSIqZUUBIiplREsBREyJigMAKIv9ZymL/mcri/9nIihlRIv9EkQiKWVEi/4SRCIrZUSL/xJEiYoCAYv+i/9nIov+ZUSL/xJEIov+ZUSJJwVpI4k=","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract /** * A state record containing binary data @@ -94,6 +94,7 @@ export type GlobalStorageArgs = { */ value: string } + 'deleteGlobalState()bool': Record } /** * The tuple representation of the arguments for each method @@ -103,6 +104,7 @@ export type GlobalStorageArgs = { 'hasGlobalState()(uint64,bool)': [] 'writeGlobalState(string,bool,account)void': [valueString: string, valueBool: boolean, valueAccount: Uint8Array | string] 'writeDynamicGlobalState(string,string)string': [key: string, value: string] + 'deleteGlobalState()bool': [] } } @@ -114,6 +116,7 @@ export type GlobalStorageReturns = { 'hasGlobalState()(uint64,bool)': [bigint, boolean] 'writeGlobalState(string,bool,account)void': void 'writeDynamicGlobalState(string,string)string': string + 'deleteGlobalState()bool': boolean } /** @@ -157,6 +160,11 @@ export type GlobalStorageTypes = { */ returns: GlobalStorageReturns['writeDynamicGlobalState(string,string)string'] }> + & Record<'deleteGlobalState()bool' | 'deleteGlobalState', { + argsObj: GlobalStorageArgs['obj']['deleteGlobalState()bool'] + argsTuple: GlobalStorageArgs['tuple']['deleteGlobalState()bool'] + returns: GlobalStorageReturns['deleteGlobalState()bool'] + }> /** * Defines the shape of the state of the application. */ @@ -288,6 +296,19 @@ export abstract class GlobalStorageParamsFactory { args: Array.isArray(params.args) ? params.args : [params.args.key, params.args.value], } } + /** + * Constructs a no op call for the deleteGlobalState()bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static deleteGlobalState(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'deleteGlobalState()bool' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } } /** @@ -580,6 +601,16 @@ export class GlobalStorageClient { return this.appClient.params.call(GlobalStorageParamsFactory.writeDynamicGlobalState(params)) }, + /** + * Makes a call to the GlobalStorage smart contract using the `deleteGlobalState()bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + deleteGlobalState: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + return this.appClient.params.call(GlobalStorageParamsFactory.deleteGlobalState(params)) + }, + } /** @@ -648,6 +679,16 @@ export class GlobalStorageClient { return this.appClient.createTransaction.call(GlobalStorageParamsFactory.writeDynamicGlobalState(params)) }, + /** + * Makes a call to the GlobalStorage smart contract using the `deleteGlobalState()bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + deleteGlobalState: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + return this.appClient.createTransaction.call(GlobalStorageParamsFactory.deleteGlobalState(params)) + }, + } /** @@ -720,6 +761,17 @@ export class GlobalStorageClient { return {...result, return: result.return as unknown as (undefined | GlobalStorageReturns['writeDynamicGlobalState(string,string)string'])} }, + /** + * Makes a call to the GlobalStorage smart contract using the `deleteGlobalState()bool` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + deleteGlobalState: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + const result = await this.appClient.send.call(GlobalStorageParamsFactory.deleteGlobalState(params)) + return {...result, return: result.return as unknown as (undefined | GlobalStorageReturns['deleteGlobalState()bool'])} + }, + } /** @@ -819,6 +871,14 @@ export class GlobalStorageClient { resultMappers.push((v) => client.decodeReturnValue('writeDynamicGlobalState(string,string)string', v)) return this }, + /** + * Add a deleteGlobalState()bool method call against the GlobalStorage contract + */ + deleteGlobalState(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.deleteGlobalState(params))) + resultMappers.push((v) => client.decodeReturnValue('deleteGlobalState()bool', v)) + return this + }, /** * Add a clear state call to the GlobalStorage contract */ @@ -898,6 +958,15 @@ export type GlobalStorageComposer = { */ writeDynamicGlobalState(params?: CallParams): GlobalStorageComposer<[...TReturns, GlobalStorageReturns['writeDynamicGlobalState(string,string)string'] | undefined]> + /** + * Calls the deleteGlobalState()bool ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + deleteGlobalState(params?: CallParams): GlobalStorageComposer<[...TReturns, GlobalStorageReturns['deleteGlobalState()bool'] | undefined]> + /** * Makes a clear_state call to an existing instance of the GlobalStorage smart contract. * diff --git a/projects/typescript-examples/contracts/artifacts/clients/InnerTransactions/InnerTransactionsClient.ts b/projects/typescript-examples/contracts/artifacts/clients/InnerTransactions/InnerTransactionsClient.ts index 8e7edbc..ef38816 100644 --- a/projects/typescript-examples/contracts/artifacts/clients/InnerTransactions/InnerTransactionsClient.ts +++ b/projects/typescript-examples/contracts/artifacts/clients/InnerTransactions/InnerTransactionsClient.ts @@ -24,7 +24,7 @@ import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerR import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' import SimulateResponse = modelsv2.SimulateResponse -export const APP_SPEC: Arc56Contract = {"name":"InnerTransactions","structs":{},"methods":[{"name":"payment","args":[],"returns":{"type":"uint64","desc":"The amount of the payment"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Demonstrates a simple payment inner transaction","events":[],"recommendations":{}},{"name":"fungibleAssetCreate","args":[],"returns":{"type":"uint64","desc":"The ID of the created asset"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Creates a fungible asset (token)","events":[],"recommendations":{}},{"name":"nonFungibleAssetCreate","args":[],"returns":{"type":"uint64","desc":"The ID of the created asset"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Creates a non-fungible asset (NFT)\nFollowing the ARC3 standard, the total supply must be 1 for a non-fungible asset.\nIf you want to create fractional NFTs, `total` * `decimals` point must be 1.\nex) total=100, decimals=2, 100 * 0.01 = 1","events":[],"recommendations":{}},{"name":"assetOptIn","args":[{"type":"asset","name":"asset","desc":"The asset to opt into"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Opts the application into an asset","events":[],"recommendations":{}},{"name":"assetTransfer","args":[{"type":"asset","name":"asset","desc":"The asset to transfer"},{"type":"account","name":"receiver","desc":"The account to receive the asset"},{"type":"uint64","name":"amount","desc":"The amount to transfer"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Transfers an asset from the application to another account","events":[],"recommendations":{}},{"name":"assetFreeze","args":[{"type":"account","name":"acctToBeFrozen","desc":"The account to freeze the asset for"},{"type":"asset","name":"asset","desc":"The asset to freeze"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Freezes an asset for a specific account","events":[],"recommendations":{}},{"name":"assetRevoke","args":[{"type":"asset","name":"asset","desc":"The asset to revoke"},{"type":"account","name":"accountToBeRevoked","desc":"The account to revoke the asset from"},{"type":"uint64","name":"amount","desc":"The amount to revoke"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Revokes (clawbacks) an asset from an account","events":[],"recommendations":{}},{"name":"assetConfig","args":[{"type":"asset","name":"asset","desc":"The asset to reconfigure"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Reconfigures an existing asset","events":[],"recommendations":{}},{"name":"assetDelete","args":[{"type":"asset","name":"asset","desc":"The asset to delete"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Deletes an asset","events":[],"recommendations":{}},{"name":"multiInnerTxns","args":[{"type":"application","name":"appId","desc":"The application to call"}],"returns":{"type":"(uint64,string)","desc":"A tuple containing the payment amount and the result of the hello world call"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Demonstrates grouped inner transactions","events":[],"recommendations":{}},{"name":"deployApp","args":[],"returns":{"type":"uint64","desc":"The ID of the deployed application"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Deploys a HelloWorld contract using direct application call\n\nThis method uses the itxn.applicationCall to deploy the HelloWorld contract.","events":[],"recommendations":{}},{"name":"arc4DeployApp","args":[],"returns":{"type":"uint64","desc":"The ID of the deployed application"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Deploys a HelloWorld contract using arc4\n\nThis method uses arc4 to deploy the HelloWorld contract.","events":[],"recommendations":{}},{"name":"noopAppCall","args":[{"type":"application","name":"appId","desc":"The application to call"}],"returns":{"type":"string","desc":"A string result from the hello world call"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Demonstrates calling methods on another application","events":[],"recommendations":{}}],"arcs":[22,28],"desc":"InnerTransactions contract demonstrates various inner transaction patterns\nin Algorand smart contracts.","networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[795,895],"errorMessage":"Bytes has valid prefix"},{"pc":[133,163,187,204,246,264,282,310,334,362,380,397,414],"errorMessage":"OnCompletion is not NoOp"},{"pc":[436],"errorMessage":"can only call when creating"},{"pc":[136,166,190,207,249,267,285,313,337,365,383,400,417],"errorMessage":"can only call when not creating"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDMgNAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4M2FhZDZkODYgMHgwMDAzNDQ2ZjY1CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTgKICAgIHB1c2hieXRlc3MgMHgyMzk1MDAyNyAweDAyMDdmNzdkIDB4ZDIyNDkyODQgMHg2NmEwNjNiZiAweDEyNTYzNzY3IDB4Y2ZiMTJkYjEgMHg3YjU4ZTIzNiAweGQwODY0ZmY0IDB4NTM1MWQ3YmUgMHg1NzI3ZWNhZSAweGRhMjBhODdlIDB4MzhlY2MwMTQgMHg5YWVlYzE1OSAvLyBtZXRob2QgInBheW1lbnQoKXVpbnQ2NCIsIG1ldGhvZCAiZnVuZ2libGVBc3NldENyZWF0ZSgpdWludDY0IiwgbWV0aG9kICJub25GdW5naWJsZUFzc2V0Q3JlYXRlKCl1aW50NjQiLCBtZXRob2QgImFzc2V0T3B0SW4oYXNzZXQpdm9pZCIsIG1ldGhvZCAiYXNzZXRUcmFuc2Zlcihhc3NldCxhY2NvdW50LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJhc3NldEZyZWV6ZShhY2NvdW50LGFzc2V0KXZvaWQiLCBtZXRob2QgImFzc2V0UmV2b2tlKGFzc2V0LGFjY291bnQsdWludDY0KXZvaWQiLCBtZXRob2QgImFzc2V0Q29uZmlnKGFzc2V0KXZvaWQiLCBtZXRob2QgImFzc2V0RGVsZXRlKGFzc2V0KXZvaWQiLCBtZXRob2QgIm11bHRpSW5uZXJUeG5zKGFwcGxpY2F0aW9uKSh1aW50NjQsc3RyaW5nKSIsIG1ldGhvZCAiZGVwbG95QXBwKCl1aW50NjQiLCBtZXRob2QgImFyYzREZXBsb3lBcHAoKXVpbnQ2NCIsIG1ldGhvZCAibm9vcEFwcENhbGwoYXBwbGljYXRpb24pc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9wYXltZW50X3JvdXRlQDMgbWFpbl9mdW5naWJsZUFzc2V0Q3JlYXRlX3JvdXRlQDQgbWFpbl9ub25GdW5naWJsZUFzc2V0Q3JlYXRlX3JvdXRlQDUgbWFpbl9hc3NldE9wdEluX3JvdXRlQDYgbWFpbl9hc3NldFRyYW5zZmVyX3JvdXRlQDcgbWFpbl9hc3NldEZyZWV6ZV9yb3V0ZUA4IG1haW5fYXNzZXRSZXZva2Vfcm91dGVAOSBtYWluX2Fzc2V0Q29uZmlnX3JvdXRlQDEwIG1haW5fYXNzZXREZWxldGVfcm91dGVAMTEgbWFpbl9tdWx0aUlubmVyVHhuc19yb3V0ZUAxMiBtYWluX2RlcGxveUFwcF9yb3V0ZUAxMyBtYWluX2FyYzREZXBsb3lBcHBfcm91dGVAMTQgbWFpbl9ub29wQXBwQ2FsbF9yb3V0ZUAxNQoKbWFpbl9hZnRlcl9pZl9lbHNlQDIyOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9ub29wQXBwQ2FsbF9yb3V0ZUAxNToKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjMyOQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzI5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgbm9vcEFwcENhbGwKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzREZXBsb3lBcHBfcm91dGVAMTQ6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozMTEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDA0ZDIKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZXBsb3lBcHBfcm91dGVAMTM6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyOTAKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlcGxveUFwcAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tdWx0aUlubmVyVHhuc19yb3V0ZUAxMjoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjUwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgbXVsdGlJbm5lclR4bnMKICAgIHN3YXAKICAgIGl0b2IKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgcHVzaGJ5dGVzIDB4MDAwYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXREZWxldGVfcm91dGVAMTE6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMzMKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIzMwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFzc2V0RGVsZXRlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0Q29uZmlnX3JvdXRlQDEwOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjA1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMDUKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBhc3NldENvbmZpZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hc3NldFJldm9rZV9yb3V0ZUA5OgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYXNzZXRSZXZva2UKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRGcmVlemVfcm91dGVAODoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE1NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE1NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFzc2V0RnJlZXplCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0VHJhbnNmZXJfcm91dGVANzoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFzc2V0VHJhbnNmZXIKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRPcHRJbl9yb3V0ZUA2OgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYXNzZXRPcHRJbgogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ub25GdW5naWJsZUFzc2V0Q3JlYXRlX3JvdXRlQDU6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbm9uRnVuZ2libGVBc3NldENyZWF0ZQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9mdW5naWJsZUFzc2V0Q3JlYXRlX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZnVuZ2libGVBc3NldENyZWF0ZQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9wYXltZW50X3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgcGF5bWVudAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMTg6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIyCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjpJbm5lclRyYW5zYWN0aW9ucy5wYXltZW50KCkgLT4gdWludDY0OgpwYXltZW50OgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjctMzMKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIGFtb3VudDogNTAwMCwKICAgIHB1c2hpbnQgNTAwMCAvLyA1MDAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjctMzIKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzEKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjctMzMKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQW1vdW50CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozNQogICAgLy8gcmV0dXJuIHJlc3VsdC5hbW91bnQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjpJbm5lclRyYW5zYWN0aW9ucy5mdW5naWJsZUFzc2V0Q3JlYXRlKCkgLT4gdWludDY0OgpmdW5naWJsZUFzc2V0Q3JlYXRlOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NTQtNjEKICAgIC8vIGNvbnN0IGl0eG5SZXN1bHQgPSBpdHhuCiAgICAvLyAgIC5hc3NldENvbmZpZyh7CiAgICAvLyAgICAgdG90YWw6IDEwMF8wMDBfMDAwXzAwMCwKICAgIC8vICAgICBkZWNpbWFsczogMiwKICAgIC8vICAgICB1bml0TmFtZTogJ1JQJywKICAgIC8vICAgICBhc3NldE5hbWU6ICdSb3lhbHR5IFBvaW50cycsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NTkKICAgIC8vIGFzc2V0TmFtZTogJ1JveWFsdHkgUG9pbnRzJywKICAgIHB1c2hieXRlcyAiUm95YWx0eSBQb2ludHMiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TmFtZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIHVuaXROYW1lOiAnUlAnLAogICAgcHVzaGJ5dGVzICJSUCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGRlY2ltYWxzOiAyLAogICAgcHVzaGludCAyIC8vIDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHRvdGFsOiAxMDBfMDAwXzAwMF8wMDAsCiAgICBwdXNoaW50IDEwMDAwMDAwMDAwMCAvLyAxMDAwMDAwMDAwMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NTQtNjAKICAgIC8vIGNvbnN0IGl0eG5SZXN1bHQgPSBpdHhuCiAgICAvLyAgIC5hc3NldENvbmZpZyh7CiAgICAvLyAgICAgdG90YWw6IDEwMF8wMDBfMDAwXzAwMCwKICAgIC8vICAgICBkZWNpbWFsczogMiwKICAgIC8vICAgICB1bml0TmFtZTogJ1JQJywKICAgIC8vICAgICBhc3NldE5hbWU6ICdSb3lhbHR5IFBvaW50cycsCiAgICAvLyAgIH0pCiAgICBpbnRjXzIgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1NC02MQogICAgLy8gY29uc3QgaXR4blJlc3VsdCA9IGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICB0b3RhbDogMTAwXzAwMF8wMDBfMDAwLAogICAgLy8gICAgIGRlY2ltYWxzOiAyLAogICAgLy8gICAgIHVuaXROYW1lOiAnUlAnLAogICAgLy8gICAgIGFzc2V0TmFtZTogJ1JveWFsdHkgUG9pbnRzJywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NjMKICAgIC8vIHJldHVybiBpdHhuUmVzdWx0LmNyZWF0ZWRBc3NldC5pZAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLm5vbkZ1bmdpYmxlQXNzZXRDcmVhdGUoKSAtPiB1aW50NjQ6Cm5vbkZ1bmdpYmxlQXNzZXRDcmVhdGU6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3NS04OAogICAgLy8gY29uc3QgaXR4blJlc3VsdCA9IGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICB0b3RhbDogMTAwLAogICAgLy8gICAgIGRlY2ltYWxzOiAyLAogICAgLy8gICAgIHVuaXROYW1lOiAnTUwnLAogICAgLy8gICAgIGFzc2V0TmFtZTogJ01vbmEgTGlzYScsCiAgICAvLyAgICAgdXJsOiAnaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhJywKICAgIC8vICAgICBtYW5hZ2VyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmcmVlemU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGNsYXdiYWNrOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjgzLTg1CiAgICAvLyByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vIGZyZWV6ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyBjbGF3YmFjazogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBkdXBuIDMKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawogICAgaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo4MQogICAgLy8gdXJsOiAnaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhJywKICAgIHB1c2hieXRlcyAiaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVSTAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6ODAKICAgIC8vIGFzc2V0TmFtZTogJ01vbmEgTGlzYScsCiAgICBwdXNoYnl0ZXMgIk1vbmEgTGlzYSIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3OQogICAgLy8gdW5pdE5hbWU6ICdNTCcsCiAgICBwdXNoYnl0ZXMgIk1MIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3OAogICAgLy8gZGVjaW1hbHM6IDIsCiAgICBwdXNoaW50IDIgLy8gMgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3NwogICAgLy8gdG90YWw6IDEwMCwKICAgIHB1c2hpbnQgMTAwIC8vIDEwMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3NS04NwogICAgLy8gY29uc3QgaXR4blJlc3VsdCA9IGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICB0b3RhbDogMTAwLAogICAgLy8gICAgIGRlY2ltYWxzOiAyLAogICAgLy8gICAgIHVuaXROYW1lOiAnTUwnLAogICAgLy8gICAgIGFzc2V0TmFtZTogJ01vbmEgTGlzYScsCiAgICAvLyAgICAgdXJsOiAnaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhJywKICAgIC8vICAgICBtYW5hZ2VyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmcmVlemU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGNsYXdiYWNrOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzIgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6ODYKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NzUtODgKICAgIC8vIGNvbnN0IGl0eG5SZXN1bHQgPSBpdHhuCiAgICAvLyAgIC5hc3NldENvbmZpZyh7CiAgICAvLyAgICAgdG90YWw6IDEwMCwKICAgIC8vICAgICBkZWNpbWFsczogMiwKICAgIC8vICAgICB1bml0TmFtZTogJ01MJywKICAgIC8vICAgICBhc3NldE5hbWU6ICdNb25hIExpc2EnLAogICAgLy8gICAgIHVybDogJ2h0dHBzOi8vbGlua190b19pcGZzL01vbmFfTGlzYScsCiAgICAvLyAgICAgbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgZnJlZXplOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBjbGF3YmFjazogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBc3NldElECiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo5MAogICAgLy8gcmV0dXJuIGl0eG5SZXN1bHQuY3JlYXRlZEFzc2V0LmlkCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRPcHRJbihhc3NldDogdWludDY0KSAtPiB2b2lkOgphc3NldE9wdEluOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OTktMTAwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldE9wdEluKGFzc2V0OiBBc3NldCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDEtMTA4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEwNQogICAgLy8gYXNzZXRBbW91bnQ6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDEtMTA3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTAxLTEwOAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjpJbm5lclRyYW5zYWN0aW9ucy5hc3NldFRyYW5zZmVyKGFzc2V0OiB1aW50NjQsIHJlY2VpdmVyOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0VHJhbnNmZXI6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMjctMTI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldFRyYW5zZmVyKGFzc2V0OiBBc3NldCwgcmVjZWl2ZXI6IEFjY291bnQsIGFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAzIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEyOS0xMzYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTI5LTEzNQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMzQKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTI5LTEzNgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmFzc2V0RnJlZXplKGFjY3RUb0JlRnJvemVuOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRGcmVlemU6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNTQtMTU1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldEZyZWV6ZShhY2N0VG9CZUZyb3plbjogQWNjb3VudCwgYXNzZXQ6IEFzc2V0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE1Ni0xNjMKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0RnJlZXplKHsKICAgIC8vICAgICBmcmVlemVBY2NvdW50OiBhY2N0VG9CZUZyb3plbiwgLy8gYWNjb3VudCB0byBiZSBmcm96ZW4KICAgIC8vICAgICBmcmVlemVBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZnJvemVuOiB0cnVlLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNjAKICAgIC8vIGZyb3plbjogdHJ1ZSwKICAgIGludGNfMCAvLyAxCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0RnJvemVuCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldEFjY291bnQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE1Ni0xNjIKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0RnJlZXplKHsKICAgIC8vICAgICBmcmVlemVBY2NvdW50OiBhY2N0VG9CZUZyb3plbiwgLy8gYWNjb3VudCB0byBiZSBmcm96ZW4KICAgIC8vICAgICBmcmVlemVBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZnJvemVuOiB0cnVlLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNSAvLyA1CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNjEKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTU2LTE2MwogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRGcmVlemUoewogICAgLy8gICAgIGZyZWV6ZUFjY291bnQ6IGFjY3RUb0JlRnJvemVuLCAvLyBhY2NvdW50IHRvIGJlIGZyb3plbgogICAgLy8gICAgIGZyZWV6ZUFzc2V0OiBhc3NldCwKICAgIC8vICAgICBmcm96ZW46IHRydWUsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRSZXZva2UoYXNzZXQ6IHVpbnQ2NCwgYWNjb3VudFRvQmVSZXZva2VkOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0UmV2b2tlOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTc5LTE4MAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYXNzZXRSZXZva2UoYXNzZXQ6IEFzc2V0LCBhY2NvdW50VG9CZVJldm9rZWQ6IEFjY291bnQsIGFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAzIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE4MS0xODkKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgICAgYXNzZXRTZW5kZXI6IGFjY291bnRUb0JlUmV2b2tlZCwgLy8gQXNzZXRTZW5kZXIgaXMgb25seSB1c2VkIGluIHRoZSBjYXNlIG9mIGNsYXdiYWNrCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFNlbmRlcgogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxODEtMTg4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0U2VuZGVyOiBhY2NvdW50VG9CZVJldm9rZWQsIC8vIEFzc2V0U2VuZGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgY2FzZSBvZiBjbGF3YmFjawogICAgLy8gICAgIGFzc2V0QW1vdW50OiBhbW91bnQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gZmVlOiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxODEtMTg5CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0U2VuZGVyOiBhY2NvdW50VG9CZVJldm9rZWQsIC8vIEFzc2V0U2VuZGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgY2FzZSBvZiBjbGF3YmFjawogICAgLy8gICAgIGFzc2V0QW1vdW50OiBhbW91bnQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRDb25maWcoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRDb25maWc6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMDUtMjA2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldENvbmZpZyhhc3NldDogQXNzZXQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjA3LTIxNgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIGNvbmZpZ0Fzc2V0OiBhc3NldCwKICAgIC8vICAgICBtYW5hZ2VyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmcmVlemU6IFR4bi5zZW5kZXIsCiAgICAvLyAgICAgY2xhd2JhY2s6IFR4bi5zZW5kZXIsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIxMAogICAgLy8gbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjExCiAgICAvLyByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGR1cAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjEyCiAgICAvLyBmcmVlemU6IFR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIGNsYXdiYWNrOiBUeG4uc2VuZGVyLAogICAgZHVwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMDctMjE1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldENvbmZpZyh7CiAgICAvLyAgICAgY29uZmlnQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZTogVHhuLnNlbmRlciwKICAgIC8vICAgICBjbGF3YmFjazogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzIgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyBmZWU6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIwNy0yMTYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICBjb25maWdBc3NldDogYXNzZXQsCiAgICAvLyAgICAgbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgZnJlZXplOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGNsYXdiYWNrOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmFzc2V0RGVsZXRlKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0RGVsZXRlOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjMzLTIzNAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYXNzZXREZWxldGUoYXNzZXQ6IEFzc2V0KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIzNS0yNDAKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICBjb25maWdBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjM1LTIzOQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIGNvbmZpZ0Fzc2V0OiBhc3NldCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzIgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjM4CiAgICAvLyBmZWU6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIzNS0yNDAKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICBjb25maWdBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMubXVsdGlJbm5lclR4bnMoYXBwSWQ6IHVpbnQ2NCkgLT4gdWludDY0LCBieXRlczoKbXVsdGlJbm5lclR4bnM6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNTAtMjUxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBtdWx0aUlubmVyVHhucyhhcHBJZDogQXBwbGljYXRpb24pOiBbdWludDY0LCBzdHJpbmddIHsKICAgIHByb3RvIDEgMgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjUzLTI1OQogICAgLy8gY29uc3QgcGF5VHhuID0gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgYW1vdW50OiA1MDAwLAogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNTYKICAgIC8vIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBhbW91bnQ6IDUwMDAsCiAgICBwdXNoaW50IDUwMDAgLy8gNTAwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI1My0yNTgKICAgIC8vIGNvbnN0IHBheVR4biA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjU3CiAgICAvLyBmZWU6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI1My0yNTkKICAgIC8vIGNvbnN0IHBheVR4biA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQW1vdW50CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNjItMjY4CiAgICAvLyBjb25zdCBhcHBDYWxsVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogYXBwSWQuaWQsCiAgICAvLyAgICAgYXBwQXJnczogW2FyYzQubWV0aG9kU2VsZWN0b3IoJ3NheUhlbGxvKHN0cmluZyxzdHJpbmcpc3RyaW5nJyksIG5ldyBhcmM0LlN0cignSmFuZScpLCBuZXcgYXJjNC5TdHIoJ0RvZScpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjY1CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKYW5lJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgYnl0ZWNfMSAvLyBtZXRob2QgInNheUhlbGxvKHN0cmluZyxzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHB1c2hieXRlcyAweDAwMDQ0YTYxNmU2NQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjXzIgLy8gMHgwMDAzNDQ2ZjY1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI2Mi0yNjcKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHBJZC5pZCwKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKYW5lJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNiAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNjYKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjYyLTI2OAogICAgLy8gY29uc3QgYXBwQ2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcElkLmlkLAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdzYXlIZWxsbyhzdHJpbmcsc3RyaW5nKXN0cmluZycpLCBuZXcgYXJjNC5TdHIoJ0phbmUnKSwgbmV3IGFyYzQuU3RyKCdEb2UnKV0sCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI3MQogICAgLy8gY29uc3QgaGVsbG9Xb3JsZFJlc3VsdCA9IGFyYzQuZGVjb2RlQXJjNDxzdHJpbmc+KGFwcENhbGxUeG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZXh0cmFjdCA2IDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI3MgogICAgLy8gcmV0dXJuIFtwYXlUeG4uYW1vdW50LCBoZWxsb1dvcmxkUmVzdWx0XQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmRlcGxveUFwcCgpIC0+IHVpbnQ2NDoKZGVwbG95QXBwOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6Mjk0LTMwMAogICAgLy8gY29uc3QgYXBwVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IEJ5dGVzKCdhcHByb3ZhbF9wcm9ncmFtJyksCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IEJ5dGVzKCdjbGVhcl9zdGF0ZV9wcm9ncmFtJyksCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI5NwogICAgLy8gY2xlYXJTdGF0ZVByb2dyYW06IEJ5dGVzKCdjbGVhcl9zdGF0ZV9wcm9ncmFtJyksCiAgICBwdXNoYnl0ZXMgImNsZWFyX3N0YXRlX3Byb2dyYW0iCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI5NgogICAgLy8gYXBwcm92YWxQcm9ncmFtOiBCeXRlcygnYXBwcm92YWxfcHJvZ3JhbScpLAogICAgcHVzaGJ5dGVzICJhcHByb3ZhbF9wcm9ncmFtIgogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6Mjk0LTI5OQogICAgLy8gY29uc3QgYXBwVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IEJ5dGVzKCdhcHByb3ZhbF9wcm9ncmFtJyksCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IEJ5dGVzKCdjbGVhcl9zdGF0ZV9wcm9ncmFtJyksCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgcHVzaGludCA2IC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI5OAogICAgLy8gZmVlOiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyOTQtMzAwCiAgICAvLyBjb25zdCBhcHBUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogQnl0ZXMoJ2FwcHJvdmFsX3Byb2dyYW0nKSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogQnl0ZXMoJ2NsZWFyX3N0YXRlX3Byb2dyYW0nKSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjMwMgogICAgLy8gcmV0dXJuIGFwcFR4bi5jcmVhdGVkQXBwLmlkCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMubm9vcEFwcENhbGwoYXBwSWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cm5vb3BBcHBDYWxsOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzI5LTMzMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgbm9vcEFwcENhbGwoYXBwSWQ6IEFwcGxpY2F0aW9uKTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzMyLTMzNwogICAgLy8gY29uc3QgY2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcElkLmlkLAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdzYXlIZWxsbyhzdHJpbmcsc3RyaW5nKXN0cmluZycpLCBuZXcgYXJjNC5TdHIoJ0pvaG4nKSwgbmV3IGFyYzQuU3RyKCdEb2UnKV0sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzM1CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKb2huJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgYnl0ZWNfMSAvLyBtZXRob2QgInNheUhlbGxvKHN0cmluZyxzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHB1c2hieXRlcyAweDAwMDQ0YTZmNjg2ZQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjXzIgLy8gMHgwMDAzNDQ2ZjY1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjMzMi0zMzYKICAgIC8vIGNvbnN0IGNhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHBJZC5pZCwKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKb2huJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgLy8gICB9KQogICAgcHVzaGludCA2IC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzMyLTMzNwogICAgLy8gY29uc3QgY2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcElkLmlkLAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdzYXlIZWxsbyhzdHJpbmcsc3RyaW5nKXN0cmluZycpLCBuZXcgYXJjNC5TdHIoJ0pvaG4nKSwgbmV3IGFyYzQuU3RyKCdEb2UnKV0sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzQwCiAgICAvLyByZXR1cm4gYXJjNC5kZWNvZGVBcmM0PHN0cmluZz4oY2FsbFR4bi5sYXN0TG9nLCAnbG9nJykKICAgIGR1cAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBleHRyYWN0IDYgMAogICAgcmV0c3ViCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiAEAQADBCYDBBUffHUEOq1thgUAA0RvZTEbQQGOgg0EI5UAJwQCB/d9BNIkkoQEZqBjvwQSVjdnBM+xLbEEe1jiNgTQhk/0BFNR174EVyfsrgTaIKh+BDjswBQEmu7BWTYaAI4NARsBCgD5AOcAywCzAJcAhQBzAEkAOAAgAAIjQzEZFEQxGEQ2GgEXwDKIAsVJFRZXBgJMUChMULAiQzEZFEQxGESADBUffHUAAAAAAAAE0rAiQzEZFEQxGESIAl4WKExQsCJDMRkURDEYRDYaARfAMogCB0wWSwEVFlcGAk8CUEyAAgAKUExQKExQsCJDMRkURDEYRDYaARfAMIgBzSJDMRkURDEYRDYaARfAMIgBnSJDMRkURDEYRDYaARfAMDYaAhfAHDYaAxeIAWUiQzEZFEQxGEQ2GgEXwBw2GgIXwDCIATUiQzEZFEQxGEQ2GgEXwDA2GgIXwBw2GgMXiAEBIkMxGRREMRhENhoBF8AwiADYIkMxGRREMRhEiAB4FihMULAiQzEZFEQxGESIADcWKExQsCJDMRkURDEYRIgAEhYoTFCwIkMxGUD+zzEYFEQiQ7ExALIHgYgnsggishAjsgGztAiJsYAOUm95YWx0eSBQb2ludHOyJoACUlCyJYECsiOBgNDbw/QCsiIkshAjsgGztDyJsTIKRwOyLLIrsiqyKYAeaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhsieACU1vbmEgTGlzYbImgAJNTLIlgQKyI4FksiIkshAjsgGztDyJigEAsTIKI7ISi/+yEbIUJbIQI7IBs4mKAwCxi/+yEov9shGL/rIUJbIQI7IBs4mKAgCxIrIvi/+yLYv+si6BBbIQI7IBs4mKAwCxMgqL/7ISi/6yE4v9shGyFCWyECOyAbOJigEAsTIKSTEASbIssiuyKrIpi/+yISSyECOyAbOJigEAsYv/siEkshAjsgGziYoBArExALIHgYgnsggishAjsgGztAixKbIagAYABEphbmWyGiqyGov/shiBBrIQI7IBs7Q+SVcABCgSRFcGAImxgBNjbGVhcl9zdGF0ZV9wcm9ncmFtskKAEGFwcHJvdmFsX3Byb2dyYW2yQIEGshAjsgGztD2JigEBsSmyGoAGAARKb2hushoqshqL/7IYgQayECOyAbO0PklXAAQoEkRXBgCJ","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract +export const APP_SPEC: Arc56Contract = {"name":"InnerTransactions","structs":{},"methods":[{"name":"payment","args":[],"returns":{"type":"uint64","desc":"The amount of the payment"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Demonstrates a simple payment inner transaction.\nThe fee is set to 0 by default. Manually set here for demonstration purposes.\nThe `Sender` for the payment is implied to be Global.currentApplicationAddress.\nIf a different sender is needed, it'd have to be an account that has been\nrekeyed to the application address.","events":[],"recommendations":{}},{"name":"fungibleAssetCreate","args":[],"returns":{"type":"uint64","desc":"The ID of the created asset"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Creates a fungible asset (token)","events":[],"recommendations":{}},{"name":"nonFungibleAssetCreate","args":[],"returns":{"type":"uint64","desc":"The ID of the created asset"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Creates a non-fungible asset (NFT).\nFollowing the ARC3 standard, the total supply must be 1 for a non-fungible asset.\nIf you want to create fractional NFTs, `total` * `decimals` point must be 1.\nex) total=100, decimals=2, 100 * 0.01 = 1\nThe fee is set to 0 by default for inner transactions.\nThe Sender is implied to be Global.currentApplicationAddress.","events":[],"recommendations":{}},{"name":"assetOptIn","args":[{"type":"asset","name":"asset","desc":"The asset to opt into"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Opts the application into an asset.\nA zero amount asset transfer to one's self is a special type of asset transfer\nthat is used to opt-in to an asset.\nTo send an asset transfer, the asset must be an available resource.","events":[],"recommendations":{}},{"name":"assetTransfer","args":[{"type":"asset","name":"asset","desc":"The asset to transfer"},{"type":"account","name":"receiver","desc":"The account to receive the asset"},{"type":"uint64","name":"amount","desc":"The amount to transfer"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Transfers an asset from the application to another account.\nFor a smart contract to transfer an asset, the app account must be opted into the asset\nand be holding non zero amount of assets.\nTo send an asset transfer, the asset must be an available resource.","events":[],"recommendations":{}},{"name":"assetFreeze","args":[{"type":"account","name":"acctToBeFrozen","desc":"The account to freeze the asset for"},{"type":"asset","name":"asset","desc":"The asset to freeze"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Freezes an asset for a specific account.\nTo freeze an asset, the asset must be a freezable asset\nby having an account with freeze authority.","events":[],"recommendations":{}},{"name":"assetRevoke","args":[{"type":"asset","name":"asset","desc":"The asset to revoke"},{"type":"account","name":"accountToBeRevoked","desc":"The account to revoke the asset from"},{"type":"uint64","name":"amount","desc":"The amount to revoke"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Revokes (clawbacks) an asset from an account.\nTo revoke an asset, the asset must be a revocable asset\nby having an account with clawback authority.\nThe Sender is implied to be current_application_address.","events":[],"recommendations":{}},{"name":"assetConfig","args":[{"type":"asset","name":"asset","desc":"The asset to reconfigure"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Reconfigures an existing asset.\nFor a smart contract to transfer an asset, the app account must be opted into the asset\nand be holding non zero amount of assets.\nTo send an asset transfer, the asset must be an available resource.\nRefer the Resource Availability section for more information.","events":[],"recommendations":{}},{"name":"assetDelete","args":[{"type":"asset","name":"asset","desc":"The asset to delete"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Deletes an asset.\nTo delete an asset, the asset must be a deleteable asset\nby having an account with delete authority.\nThe Sender is implied to be current_application_address.","events":[],"recommendations":{}},{"name":"multiInnerTxns","args":[{"type":"application","name":"appId","desc":"The application to call"}],"returns":{"type":"(uint64,string)","desc":"A tuple containing the payment amount and the result of the hello world call"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Demonstrates grouped inner transactions","events":[],"recommendations":{}},{"name":"deployApp","args":[],"returns":{"type":"uint64","desc":"The ID of the deployed application"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Deploys a HelloWorld contract using direct application call\n\nThis method uses the itxn.applicationCall to deploy the HelloWorld contract.","events":[],"recommendations":{}},{"name":"arc4DeployApp","args":[],"returns":{"type":"uint64","desc":"The ID of the deployed application"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Deploys a HelloWorld contract using arc4\n\nThis method uses arc4 to deploy the HelloWorld contract.","events":[],"recommendations":{}},{"name":"noopAppCall","args":[{"type":"application","name":"appId","desc":"The application to call"}],"returns":{"type":"string","desc":"A string result from the hello world call"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Demonstrates calling methods on another application","events":[],"recommendations":{}}],"arcs":[22,28],"desc":"InnerTransactions contract demonstrates various inner transaction patterns\nin Algorand smart contracts.","networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[795,895],"errorMessage":"Bytes has valid prefix"},{"pc":[133,163,187,204,246,264,282,310,334,362,380,397,414],"errorMessage":"OnCompletion is not NoOp"},{"pc":[436],"errorMessage":"can only call when creating"},{"pc":[136,166,190,207,249,267,285,313,337,365,383,400,417],"errorMessage":"can only call when not creating"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDMgNAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4M2FhZDZkODYgMHgwMDAzNDQ2ZjY1CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTgKICAgIHB1c2hieXRlc3MgMHgyMzk1MDAyNyAweDAyMDdmNzdkIDB4ZDIyNDkyODQgMHg2NmEwNjNiZiAweDEyNTYzNzY3IDB4Y2ZiMTJkYjEgMHg3YjU4ZTIzNiAweGQwODY0ZmY0IDB4NTM1MWQ3YmUgMHg1NzI3ZWNhZSAweGRhMjBhODdlIDB4MzhlY2MwMTQgMHg5YWVlYzE1OSAvLyBtZXRob2QgInBheW1lbnQoKXVpbnQ2NCIsIG1ldGhvZCAiZnVuZ2libGVBc3NldENyZWF0ZSgpdWludDY0IiwgbWV0aG9kICJub25GdW5naWJsZUFzc2V0Q3JlYXRlKCl1aW50NjQiLCBtZXRob2QgImFzc2V0T3B0SW4oYXNzZXQpdm9pZCIsIG1ldGhvZCAiYXNzZXRUcmFuc2Zlcihhc3NldCxhY2NvdW50LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJhc3NldEZyZWV6ZShhY2NvdW50LGFzc2V0KXZvaWQiLCBtZXRob2QgImFzc2V0UmV2b2tlKGFzc2V0LGFjY291bnQsdWludDY0KXZvaWQiLCBtZXRob2QgImFzc2V0Q29uZmlnKGFzc2V0KXZvaWQiLCBtZXRob2QgImFzc2V0RGVsZXRlKGFzc2V0KXZvaWQiLCBtZXRob2QgIm11bHRpSW5uZXJUeG5zKGFwcGxpY2F0aW9uKSh1aW50NjQsc3RyaW5nKSIsIG1ldGhvZCAiZGVwbG95QXBwKCl1aW50NjQiLCBtZXRob2QgImFyYzREZXBsb3lBcHAoKXVpbnQ2NCIsIG1ldGhvZCAibm9vcEFwcENhbGwoYXBwbGljYXRpb24pc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9wYXltZW50X3JvdXRlQDMgbWFpbl9mdW5naWJsZUFzc2V0Q3JlYXRlX3JvdXRlQDQgbWFpbl9ub25GdW5naWJsZUFzc2V0Q3JlYXRlX3JvdXRlQDUgbWFpbl9hc3NldE9wdEluX3JvdXRlQDYgbWFpbl9hc3NldFRyYW5zZmVyX3JvdXRlQDcgbWFpbl9hc3NldEZyZWV6ZV9yb3V0ZUA4IG1haW5fYXNzZXRSZXZva2Vfcm91dGVAOSBtYWluX2Fzc2V0Q29uZmlnX3JvdXRlQDEwIG1haW5fYXNzZXREZWxldGVfcm91dGVAMTEgbWFpbl9tdWx0aUlubmVyVHhuc19yb3V0ZUAxMiBtYWluX2RlcGxveUFwcF9yb3V0ZUAxMyBtYWluX2FyYzREZXBsb3lBcHBfcm91dGVAMTQgbWFpbl9ub29wQXBwQ2FsbF9yb3V0ZUAxNQoKbWFpbl9hZnRlcl9pZl9lbHNlQDIyOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9ub29wQXBwQ2FsbF9yb3V0ZUAxNToKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjMxMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzEwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgbm9vcEFwcENhbGwKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzREZXBsb3lBcHBfcm91dGVAMTQ6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyOTIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDA0ZDIKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZXBsb3lBcHBfcm91dGVAMTM6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNzEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlcGxveUFwcAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tdWx0aUlubmVyVHhuc19yb3V0ZUAxMjoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIzMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjMxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgbXVsdGlJbm5lclR4bnMKICAgIHN3YXAKICAgIGl0b2IKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgcHVzaGJ5dGVzIDB4MDAwYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXREZWxldGVfcm91dGVAMTE6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIxNAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFzc2V0RGVsZXRlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0Q29uZmlnX3JvdXRlQDEwOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBhc3NldENvbmZpZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hc3NldFJldm9rZV9yb3V0ZUA5OgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTY4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTY4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYXNzZXRSZXZva2UKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRGcmVlemVfcm91dGVAODoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE0NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE0NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFzc2V0RnJlZXplCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0VHJhbnNmZXJfcm91dGVANzoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEyMwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEyMwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFzc2V0VHJhbnNmZXIKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRPcHRJbl9yb3V0ZUA2OgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTAwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBhc3NldE9wdEluCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX25vbkZ1bmdpYmxlQXNzZXRDcmVhdGVfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjcxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBub25GdW5naWJsZUFzc2V0Q3JlYXRlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Z1bmdpYmxlQXNzZXRDcmVhdGVfcm91dGVANDoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBmdW5naWJsZUFzc2V0Q3JlYXRlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3BheW1lbnRfcm91dGVAMzoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBwYXltZW50CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxODoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMjIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLnBheW1lbnQoKSAtPiB1aW50NjQ6CnBheW1lbnQ6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozMS0zNwogICAgLy8gY29uc3QgcmVzdWx0ID0gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgYW1vdW50OiA1MDAwLAogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozNAogICAgLy8gcmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozMwogICAgLy8gYW1vdW50OiA1MDAwLAogICAgcHVzaGludCA1MDAwIC8vIDUwMDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozMS0zNgogICAgLy8gY29uc3QgcmVzdWx0ID0gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgYW1vdW50OiA1MDAwLAogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMCAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozNQogICAgLy8gZmVlOiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozMS0zNwogICAgLy8gY29uc3QgcmVzdWx0ID0gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgYW1vdW50OiA1MDAwLAogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBBbW91bnQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyByZXR1cm4gcmVzdWx0LmFtb3VudAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmZ1bmdpYmxlQXNzZXRDcmVhdGUoKSAtPiB1aW50NjQ6CmZ1bmdpYmxlQXNzZXRDcmVhdGU6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1MC01NwogICAgLy8gY29uc3QgaXR4blJlc3VsdCA9IGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICB0b3RhbDogMTAwXzAwMF8wMDBfMDAwLAogICAgLy8gICAgIGRlY2ltYWxzOiAyLAogICAgLy8gICAgIHVuaXROYW1lOiAnUlAnLAogICAgLy8gICAgIGFzc2V0TmFtZTogJ1JveWFsdHkgUG9pbnRzJywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1NQogICAgLy8gYXNzZXROYW1lOiAnUm95YWx0eSBQb2ludHMnLAogICAgcHVzaGJ5dGVzICJSb3lhbHR5IFBvaW50cyIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1NAogICAgLy8gdW5pdE5hbWU6ICdSUCcsCiAgICBwdXNoYnl0ZXMgIlJQIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gZGVjaW1hbHM6IDIsCiAgICBwdXNoaW50IDIgLy8gMgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1MgogICAgLy8gdG90YWw6IDEwMF8wMDBfMDAwXzAwMCwKICAgIHB1c2hpbnQgMTAwMDAwMDAwMDAwIC8vIDEwMDAwMDAwMDAwMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1MC01NgogICAgLy8gY29uc3QgaXR4blJlc3VsdCA9IGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICB0b3RhbDogMTAwXzAwMF8wMDBfMDAwLAogICAgLy8gICAgIGRlY2ltYWxzOiAyLAogICAgLy8gICAgIHVuaXROYW1lOiAnUlAnLAogICAgLy8gICAgIGFzc2V0TmFtZTogJ1JveWFsdHkgUG9pbnRzJywKICAgIC8vICAgfSkKICAgIGludGNfMiAvLyAzCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjUwLTU3CiAgICAvLyBjb25zdCBpdHhuUmVzdWx0ID0gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIHRvdGFsOiAxMDBfMDAwXzAwMF8wMDAsCiAgICAvLyAgICAgZGVjaW1hbHM6IDIsCiAgICAvLyAgICAgdW5pdE5hbWU6ICdSUCcsCiAgICAvLyAgICAgYXNzZXROYW1lOiAnUm95YWx0eSBQb2ludHMnLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBc3NldElECiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1OQogICAgLy8gcmV0dXJuIGl0eG5SZXN1bHQuY3JlYXRlZEFzc2V0LmlkCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMubm9uRnVuZ2libGVBc3NldENyZWF0ZSgpIC0+IHVpbnQ2NDoKbm9uRnVuZ2libGVBc3NldENyZWF0ZToKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjczLTg2CiAgICAvLyBjb25zdCBpdHhuUmVzdWx0ID0gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIHRvdGFsOiAxMDAsCiAgICAvLyAgICAgZGVjaW1hbHM6IDIsCiAgICAvLyAgICAgdW5pdE5hbWU6ICdNTCcsCiAgICAvLyAgICAgYXNzZXROYW1lOiAnTW9uYSBMaXNhJywKICAgIC8vICAgICB1cmw6ICdodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EnLAogICAgLy8gICAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgY2xhd2JhY2s6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6ODEtODMKICAgIC8vIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gZnJlZXplOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vIGNsYXdiYWNrOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGR1cG4gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjc5CiAgICAvLyB1cmw6ICdodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EnLAogICAgcHVzaGJ5dGVzICJodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3OAogICAgLy8gYXNzZXROYW1lOiAnTW9uYSBMaXNhJywKICAgIHB1c2hieXRlcyAiTW9uYSBMaXNhIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjc3CiAgICAvLyB1bml0TmFtZTogJ01MJywKICAgIHB1c2hieXRlcyAiTUwiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjc2CiAgICAvLyBkZWNpbWFsczogMiwKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyB0b3RhbDogMTAwLAogICAgcHVzaGludCAxMDAgLy8gMTAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjczLTg1CiAgICAvLyBjb25zdCBpdHhuUmVzdWx0ID0gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIHRvdGFsOiAxMDAsCiAgICAvLyAgICAgZGVjaW1hbHM6IDIsCiAgICAvLyAgICAgdW5pdE5hbWU6ICdNTCcsCiAgICAvLyAgICAgYXNzZXROYW1lOiAnTW9uYSBMaXNhJywKICAgIC8vICAgICB1cmw6ICdodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EnLAogICAgLy8gICAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgY2xhd2JhY2s6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMiAvLyAzCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo4NAogICAgLy8gZmVlOiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3My04NgogICAgLy8gY29uc3QgaXR4blJlc3VsdCA9IGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICB0b3RhbDogMTAwLAogICAgLy8gICAgIGRlY2ltYWxzOiAyLAogICAgLy8gICAgIHVuaXROYW1lOiAnTUwnLAogICAgLy8gICAgIGFzc2V0TmFtZTogJ01vbmEgTGlzYScsCiAgICAvLyAgICAgdXJsOiAnaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhJywKICAgIC8vICAgICBtYW5hZ2VyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmcmVlemU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGNsYXdiYWNrOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjg4CiAgICAvLyByZXR1cm4gaXR4blJlc3VsdC5jcmVhdGVkQXNzZXQuaWQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjpJbm5lclRyYW5zYWN0aW9ucy5hc3NldE9wdEluKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0T3B0SW46CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDAtMTAxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldE9wdEluKGFzc2V0OiBBc3NldCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDItMTA5CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDQKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEwNgogICAgLy8gYXNzZXRBbW91bnQ6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDItMTA4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTAyLTEwOQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjpJbm5lclRyYW5zYWN0aW9ucy5hc3NldFRyYW5zZmVyKGFzc2V0OiB1aW50NjQsIHJlY2VpdmVyOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0VHJhbnNmZXI6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMjMtMTI0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldFRyYW5zZmVyKGFzc2V0OiBBc3NldCwgcmVjZWl2ZXI6IEFjY291bnQsIGFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAzIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEyNS0xMzIKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTI1LTEzMQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTI1LTEzMgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmFzc2V0RnJlZXplKGFjY3RUb0JlRnJvemVuOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRGcmVlemU6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNDUtMTQ2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldEZyZWV6ZShhY2N0VG9CZUZyb3plbjogQWNjb3VudCwgYXNzZXQ6IEFzc2V0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE0Ny0xNTQKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0RnJlZXplKHsKICAgIC8vICAgICBmcmVlemVBY2NvdW50OiBhY2N0VG9CZUZyb3plbiwgLy8gYWNjb3VudCB0byBiZSBmcm96ZW4KICAgIC8vICAgICBmcmVlemVBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZnJvemVuOiB0cnVlLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNTEKICAgIC8vIGZyb3plbjogdHJ1ZSwKICAgIGludGNfMCAvLyAxCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0RnJvemVuCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldEFjY291bnQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE0Ny0xNTMKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0RnJlZXplKHsKICAgIC8vICAgICBmcmVlemVBY2NvdW50OiBhY2N0VG9CZUZyb3plbiwgLy8gYWNjb3VudCB0byBiZSBmcm96ZW4KICAgIC8vICAgICBmcmVlemVBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZnJvemVuOiB0cnVlLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNSAvLyA1CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNTIKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTQ3LTE1NAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRGcmVlemUoewogICAgLy8gICAgIGZyZWV6ZUFjY291bnQ6IGFjY3RUb0JlRnJvemVuLCAvLyBhY2NvdW50IHRvIGJlIGZyb3plbgogICAgLy8gICAgIGZyZWV6ZUFzc2V0OiBhc3NldCwKICAgIC8vICAgICBmcm96ZW46IHRydWUsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRSZXZva2UoYXNzZXQ6IHVpbnQ2NCwgYWNjb3VudFRvQmVSZXZva2VkOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0UmV2b2tlOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTY4LTE2OQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYXNzZXRSZXZva2UoYXNzZXQ6IEFzc2V0LCBhY2NvdW50VG9CZVJldm9rZWQ6IEFjY291bnQsIGFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAzIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE3MC0xNzgKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgICAgYXNzZXRTZW5kZXI6IGFjY291bnRUb0JlUmV2b2tlZCwgLy8gQXNzZXRTZW5kZXIgaXMgb25seSB1c2VkIGluIHRoZSBjYXNlIG9mIGNsYXdiYWNrCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTcyCiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFNlbmRlcgogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNzAtMTc3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0U2VuZGVyOiBhY2NvdW50VG9CZVJldm9rZWQsIC8vIEFzc2V0U2VuZGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgY2FzZSBvZiBjbGF3YmFjawogICAgLy8gICAgIGFzc2V0QW1vdW50OiBhbW91bnQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE3NgogICAgLy8gZmVlOiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNzAtMTc4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0U2VuZGVyOiBhY2NvdW50VG9CZVJldm9rZWQsIC8vIEFzc2V0U2VuZGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgY2FzZSBvZiBjbGF3YmFjawogICAgLy8gICAgIGFzc2V0QW1vdW50OiBhbW91bnQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRDb25maWcoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRDb25maWc6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOTEtMTkyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldENvbmZpZyhhc3NldDogQXNzZXQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkzLTIwMgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIGNvbmZpZ0Fzc2V0OiBhc3NldCwKICAgIC8vICAgICBtYW5hZ2VyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmcmVlemU6IFR4bi5zZW5kZXIsCiAgICAvLyAgICAgY2xhd2JhY2s6IFR4bi5zZW5kZXIsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5NgogICAgLy8gbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTk3CiAgICAvLyByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGR1cAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTk4CiAgICAvLyBmcmVlemU6IFR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOTkKICAgIC8vIGNsYXdiYWNrOiBUeG4uc2VuZGVyLAogICAgZHVwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOTMtMjAxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldENvbmZpZyh7CiAgICAvLyAgICAgY29uZmlnQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZTogVHhuLnNlbmRlciwKICAgIC8vICAgICBjbGF3YmFjazogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzIgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjAwCiAgICAvLyBmZWU6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5My0yMDIKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICBjb25maWdBc3NldDogYXNzZXQsCiAgICAvLyAgICAgbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgZnJlZXplOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGNsYXdiYWNrOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmFzc2V0RGVsZXRlKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0RGVsZXRlOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjE0LTIxNQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYXNzZXREZWxldGUoYXNzZXQ6IEFzc2V0KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIxNi0yMjEKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICBjb25maWdBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjE2LTIyMAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIGNvbmZpZ0Fzc2V0OiBhc3NldCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzIgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjE5CiAgICAvLyBmZWU6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIxNi0yMjEKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICBjb25maWdBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMubXVsdGlJbm5lclR4bnMoYXBwSWQ6IHVpbnQ2NCkgLT4gdWludDY0LCBieXRlczoKbXVsdGlJbm5lclR4bnM6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMzEtMjMyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBtdWx0aUlubmVyVHhucyhhcHBJZDogQXBwbGljYXRpb24pOiBbdWludDY0LCBzdHJpbmddIHsKICAgIHByb3RvIDEgMgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjM0LTI0MAogICAgLy8gY29uc3QgcGF5VHhuID0gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgYW1vdW50OiA1MDAwLAogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMzcKICAgIC8vIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjM2CiAgICAvLyBhbW91bnQ6IDUwMDAsCiAgICBwdXNoaW50IDUwMDAgLy8gNTAwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIzNC0yMzkKICAgIC8vIGNvbnN0IHBheVR4biA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjM4CiAgICAvLyBmZWU6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIzNC0yNDAKICAgIC8vIGNvbnN0IHBheVR4biA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQW1vdW50CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNDMtMjQ5CiAgICAvLyBjb25zdCBhcHBDYWxsVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogYXBwSWQuaWQsCiAgICAvLyAgICAgYXBwQXJnczogW2FyYzQubWV0aG9kU2VsZWN0b3IoJ3NheUhlbGxvKHN0cmluZyxzdHJpbmcpc3RyaW5nJyksIG5ldyBhcmM0LlN0cignSmFuZScpLCBuZXcgYXJjNC5TdHIoJ0RvZScpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjQ2CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKYW5lJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgYnl0ZWNfMSAvLyBtZXRob2QgInNheUhlbGxvKHN0cmluZyxzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHB1c2hieXRlcyAweDAwMDQ0YTYxNmU2NQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjXzIgLy8gMHgwMDAzNDQ2ZjY1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI0My0yNDgKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHBJZC5pZCwKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKYW5lJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNiAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNDcKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjQzLTI0OQogICAgLy8gY29uc3QgYXBwQ2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcElkLmlkLAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdzYXlIZWxsbyhzdHJpbmcsc3RyaW5nKXN0cmluZycpLCBuZXcgYXJjNC5TdHIoJ0phbmUnKSwgbmV3IGFyYzQuU3RyKCdEb2UnKV0sCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gY29uc3QgaGVsbG9Xb3JsZFJlc3VsdCA9IGFyYzQuZGVjb2RlQXJjNDxzdHJpbmc+KGFwcENhbGxUeG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZXh0cmFjdCA2IDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI1MwogICAgLy8gcmV0dXJuIFtwYXlUeG4uYW1vdW50LCBoZWxsb1dvcmxkUmVzdWx0XQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmRlcGxveUFwcCgpIC0+IHVpbnQ2NDoKZGVwbG95QXBwOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6Mjc1LTI4MQogICAgLy8gY29uc3QgYXBwVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IEJ5dGVzKCdhcHByb3ZhbF9wcm9ncmFtJyksCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IEJ5dGVzKCdjbGVhcl9zdGF0ZV9wcm9ncmFtJyksCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI3OAogICAgLy8gY2xlYXJTdGF0ZVByb2dyYW06IEJ5dGVzKCdjbGVhcl9zdGF0ZV9wcm9ncmFtJyksCiAgICBwdXNoYnl0ZXMgImNsZWFyX3N0YXRlX3Byb2dyYW0iCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI3NwogICAgLy8gYXBwcm92YWxQcm9ncmFtOiBCeXRlcygnYXBwcm92YWxfcHJvZ3JhbScpLAogICAgcHVzaGJ5dGVzICJhcHByb3ZhbF9wcm9ncmFtIgogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6Mjc1LTI4MAogICAgLy8gY29uc3QgYXBwVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IEJ5dGVzKCdhcHByb3ZhbF9wcm9ncmFtJyksCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IEJ5dGVzKCdjbGVhcl9zdGF0ZV9wcm9ncmFtJyksCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgcHVzaGludCA2IC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI3OQogICAgLy8gZmVlOiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNzUtMjgxCiAgICAvLyBjb25zdCBhcHBUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogQnl0ZXMoJ2FwcHJvdmFsX3Byb2dyYW0nKSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogQnl0ZXMoJ2NsZWFyX3N0YXRlX3Byb2dyYW0nKSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI4MwogICAgLy8gcmV0dXJuIGFwcFR4bi5jcmVhdGVkQXBwLmlkCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMubm9vcEFwcENhbGwoYXBwSWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cm5vb3BBcHBDYWxsOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzEwLTMxMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgbm9vcEFwcENhbGwoYXBwSWQ6IEFwcGxpY2F0aW9uKTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzEzLTMxOAogICAgLy8gY29uc3QgY2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcElkLmlkLAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdzYXlIZWxsbyhzdHJpbmcsc3RyaW5nKXN0cmluZycpLCBuZXcgYXJjNC5TdHIoJ0pvaG4nKSwgbmV3IGFyYzQuU3RyKCdEb2UnKV0sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzE2CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKb2huJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgYnl0ZWNfMSAvLyBtZXRob2QgInNheUhlbGxvKHN0cmluZyxzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHB1c2hieXRlcyAweDAwMDQ0YTZmNjg2ZQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjXzIgLy8gMHgwMDAzNDQ2ZjY1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjMxMy0zMTcKICAgIC8vIGNvbnN0IGNhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHBJZC5pZCwKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKb2huJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgLy8gICB9KQogICAgcHVzaGludCA2IC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzEzLTMxOAogICAgLy8gY29uc3QgY2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcElkLmlkLAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdzYXlIZWxsbyhzdHJpbmcsc3RyaW5nKXN0cmluZycpLCBuZXcgYXJjNC5TdHIoJ0pvaG4nKSwgbmV3IGFyYzQuU3RyKCdEb2UnKV0sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzIxCiAgICAvLyByZXR1cm4gYXJjNC5kZWNvZGVBcmM0PHN0cmluZz4oY2FsbFR4bi5sYXN0TG9nLCAnbG9nJykKICAgIGR1cAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBleHRyYWN0IDYgMAogICAgcmV0c3ViCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiAEAQADBCYDBBUffHUEOq1thgUAA0RvZTEbQQGOgg0EI5UAJwQCB/d9BNIkkoQEZqBjvwQSVjdnBM+xLbEEe1jiNgTQhk/0BFNR174EVyfsrgTaIKh+BDjswBQEmu7BWTYaAI4NARsBCgD5AOcAywCzAJcAhQBzAEkAOAAgAAIjQzEZFEQxGEQ2GgEXwDKIAsVJFRZXBgJMUChMULAiQzEZFEQxGESADBUffHUAAAAAAAAE0rAiQzEZFEQxGESIAl4WKExQsCJDMRkURDEYRDYaARfAMogCB0wWSwEVFlcGAk8CUEyAAgAKUExQKExQsCJDMRkURDEYRDYaARfAMIgBzSJDMRkURDEYRDYaARfAMIgBnSJDMRkURDEYRDYaARfAMDYaAhfAHDYaAxeIAWUiQzEZFEQxGEQ2GgEXwBw2GgIXwDCIATUiQzEZFEQxGEQ2GgEXwDA2GgIXwBw2GgMXiAEBIkMxGRREMRhENhoBF8AwiADYIkMxGRREMRhEiAB4FihMULAiQzEZFEQxGESIADcWKExQsCJDMRkURDEYRIgAEhYoTFCwIkMxGUD+zzEYFEQiQ7ExALIHgYgnsggishAjsgGztAiJsYAOUm95YWx0eSBQb2ludHOyJoACUlCyJYECsiOBgNDbw/QCsiIkshAjsgGztDyJsTIKRwOyLLIrsiqyKYAeaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhsieACU1vbmEgTGlzYbImgAJNTLIlgQKyI4FksiIkshAjsgGztDyJigEAsTIKI7ISi/+yEbIUJbIQI7IBs4mKAwCxi/+yEov9shGL/rIUJbIQI7IBs4mKAgCxIrIvi/+yLYv+si6BBbIQI7IBs4mKAwCxMgqL/7ISi/6yE4v9shGyFCWyECOyAbOJigEAsTIKSTEASbIssiuyKrIpi/+yISSyECOyAbOJigEAsYv/siEkshAjsgGziYoBArExALIHgYgnsggishAjsgGztAixKbIagAYABEphbmWyGiqyGov/shiBBrIQI7IBs7Q+SVcABCgSRFcGAImxgBNjbGVhcl9zdGF0ZV9wcm9ncmFtskKAEGFwcHJvdmFsX3Byb2dyYW2yQIEGshAjsgGztD2JigEBsSmyGoAGAARKb2hushoqshqL/7IYgQayECOyAbO0PklXAAQoEkRXBgCJ","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract /** * A state record containing binary data @@ -331,7 +331,12 @@ export abstract class InnerTransactionsParamsFactory { /** * Constructs a no op call for the payment()uint64 ABI method * - * Demonstrates a simple payment inner transaction + * Demonstrates a simple payment inner transaction. + The fee is set to 0 by default. Manually set here for demonstration purposes. + The `Sender` for the payment is implied to be Global.currentApplicationAddress. + If a different sender is needed, it'd have to be an account that has been + rekeyed to the application address. + * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call @@ -361,10 +366,12 @@ export abstract class InnerTransactionsParamsFactory { /** * Constructs a no op call for the nonFungibleAssetCreate()uint64 ABI method * - * Creates a non-fungible asset (NFT) + * Creates a non-fungible asset (NFT). Following the ARC3 standard, the total supply must be 1 for a non-fungible asset. If you want to create fractional NFTs, `total` * `decimals` point must be 1. ex) total=100, decimals=2, 100 * 0.01 = 1 + The fee is set to 0 by default for inner transactions. + The Sender is implied to be Global.currentApplicationAddress. * * @param params Parameters for the call @@ -380,7 +387,11 @@ export abstract class InnerTransactionsParamsFactory { /** * Constructs a no op call for the assetOptIn(asset)void ABI method * - * Opts the application into an asset + * Opts the application into an asset. + A zero amount asset transfer to one's self is a special type of asset transfer + that is used to opt-in to an asset. + To send an asset transfer, the asset must be an available resource. + * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call @@ -395,7 +406,11 @@ export abstract class InnerTransactionsParamsFactory { /** * Constructs a no op call for the assetTransfer(asset,account,uint64)void ABI method * - * Transfers an asset from the application to another account + * Transfers an asset from the application to another account. + For a smart contract to transfer an asset, the app account must be opted into the asset + and be holding non zero amount of assets. + To send an asset transfer, the asset must be an available resource. + * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call @@ -410,7 +425,10 @@ export abstract class InnerTransactionsParamsFactory { /** * Constructs a no op call for the assetFreeze(account,asset)void ABI method * - * Freezes an asset for a specific account + * Freezes an asset for a specific account. + To freeze an asset, the asset must be a freezable asset + by having an account with freeze authority. + * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call @@ -425,7 +443,11 @@ export abstract class InnerTransactionsParamsFactory { /** * Constructs a no op call for the assetRevoke(asset,account,uint64)void ABI method * - * Revokes (clawbacks) an asset from an account + * Revokes (clawbacks) an asset from an account. + To revoke an asset, the asset must be a revocable asset + by having an account with clawback authority. + The Sender is implied to be current_application_address. + * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call @@ -440,7 +462,12 @@ export abstract class InnerTransactionsParamsFactory { /** * Constructs a no op call for the assetConfig(asset)void ABI method * - * Reconfigures an existing asset + * Reconfigures an existing asset. + For a smart contract to transfer an asset, the app account must be opted into the asset + and be holding non zero amount of assets. + To send an asset transfer, the asset must be an available resource. + Refer the Resource Availability section for more information. + * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call @@ -455,7 +482,11 @@ export abstract class InnerTransactionsParamsFactory { /** * Constructs a no op call for the assetDelete(asset)void ABI method * - * Deletes an asset + * Deletes an asset. + To delete an asset, the asset must be a deleteable asset + by having an account with delete authority. + The Sender is implied to be current_application_address. + * * @param params Parameters for the call * @returns An `AppClientMethodCallParams` object for the call @@ -776,7 +807,12 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `payment()uint64` ABI method. * - * Demonstrates a simple payment inner transaction + * Demonstrates a simple payment inner transaction. + The fee is set to 0 by default. Manually set here for demonstration purposes. + The `Sender` for the payment is implied to be Global.currentApplicationAddress. + If a different sender is needed, it'd have to be an account that has been + rekeyed to the application address. + * * @param params The params for the smart contract call * @returns The call params: The amount of the payment @@ -800,10 +836,12 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `nonFungibleAssetCreate()uint64` ABI method. * - * Creates a non-fungible asset (NFT) + * Creates a non-fungible asset (NFT). Following the ARC3 standard, the total supply must be 1 for a non-fungible asset. If you want to create fractional NFTs, `total` * `decimals` point must be 1. ex) total=100, decimals=2, 100 * 0.01 = 1 + The fee is set to 0 by default for inner transactions. + The Sender is implied to be Global.currentApplicationAddress. * * @param params The params for the smart contract call @@ -816,7 +854,11 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `assetOptIn(asset)void` ABI method. * - * Opts the application into an asset + * Opts the application into an asset. + A zero amount asset transfer to one's self is a special type of asset transfer + that is used to opt-in to an asset. + To send an asset transfer, the asset must be an available resource. + * * @param params The params for the smart contract call * @returns The call params @@ -828,7 +870,11 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `assetTransfer(asset,account,uint64)void` ABI method. * - * Transfers an asset from the application to another account + * Transfers an asset from the application to another account. + For a smart contract to transfer an asset, the app account must be opted into the asset + and be holding non zero amount of assets. + To send an asset transfer, the asset must be an available resource. + * * @param params The params for the smart contract call * @returns The call params @@ -840,7 +886,10 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `assetFreeze(account,asset)void` ABI method. * - * Freezes an asset for a specific account + * Freezes an asset for a specific account. + To freeze an asset, the asset must be a freezable asset + by having an account with freeze authority. + * * @param params The params for the smart contract call * @returns The call params @@ -852,7 +901,11 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `assetRevoke(asset,account,uint64)void` ABI method. * - * Revokes (clawbacks) an asset from an account + * Revokes (clawbacks) an asset from an account. + To revoke an asset, the asset must be a revocable asset + by having an account with clawback authority. + The Sender is implied to be current_application_address. + * * @param params The params for the smart contract call * @returns The call params @@ -864,7 +917,12 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `assetConfig(asset)void` ABI method. * - * Reconfigures an existing asset + * Reconfigures an existing asset. + For a smart contract to transfer an asset, the app account must be opted into the asset + and be holding non zero amount of assets. + To send an asset transfer, the asset must be an available resource. + Refer the Resource Availability section for more information. + * * @param params The params for the smart contract call * @returns The call params @@ -876,7 +934,11 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `assetDelete(asset)void` ABI method. * - * Deletes an asset + * Deletes an asset. + To delete an asset, the asset must be a deleteable asset + by having an account with delete authority. + The Sender is implied to be current_application_address. + * * @param params The params for the smart contract call * @returns The call params @@ -958,7 +1020,12 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `payment()uint64` ABI method. * - * Demonstrates a simple payment inner transaction + * Demonstrates a simple payment inner transaction. + The fee is set to 0 by default. Manually set here for demonstration purposes. + The `Sender` for the payment is implied to be Global.currentApplicationAddress. + If a different sender is needed, it'd have to be an account that has been + rekeyed to the application address. + * * @param params The params for the smart contract call * @returns The call transaction: The amount of the payment @@ -982,10 +1049,12 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `nonFungibleAssetCreate()uint64` ABI method. * - * Creates a non-fungible asset (NFT) + * Creates a non-fungible asset (NFT). Following the ARC3 standard, the total supply must be 1 for a non-fungible asset. If you want to create fractional NFTs, `total` * `decimals` point must be 1. ex) total=100, decimals=2, 100 * 0.01 = 1 + The fee is set to 0 by default for inner transactions. + The Sender is implied to be Global.currentApplicationAddress. * * @param params The params for the smart contract call @@ -998,7 +1067,11 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `assetOptIn(asset)void` ABI method. * - * Opts the application into an asset + * Opts the application into an asset. + A zero amount asset transfer to one's self is a special type of asset transfer + that is used to opt-in to an asset. + To send an asset transfer, the asset must be an available resource. + * * @param params The params for the smart contract call * @returns The call transaction @@ -1010,7 +1083,11 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `assetTransfer(asset,account,uint64)void` ABI method. * - * Transfers an asset from the application to another account + * Transfers an asset from the application to another account. + For a smart contract to transfer an asset, the app account must be opted into the asset + and be holding non zero amount of assets. + To send an asset transfer, the asset must be an available resource. + * * @param params The params for the smart contract call * @returns The call transaction @@ -1022,7 +1099,10 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `assetFreeze(account,asset)void` ABI method. * - * Freezes an asset for a specific account + * Freezes an asset for a specific account. + To freeze an asset, the asset must be a freezable asset + by having an account with freeze authority. + * * @param params The params for the smart contract call * @returns The call transaction @@ -1034,7 +1114,11 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `assetRevoke(asset,account,uint64)void` ABI method. * - * Revokes (clawbacks) an asset from an account + * Revokes (clawbacks) an asset from an account. + To revoke an asset, the asset must be a revocable asset + by having an account with clawback authority. + The Sender is implied to be current_application_address. + * * @param params The params for the smart contract call * @returns The call transaction @@ -1046,7 +1130,12 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `assetConfig(asset)void` ABI method. * - * Reconfigures an existing asset + * Reconfigures an existing asset. + For a smart contract to transfer an asset, the app account must be opted into the asset + and be holding non zero amount of assets. + To send an asset transfer, the asset must be an available resource. + Refer the Resource Availability section for more information. + * * @param params The params for the smart contract call * @returns The call transaction @@ -1058,7 +1147,11 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `assetDelete(asset)void` ABI method. * - * Deletes an asset + * Deletes an asset. + To delete an asset, the asset must be a deleteable asset + by having an account with delete authority. + The Sender is implied to be current_application_address. + * * @param params The params for the smart contract call * @returns The call transaction @@ -1140,7 +1233,12 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `payment()uint64` ABI method. * - * Demonstrates a simple payment inner transaction + * Demonstrates a simple payment inner transaction. + The fee is set to 0 by default. Manually set here for demonstration purposes. + The `Sender` for the payment is implied to be Global.currentApplicationAddress. + If a different sender is needed, it'd have to be an account that has been + rekeyed to the application address. + * * @param params The params for the smart contract call * @returns The call result: The amount of the payment @@ -1166,10 +1264,12 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `nonFungibleAssetCreate()uint64` ABI method. * - * Creates a non-fungible asset (NFT) + * Creates a non-fungible asset (NFT). Following the ARC3 standard, the total supply must be 1 for a non-fungible asset. If you want to create fractional NFTs, `total` * `decimals` point must be 1. ex) total=100, decimals=2, 100 * 0.01 = 1 + The fee is set to 0 by default for inner transactions. + The Sender is implied to be Global.currentApplicationAddress. * * @param params The params for the smart contract call @@ -1183,7 +1283,11 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `assetOptIn(asset)void` ABI method. * - * Opts the application into an asset + * Opts the application into an asset. + A zero amount asset transfer to one's self is a special type of asset transfer + that is used to opt-in to an asset. + To send an asset transfer, the asset must be an available resource. + * * @param params The params for the smart contract call * @returns The call result @@ -1196,7 +1300,11 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `assetTransfer(asset,account,uint64)void` ABI method. * - * Transfers an asset from the application to another account + * Transfers an asset from the application to another account. + For a smart contract to transfer an asset, the app account must be opted into the asset + and be holding non zero amount of assets. + To send an asset transfer, the asset must be an available resource. + * * @param params The params for the smart contract call * @returns The call result @@ -1209,7 +1317,10 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `assetFreeze(account,asset)void` ABI method. * - * Freezes an asset for a specific account + * Freezes an asset for a specific account. + To freeze an asset, the asset must be a freezable asset + by having an account with freeze authority. + * * @param params The params for the smart contract call * @returns The call result @@ -1222,7 +1333,11 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `assetRevoke(asset,account,uint64)void` ABI method. * - * Revokes (clawbacks) an asset from an account + * Revokes (clawbacks) an asset from an account. + To revoke an asset, the asset must be a revocable asset + by having an account with clawback authority. + The Sender is implied to be current_application_address. + * * @param params The params for the smart contract call * @returns The call result @@ -1235,7 +1350,12 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `assetConfig(asset)void` ABI method. * - * Reconfigures an existing asset + * Reconfigures an existing asset. + For a smart contract to transfer an asset, the app account must be opted into the asset + and be holding non zero amount of assets. + To send an asset transfer, the asset must be an available resource. + Refer the Resource Availability section for more information. + * * @param params The params for the smart contract call * @returns The call result @@ -1248,7 +1368,11 @@ export class InnerTransactionsClient { /** * Makes a call to the InnerTransactions smart contract using the `assetDelete(asset)void` ABI method. * - * Deletes an asset + * Deletes an asset. + To delete an asset, the asset must be a deleteable asset + by having an account with delete authority. + The Sender is implied to be current_application_address. + * * @param params The params for the smart contract call * @returns The call result @@ -1482,7 +1606,12 @@ export type InnerTransactionsComposer = { /** * Calls the payment()uint64 ABI method. * - * Demonstrates a simple payment inner transaction + * Demonstrates a simple payment inner transaction. + The fee is set to 0 by default. Manually set here for demonstration purposes. + The `Sender` for the payment is implied to be Global.currentApplicationAddress. + If a different sender is needed, it'd have to be an account that has been + rekeyed to the application address. + * * @param args The arguments for the contract call * @param params Any additional parameters for the call @@ -1504,10 +1633,12 @@ export type InnerTransactionsComposer = { /** * Calls the nonFungibleAssetCreate()uint64 ABI method. * - * Creates a non-fungible asset (NFT) + * Creates a non-fungible asset (NFT). Following the ARC3 standard, the total supply must be 1 for a non-fungible asset. If you want to create fractional NFTs, `total` * `decimals` point must be 1. ex) total=100, decimals=2, 100 * 0.01 = 1 + The fee is set to 0 by default for inner transactions. + The Sender is implied to be Global.currentApplicationAddress. * * @param args The arguments for the contract call @@ -1519,7 +1650,11 @@ export type InnerTransactionsComposer = { /** * Calls the assetOptIn(asset)void ABI method. * - * Opts the application into an asset + * Opts the application into an asset. + A zero amount asset transfer to one's self is a special type of asset transfer + that is used to opt-in to an asset. + To send an asset transfer, the asset must be an available resource. + * * @param args The arguments for the contract call * @param params Any additional parameters for the call @@ -1530,7 +1665,11 @@ export type InnerTransactionsComposer = { /** * Calls the assetTransfer(asset,account,uint64)void ABI method. * - * Transfers an asset from the application to another account + * Transfers an asset from the application to another account. + For a smart contract to transfer an asset, the app account must be opted into the asset + and be holding non zero amount of assets. + To send an asset transfer, the asset must be an available resource. + * * @param args The arguments for the contract call * @param params Any additional parameters for the call @@ -1541,7 +1680,10 @@ export type InnerTransactionsComposer = { /** * Calls the assetFreeze(account,asset)void ABI method. * - * Freezes an asset for a specific account + * Freezes an asset for a specific account. + To freeze an asset, the asset must be a freezable asset + by having an account with freeze authority. + * * @param args The arguments for the contract call * @param params Any additional parameters for the call @@ -1552,7 +1694,11 @@ export type InnerTransactionsComposer = { /** * Calls the assetRevoke(asset,account,uint64)void ABI method. * - * Revokes (clawbacks) an asset from an account + * Revokes (clawbacks) an asset from an account. + To revoke an asset, the asset must be a revocable asset + by having an account with clawback authority. + The Sender is implied to be current_application_address. + * * @param args The arguments for the contract call * @param params Any additional parameters for the call @@ -1563,7 +1709,12 @@ export type InnerTransactionsComposer = { /** * Calls the assetConfig(asset)void ABI method. * - * Reconfigures an existing asset + * Reconfigures an existing asset. + For a smart contract to transfer an asset, the app account must be opted into the asset + and be holding non zero amount of assets. + To send an asset transfer, the asset must be an available resource. + Refer the Resource Availability section for more information. + * * @param args The arguments for the contract call * @param params Any additional parameters for the call @@ -1574,7 +1725,11 @@ export type InnerTransactionsComposer = { /** * Calls the assetDelete(asset)void ABI method. * - * Deletes an asset + * Deletes an asset. + To delete an asset, the asset must be a deleteable asset + by having an account with delete authority. + The Sender is implied to be current_application_address. + * * @param args The arguments for the contract call * @param params Any additional parameters for the call diff --git a/projects/typescript-examples/contracts/artifacts/clients/MyCounter/MyCounterClient.ts b/projects/typescript-examples/contracts/artifacts/clients/MyCounter/MyCounterClient.ts index 3b4ba3d..a265e4f 100644 --- a/projects/typescript-examples/contracts/artifacts/clients/MyCounter/MyCounterClient.ts +++ b/projects/typescript-examples/contracts/artifacts/clients/MyCounter/MyCounterClient.ts @@ -24,7 +24,7 @@ import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerR import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' import SimulateResponse = modelsv2.SimulateResponse -export const APP_SPEC: Arc56Contract = {"name":"MyCounter","structs":{},"methods":[{"name":"optIn","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["OptIn"]},"readonly":false,"desc":"Initialize the counter when an account opts in","events":[],"recommendations":{}},{"name":"incrementMyCounter","args":[],"returns":{"type":"uint64","desc":"The new counter value"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Increment the counter for the sender and return its new value","events":[],"recommendations":{}}],"arcs":[22,28],"desc":"A contract that maintains a per-account counter in local state\nAccounts must opt in to use the counter","networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":1,"bytes":0}},"keys":{"global":{},"local":{"myCounter":{"keyType":"AVMString","valueType":"AVMUint64","key":"bXlfY291bnRlcg=="}},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[103],"errorMessage":"Account must opt in to contract first"},{"pc":[49],"errorMessage":"OnCompletion is not NoOp"},{"pc":[72],"errorMessage":"OnCompletion is not OptIn"},{"pc":[89],"errorMessage":"can only call when creating"},{"pc":[52,75],"errorMessage":"can only call when not creating"},{"pc":[109,123],"errorMessage":"check LocalState exists"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrICJteV9jb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q291bnRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4MjkzMTRkOTUgMHhlNmRiZWQ3ZiAvLyBtZXRob2QgIm9wdEluKCl2b2lkIiwgbWV0aG9kICJpbmNyZW1lbnRNeUNvdW50ZXIoKXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fb3B0SW5fcm91dGVAMyBtYWluX2luY3JlbWVudE15Q291bnRlcl9yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb3VudGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9pbmNyZW1lbnRNeUNvdW50ZXJfcm91dGVANDoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MzYKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGluY3JlbWVudE15Q291bnRlcgogICAgaXRvYgogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX29wdEluX3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG9wdEluCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q291bnRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo6TXlDb3VudGVyLm9wdEluKCkgLT4gdm9pZDoKb3B0SW46CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjI5CiAgICAvLyB0aGlzLm15Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSA9IDAKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIHB1YmxpYyBteUNvdW50ZXIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdteV9jb3VudGVyJyB9KQogICAgYnl0ZWNfMCAvLyAibXlfY291bnRlciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIHRoaXMubXlDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gMAogICAgaW50Y18xIC8vIDAKICAgIGFwcF9sb2NhbF9wdXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6Ok15Q291bnRlci5pbmNyZW1lbnRNeUNvdW50ZXIoKSAtPiB1aW50NjQ6CmluY3JlbWVudE15Q291bnRlcjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MzgKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyLmlzT3B0ZWRJbihHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uSWQpLCAnQWNjb3VudCBtdXN0IG9wdCBpbiB0byBjb250cmFjdCBmaXJzdCcpCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKICAgIGFwcF9vcHRlZF9pbgogICAgYXNzZXJ0IC8vIEFjY291bnQgbXVzdCBvcHQgaW4gdG8gY29udHJhY3QgZmlyc3QKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NDAKICAgIC8vIHRoaXMubXlDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgKyAxCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gcHVibGljIG15Q291bnRlciA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ215X2NvdW50ZXInIH0pCiAgICBieXRlY18wIC8vICJteV9jb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo0MAogICAgLy8gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgPSB0aGlzLm15Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSArIDEKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgdHhuIFNlbmRlcgogICAgc3dhcAogICAgaW50Y18wIC8vIDEKICAgICsKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIHB1YmxpYyBteUNvdW50ZXIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdteV9jb3VudGVyJyB9KQogICAgYnl0ZWNfMCAvLyAibXlfY291bnRlciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NDAKICAgIC8vIHRoaXMubXlDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgKyAxCiAgICBzd2FwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyByZXR1cm4gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMSAvLyAwCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBwdWJsaWMgbXlDb3VudGVyID0gTG9jYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnbXlfY291bnRlcicgfSkKICAgIGJ5dGVjXzAgLy8gIm15X2NvdW50ZXIiCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyByZXR1cm4gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiACAQAmAQpteV9jb3VudGVyMRtBADqCAgQpMU2VBObb7X82GgCOAgAYAAIjQzEZFEQxGESIACoWgAQVH3x1TFCwIkMxGSISRDEYRIgADSJDMRlA/9YxGBREIkMxACgjZokxADIIYUQxACMoY0QxAEwiCChMZjEAIyhjRIk=","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract +export const APP_SPEC: Arc56Contract = {"name":"MyCounter","structs":{},"methods":[{"name":"optIn","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["OptIn"]},"readonly":false,"desc":"Initialize the counter when an account opts in","events":[],"recommendations":{}},{"name":"incrementMyCounter","args":[],"returns":{"type":"uint64","desc":"The new counter value"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Increment the counter for the sender and return its new value","events":[],"recommendations":{}}],"arcs":[22,28],"desc":"A contract that maintains a per-account counter in local state\nAccounts must opt in to use the counter","networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":1,"bytes":0}},"keys":{"global":{},"local":{"myCounter":{"keyType":"AVMString","valueType":"AVMUint64","key":"bXlfY291bnRlcg=="}},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[103],"errorMessage":"Account must opt in to contract first"},{"pc":[49],"errorMessage":"OnCompletion is not NoOp"},{"pc":[72],"errorMessage":"OnCompletion is not OptIn"},{"pc":[89],"errorMessage":"can only call when creating"},{"pc":[52,75],"errorMessage":"can only call when not creating"},{"pc":[109,123],"errorMessage":"check LocalState exists"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrICJteV9jb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gZXhwb3J0IGNsYXNzIE15Q291bnRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4MjkzMTRkOTUgMHhlNmRiZWQ3ZiAvLyBtZXRob2QgIm9wdEluKCl2b2lkIiwgbWV0aG9kICJpbmNyZW1lbnRNeUNvdW50ZXIoKXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fb3B0SW5fcm91dGVAMyBtYWluX2luY3JlbWVudE15Q291bnRlcl9yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjIxCiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb3VudGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9pbmNyZW1lbnRNeUNvdW50ZXJfcm91dGVANDoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGluY3JlbWVudE15Q291bnRlcgogICAgaXRvYgogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX29wdEluX3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG9wdEluCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gZXhwb3J0IGNsYXNzIE15Q291bnRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo6TXlDb3VudGVyLm9wdEluKCkgLT4gdm9pZDoKb3B0SW46CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyB0aGlzLm15Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSA9IDAKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHB1YmxpYyBteUNvdW50ZXIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdteV9jb3VudGVyJyB9KQogICAgYnl0ZWNfMCAvLyAibXlfY291bnRlciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIHRoaXMubXlDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gMAogICAgaW50Y18xIC8vIDAKICAgIGFwcF9sb2NhbF9wdXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6Ok15Q291bnRlci5pbmNyZW1lbnRNeUNvdW50ZXIoKSAtPiB1aW50NjQ6CmluY3JlbWVudE15Q291bnRlcjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyLmlzT3B0ZWRJbihHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uSWQpLCAnQWNjb3VudCBtdXN0IG9wdCBpbiB0byBjb250cmFjdCBmaXJzdCcpCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKICAgIGFwcF9vcHRlZF9pbgogICAgYXNzZXJ0IC8vIEFjY291bnQgbXVzdCBvcHQgaW4gdG8gY29udHJhY3QgZmlyc3QKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRoaXMubXlDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgKyAxCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czoyMwogICAgLy8gcHVibGljIG15Q291bnRlciA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ215X2NvdW50ZXInIH0pCiAgICBieXRlY18wIC8vICJteV9jb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo0MQogICAgLy8gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgPSB0aGlzLm15Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSArIDEKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgdHhuIFNlbmRlcgogICAgc3dhcAogICAgaW50Y18wIC8vIDEKICAgICsKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHB1YmxpYyBteUNvdW50ZXIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdteV9jb3VudGVyJyB9KQogICAgYnl0ZWNfMCAvLyAibXlfY291bnRlciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRoaXMubXlDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgKyAxCiAgICBzd2FwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyByZXR1cm4gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMSAvLyAwCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjIzCiAgICAvLyBwdWJsaWMgbXlDb3VudGVyID0gTG9jYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnbXlfY291bnRlcicgfSkKICAgIGJ5dGVjXzAgLy8gIm15X2NvdW50ZXIiCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyByZXR1cm4gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiACAQAmAQpteV9jb3VudGVyMRtBADqCAgQpMU2VBObb7X82GgCOAgAYAAIjQzEZFEQxGESIACoWgAQVH3x1TFCwIkMxGSISRDEYRIgADSJDMRlA/9YxGBREIkMxACgjZokxADIIYUQxACMoY0QxAEwiCChMZjEAIyhjRIk=","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract /** * A state record containing binary data diff --git a/projects/typescript-examples/contracts/artifacts/clients/ReferenceAccountApp/ReferenceAccountAppClient.ts b/projects/typescript-examples/contracts/artifacts/clients/ReferenceAccountApp/ReferenceAccountAppClient.ts index 20ad421..060a09f 100644 --- a/projects/typescript-examples/contracts/artifacts/clients/ReferenceAccountApp/ReferenceAccountAppClient.ts +++ b/projects/typescript-examples/contracts/artifacts/clients/ReferenceAccountApp/ReferenceAccountAppClient.ts @@ -24,7 +24,7 @@ import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerR import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' import SimulateResponse = modelsv2.SimulateResponse -export const APP_SPEC: Arc56Contract = {"name":"ReferenceAccountApp","structs":{},"methods":[{"name":"getMyCounter","args":[],"returns":{"type":"uint64","desc":"The counter value or 0 if it doesn't exist"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Get the counter value from another account's local state with hardcoded values","events":[],"recommendations":{}},{"name":"getMyCounterWithArg","args":[{"type":"account","name":"account","desc":"The account to check"},{"type":"application","name":"app","desc":"The application to query"}],"returns":{"type":"uint64","desc":"The counter value or 0 if it doesn't exist"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Get the counter value from another account's local state with provided parameters","events":[],"recommendations":{}}],"arcs":[22,28],"desc":"A contract that demonstrates how to reference accounts and applications\nto access local state from external contracts","networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[54,83],"errorMessage":"OnCompletion is not NoOp"},{"pc":[105],"errorMessage":"can only call when creating"},{"pc":[57,86],"errorMessage":"can only call when not creating"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgIm15X2NvdW50ZXIiCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBY2NvdW50QXBwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHg4N2FkNzBiZiAweDMxMzk4ZjU3IC8vIG1ldGhvZCAiZ2V0TXlDb3VudGVyKCl1aW50NjQiLCBtZXRob2QgImdldE15Q291bnRlcldpdGhBcmcoYWNjb3VudCxhcHBsaWNhdGlvbil1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2dldE15Q291bnRlcl9yb3V0ZUAzIG1haW5fZ2V0TXlDb3VudGVyV2l0aEFyZ19yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBY2NvdW50QXBwIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRNeUNvdW50ZXJXaXRoQXJnX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjc4CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFwcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NzgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXRNeUNvdW50ZXJXaXRoQXJnCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldE15Q291bnRlcl9yb3V0ZUAzOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo1NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0TXlDb3VudGVyCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFwcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQWNjb3VudEFwcC5nZXRNeUNvdW50ZXIoKSAtPiB1aW50NjQ6CmdldE15Q291bnRlcjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NTUtNTYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldE15Q291bnRlcigpOiB1aW50NjQgewogICAgcHJvdG8gMCAxCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjb25zdCBhZGRyZXNzID0gbmV3IEFkZHJlc3MoJ1dNSEY0RkxKTktZMkJQRks3WVBWNUlENk9aN0xWREIyQjY2WlRYRUFNTEwyTlg0V0paUkpGVlg2Nk0nKQogICAgcHVzaGJ5dGVzIGJhc2UzMihXTUhGNEZMSk5LWTJCUEZLN1lQVjVJRDZPWjdMVkRCMkI2NlpUWEVBTUxMMk5YNFdKWlJBKSAvLyBhZGRyIFdNSEY0RkxKTktZMkJQRks3WVBWNUlENk9aN0xWREIyQjY2WlRYRUFNTEwyTlg0V0paUkpGVlg2Nk0KICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGNvbnN0IGFwcCA9IEFwcGxpY2F0aW9uKDE3MTcpIC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGFwcGxpY2F0aW9uIGlkCiAgICBwdXNoaW50IDE3MTcgLy8gMTcxNwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gY29uc3QgW3ZhbHVlLCBoYXNWYWx1ZV0gPSBvcC5BcHBMb2NhbC5nZXRFeFVpbnQ2NChhY2NvdW50LCBhcHAsIEJ5dGVzKCdteV9jb3VudGVyJykpCiAgICBieXRlY18xIC8vICJteV9jb3VudGVyIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo2NQogICAgLy8gaWYgKCFoYXNWYWx1ZSkgewogICAgYm56IGdldE15Q291bnRlcl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIHJldHVybiAwCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgcmV0c3ViCgpnZXRNeUNvdW50ZXJfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo2OQogICAgLy8gcmV0dXJuIHZhbHVlCiAgICBmcmFtZV9kaWcgMAogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQWNjb3VudEFwcC5nZXRNeUNvdW50ZXJXaXRoQXJnKGFjY291bnQ6IGJ5dGVzLCBhcHA6IHVpbnQ2NCkgLT4gdWludDY0OgpnZXRNeUNvdW50ZXJXaXRoQXJnOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo3OC03OQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0TXlDb3VudGVyV2l0aEFyZyhhY2NvdW50OiBBY2NvdW50LCBhcHA6IEFwcGxpY2F0aW9uKTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo4MQogICAgLy8gY29uc3QgW3ZhbHVlLCBoYXNWYWx1ZV0gPSBvcC5BcHBMb2NhbC5nZXRFeFVpbnQ2NChhY2NvdW50LCBhcHAsIEJ5dGVzKCdteV9jb3VudGVyJykpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYnl0ZWNfMSAvLyAibXlfY291bnRlciIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6ODMKICAgIC8vIGlmICghaGFzVmFsdWUpIHsKICAgIGJueiBnZXRNeUNvdW50ZXJXaXRoQXJnX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo4NAogICAgLy8gcmV0dXJuIDAKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmdldE15Q291bnRlcldpdGhBcmdfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo4NwogICAgLy8gcmV0dXJuIHZhbHVlCiAgICBmcmFtZV9kaWcgMAogICAgc3dhcAogICAgcmV0c3ViCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiACAAEmAgQVH3x1Cm15X2NvdW50ZXIxG0EARYICBIetcL8EMTmPVzYaAI4CAB8AAiJDMRkURDEYRDYaARfAHDYaAhfAMogAVxYoTFCwI0MxGRREMRhEiAASFihMULAjQzEZQP/LMRgURCNDigABgCCzDl4VaWqxoLyq/h9eoH52frqMOg+9mdyAYtem35ZOYoG1DSljQAADIkyJiwBMiYoCAYv+i/8pY0AAAyJMiYsATIk=","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract +export const APP_SPEC: Arc56Contract = {"name":"ReferenceAccountApp","structs":{},"methods":[{"name":"getMyCounter","args":[],"returns":{"type":"uint64","desc":"The counter value or 0 if it doesn't exist"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Get the counter value from another account's local state with hardcoded values","events":[],"recommendations":{}},{"name":"getMyCounterWithArg","args":[{"type":"account","name":"account","desc":"The account to check"},{"type":"application","name":"app","desc":"The application to query"}],"returns":{"type":"uint64","desc":"The counter value or 0 if it doesn't exist"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Get the counter value from another account's local state with provided parameters","events":[],"recommendations":{}}],"arcs":[22,28],"desc":"A contract that demonstrates how to reference accounts and applications\nto access local state from external contracts","networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[54,83],"errorMessage":"OnCompletion is not NoOp"},{"pc":[105],"errorMessage":"can only call when creating"},{"pc":[57,86],"errorMessage":"can only call when not creating"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgIm15X2NvdW50ZXIiCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBY2NvdW50QXBwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHg4N2FkNzBiZiAweDMxMzk4ZjU3IC8vIG1ldGhvZCAiZ2V0TXlDb3VudGVyKCl1aW50NjQiLCBtZXRob2QgImdldE15Q291bnRlcldpdGhBcmcoYWNjb3VudCxhcHBsaWNhdGlvbil1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2dldE15Q291bnRlcl9yb3V0ZUAzIG1haW5fZ2V0TXlDb3VudGVyV2l0aEFyZ19yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBY2NvdW50QXBwIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRNeUNvdW50ZXJXaXRoQXJnX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjc5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFwcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NzkKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXRNeUNvdW50ZXJXaXRoQXJnCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldE15Q291bnRlcl9yb3V0ZUAzOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo1NgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0TXlDb3VudGVyCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFwcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQWNjb3VudEFwcC5nZXRNeUNvdW50ZXIoKSAtPiB1aW50NjQ6CmdldE15Q291bnRlcjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NTYtNTcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldE15Q291bnRlcigpOiB1aW50NjQgewogICAgcHJvdG8gMCAxCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjb25zdCBhZGRyZXNzID0gbmV3IEFkZHJlc3MoJ1dNSEY0RkxKTktZMkJQRks3WVBWNUlENk9aN0xWREIyQjY2WlRYRUFNTEwyTlg0V0paUkpGVlg2Nk0nKQogICAgcHVzaGJ5dGVzIGJhc2UzMihXTUhGNEZMSk5LWTJCUEZLN1lQVjVJRDZPWjdMVkRCMkI2NlpUWEVBTUxMMk5YNFdKWlJBKSAvLyBhZGRyIFdNSEY0RkxKTktZMkJQRks3WVBWNUlENk9aN0xWREIyQjY2WlRYRUFNTEwyTlg0V0paUkpGVlg2Nk0KICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIGNvbnN0IGFwcCA9IEFwcGxpY2F0aW9uKDE3MTcpIC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGFwcGxpY2F0aW9uIGlkCiAgICBwdXNoaW50IDE3MTcgLy8gMTcxNwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo2NAogICAgLy8gY29uc3QgW3ZhbHVlLCBoYXNWYWx1ZV0gPSBvcC5BcHBMb2NhbC5nZXRFeFVpbnQ2NChhY2NvdW50LCBhcHAsIEJ5dGVzKCdteV9jb3VudGVyJykpCiAgICBieXRlY18xIC8vICJteV9jb3VudGVyIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo2NgogICAgLy8gaWYgKCFoYXNWYWx1ZSkgewogICAgYm56IGdldE15Q291bnRlcl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIHJldHVybiAwCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgcmV0c3ViCgpnZXRNeUNvdW50ZXJfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo3MAogICAgLy8gcmV0dXJuIHZhbHVlCiAgICBmcmFtZV9kaWcgMAogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQWNjb3VudEFwcC5nZXRNeUNvdW50ZXJXaXRoQXJnKGFjY291bnQ6IGJ5dGVzLCBhcHA6IHVpbnQ2NCkgLT4gdWludDY0OgpnZXRNeUNvdW50ZXJXaXRoQXJnOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo3OS04MAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0TXlDb3VudGVyV2l0aEFyZyhhY2NvdW50OiBBY2NvdW50LCBhcHA6IEFwcGxpY2F0aW9uKTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gY29uc3QgW3ZhbHVlLCBoYXNWYWx1ZV0gPSBvcC5BcHBMb2NhbC5nZXRFeFVpbnQ2NChhY2NvdW50LCBhcHAsIEJ5dGVzKCdteV9jb3VudGVyJykpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYnl0ZWNfMSAvLyAibXlfY291bnRlciIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6ODQKICAgIC8vIGlmICghaGFzVmFsdWUpIHsKICAgIGJueiBnZXRNeUNvdW50ZXJXaXRoQXJnX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo4NQogICAgLy8gcmV0dXJuIDAKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmdldE15Q291bnRlcldpdGhBcmdfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo4OAogICAgLy8gcmV0dXJuIHZhbHVlCiAgICBmcmFtZV9kaWcgMAogICAgc3dhcAogICAgcmV0c3ViCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiACAAEmAgQVH3x1Cm15X2NvdW50ZXIxG0EARYICBIetcL8EMTmPVzYaAI4CAB8AAiJDMRkURDEYRDYaARfAHDYaAhfAMogAVxYoTFCwI0MxGRREMRhEiAASFihMULAjQzEZQP/LMRgURCNDigABgCCzDl4VaWqxoLyq/h9eoH52frqMOg+9mdyAYtem35ZOYoG1DSljQAADIkyJiwBMiYoCAYv+i/8pY0AAAyJMiYsATIk=","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract /** * A state record containing binary data diff --git a/projects/typescript-examples/contracts/artifacts/clients/ReferenceAccountAsset/ReferenceAccountAssetClient.ts b/projects/typescript-examples/contracts/artifacts/clients/ReferenceAccountAsset/ReferenceAccountAssetClient.ts index 89eff80..153125f 100644 --- a/projects/typescript-examples/contracts/artifacts/clients/ReferenceAccountAsset/ReferenceAccountAssetClient.ts +++ b/projects/typescript-examples/contracts/artifacts/clients/ReferenceAccountAsset/ReferenceAccountAssetClient.ts @@ -24,7 +24,7 @@ import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerR import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' import SimulateResponse = modelsv2.SimulateResponse -export const APP_SPEC: Arc56Contract = {"name":"ReferenceAccountAsset","structs":{},"methods":[{"name":"getAssetBalance","args":[],"returns":{"type":"uint64","desc":"The asset balance of the account"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Returns the balance of a specific asset in a hardcoded account","events":[],"recommendations":{}},{"name":"getAssetBalanceWithArg","args":[{"type":"account","name":"account","desc":"The account to check the asset balance for"},{"type":"asset","name":"asset","desc":"The asset to check the balance of"}],"returns":{"type":"uint64","desc":"The asset balance of the account"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Returns the balance of a specific asset in a provided account","events":[],"recommendations":{}}],"arcs":[22,28],"desc":"A contract that demonstrates how to reference both accounts and assets in a smart contract","networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[138,156],"errorMessage":"Account is not opted in to the asset"},{"pc":[78,107],"errorMessage":"OnCompletion is not NoOp"},{"pc":[143,163],"errorMessage":"account opted into asset"},{"pc":[129],"errorMessage":"can only call when creating"},{"pc":[81,110],"errorMessage":"can only call when not creating"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAxNDcyCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgYmFzZTMyKFIzSjc2TURQRVhRRVdCVjJMUTZGTFE0UFlDNFFYTkhIUElMMkJYMktTRlU0V1VOSkpNREEpCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFzc2V0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHg2ZDY4ZTU0ZCAweDgyNjRiNDA1IC8vIG1ldGhvZCAiZ2V0QXNzZXRCYWxhbmNlKCl1aW50NjQiLCBtZXRob2QgImdldEFzc2V0QmFsYW5jZVdpdGhBcmcoYWNjb3VudCxhc3NldCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2dldEFzc2V0QmFsYW5jZV9yb3V0ZUAzIG1haW5fZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZ19yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFzc2V0IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRBc3NldEJhbGFuY2VXaXRoQXJnX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFzc2V0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRBc3NldEJhbGFuY2Vfcm91dGVAMzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czoxMgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0QXNzZXRCYWxhbmNlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZUFjY291bnRBc3NldCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBY2NvdW50QXNzZXQuZ2V0QXNzZXRCYWxhbmNlKCkgLT4gdWludDY0OgpnZXRBc3NldEJhbGFuY2U6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MTQKICAgIC8vIGNvbnN0IGFkZHJlc3MgPSBuZXcgQWRkcmVzcygnUjNKNzZNRFBFWFFFV0JWMkxRNkZMUTRQWUM0UVhOSEhQSUwyQlgyS1NGVTRXVU5KSk1EQlRMUk5FTScpIC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGFjY291bnQgYWRkcmVzcwogICAgYnl0ZWNfMSAvLyBhZGRyIFIzSjc2TURQRVhRRVdCVjJMUTZGTFE0UFlDNFFYTkhIUElMMkJYMktTRlU0V1VOSkpNREJUTFJORU0KICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czoxNwogICAgLy8gY29uc3QgYXNzZXQgPSBBc3NldCgxNDcyKSAvLyBSZXBsYWNlIHdpdGggeW91ciBhc3NldCBJRAogICAgaW50Y18xIC8vIDE0NzIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gYXNzZXJ0KGFjY291bnQuaXNPcHRlZEluKGFzc2V0KSwgJ0FjY291bnQgaXMgbm90IG9wdGVkIGluIHRvIHRoZSBhc3NldCcpCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFjY291bnQgaXMgbm90IG9wdGVkIGluIHRvIHRoZSBhc3NldAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjE0CiAgICAvLyBjb25zdCBhZGRyZXNzID0gbmV3IEFkZHJlc3MoJ1IzSjc2TURQRVhRRVdCVjJMUTZGTFE0UFlDNFFYTkhIUElMMkJYMktTRlU0V1VOSkpNREJUTFJORU0nKSAvLyBSZXBsYWNlIHdpdGggeW91ciBhY2NvdW50IGFkZHJlc3MKICAgIGJ5dGVjXzEgLy8gYWRkciBSM0o3Nk1EUEVYUUVXQlYyTFE2RkxRNFBZQzRRWE5ISFBJTDJCWDJLU0ZVNFdVTkpKTURCVExSTkVNCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGNvbnN0IGFzc2V0ID0gQXNzZXQoMTQ3MikgLy8gUmVwbGFjZSB3aXRoIHlvdXIgYXNzZXQgSUQKICAgIGludGNfMSAvLyAxNDcyCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MjEKICAgIC8vIHJldHVybiBhc3NldC5iYWxhbmNlKGFjY291bnQpCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IG9wdGVkIGludG8gYXNzZXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQWNjb3VudEFzc2V0LmdldEFzc2V0QmFsYW5jZVdpdGhBcmcoYWNjb3VudDogYnl0ZXMsIGFzc2V0OiB1aW50NjQpIC0+IHVpbnQ2NDoKZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czozMC0zMQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZyhhY2NvdW50OiBBY2NvdW50LCBhc3NldDogQXNzZXQpIHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjMyCiAgICAvLyBhc3NlcnQoYWNjb3VudC5pc09wdGVkSW4oYXNzZXQpLCAnQWNjb3VudCBpcyBub3Qgb3B0ZWQgaW4gdG8gdGhlIGFzc2V0JykKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFjY291bnQgaXMgbm90IG9wdGVkIGluIHRvIHRoZSBhc3NldAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjM0CiAgICAvLyByZXR1cm4gYXNzZXQuYmFsYW5jZShhY2NvdW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgb3B0ZWQgaW50byBhc3NldAogICAgcmV0c3ViCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiACAcALJgIEFR98dSCO0/8wbyXgSwa6XDxVw4/AuQu053oXoN9KkWnLUalLBjEbQQBGggIEbWjlTQSCZLQFNhoAjgIAIAADgQBDMRkURDEYRDYaARfAHDYaAhfAMIgAMBYoTFCwIkMxGRREMRhEiAASFihMULAiQzEZQP/KMRgURCJDKSNwAEUBRCkjcABEiYoCAYv+i/9wAEUBRIv+i/9wAESJ","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract +export const APP_SPEC: Arc56Contract = {"name":"ReferenceAccountAsset","structs":{},"methods":[{"name":"getAssetBalance","args":[],"returns":{"type":"uint64","desc":"The asset balance of the account"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Returns the balance of a specific asset in a hardcoded account","events":[],"recommendations":{}},{"name":"getAssetBalanceWithArg","args":[{"type":"account","name":"account","desc":"The account to check the asset balance for"},{"type":"asset","name":"asset","desc":"The asset to check the balance of"}],"returns":{"type":"uint64","desc":"The asset balance of the account"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Returns the balance of a specific asset in a provided account","events":[],"recommendations":{}}],"arcs":[22,28],"desc":"A contract that demonstrates how to reference both accounts and assets in a smart contract","networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[138,156],"errorMessage":"Account is not opted in to the asset"},{"pc":[78,107],"errorMessage":"OnCompletion is not NoOp"},{"pc":[143,163],"errorMessage":"account opted into asset"},{"pc":[129],"errorMessage":"can only call when creating"},{"pc":[81,110],"errorMessage":"can only call when not creating"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAxNDcyCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgYmFzZTMyKFIzSjc2TURQRVhRRVdCVjJMUTZGTFE0UFlDNFFYTkhIUElMMkJYMktTRlU0V1VOSkpNREEpCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFzc2V0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHg2ZDY4ZTU0ZCAweDgyNjRiNDA1IC8vIG1ldGhvZCAiZ2V0QXNzZXRCYWxhbmNlKCl1aW50NjQiLCBtZXRob2QgImdldEFzc2V0QmFsYW5jZVdpdGhBcmcoYWNjb3VudCxhc3NldCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2dldEFzc2V0QmFsYW5jZV9yb3V0ZUAzIG1haW5fZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZ19yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFzc2V0IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRBc3NldEJhbGFuY2VXaXRoQXJnX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MzEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFzc2V0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRBc3NldEJhbGFuY2Vfcm91dGVAMzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czoxMwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0QXNzZXRCYWxhbmNlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZUFjY291bnRBc3NldCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBY2NvdW50QXNzZXQuZ2V0QXNzZXRCYWxhbmNlKCkgLT4gdWludDY0OgpnZXRBc3NldEJhbGFuY2U6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MTUKICAgIC8vIGNvbnN0IGFkZHJlc3MgPSBuZXcgQWRkcmVzcygnUjNKNzZNRFBFWFFFV0JWMkxRNkZMUTRQWUM0UVhOSEhQSUwyQlgyS1NGVTRXVU5KSk1EQlRMUk5FTScpIC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGFjY291bnQgYWRkcmVzcwogICAgYnl0ZWNfMSAvLyBhZGRyIFIzSjc2TURQRVhRRVdCVjJMUTZGTFE0UFlDNFFYTkhIUElMMkJYMktTRlU0V1VOSkpNREJUTFJORU0KICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29uc3QgYXNzZXQgPSBBc3NldCgxNDcyKSAvLyBSZXBsYWNlIHdpdGggeW91ciBhc3NldCBJRAogICAgaW50Y18xIC8vIDE0NzIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gYXNzZXJ0KGFjY291bnQuaXNPcHRlZEluKGFzc2V0KSwgJ0FjY291bnQgaXMgbm90IG9wdGVkIGluIHRvIHRoZSBhc3NldCcpCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFjY291bnQgaXMgbm90IG9wdGVkIGluIHRvIHRoZSBhc3NldAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjE1CiAgICAvLyBjb25zdCBhZGRyZXNzID0gbmV3IEFkZHJlc3MoJ1IzSjc2TURQRVhRRVdCVjJMUTZGTFE0UFlDNFFYTkhIUElMMkJYMktTRlU0V1VOSkpNREJUTFJORU0nKSAvLyBSZXBsYWNlIHdpdGggeW91ciBhY2NvdW50IGFkZHJlc3MKICAgIGJ5dGVjXzEgLy8gYWRkciBSM0o3Nk1EUEVYUUVXQlYyTFE2RkxRNFBZQzRRWE5ISFBJTDJCWDJLU0ZVNFdVTkpKTURCVExSTkVNCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnN0IGFzc2V0ID0gQXNzZXQoMTQ3MikgLy8gUmVwbGFjZSB3aXRoIHlvdXIgYXNzZXQgSUQKICAgIGludGNfMSAvLyAxNDcyCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIHJldHVybiBhc3NldC5iYWxhbmNlKGFjY291bnQpCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IG9wdGVkIGludG8gYXNzZXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQWNjb3VudEFzc2V0LmdldEFzc2V0QmFsYW5jZVdpdGhBcmcoYWNjb3VudDogYnl0ZXMsIGFzc2V0OiB1aW50NjQpIC0+IHVpbnQ2NDoKZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czozMS0zMgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZyhhY2NvdW50OiBBY2NvdW50LCBhc3NldDogQXNzZXQpIHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBhc3NlcnQoYWNjb3VudC5pc09wdGVkSW4oYXNzZXQpLCAnQWNjb3VudCBpcyBub3Qgb3B0ZWQgaW4gdG8gdGhlIGFzc2V0JykKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFjY291bnQgaXMgbm90IG9wdGVkIGluIHRvIHRoZSBhc3NldAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjM1CiAgICAvLyByZXR1cm4gYXNzZXQuYmFsYW5jZShhY2NvdW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgb3B0ZWQgaW50byBhc3NldAogICAgcmV0c3ViCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiACAcALJgIEFR98dSCO0/8wbyXgSwa6XDxVw4/AuQu053oXoN9KkWnLUalLBjEbQQBGggIEbWjlTQSCZLQFNhoAjgIAIAADgQBDMRkURDEYRDYaARfAHDYaAhfAMIgAMBYoTFCwIkMxGRREMRhEiAASFihMULAiQzEZQP/KMRgURCJDKSNwAEUBRCkjcABEiYoCAYv+i/9wAEUBRIv+i/9wAESJ","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract /** * A state record containing binary data diff --git a/projects/typescript-examples/contracts/artifacts/clients/ReferenceApp/ReferenceAppClient.ts b/projects/typescript-examples/contracts/artifacts/clients/ReferenceApp/ReferenceAppClient.ts index 0db530f..cbec8e0 100644 --- a/projects/typescript-examples/contracts/artifacts/clients/ReferenceApp/ReferenceAppClient.ts +++ b/projects/typescript-examples/contracts/artifacts/clients/ReferenceApp/ReferenceAppClient.ts @@ -24,7 +24,7 @@ import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerR import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' import SimulateResponse = modelsv2.SimulateResponse -export const APP_SPEC: Arc56Contract = {"name":"ReferenceApp","structs":{},"methods":[{"name":"incrementViaInner","args":[],"returns":{"type":"uint64","desc":"The incremented counter value from the inner call"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Calls the increment method on another Counter app with a hardcoded app ID","events":[],"recommendations":{}},{"name":"incrementViaInnerWithArg","args":[{"type":"application","name":"app","desc":"The application to call"}],"returns":{"type":"uint64","desc":"The incremented counter value from the inner call"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Calls the increment method on another Counter app passed as an argument","events":[],"recommendations":{}}],"arcs":[22,28],"desc":"A contract that demonstrates how to use resource usage in a contract using an asset reference","networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[125,158],"errorMessage":"Bytes has valid prefix"},{"pc":[49,72],"errorMessage":"OnCompletion is not NoOp"},{"pc":[94],"errorMessage":"can only call when creating"},{"pc":[52,75],"errorMessage":"can only call when not creating"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDYKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDRhMzI1OTAxCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MzIKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZUFwcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4OTQwN2FlOTYgMHgxMTE4MzM0YiAvLyBtZXRob2QgImluY3JlbWVudFZpYUlubmVyKCl1aW50NjQiLCBtZXRob2QgImluY3JlbWVudFZpYUlubmVyV2l0aEFyZyhhcHBsaWNhdGlvbil1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2luY3JlbWVudFZpYUlubmVyX3JvdXRlQDMgbWFpbl9pbmNyZW1lbnRWaWFJbm5lcldpdGhBcmdfcm91dGVANAoKbWFpbl9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjMyCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX2luY3JlbWVudFZpYUlubmVyV2l0aEFyZ19yb3V0ZUA0OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjYxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjMyCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo2MQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGluY3JlbWVudFZpYUlubmVyV2l0aEFyZwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9pbmNyZW1lbnRWaWFJbm5lcl9yb3V0ZUAzOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjM3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBpbmNyZW1lbnRWaWFJbm5lcgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czozMgogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQXBwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6OlJlZmVyZW5jZUFwcC5pbmNyZW1lbnRWaWFJbm5lcigpIC0+IHVpbnQ2NDoKaW5jcmVtZW50VmlhSW5uZXI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NDItNDkKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHAuaWQsCiAgICAvLyAgICAgLy8gVXNlIG1ldGhvZFNlbGVjdG9yIHRvIGdldCB0aGUgQUJJIHNlbGVjdG9yIGZvciB0aGUgaW5jcmVtZW50IG1ldGhvZAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdpbmNyZW1lbnQoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICBieXRlY18xIC8vIG1ldGhvZCAiaW5jcmVtZW50KCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBjb25zdCBhcHAgPSBBcHBsaWNhdGlvbigxNzE3KSAvLyBSZXBsYWNlIHdpdGggeW91ciBhcHBsaWNhdGlvbiBpZAogICAgcHVzaGludCAxNzE3IC8vIDE3MTcKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjQyLTQ4CiAgICAvLyBjb25zdCBhcHBDYWxsVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogYXBwLmlkLAogICAgLy8gICAgIC8vIFVzZSBtZXRob2RTZWxlY3RvciB0byBnZXQgdGhlIEFCSSBzZWxlY3RvciBmb3IgdGhlIGluY3JlbWVudCBtZXRob2QKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgaW50Y18yIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gZmVlOiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NDItNDkKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHAuaWQsCiAgICAvLyAgICAgLy8gVXNlIG1ldGhvZFNlbGVjdG9yIHRvIGdldCB0aGUgQUJJIHNlbGVjdG9yIGZvciB0aGUgaW5jcmVtZW50IG1ldGhvZAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdpbmNyZW1lbnQoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyByZXR1cm4gYXJjNC5kZWNvZGVBcmM0PHVpbnQ2ND4oYXBwQ2FsbFR4bi5sYXN0TG9nLCAnbG9nJykKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgYnRvaQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBcHAuaW5jcmVtZW50VmlhSW5uZXJXaXRoQXJnKGFwcDogdWludDY0KSAtPiB1aW50NjQ6CmluY3JlbWVudFZpYUlubmVyV2l0aEFyZzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo2MS02MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgaW5jcmVtZW50VmlhSW5uZXJXaXRoQXJnKGFwcDogQXBwbGljYXRpb24pOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NjQtNzEKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHAuaWQsCiAgICAvLyAgICAgLy8gVXNlIG1ldGhvZFNlbGVjdG9yIHRvIGdldCB0aGUgQUJJIHNlbGVjdG9yIGZvciB0aGUgaW5jcmVtZW50IG1ldGhvZAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdpbmNyZW1lbnQoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICBieXRlY18xIC8vIG1ldGhvZCAiaW5jcmVtZW50KCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo2NC03MAogICAgLy8gY29uc3QgYXBwQ2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcC5pZCwKICAgIC8vICAgICAvLyBVc2UgbWV0aG9kU2VsZWN0b3IgdG8gZ2V0IHRoZSBBQkkgc2VsZWN0b3IgZm9yIHRoZSBpbmNyZW1lbnQgbWV0aG9kCiAgICAvLyAgICAgYXBwQXJnczogW2FyYzQubWV0aG9kU2VsZWN0b3IoJ2luY3JlbWVudCgpdWludDY0JyldLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMiAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIGZlZTogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjY0LTcxCiAgICAvLyBjb25zdCBhcHBDYWxsVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogYXBwLmlkLAogICAgLy8gICAgIC8vIFVzZSBtZXRob2RTZWxlY3RvciB0byBnZXQgdGhlIEFCSSBzZWxlY3RvciBmb3IgdGhlIGluY3JlbWVudCBtZXRob2QKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo3NQogICAgLy8gcmV0dXJuIGFyYzQuZGVjb2RlQXJjNDx1aW50NjQ+KGFwcENhbGxUeG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGJ0b2kKICAgIHJldHN1Ygo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiADAAEGJgIEFR98dQRKMlkBMRtBAD+CAgSUB66WBBEYM0s2GgCOAgAZAAIiQzEZFEQxGEQ2GgEXwDKIAEIWKExQsCNDMRkURDEYRIgAEhYoTFCwI0MxGUD/0TEYFEQjQ7EpshqBtQ2yGCSyECKyAbO0PklXBABMVwAEKBJEF4mKAQGxKbIai/+yGCSyECKyAbO0PklXBABMVwAEKBJEF4k=","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract +export const APP_SPEC: Arc56Contract = {"name":"ReferenceApp","structs":{},"methods":[{"name":"incrementViaInner","args":[],"returns":{"type":"uint64","desc":"The incremented counter value from the inner call"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Calls the increment method on another Counter app with a hardcoded app ID","events":[],"recommendations":{}},{"name":"incrementViaInnerWithArg","args":[{"type":"application","name":"app","desc":"The application to call"}],"returns":{"type":"uint64","desc":"The incremented counter value from the inner call"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Calls the increment method on another Counter app passed as an argument","events":[],"recommendations":{}}],"arcs":[22,28],"desc":"A contract that demonstrates how to use resource usage in a contract using an asset reference","networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[125,158],"errorMessage":"Bytes has valid prefix"},{"pc":[49,72],"errorMessage":"OnCompletion is not NoOp"},{"pc":[94],"errorMessage":"can only call when creating"},{"pc":[52,75],"errorMessage":"can only call when not creating"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDYKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDRhMzI1OTAxCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZUFwcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4OTQwN2FlOTYgMHgxMTE4MzM0YiAvLyBtZXRob2QgImluY3JlbWVudFZpYUlubmVyKCl1aW50NjQiLCBtZXRob2QgImluY3JlbWVudFZpYUlubmVyV2l0aEFyZyhhcHBsaWNhdGlvbil1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2luY3JlbWVudFZpYUlubmVyX3JvdXRlQDMgbWFpbl9pbmNyZW1lbnRWaWFJbm5lcldpdGhBcmdfcm91dGVANAoKbWFpbl9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX2luY3JlbWVudFZpYUlubmVyV2l0aEFyZ19yb3V0ZUA0OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo2MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGluY3JlbWVudFZpYUlubmVyV2l0aEFyZwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9pbmNyZW1lbnRWaWFJbm5lcl9yb3V0ZUAzOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjM4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBpbmNyZW1lbnRWaWFJbm5lcgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czozMwogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQXBwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6OlJlZmVyZW5jZUFwcC5pbmNyZW1lbnRWaWFJbm5lcigpIC0+IHVpbnQ2NDoKaW5jcmVtZW50VmlhSW5uZXI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NDMtNTAKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHAuaWQsCiAgICAvLyAgICAgLy8gVXNlIG1ldGhvZFNlbGVjdG9yIHRvIGdldCB0aGUgQUJJIHNlbGVjdG9yIGZvciB0aGUgaW5jcmVtZW50IG1ldGhvZAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdpbmNyZW1lbnQoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICBieXRlY18xIC8vIG1ldGhvZCAiaW5jcmVtZW50KCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjQwCiAgICAvLyBjb25zdCBhcHAgPSBBcHBsaWNhdGlvbigxNzE3KSAvLyBSZXBsYWNlIHdpdGggeW91ciBhcHBsaWNhdGlvbiBpZAogICAgcHVzaGludCAxNzE3IC8vIDE3MTcKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjQzLTQ5CiAgICAvLyBjb25zdCBhcHBDYWxsVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogYXBwLmlkLAogICAgLy8gICAgIC8vIFVzZSBtZXRob2RTZWxlY3RvciB0byBnZXQgdGhlIEFCSSBzZWxlY3RvciBmb3IgdGhlIGluY3JlbWVudCBtZXRob2QKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgaW50Y18yIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gZmVlOiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NDMtNTAKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHAuaWQsCiAgICAvLyAgICAgLy8gVXNlIG1ldGhvZFNlbGVjdG9yIHRvIGdldCB0aGUgQUJJIHNlbGVjdG9yIGZvciB0aGUgaW5jcmVtZW50IG1ldGhvZAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdpbmNyZW1lbnQoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyByZXR1cm4gYXJjNC5kZWNvZGVBcmM0PHVpbnQ2ND4oYXBwQ2FsbFR4bi5sYXN0TG9nLCAnbG9nJykKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgYnRvaQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBcHAuaW5jcmVtZW50VmlhSW5uZXJXaXRoQXJnKGFwcDogdWludDY0KSAtPiB1aW50NjQ6CmluY3JlbWVudFZpYUlubmVyV2l0aEFyZzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo2Mi02MwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgaW5jcmVtZW50VmlhSW5uZXJXaXRoQXJnKGFwcDogQXBwbGljYXRpb24pOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NjUtNzIKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHAuaWQsCiAgICAvLyAgICAgLy8gVXNlIG1ldGhvZFNlbGVjdG9yIHRvIGdldCB0aGUgQUJJIHNlbGVjdG9yIGZvciB0aGUgaW5jcmVtZW50IG1ldGhvZAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdpbmNyZW1lbnQoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICBieXRlY18xIC8vIG1ldGhvZCAiaW5jcmVtZW50KCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo2NS03MQogICAgLy8gY29uc3QgYXBwQ2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcC5pZCwKICAgIC8vICAgICAvLyBVc2UgbWV0aG9kU2VsZWN0b3IgdG8gZ2V0IHRoZSBBQkkgc2VsZWN0b3IgZm9yIHRoZSBpbmNyZW1lbnQgbWV0aG9kCiAgICAvLyAgICAgYXBwQXJnczogW2FyYzQubWV0aG9kU2VsZWN0b3IoJ2luY3JlbWVudCgpdWludDY0JyldLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMiAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIGZlZTogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjY1LTcyCiAgICAvLyBjb25zdCBhcHBDYWxsVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogYXBwLmlkLAogICAgLy8gICAgIC8vIFVzZSBtZXRob2RTZWxlY3RvciB0byBnZXQgdGhlIEFCSSBzZWxlY3RvciBmb3IgdGhlIGluY3JlbWVudCBtZXRob2QKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gcmV0dXJuIGFyYzQuZGVjb2RlQXJjNDx1aW50NjQ+KGFwcENhbGxUeG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGJ0b2kKICAgIHJldHN1Ygo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiADAAEGJgIEFR98dQRKMlkBMRtBAD+CAgSUB66WBBEYM0s2GgCOAgAZAAIiQzEZFEQxGEQ2GgEXwDKIAEIWKExQsCNDMRkURDEYRIgAEhYoTFCwI0MxGUD/0TEYFEQjQ7EpshqBtQ2yGCSyECKyAbO0PklXBABMVwAEKBJEF4mKAQGxKbIai/+yGCSyECKyAbO0PklXBABMVwAEKBJEF4k=","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract /** * A state record containing binary data diff --git a/projects/typescript-examples/contracts/artifacts/clients/ReferenceAppBox/ReferenceAppBoxClient.ts b/projects/typescript-examples/contracts/artifacts/clients/ReferenceAppBox/ReferenceAppBoxClient.ts index b4d4427..748c6ed 100644 --- a/projects/typescript-examples/contracts/artifacts/clients/ReferenceAppBox/ReferenceAppBoxClient.ts +++ b/projects/typescript-examples/contracts/artifacts/clients/ReferenceAppBox/ReferenceAppBoxClient.ts @@ -24,7 +24,7 @@ import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerR import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' import SimulateResponse = modelsv2.SimulateResponse -export const APP_SPEC: Arc56Contract = {"name":"ReferenceAppBox","structs":{},"methods":[{"name":"incrementBoxCounter","args":[{"type":"pay","name":"payMbr","desc":"Payment transaction covering the box MBR"}],"returns":{"type":"uint64","desc":"The new counter value"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Increments the counter for the transaction sender\nRequires a payment transaction to cover the MBR for the box","events":[],"recommendations":{}},{"name":"getBoxCounter","args":[],"returns":{"type":"uint64","desc":"The current counter value or 0 if not set"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Gets the current counter value for the transaction sender","events":[],"recommendations":{}},{"name":"getBoxCounterForAccount","args":[{"type":"account","name":"account","desc":"The account to check"}],"returns":{"type":"uint64","desc":"The current counter value or 0 if not set"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Gets the current counter value for any account","events":[],"recommendations":{}},{"name":"getBoxMbr","args":[],"returns":{"type":"uint64","desc":"The MBR cost in microAlgos"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Returns the MBR cost for creating a box","events":[],"recommendations":{}},{"name":"getBoxConfiguration","args":[],"returns":{"type":"(uint64,uint64,uint64,uint64)","desc":"A tuple containing [keyLength, valueLength, boxSize, boxMbr]"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Returns all the box size configuration values","events":[],"recommendations":{}},{"name":"updateBoxConfiguration","args":[{"type":"uint64","name":"newKeyLength","desc":"The new key length"},{"type":"uint64","name":"newValueLength","desc":"The new value length"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Updates the box size configuration values","events":[],"recommendations":{}}],"arcs":[22,28],"desc":"A contract that uses box storage to maintain a counter for each account\nEach account needs to pay for the Minimum Balance Requirement (MBR) for their box\nConstants for box storage are stored in global state","networks":{},"state":{"schema":{"global":{"ints":4,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{"keyLength":{"keyType":"AVMString","valueType":"AVMUint64","key":"a2V5TGVuZ3Ro"},"valueLength":{"keyType":"AVMString","valueType":"AVMUint64","key":"dmFsdWVMZW5ndGg="},"boxSize":{"keyType":"AVMString","valueType":"AVMUint64","key":"Ym94U2l6ZQ=="},"boxMbr":{"keyType":"AVMString","valueType":"AVMUint64","key":"Ym94TWJy"}},"local":{},"box":{"accountBoxCounter":{"keyType":"AVMString","valueType":"AVMUint64","key":"Y291bnRlcg=="}}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[156,176,215,233,257,275],"errorMessage":"OnCompletion is not NoOp"},{"pc":[331],"errorMessage":"Payment must be to the contract"},{"pc":[323],"errorMessage":"Payment must cover the box MBR"},{"pc":[308],"errorMessage":"can only call when creating"},{"pc":[159,179,218,236,260,278],"errorMessage":"can only call when not creating"},{"pc":[77,81,89,321,419,424,428,432,436,452,456,464],"errorMessage":"check GlobalState exists"},{"pc":[288],"errorMessage":"transaction type is pay"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDQwMCAyNTAwCiAgICBieXRlY2Jsb2NrICJrZXlMZW5ndGgiICJ2YWx1ZUxlbmd0aCIgImJveFNpemUiICJib3hNYnIiIDB4MTUxZjdjNzUgImNvdW50ZXIiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIHB1YmxpYyBrZXlMZW5ndGggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMzIgKyAxOSkgfSkgLy8gQWNjb3VudCBhZGRyZXNzICgzMiBieXRlcykgKyBrZXkgcHJlZml4IG92ZXJoZWFkICgxOSBieXRlcykKICAgIGJ5dGVjXzAgLy8gImtleUxlbmd0aCIKICAgIHB1c2hpbnQgNTEgLy8gNTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyB2YWx1ZUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg4KSB9KSAvLyB1aW50NjQgKDggYnl0ZXMpCiAgICBieXRlY18xIC8vICJ2YWx1ZUxlbmd0aCIKICAgIHB1c2hpbnQgOCAvLyA4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBwdWJsaWMga2V5TGVuZ3RoID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDMyICsgMTkpIH0pIC8vIEFjY291bnQgYWRkcmVzcyAoMzIgYnl0ZXMpICsga2V5IHByZWZpeCBvdmVyaGVhZCAoMTkgYnl0ZXMpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAia2V5TGVuZ3RoIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gcHVibGljIHZhbHVlTGVuZ3RoID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDgpIH0pIC8vIHVpbnQ2NCAoOCBieXRlcykKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJ2YWx1ZUxlbmd0aCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MzgKICAgIC8vIHRoaXMuYm94U2l6ZS52YWx1ZSA9IHRoaXMua2V5TGVuZ3RoLnZhbHVlICsgdGhpcy52YWx1ZUxlbmd0aC52YWx1ZQogICAgKwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBieXRlY18yIC8vICJib3hTaXplIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjM4CiAgICAvLyB0aGlzLmJveFNpemUudmFsdWUgPSB0aGlzLmtleUxlbmd0aC52YWx1ZSArIHRoaXMudmFsdWVMZW5ndGgudmFsdWUKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIHB1YmxpYyBib3hTaXplID0gR2xvYmFsU3RhdGU8dWludDY0PigpIC8vIENhbGN1bGF0ZWQgaW4gY29uc3RydWN0b3IKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJib3hTaXplIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozOQogICAgLy8gdGhpcy5ib3hNYnIudmFsdWUgPSBVaW50NjQoMjUwMCkgKyB0aGlzLmJveFNpemUudmFsdWUgKiBVaW50NjQoNDAwKSAvLyBCYXNlIE1CUiArIChzaXplICogcGVyLWJ5dGUgY29zdCkKICAgIGludGNfMiAvLyA0MDAKICAgICoKICAgIGludGNfMyAvLyAyNTAwCiAgICArCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjcKICAgIC8vIHB1YmxpYyBib3hNYnIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gQ2FsY3VsYXRlZCBpbiBjb25zdHJ1Y3RvcgogICAgYnl0ZWNfMyAvLyAiYm94TWJyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyB0aGlzLmJveE1ici52YWx1ZSA9IFVpbnQ2NCgyNTAwKSArIHRoaXMuYm94U2l6ZS52YWx1ZSAqIFVpbnQ2NCg0MDApIC8vIEJhc2UgTUJSICsgKHNpemUgKiBwZXItYnl0ZSBjb3N0KQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjIxLTIyCiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHBCb3ggZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTMKICAgIHB1c2hieXRlc3MgMHgwNDBhMjM1ZSAweDU0MjVhMTQ1IDB4YjNiNGEyNjUgMHhiYmI1MjM5ZSAweDFhZWZlN2Y1IDB4MGUzODUxNjIgLy8gbWV0aG9kICJpbmNyZW1lbnRCb3hDb3VudGVyKHBheSl1aW50NjQiLCBtZXRob2QgImdldEJveENvdW50ZXIoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0Qm94Q291bnRlckZvckFjY291bnQoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgImdldEJveE1icigpdWludDY0IiwgbWV0aG9kICJnZXRCb3hDb25maWd1cmF0aW9uKCkodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIsIG1ldGhvZCAidXBkYXRlQm94Q29uZmlndXJhdGlvbih1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2luY3JlbWVudEJveENvdW50ZXJfcm91dGVANSBtYWluX2dldEJveENvdW50ZXJfcm91dGVANiBtYWluX2dldEJveENvdW50ZXJGb3JBY2NvdW50X3JvdXRlQDcgbWFpbl9nZXRCb3hNYnJfcm91dGVAOCBtYWluX2dldEJveENvbmZpZ3VyYXRpb25fcm91dGVAOSBtYWluX3VwZGF0ZUJveENvbmZpZ3VyYXRpb25fcm91dGVAMTAKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxNzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyMS0yMgogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQXBwQm94IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl91cGRhdGVCb3hDb25maWd1cmF0aW9uX3JvdXRlQDEwOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyMS0yMgogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQXBwQm94IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHVwZGF0ZUJveENvbmZpZ3VyYXRpb24KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0Qm94Q29uZmlndXJhdGlvbl9yb3V0ZUA5OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qm94Q29uZmlndXJhdGlvbgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveE1icl9yb3V0ZUA4OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEwMgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qm94TWJyCiAgICBpdG9iCiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveENvdW50ZXJGb3JBY2NvdW50X3JvdXRlQDc6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjEtMjIKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0IH0gfSkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZUFwcEJveCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXRCb3hDb3VudGVyRm9yQWNjb3VudAogICAgaXRvYgogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRCb3hDb3VudGVyX3JvdXRlQDY6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NzEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldEJveENvdW50ZXIKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5faW5jcmVtZW50Qm94Q291bnRlcl9yb3V0ZUA1OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjIxLTIyCiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHBCb3ggZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGluY3JlbWVudEJveENvdW50ZXIKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDEzOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjIxLTIyCiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHBCb3ggZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE3CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQXBwQm94LmluY3JlbWVudEJveENvdW50ZXIocGF5TWJyOiB1aW50NjQpIC0+IHVpbnQ2NDoKaW5jcmVtZW50Qm94Q291bnRlcjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo0OC00OQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgaW5jcmVtZW50Qm94Q291bnRlcihwYXlNYnI6IGd0eG4uUGF5bWVudFR4bik6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gYXNzZXJ0KHBheU1ici5hbW91bnQgPT09IHRoaXMuYm94TWJyLnZhbHVlLCAnUGF5bWVudCBtdXN0IGNvdmVyIHRoZSBib3ggTUJSJykKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQW1vdW50CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjcKICAgIC8vIHB1YmxpYyBib3hNYnIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gQ2FsY3VsYXRlZCBpbiBjb25zdHJ1Y3RvcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImJveE1iciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGFzc2VydChwYXlNYnIuYW1vdW50ID09PSB0aGlzLmJveE1ici52YWx1ZSwgJ1BheW1lbnQgbXVzdCBjb3ZlciB0aGUgYm94IE1CUicpCiAgICA9PQogICAgYXNzZXJ0IC8vIFBheW1lbnQgbXVzdCBjb3ZlciB0aGUgYm94IE1CUgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBhc3NlcnQocGF5TWJyLnJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgJ1BheW1lbnQgbXVzdCBiZSB0byB0aGUgY29udHJhY3QnKQogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gUGF5bWVudCBtdXN0IGJlIHRvIHRoZSBjb250cmFjdAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBjb25zdCBbY291bnRlciwgaGFzQ291bnRlcl0gPSB0aGlzLmFjY291bnRCb3hDb3VudGVyKFR4bi5zZW5kZXIpLm1heWJlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMAogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGNvbnN0IFtjb3VudGVyLCBoYXNDb3VudGVyXSA9IHRoaXMuYWNjb3VudEJveENvdW50ZXIoVHhuLnNlbmRlcikubWF5YmUoKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBpZiAoaGFzQ291bnRlcikgewogICAgYnogaW5jcmVtZW50Qm94Q291bnRlcl9lbHNlX2JvZHlAMgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyB0aGlzLmFjY291bnRCb3hDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gY291bnRlciArIDEKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMAogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIHRoaXMuYWNjb3VudEJveENvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgPSBjb3VudGVyICsgMQogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBkdXAKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU5CiAgICAvLyByZXR1cm4gY291bnRlciArIDEKICAgIHN3YXAKICAgIHJldHN1YgoKaW5jcmVtZW50Qm94Q291bnRlcl9lbHNlX2JvZHlAMjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMAogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgYnl0ZWMgNSAvLyAiY291bnRlciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo2MgogICAgLy8gdGhpcy5hY2NvdW50Qm94Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSA9IFVpbnQ2NCgxKQogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo2MgogICAgLy8gdGhpcy5hY2NvdW50Qm94Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSA9IFVpbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gcmV0dXJuIFVpbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQXBwQm94LmdldEJveENvdW50ZXIoKSAtPiB1aW50NjQ6CmdldEJveENvdW50ZXI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NzEtNzIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldEJveENvdW50ZXIoKTogdWludDY0IHsKICAgIHByb3RvIDAgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjczCiAgICAvLyBjb25zdCBbY291bnRlciwgaGFzQ291bnRlcl0gPSB0aGlzLmFjY291bnRCb3hDb3VudGVyKFR4bi5zZW5kZXIpLm1heWJlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMAogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NzMKICAgIC8vIGNvbnN0IFtjb3VudGVyLCBoYXNDb3VudGVyXSA9IHRoaXMuYWNjb3VudEJveENvdW50ZXIoVHhuLnNlbmRlcikubWF5YmUoKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyBpZiAoaGFzQ291bnRlcikgewogICAgYnogZ2V0Qm94Q291bnRlcl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gcmV0dXJuIGNvdW50ZXIKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmdldEJveENvdW50ZXJfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjc5CiAgICAvLyByZXR1cm4gMAogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQXBwQm94LmdldEJveENvdW50ZXJGb3JBY2NvdW50KGFjY291bnQ6IGJ5dGVzKSAtPiB1aW50NjQ6CmdldEJveENvdW50ZXJGb3JBY2NvdW50OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjg3LTg4CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBnZXRCb3hDb3VudGVyRm9yQWNjb3VudChhY2NvdW50OiBBY2NvdW50KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo4OQogICAgLy8gY29uc3QgW2NvdW50ZXIsIGhhc0NvdW50ZXJdID0gdGhpcy5hY2NvdW50Qm94Q291bnRlcihhY2NvdW50KS5tYXliZSgpCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6OTEKICAgIC8vIGlmIChoYXNDb3VudGVyKSB7CiAgICBieiBnZXRCb3hDb3VudGVyRm9yQWNjb3VudF9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo5MgogICAgLy8gcmV0dXJuIGNvdW50ZXIKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmdldEJveENvdW50ZXJGb3JBY2NvdW50X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo5NQogICAgLy8gcmV0dXJuIDAKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6OlJlZmVyZW5jZUFwcEJveC5nZXRCb3hNYnIoKSAtPiB1aW50NjQ6CmdldEJveE1icjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNwogICAgLy8gcHVibGljIGJveE1iciA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiYm94TWJyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMDQKICAgIC8vIHJldHVybiB0aGlzLmJveE1ici52YWx1ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBcHBCb3guZ2V0Qm94Q29uZmlndXJhdGlvbigpIC0+IHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NDoKZ2V0Qm94Q29uZmlndXJhdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gcHVibGljIGtleUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgzMiArIDE5KSB9KSAvLyBBY2NvdW50IGFkZHJlc3MgKDMyIGJ5dGVzKSArIGtleSBwcmVmaXggb3ZlcmhlYWQgKDE5IGJ5dGVzKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImtleUxlbmd0aCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyB2YWx1ZUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg4KSB9KSAvLyB1aW50NjQgKDggYnl0ZXMpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidmFsdWVMZW5ndGgiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYm94U2l6ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjcKICAgIC8vIHB1YmxpYyBib3hNYnIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gQ2FsY3VsYXRlZCBpbiBjb25zdHJ1Y3RvcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImJveE1iciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MTEzCiAgICAvLyByZXR1cm4gW3RoaXMua2V5TGVuZ3RoLnZhbHVlLCB0aGlzLnZhbHVlTGVuZ3RoLnZhbHVlLCB0aGlzLmJveFNpemUudmFsdWUsIHRoaXMuYm94TWJyLnZhbHVlXQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBcHBCb3gudXBkYXRlQm94Q29uZmlndXJhdGlvbihuZXdLZXlMZW5ndGg6IHVpbnQ2NCwgbmV3VmFsdWVMZW5ndGg6IHVpbnQ2NCkgLT4gdm9pZDoKdXBkYXRlQm94Q29uZmlndXJhdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMjEtMTIyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB1cGRhdGVCb3hDb25maWd1cmF0aW9uKG5ld0tleUxlbmd0aDogdWludDY0LCBuZXdWYWx1ZUxlbmd0aDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gcHVibGljIGtleUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgzMiArIDE5KSB9KSAvLyBBY2NvdW50IGFkZHJlc3MgKDMyIGJ5dGVzKSArIGtleSBwcmVmaXggb3ZlcmhlYWQgKDE5IGJ5dGVzKQogICAgYnl0ZWNfMCAvLyAia2V5TGVuZ3RoIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyMwogICAgLy8gdGhpcy5rZXlMZW5ndGgudmFsdWUgPSBuZXdLZXlMZW5ndGgKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gcHVibGljIHZhbHVlTGVuZ3RoID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDgpIH0pIC8vIHVpbnQ2NCAoOCBieXRlcykKICAgIGJ5dGVjXzEgLy8gInZhbHVlTGVuZ3RoIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyNAogICAgLy8gdGhpcy52YWx1ZUxlbmd0aC52YWx1ZSA9IG5ld1ZhbHVlTGVuZ3RoCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIHB1YmxpYyBrZXlMZW5ndGggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMzIgKyAxOSkgfSkgLy8gQWNjb3VudCBhZGRyZXNzICgzMiBieXRlcykgKyBrZXkgcHJlZml4IG92ZXJoZWFkICgxOSBieXRlcykKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJrZXlMZW5ndGgiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMgdmFsdWVMZW5ndGggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoOCkgfSkgLy8gdWludDY0ICg4IGJ5dGVzKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZhbHVlTGVuZ3RoIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMjcKICAgIC8vIHRoaXMuYm94U2l6ZS52YWx1ZSA9IHRoaXMua2V5TGVuZ3RoLnZhbHVlICsgdGhpcy52YWx1ZUxlbmd0aC52YWx1ZQogICAgKwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBieXRlY18yIC8vICJib3hTaXplIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gdGhpcy5ib3hTaXplLnZhbHVlID0gdGhpcy5rZXlMZW5ndGgudmFsdWUgKyB0aGlzLnZhbHVlTGVuZ3RoLnZhbHVlCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYm94U2l6ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MTI4CiAgICAvLyB0aGlzLmJveE1ici52YWx1ZSA9IFVpbnQ2NCgyNTAwKSArIHRoaXMuYm94U2l6ZS52YWx1ZSAqIFVpbnQ2NCg0MDApCiAgICBpbnRjXzIgLy8gNDAwCiAgICAqCiAgICBpbnRjXzMgLy8gMjUwMAogICAgKwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBwdWJsaWMgYm94TWJyID0gR2xvYmFsU3RhdGU8dWludDY0PigpIC8vIENhbGN1bGF0ZWQgaW4gY29uc3RydWN0b3IKICAgIGJ5dGVjXzMgLy8gImJveE1iciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIHRoaXMuYm94TWJyLnZhbHVlID0gVWludDY0KDI1MDApICsgdGhpcy5ib3hTaXplLnZhbHVlICogVWludDY0KDQwMCkKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiAEAAGQA8QTJgYJa2V5TGVuZ3RoC3ZhbHVlTGVuZ3RoB2JveFNpemUGYm94TWJyBBUffHUHY291bnRlcjEYQAAfKIEzZymBCGciKGVEIillRAgqTGciKmVEJAslCCtMZzEbQQDGggYEBAojXgRUJaFFBLO0omUEu7UjngQa7+f1BA44UWI2GgCOBgB5AGcATwA9ABYAAiJDMRkURDEYRDYaARc2GgIXiAELI0MxGRREMRhEiADuTwMWTwMWTwMWTwMWTwNPA1BPAlBMUCcETFCwI0MxGRREMRhEiADCFicETFCwI0MxGRREMRhENhoBF8AciACUFicETFCwI0MxGRREMRhEiABsFicETFCwI0MxGRREMRhEMRYjCUk4ECMSRIgAExYnBExQsCNDMRlA/2YxGBREI0OKAQGL/zgIIitlRBJEi/84BzIKEkQnBTEAUL5MF0xBABEnBTEAUIsAIwhJFk8CTL9MiScFMQBQIxa/I0yJigABJwUxAFC+TBdMQQAEiwBMiSJMiYoBAScFi/9QvkwXTEEABIsATIkiTIkiK2VEiSIoZUQiKWVEIiplRCIrZUSJigIAKIv+ZymL/2ciKGVEIillRAgqTGciKmVEJAslCCtMZ4k=","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract +export const APP_SPEC: Arc56Contract = {"name":"ReferenceAppBox","structs":{},"methods":[{"name":"incrementBoxCounter","args":[{"type":"pay","name":"payMbr","desc":"Payment transaction covering the box MBR"}],"returns":{"type":"uint64","desc":"The new counter value"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Increments the counter for the transaction sender\nRequires a payment transaction to cover the MBR for the box","events":[],"recommendations":{}},{"name":"getBoxCounter","args":[],"returns":{"type":"uint64","desc":"The current counter value or 0 if not set"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Gets the current counter value for the transaction sender","events":[],"recommendations":{}},{"name":"getBoxCounterForAccount","args":[{"type":"account","name":"account","desc":"The account to check"}],"returns":{"type":"uint64","desc":"The current counter value or 0 if not set"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Gets the current counter value for any account","events":[],"recommendations":{}},{"name":"getBoxMbr","args":[],"returns":{"type":"uint64","desc":"The MBR cost in microAlgos"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Returns the MBR cost for creating a box","events":[],"recommendations":{}},{"name":"getBoxConfiguration","args":[],"returns":{"type":"(uint64,uint64,uint64,uint64)","desc":"A tuple containing [keyLength, valueLength, boxSize, boxMbr]"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Returns all the box size configuration values","events":[],"recommendations":{}},{"name":"updateBoxConfiguration","args":[{"type":"uint64","name":"newKeyLength","desc":"The new key length"},{"type":"uint64","name":"newValueLength","desc":"The new value length"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Updates the box size configuration values","events":[],"recommendations":{}}],"arcs":[22,28],"desc":"A contract that uses box storage to maintain a counter for each account\nEach account needs to pay for the Minimum Balance Requirement (MBR) for their box\nConstants for box storage are stored in global state","networks":{},"state":{"schema":{"global":{"ints":4,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{"keyLength":{"keyType":"AVMString","valueType":"AVMUint64","key":"a2V5TGVuZ3Ro"},"valueLength":{"keyType":"AVMString","valueType":"AVMUint64","key":"dmFsdWVMZW5ndGg="},"boxSize":{"keyType":"AVMString","valueType":"AVMUint64","key":"Ym94U2l6ZQ=="},"boxMbr":{"keyType":"AVMString","valueType":"AVMUint64","key":"Ym94TWJy"}},"local":{},"box":{"accountBoxCounter":{"keyType":"AVMString","valueType":"AVMUint64","key":"Y291bnRlcg=="}}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[156,176,215,233,257,275],"errorMessage":"OnCompletion is not NoOp"},{"pc":[331],"errorMessage":"Payment must be to the contract"},{"pc":[323],"errorMessage":"Payment must cover the box MBR"},{"pc":[308],"errorMessage":"can only call when creating"},{"pc":[159,179,218,236,260,278],"errorMessage":"can only call when not creating"},{"pc":[77,81,89,321,419,424,428,432,436,452,456,464],"errorMessage":"check GlobalState exists"},{"pc":[288],"errorMessage":"transaction type is pay"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDQwMCAyNTAwCiAgICBieXRlY2Jsb2NrICJrZXlMZW5ndGgiICJ2YWx1ZUxlbmd0aCIgImJveFNpemUiICJib3hNYnIiIDB4MTUxZjdjNzUgImNvdW50ZXIiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyBrZXlMZW5ndGggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMzIgKyAxOSkgfSkgLy8gQWNjb3VudCBhZGRyZXNzICgzMiBieXRlcykgKyBrZXkgcHJlZml4IG92ZXJoZWFkICgxOSBieXRlcykKICAgIGJ5dGVjXzAgLy8gImtleUxlbmd0aCIKICAgIHB1c2hpbnQgNTEgLy8gNTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIHB1YmxpYyB2YWx1ZUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg4KSB9KSAvLyB1aW50NjQgKDggYnl0ZXMpCiAgICBieXRlY18xIC8vICJ2YWx1ZUxlbmd0aCIKICAgIHB1c2hpbnQgOCAvLyA4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMga2V5TGVuZ3RoID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDMyICsgMTkpIH0pIC8vIEFjY291bnQgYWRkcmVzcyAoMzIgYnl0ZXMpICsga2V5IHByZWZpeCBvdmVyaGVhZCAoMTkgYnl0ZXMpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAia2V5TGVuZ3RoIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gcHVibGljIHZhbHVlTGVuZ3RoID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDgpIH0pIC8vIHVpbnQ2NCAoOCBieXRlcykKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJ2YWx1ZUxlbmd0aCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIHRoaXMuYm94U2l6ZS52YWx1ZSA9IHRoaXMua2V5TGVuZ3RoLnZhbHVlICsgdGhpcy52YWx1ZUxlbmd0aC52YWx1ZQogICAgKwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBieXRlY18yIC8vICJib3hTaXplIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyB0aGlzLmJveFNpemUudmFsdWUgPSB0aGlzLmtleUxlbmd0aC52YWx1ZSArIHRoaXMudmFsdWVMZW5ndGgudmFsdWUKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjcKICAgIC8vIHB1YmxpYyBib3hTaXplID0gR2xvYmFsU3RhdGU8dWludDY0PigpIC8vIENhbGN1bGF0ZWQgaW4gY29uc3RydWN0b3IKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJib3hTaXplIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo0MAogICAgLy8gdGhpcy5ib3hNYnIudmFsdWUgPSBVaW50NjQoMjUwMCkgKyB0aGlzLmJveFNpemUudmFsdWUgKiBVaW50NjQoNDAwKSAvLyBCYXNlIE1CUiArIChzaXplICogcGVyLWJ5dGUgY29zdCkKICAgIGludGNfMiAvLyA0MDAKICAgICoKICAgIGludGNfMyAvLyAyNTAwCiAgICArCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIHB1YmxpYyBib3hNYnIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gQ2FsY3VsYXRlZCBpbiBjb25zdHJ1Y3RvcgogICAgYnl0ZWNfMyAvLyAiYm94TWJyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjQwCiAgICAvLyB0aGlzLmJveE1ici52YWx1ZSA9IFVpbnQ2NCgyNTAwKSArIHRoaXMuYm94U2l6ZS52YWx1ZSAqIFVpbnQ2NCg0MDApIC8vIEJhc2UgTUJSICsgKHNpemUgKiBwZXItYnl0ZSBjb3N0KQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjIyLTIzCiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHBCb3ggZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTMKICAgIHB1c2hieXRlc3MgMHgwNDBhMjM1ZSAweDU0MjVhMTQ1IDB4YjNiNGEyNjUgMHhiYmI1MjM5ZSAweDFhZWZlN2Y1IDB4MGUzODUxNjIgLy8gbWV0aG9kICJpbmNyZW1lbnRCb3hDb3VudGVyKHBheSl1aW50NjQiLCBtZXRob2QgImdldEJveENvdW50ZXIoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0Qm94Q291bnRlckZvckFjY291bnQoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgImdldEJveE1icigpdWludDY0IiwgbWV0aG9kICJnZXRCb3hDb25maWd1cmF0aW9uKCkodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIsIG1ldGhvZCAidXBkYXRlQm94Q29uZmlndXJhdGlvbih1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2luY3JlbWVudEJveENvdW50ZXJfcm91dGVANSBtYWluX2dldEJveENvdW50ZXJfcm91dGVANiBtYWluX2dldEJveENvdW50ZXJGb3JBY2NvdW50X3JvdXRlQDcgbWFpbl9nZXRCb3hNYnJfcm91dGVAOCBtYWluX2dldEJveENvbmZpZ3VyYXRpb25fcm91dGVAOSBtYWluX3VwZGF0ZUJveENvbmZpZ3VyYXRpb25fcm91dGVAMTAKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxNzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyMi0yMwogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQXBwQm94IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl91cGRhdGVCb3hDb25maWd1cmF0aW9uX3JvdXRlQDEwOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyMi0yMwogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQXBwQm94IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHVwZGF0ZUJveENvbmZpZ3VyYXRpb24KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0Qm94Q29uZmlndXJhdGlvbl9yb3V0ZUA5OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjExMgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qm94Q29uZmlndXJhdGlvbgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveE1icl9yb3V0ZUA4OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEwMwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qm94TWJyCiAgICBpdG9iCiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveENvdW50ZXJGb3JBY2NvdW50X3JvdXRlQDc6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjItMjMKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0IH0gfSkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZUFwcEJveCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXRCb3hDb3VudGVyRm9yQWNjb3VudAogICAgaXRvYgogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRCb3hDb3VudGVyX3JvdXRlQDY6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NzIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldEJveENvdW50ZXIKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5faW5jcmVtZW50Qm94Q291bnRlcl9yb3V0ZUA1OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjIyLTIzCiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHBCb3ggZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo0OQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGluY3JlbWVudEJveENvdW50ZXIKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDEzOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjIyLTIzCiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHBCb3ggZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE3CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQXBwQm94LmluY3JlbWVudEJveENvdW50ZXIocGF5TWJyOiB1aW50NjQpIC0+IHVpbnQ2NDoKaW5jcmVtZW50Qm94Q291bnRlcjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo0OS01MAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgaW5jcmVtZW50Qm94Q291bnRlcihwYXlNYnI6IGd0eG4uUGF5bWVudFR4bik6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo1MgogICAgLy8gYXNzZXJ0KHBheU1ici5hbW91bnQgPT09IHRoaXMuYm94TWJyLnZhbHVlLCAnUGF5bWVudCBtdXN0IGNvdmVyIHRoZSBib3ggTUJSJykKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQW1vdW50CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIHB1YmxpYyBib3hNYnIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gQ2FsY3VsYXRlZCBpbiBjb25zdHJ1Y3RvcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImJveE1iciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NTIKICAgIC8vIGFzc2VydChwYXlNYnIuYW1vdW50ID09PSB0aGlzLmJveE1ici52YWx1ZSwgJ1BheW1lbnQgbXVzdCBjb3ZlciB0aGUgYm94IE1CUicpCiAgICA9PQogICAgYXNzZXJ0IC8vIFBheW1lbnQgbXVzdCBjb3ZlciB0aGUgYm94IE1CUgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBhc3NlcnQocGF5TWJyLnJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgJ1BheW1lbnQgbXVzdCBiZSB0byB0aGUgY29udHJhY3QnKQogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gUGF5bWVudCBtdXN0IGJlIHRvIHRoZSBjb250cmFjdAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBjb25zdCBbY291bnRlciwgaGFzQ291bnRlcl0gPSB0aGlzLmFjY291bnRCb3hDb3VudGVyKFR4bi5zZW5kZXIpLm1heWJlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMQogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGNvbnN0IFtjb3VudGVyLCBoYXNDb3VudGVyXSA9IHRoaXMuYWNjb3VudEJveENvdW50ZXIoVHhuLnNlbmRlcikubWF5YmUoKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBpZiAoaGFzQ291bnRlcikgewogICAgYnogaW5jcmVtZW50Qm94Q291bnRlcl9lbHNlX2JvZHlAMgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU5CiAgICAvLyB0aGlzLmFjY291bnRCb3hDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gY291bnRlciArIDEKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMQogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NTkKICAgIC8vIHRoaXMuYWNjb3VudEJveENvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgPSBjb3VudGVyICsgMQogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBkdXAKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyByZXR1cm4gY291bnRlciArIDEKICAgIHN3YXAKICAgIHJldHN1YgoKaW5jcmVtZW50Qm94Q291bnRlcl9lbHNlX2JvZHlAMjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMQogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgYnl0ZWMgNSAvLyAiY291bnRlciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gdGhpcy5hY2NvdW50Qm94Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSA9IFVpbnQ2NCgxKQogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gdGhpcy5hY2NvdW50Qm94Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSA9IFVpbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo2NAogICAgLy8gcmV0dXJuIFVpbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQXBwQm94LmdldEJveENvdW50ZXIoKSAtPiB1aW50NjQ6CmdldEJveENvdW50ZXI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NzItNzMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldEJveENvdW50ZXIoKTogdWludDY0IHsKICAgIHByb3RvIDAgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyBjb25zdCBbY291bnRlciwgaGFzQ291bnRlcl0gPSB0aGlzLmFjY291bnRCb3hDb3VudGVyKFR4bi5zZW5kZXIpLm1heWJlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMQogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NzQKICAgIC8vIGNvbnN0IFtjb3VudGVyLCBoYXNDb3VudGVyXSA9IHRoaXMuYWNjb3VudEJveENvdW50ZXIoVHhuLnNlbmRlcikubWF5YmUoKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjc2CiAgICAvLyBpZiAoaGFzQ291bnRlcikgewogICAgYnogZ2V0Qm94Q291bnRlcl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo3NwogICAgLy8gcmV0dXJuIGNvdW50ZXIKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmdldEJveENvdW50ZXJfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjgwCiAgICAvLyByZXR1cm4gMAogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQXBwQm94LmdldEJveENvdW50ZXJGb3JBY2NvdW50KGFjY291bnQ6IGJ5dGVzKSAtPiB1aW50NjQ6CmdldEJveENvdW50ZXJGb3JBY2NvdW50OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjg4LTg5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBnZXRCb3hDb3VudGVyRm9yQWNjb3VudChhY2NvdW50OiBBY2NvdW50KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo5MAogICAgLy8gY29uc3QgW2NvdW50ZXIsIGhhc0NvdW50ZXJdID0gdGhpcy5hY2NvdW50Qm94Q291bnRlcihhY2NvdW50KS5tYXliZSgpCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6OTIKICAgIC8vIGlmIChoYXNDb3VudGVyKSB7CiAgICBieiBnZXRCb3hDb3VudGVyRm9yQWNjb3VudF9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo5MwogICAgLy8gcmV0dXJuIGNvdW50ZXIKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmdldEJveENvdW50ZXJGb3JBY2NvdW50X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo5NgogICAgLy8gcmV0dXJuIDAKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6OlJlZmVyZW5jZUFwcEJveC5nZXRCb3hNYnIoKSAtPiB1aW50NjQ6CmdldEJveE1icjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gcHVibGljIGJveE1iciA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiYm94TWJyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMDUKICAgIC8vIHJldHVybiB0aGlzLmJveE1ici52YWx1ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBcHBCb3guZ2V0Qm94Q29uZmlndXJhdGlvbigpIC0+IHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NDoKZ2V0Qm94Q29uZmlndXJhdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gcHVibGljIGtleUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgzMiArIDE5KSB9KSAvLyBBY2NvdW50IGFkZHJlc3MgKDMyIGJ5dGVzKSArIGtleSBwcmVmaXggb3ZlcmhlYWQgKDE5IGJ5dGVzKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImtleUxlbmd0aCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIHB1YmxpYyB2YWx1ZUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg4KSB9KSAvLyB1aW50NjQgKDggYnl0ZXMpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidmFsdWVMZW5ndGgiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYm94U2l6ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIHB1YmxpYyBib3hNYnIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gQ2FsY3VsYXRlZCBpbiBjb25zdHJ1Y3RvcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImJveE1iciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MTE0CiAgICAvLyByZXR1cm4gW3RoaXMua2V5TGVuZ3RoLnZhbHVlLCB0aGlzLnZhbHVlTGVuZ3RoLnZhbHVlLCB0aGlzLmJveFNpemUudmFsdWUsIHRoaXMuYm94TWJyLnZhbHVlXQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBcHBCb3gudXBkYXRlQm94Q29uZmlndXJhdGlvbihuZXdLZXlMZW5ndGg6IHVpbnQ2NCwgbmV3VmFsdWVMZW5ndGg6IHVpbnQ2NCkgLT4gdm9pZDoKdXBkYXRlQm94Q29uZmlndXJhdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMjItMTIzCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB1cGRhdGVCb3hDb25maWd1cmF0aW9uKG5ld0tleUxlbmd0aDogdWludDY0LCBuZXdWYWx1ZUxlbmd0aDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gcHVibGljIGtleUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgzMiArIDE5KSB9KSAvLyBBY2NvdW50IGFkZHJlc3MgKDMyIGJ5dGVzKSArIGtleSBwcmVmaXggb3ZlcmhlYWQgKDE5IGJ5dGVzKQogICAgYnl0ZWNfMCAvLyAia2V5TGVuZ3RoIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyNAogICAgLy8gdGhpcy5rZXlMZW5ndGgudmFsdWUgPSBuZXdLZXlMZW5ndGgKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gcHVibGljIHZhbHVlTGVuZ3RoID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDgpIH0pIC8vIHVpbnQ2NCAoOCBieXRlcykKICAgIGJ5dGVjXzEgLy8gInZhbHVlTGVuZ3RoIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyNQogICAgLy8gdGhpcy52YWx1ZUxlbmd0aC52YWx1ZSA9IG5ld1ZhbHVlTGVuZ3RoCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyBrZXlMZW5ndGggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMzIgKyAxOSkgfSkgLy8gQWNjb3VudCBhZGRyZXNzICgzMiBieXRlcykgKyBrZXkgcHJlZml4IG92ZXJoZWFkICgxOSBieXRlcykKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJrZXlMZW5ndGgiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBwdWJsaWMgdmFsdWVMZW5ndGggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoOCkgfSkgLy8gdWludDY0ICg4IGJ5dGVzKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZhbHVlTGVuZ3RoIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIHRoaXMuYm94U2l6ZS52YWx1ZSA9IHRoaXMua2V5TGVuZ3RoLnZhbHVlICsgdGhpcy52YWx1ZUxlbmd0aC52YWx1ZQogICAgKwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBieXRlY18yIC8vICJib3hTaXplIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyOAogICAgLy8gdGhpcy5ib3hTaXplLnZhbHVlID0gdGhpcy5rZXlMZW5ndGgudmFsdWUgKyB0aGlzLnZhbHVlTGVuZ3RoLnZhbHVlCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYm94U2l6ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MTI5CiAgICAvLyB0aGlzLmJveE1ici52YWx1ZSA9IFVpbnQ2NCgyNTAwKSArIHRoaXMuYm94U2l6ZS52YWx1ZSAqIFVpbnQ2NCg0MDApCiAgICBpbnRjXzIgLy8gNDAwCiAgICAqCiAgICBpbnRjXzMgLy8gMjUwMAogICAgKwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBwdWJsaWMgYm94TWJyID0gR2xvYmFsU3RhdGU8dWludDY0PigpIC8vIENhbGN1bGF0ZWQgaW4gY29uc3RydWN0b3IKICAgIGJ5dGVjXzMgLy8gImJveE1iciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIHRoaXMuYm94TWJyLnZhbHVlID0gVWludDY0KDI1MDApICsgdGhpcy5ib3hTaXplLnZhbHVlICogVWludDY0KDQwMCkKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiAEAAGQA8QTJgYJa2V5TGVuZ3RoC3ZhbHVlTGVuZ3RoB2JveFNpemUGYm94TWJyBBUffHUHY291bnRlcjEYQAAfKIEzZymBCGciKGVEIillRAgqTGciKmVEJAslCCtMZzEbQQDGggYEBAojXgRUJaFFBLO0omUEu7UjngQa7+f1BA44UWI2GgCOBgB5AGcATwA9ABYAAiJDMRkURDEYRDYaARc2GgIXiAELI0MxGRREMRhEiADuTwMWTwMWTwMWTwMWTwNPA1BPAlBMUCcETFCwI0MxGRREMRhEiADCFicETFCwI0MxGRREMRhENhoBF8AciACUFicETFCwI0MxGRREMRhEiABsFicETFCwI0MxGRREMRhEMRYjCUk4ECMSRIgAExYnBExQsCNDMRlA/2YxGBREI0OKAQGL/zgIIitlRBJEi/84BzIKEkQnBTEAUL5MF0xBABEnBTEAUIsAIwhJFk8CTL9MiScFMQBQIxa/I0yJigABJwUxAFC+TBdMQQAEiwBMiSJMiYoBAScFi/9QvkwXTEEABIsATIkiTIkiK2VEiSIoZUQiKWVEIiplRCIrZUSJigIAKIv+ZymL/2ciKGVEIillRAgqTGciKmVEJAslCCtMZ4k=","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract /** * A state record containing binary data diff --git a/projects/typescript-examples/contracts/artifacts/clients/ScratchStorage/ScratchStorageClient.ts b/projects/typescript-examples/contracts/artifacts/clients/ScratchStorage/ScratchStorageClient.ts index 91e2288..e41e246 100644 --- a/projects/typescript-examples/contracts/artifacts/clients/ScratchStorage/ScratchStorageClient.ts +++ b/projects/typescript-examples/contracts/artifacts/clients/ScratchStorage/ScratchStorageClient.ts @@ -24,7 +24,7 @@ import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerR import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' import SimulateResponse = modelsv2.SimulateResponse -export const APP_SPEC: Arc56Contract = {"name":"ScratchStorage","structs":{},"methods":[{"name":"demonstrateScratchStorage","args":[],"returns":{"type":"bool","desc":"true if all operations succeed"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Demonstrates basic scratch storage operations","events":[],"recommendations":{}},{"name":"readFromGroupTransaction","args":[{"type":"uint64","name":"groupIndex","desc":"The index of the transaction in the group to read from"},{"type":"uint64","name":"scratchSlot","desc":"The scratch slot to read from"}],"returns":{"type":"uint64","desc":"The uint64 value read from the specified transaction's scratch slot"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Demonstrates reading values from another transaction in the same group","events":[],"recommendations":{}},{"name":"readBytesFromGroupTransaction","args":[{"type":"uint64","name":"groupIndex","desc":"The index of the transaction in the group to read from"},{"type":"uint64","name":"scratchSlot","desc":"The scratch slot to read from"}],"returns":{"type":"byte[]","desc":"The bytes value read from the specified transaction's scratch slot"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Demonstrates reading bytes values from another transaction in the same group","events":[],"recommendations":{}}],"arcs":[22,28],"desc":"ScratchStorage Contract\n\nThis contract demonstrates how to use scratch storage in Algorand smart contracts.\nScratch storage persists for the lifetime of a group transaction and can be used to pass\nvalues between multiple calls and/or applications in the same group.\n\nKey features demonstrated:\n- Reserving scratch slots using the contract decorator\n- Storing and loading values from scratch space\n- Using scratch space to pass values between transactions in a group\n- Different data types in scratch space (uint64 and bytes)","networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[69,101,126],"errorMessage":"OnCompletion is not NoOp"},{"pc":[181],"errorMessage":"Value in slot 0 should be 42"},{"pc":[184],"errorMessage":"Value in slot 1 should be \"Hello, Algorand!\""},{"pc":[193],"errorMessage":"Value in slot 15 should be 999"},{"pc":[188],"errorMessage":"Value in slot 2 should be 100"},{"pc":[154],"errorMessage":"can only call when creating"},{"pc":[72,104,129],"errorMessage":"can only call when not creating"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDQyIDEwMAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1ICJIZWxsbywgQWxnb3JhbmQhIgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjYtMjcKICAgIC8vIEBjb250cmFjdCh7IHNjcmF0Y2hTbG90czogWzAsIDEsIDIsIHsgZnJvbTogMTAsIHRvOiAyMCB9XSB9KSAvLyBUaGlzIHJlc2VydmVzIHNsb3RzIDAsIDEsIDIgYW5kIHNsb3RzIDEwLTIwCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBTY3JhdGNoU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A4CiAgICBwdXNoYnl0ZXNzIDB4MDExNjhjNWMgMHgwZWVjMGJkOSAweDEwZmI0YTY2IC8vIG1ldGhvZCAiZGVtb25zdHJhdGVTY3JhdGNoU3RvcmFnZSgpYm9vbCIsIG1ldGhvZCAicmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uKHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJyZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbih1aW50NjQsdWludDY0KWJ5dGVbXSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZGVtb25zdHJhdGVTY3JhdGNoU3RvcmFnZV9yb3V0ZUAzIG1haW5fcmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uX3JvdXRlQDQgbWFpbl9yZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbl9yb3V0ZUA1CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNi0yNwogICAgLy8gQGNvbnRyYWN0KHsgc2NyYXRjaFNsb3RzOiBbMCwgMSwgMiwgeyBmcm9tOiAxMCwgdG86IDIwIH1dIH0pIC8vIFRoaXMgcmVzZXJ2ZXMgc2xvdHMgMCwgMSwgMiBhbmQgc2xvdHMgMTAtMjAKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjcmF0Y2hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9yZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbl9yb3V0ZUA1OgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNi0yNwogICAgLy8gQGNvbnRyYWN0KHsgc2NyYXRjaFNsb3RzOiBbMCwgMSwgMiwgeyBmcm9tOiAxMCwgdG86IDIwIH1dIH0pIC8vIFRoaXMgcmVzZXJ2ZXMgc2xvdHMgMCwgMSwgMiBhbmQgc2xvdHMgMTAtMjAKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjcmF0Y2hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiByZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI2LTI3CiAgICAvLyBAY29udHJhY3QoeyBzY3JhdGNoU2xvdHM6IFswLCAxLCAyLCB7IGZyb206IDEwLCB0bzogMjAgfV0gfSkgLy8gVGhpcyByZXNlcnZlcyBzbG90cyAwLCAxLCAyIGFuZCBzbG90cyAxMC0yMAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NyYXRjaFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIHJlYWRGcm9tR3JvdXBUcmFuc2FjdGlvbgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZW1vbnN0cmF0ZVNjcmF0Y2hTdG9yYWdlX3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo2NQogICAgLy8gcHVibGljIGRlbW9uc3RyYXRlU2NyYXRjaFN0b3JhZ2UoKTogYm9vbGVhbiB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVtb25zdHJhdGVTY3JhdGNoU3RvcmFnZQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAODoKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI2LTI3CiAgICAvLyBAY29udHJhY3QoeyBzY3JhdGNoU2xvdHM6IFswLCAxLCAyLCB7IGZyb206IDEwLCB0bzogMjAgfV0gfSkgLy8gVGhpcyByZXNlcnZlcyBzbG90cyAwLCAxLCAyIGFuZCBzbG90cyAxMC0yMAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NyYXRjaFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDEyCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpTY3JhdGNoU3RvcmFnZS5kZW1vbnN0cmF0ZVNjcmF0Y2hTdG9yYWdlKCkgLT4gdWludDY0OgpkZW1vbnN0cmF0ZVNjcmF0Y2hTdG9yYWdlOgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzQKICAgIC8vIFNjcmF0Y2guc3RvcmUoMCwgVWludDY0KDQyKSkKICAgIGludGNfMiAvLyA0MgogICAgc3RvcmUgMAogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzUKICAgIC8vIFNjcmF0Y2guc3RvcmUoMSwgQnl0ZXMoJ0hlbGxvLCBBbGdvcmFuZCEnKSkKICAgIGJ5dGVjXzEgLy8gIkhlbGxvLCBBbGdvcmFuZCEiCiAgICBzdG9yZSAxCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNgogICAgLy8gU2NyYXRjaC5zdG9yZSgyLCBVaW50NjQoMTAwKSkKICAgIGludGNfMyAvLyAxMDAKICAgIHN0b3JlIDIKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM3CiAgICAvLyBTY3JhdGNoLnN0b3JlKDE1LCBVaW50NjQoOTk5KSkKICAgIHB1c2hpbnQgOTk5IC8vIDk5OQogICAgc3RvcmUgMTUKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyBjb25zdCB2YWx1ZTIgPSBTY3JhdGNoLmxvYWRVaW50NjQoMikKICAgIGxvYWQgMgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NTAKICAgIC8vIGNvbnN0IHZhbHVlMyA9IFNjcmF0Y2gubG9hZFVpbnQ2NCgxNSkKICAgIGxvYWQgMTUKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBjb25zdCBieXRlc1ZhbHVlID0gU2NyYXRjaC5sb2FkQnl0ZXMoMSkKICAgIGxvYWQgMQogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGNvbnN0IHZhbHVlMSA9IFNjcmF0Y2gubG9hZFVpbnQ2NCgwKQogICAgbG9hZCAwCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gYXNzZXJ0KHZhbHVlMSA9PT0gNDIsICdWYWx1ZSBpbiBzbG90IDAgc2hvdWxkIGJlIDQyJykKICAgIGludGNfMiAvLyA0MgogICAgPT0KICAgIGFzc2VydCAvLyBWYWx1ZSBpbiBzbG90IDAgc2hvdWxkIGJlIDQyCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo1NAogICAgLy8gYXNzZXJ0KGJ5dGVzVmFsdWUgPT09IEJ5dGVzKCdIZWxsbywgQWxnb3JhbmQhJyksICdWYWx1ZSBpbiBzbG90IDEgc2hvdWxkIGJlICJIZWxsbywgQWxnb3JhbmQhIicpCiAgICBieXRlY18xIC8vICJIZWxsbywgQWxnb3JhbmQhIgogICAgPT0KICAgIGFzc2VydCAvLyBWYWx1ZSBpbiBzbG90IDEgc2hvdWxkIGJlICJIZWxsbywgQWxnb3JhbmQhIgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGFzc2VydCh2YWx1ZTIgPT09IDEwMCwgJ1ZhbHVlIGluIHNsb3QgMiBzaG91bGQgYmUgMTAwJykKICAgIHN3YXAKICAgIGludGNfMyAvLyAxMDAKICAgID09CiAgICBhc3NlcnQgLy8gVmFsdWUgaW4gc2xvdCAyIHNob3VsZCBiZSAxMDAKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBhc3NlcnQodmFsdWUzID09PSA5OTksICdWYWx1ZSBpbiBzbG90IDE1IHNob3VsZCBiZSA5OTknKQogICAgcHVzaGludCA5OTkgLy8gOTk5CiAgICA9PQogICAgYXNzZXJ0IC8vIFZhbHVlIGluIHNsb3QgMTUgc2hvdWxkIGJlIDk5OQogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIHJldHVybiB0cnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OlNjcmF0Y2hTdG9yYWdlLnJlYWRGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpIC0+IHVpbnQ2NDoKcmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uOgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODAtODEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIHJlYWRGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gcmV0dXJuIGdsb2FkVWludDY0KGdyb3VwSW5kZXgsIHNjcmF0Y2hTbG90KQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGdsb2Fkc3MKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpTY3JhdGNoU3RvcmFnZS5yZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpIC0+IGJ5dGVzOgpyZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjkzLTk0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyByZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjk1CiAgICAvLyByZXR1cm4gZ2xvYWRCeXRlcyhncm91cEluZGV4LCBzY3JhdGNoU2xvdCkKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBnbG9hZHNzCiAgICByZXRzdWIK","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiAEAQAqZCYCBBUffHUQSGVsbG8sIEFsZ29yYW5kITEbQQBuggMEARaMXAQO7AvZBBD7SmY2GgCOAwA7ACIAAiNDMRkURDEYRDYaARc2GgIXiAB5SRUWVwYCTFAoTFCwIkMxGRREMRhENhoBFzYaAheIAFAWKExQsCJDMRkURDEYRIgAGIABACNPAlQoTFCwIkMxGUD/qTEYFEQiQyQ1ACk1ASU1AoHnBzUPNAI0DzQBNAAkEkQpEkRMJRJEgecHEkQiiYoCAYv+i//EiYoCAYv+i//EiQ==","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract +export const APP_SPEC: Arc56Contract = {"name":"ScratchStorage","structs":{},"methods":[{"name":"demonstrateScratchStorage","args":[],"returns":{"type":"bool","desc":"true if all operations succeed"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Demonstrates basic scratch storage operations","events":[],"recommendations":{}},{"name":"readFromGroupTransaction","args":[{"type":"uint64","name":"groupIndex","desc":"The index of the transaction in the group to read from"},{"type":"uint64","name":"scratchSlot","desc":"The scratch slot to read from"}],"returns":{"type":"uint64","desc":"The uint64 value read from the specified transaction's scratch slot"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Demonstrates reading values from another transaction in the same group","events":[],"recommendations":{}},{"name":"readBytesFromGroupTransaction","args":[{"type":"uint64","name":"groupIndex","desc":"The index of the transaction in the group to read from"},{"type":"uint64","name":"scratchSlot","desc":"The scratch slot to read from"}],"returns":{"type":"byte[]","desc":"The bytes value read from the specified transaction's scratch slot"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Demonstrates reading bytes values from another transaction in the same group","events":[],"recommendations":{}}],"arcs":[22,28],"desc":"ScratchStorage Contract\n\nThis contract demonstrates how to use scratch storage in Algorand smart contracts.\nScratch storage persists for the lifetime of a group transaction and can be used to pass\nvalues between multiple calls and/or applications in the same group.\n\nKey features demonstrated:\n- Reserving scratch slots using the contract decorator\n- Storing and loading values from scratch space\n- Using scratch space to pass values between transactions in a group\n- Different data types in scratch space (uint64 and bytes)","networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[69,101,126],"errorMessage":"OnCompletion is not NoOp"},{"pc":[181],"errorMessage":"Value in slot 0 should be 42"},{"pc":[184],"errorMessage":"Value in slot 1 should be \"Hello, Algorand!\""},{"pc":[193],"errorMessage":"Value in slot 15 should be 999"},{"pc":[188],"errorMessage":"Value in slot 2 should be 100"},{"pc":[154],"errorMessage":"can only call when creating"},{"pc":[72,104,129],"errorMessage":"can only call when not creating"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDQyIDEwMAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1ICJIZWxsbywgQWxnb3JhbmQhIgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjctMjgKICAgIC8vIEBjb250cmFjdCh7IHNjcmF0Y2hTbG90czogWzAsIDEsIDIsIHsgZnJvbTogMTAsIHRvOiAyMCB9XSB9KSAvLyBUaGlzIHJlc2VydmVzIHNsb3RzIDAsIDEsIDIgYW5kIHNsb3RzIDEwLTIwCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBTY3JhdGNoU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A4CiAgICBwdXNoYnl0ZXNzIDB4MDExNjhjNWMgMHgwZWVjMGJkOSAweDEwZmI0YTY2IC8vIG1ldGhvZCAiZGVtb25zdHJhdGVTY3JhdGNoU3RvcmFnZSgpYm9vbCIsIG1ldGhvZCAicmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uKHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJyZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbih1aW50NjQsdWludDY0KWJ5dGVbXSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZGVtb25zdHJhdGVTY3JhdGNoU3RvcmFnZV9yb3V0ZUAzIG1haW5fcmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uX3JvdXRlQDQgbWFpbl9yZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbl9yb3V0ZUA1CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc2NyYXRjaFNsb3RzOiBbMCwgMSwgMiwgeyBmcm9tOiAxMCwgdG86IDIwIH1dIH0pIC8vIFRoaXMgcmVzZXJ2ZXMgc2xvdHMgMCwgMSwgMiBhbmQgc2xvdHMgMTAtMjAKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjcmF0Y2hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9yZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbl9yb3V0ZUA1OgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc2NyYXRjaFNsb3RzOiBbMCwgMSwgMiwgeyBmcm9tOiAxMCwgdG86IDIwIH1dIH0pIC8vIFRoaXMgcmVzZXJ2ZXMgc2xvdHMgMCwgMSwgMiBhbmQgc2xvdHMgMTAtMjAKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjcmF0Y2hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiByZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo3NAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzY3JhdGNoU2xvdHM6IFswLCAxLCAyLCB7IGZyb206IDEwLCB0bzogMjAgfV0gfSkgLy8gVGhpcyByZXNlcnZlcyBzbG90cyAwLCAxLCAyIGFuZCBzbG90cyAxMC0yMAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NyYXRjaFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo3NAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIHJlYWRGcm9tR3JvdXBUcmFuc2FjdGlvbgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZW1vbnN0cmF0ZVNjcmF0Y2hTdG9yYWdlX3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo2MQogICAgLy8gcHVibGljIGRlbW9uc3RyYXRlU2NyYXRjaFN0b3JhZ2UoKTogYm9vbGVhbiB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVtb25zdHJhdGVTY3JhdGNoU3RvcmFnZQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAODoKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzY3JhdGNoU2xvdHM6IFswLCAxLCAyLCB7IGZyb206IDEwLCB0bzogMjAgfV0gfSkgLy8gVGhpcyByZXNlcnZlcyBzbG90cyAwLCAxLCAyIGFuZCBzbG90cyAxMC0yMAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NyYXRjaFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDEyCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpTY3JhdGNoU3RvcmFnZS5kZW1vbnN0cmF0ZVNjcmF0Y2hTdG9yYWdlKCkgLT4gdWludDY0OgpkZW1vbnN0cmF0ZVNjcmF0Y2hTdG9yYWdlOgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzQKICAgIC8vIFNjcmF0Y2guc3RvcmUoMCwgVWludDY0KDQyKSkKICAgIGludGNfMiAvLyA0MgogICAgc3RvcmUgMAogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzUKICAgIC8vIFNjcmF0Y2guc3RvcmUoMSwgQnl0ZXMoJ0hlbGxvLCBBbGdvcmFuZCEnKSkKICAgIGJ5dGVjXzEgLy8gIkhlbGxvLCBBbGdvcmFuZCEiCiAgICBzdG9yZSAxCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNgogICAgLy8gU2NyYXRjaC5zdG9yZSgyLCBVaW50NjQoMTAwKSkKICAgIGludGNfMyAvLyAxMDAKICAgIHN0b3JlIDIKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM3CiAgICAvLyBTY3JhdGNoLnN0b3JlKDE1LCBVaW50NjQoOTk5KSkKICAgIHB1c2hpbnQgOTk5IC8vIDk5OQogICAgc3RvcmUgMTUKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyBjb25zdCB2YWx1ZTIgPSBTY3JhdGNoLmxvYWRVaW50NjQoMikKICAgIGxvYWQgMgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGNvbnN0IHZhbHVlMyA9IFNjcmF0Y2gubG9hZFVpbnQ2NCgxNSkKICAgIGxvYWQgMTUKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyBjb25zdCBieXRlc1ZhbHVlID0gU2NyYXRjaC5sb2FkQnl0ZXMoMSkKICAgIGxvYWQgMQogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIGNvbnN0IHZhbHVlMSA9IFNjcmF0Y2gubG9hZFVpbnQ2NCgwKQogICAgbG9hZCAwCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gYXNzZXJ0KHZhbHVlMSA9PT0gNDIsICdWYWx1ZSBpbiBzbG90IDAgc2hvdWxkIGJlIDQyJykKICAgIGludGNfMiAvLyA0MgogICAgPT0KICAgIGFzc2VydCAvLyBWYWx1ZSBpbiBzbG90IDAgc2hvdWxkIGJlIDQyCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo1MgogICAgLy8gYXNzZXJ0KGJ5dGVzVmFsdWUgPT09IEJ5dGVzKCdIZWxsbywgQWxnb3JhbmQhJyksICdWYWx1ZSBpbiBzbG90IDEgc2hvdWxkIGJlICJIZWxsbywgQWxnb3JhbmQhIicpCiAgICBieXRlY18xIC8vICJIZWxsbywgQWxnb3JhbmQhIgogICAgPT0KICAgIGFzc2VydCAvLyBWYWx1ZSBpbiBzbG90IDEgc2hvdWxkIGJlICJIZWxsbywgQWxnb3JhbmQhIgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NTMKICAgIC8vIGFzc2VydCh2YWx1ZTIgPT09IDEwMCwgJ1ZhbHVlIGluIHNsb3QgMiBzaG91bGQgYmUgMTAwJykKICAgIHN3YXAKICAgIGludGNfMyAvLyAxMDAKICAgID09CiAgICBhc3NlcnQgLy8gVmFsdWUgaW4gc2xvdCAyIHNob3VsZCBiZSAxMDAKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBhc3NlcnQodmFsdWUzID09PSA5OTksICdWYWx1ZSBpbiBzbG90IDE1IHNob3VsZCBiZSA5OTknKQogICAgcHVzaGludCA5OTkgLy8gOTk5CiAgICA9PQogICAgYXNzZXJ0IC8vIFZhbHVlIGluIHNsb3QgMTUgc2hvdWxkIGJlIDk5OQogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIHJldHVybiB0cnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OlNjcmF0Y2hTdG9yYWdlLnJlYWRGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpIC0+IHVpbnQ2NDoKcmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uOgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NzQtNzUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIHJlYWRGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gcmV0dXJuIGdsb2FkVWludDY0KGdyb3VwSW5kZXgsIHNjcmF0Y2hTbG90KQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGdsb2Fkc3MKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpTY3JhdGNoU3RvcmFnZS5yZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpIC0+IGJ5dGVzOgpyZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg1LTg2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyByZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyByZXR1cm4gZ2xvYWRCeXRlcyhncm91cEluZGV4LCBzY3JhdGNoU2xvdCkKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBnbG9hZHNzCiAgICByZXRzdWIK","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiAEAQAqZCYCBBUffHUQSGVsbG8sIEFsZ29yYW5kITEbQQBuggMEARaMXAQO7AvZBBD7SmY2GgCOAwA7ACIAAiNDMRkURDEYRDYaARc2GgIXiAB5SRUWVwYCTFAoTFCwIkMxGRREMRhENhoBFzYaAheIAFAWKExQsCJDMRkURDEYRIgAGIABACNPAlQoTFCwIkMxGUD/qTEYFEQiQyQ1ACk1ASU1AoHnBzUPNAI0DzQBNAAkEkQpEkRMJRJEgecHEkQiiYoCAYv+i//EiYoCAYv+i//EiQ==","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract /** * A state record containing binary data diff --git a/projects/typescript-examples/contracts/artifacts/contracts/BoxStorage/BoxStorage.approval.puya.map b/projects/typescript-examples/contracts/artifacts/contracts/BoxStorage/BoxStorage.approval.puya.map index 2057d23..c1af353 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/BoxStorage/BoxStorage.approval.puya.map +++ b/projects/typescript-examples/contracts/artifacts/contracts/BoxStorage/BoxStorage.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "/Users/gabe.algo/Code/devportal-code-examples/projects/typescript-examples/contracts/BoxStorage/contract.algo.ts" ], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAqWE;;AAAA;AAAA;AAAA;;AAAA;AArWF;;;AAAA;;;AAqWE;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AA3BA;;AAAA;AAAA;AAAA;;AAAA;AA1UF;;;AAAA;;;AA0UE;;;AAAA;;AAZA;;AAAA;AAAA;AAAA;;AAAA;AA9TF;;;AAAA;;;AA8TE;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAdC;;AAAA;AAAA;AAAA;;AAAA;AAhTH;;;AAAA;;;AAgTG;;;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAZD;;AAAA;AAAA;AAAA;;AAAA;AApSF;;;AAAA;;;AAoSE;;;AAAA;;AAbA;;AAAA;AAAA;AAAA;;AAAA;AAvRF;;;AAAA;;;AAuRE;;;AAAA;;AAfA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAZC;;AAAA;AAAA;AAAA;;AAAA;AA5PH;;;AAAA;AA4PG;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAvBD;;AAAA;AAAA;AAAA;;AAAA;AArOF;;;AAAA;AAqOE;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAtBA;;AAAA;AAAA;AAAA;;AAAA;AA/MF;;;AAAA;AAAA;;;AA+ME;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAZC;;AAAA;AAAA;AAAA;;AAAA;AAnMH;;;AAAA;AAmMG;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAbA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;;;;;;AAAA;AAAA;;AAXA;;AAAA;AAAA;AAAA;;AAAA;AA3KH;;;AAAA;AA2KG;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAhBA;;AAAA;AAAA;AAAA;;AAAA;AA3JH;;;AAAA;AA2JG;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAbA;;AAAA;AAAA;AAAA;;AAAA;AA9IH;;;AAAA;AA8IG;;;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAXD;;AAAA;AAAA;AAAA;;AAAA;AAnIF;;;AAAA;AAmIE;;;AAAA;;AAVA;;AAAA;AAAA;AAAA;;AAAA;AAzHF;;;AAAA;AAAA;;;AAAA;;;AAyHE;;;AAAA;;AAZC;;AAAA;AAAA;AAAA;;AAAA;AA7GH;;;AAAA;AA6GG;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAZA;;AAAA;AAAA;AAAA;;AAAA;AAjGH;;;AAAA;AAiGG;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAdA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAhBD;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AATA;;AAAA;AAAA;AAAA;;AAAA;AA1DF;;;AA0DE;;;AAAA;;AAVA;;AAAA;AAAA;AAAA;;AAAA;AAhDF;;;AAAA;;;AAgDE;;;AAAA;;AAVA;;AAAA;AAAA;AAAA;;AAAA;AAtCF;;;AAAA;AAsCE;;;AAAA;;AAXC;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAVA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAjBH;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAGqC;AAgBd;AAAA;AAAA;AAAA;AAAA;AAAnB;AAhBiC;AA0Bd;AAAA;AAAA;AAAA;AAAA;AAAnB;AASF;;;AACE;;AAAA;AApCiC;AAoCjC;AAAA;;AASF;;;AA9CsC;;AA+CpC;;AA/CoC;;AA+CpC;;AAAA;;AASF;;;AArDuD;;AAsDrD;;AAtDqD;;AAsDrD;;AAAA;;AAxDiC;AAiErB;;AA/DyC;;AAgEhC;;AAnEe;;AAoErB;;AAnEkB;AAqE1B;AAAA;AAAA;AAAkC;AAAlC;AAAA;;AAAA;AAA6C;AAA7C;AAAP;AAnEqD;;AAoE9C;AAAoC;;;;;;AAApC;;AAAA;AAAmE;;;AAAiB;;AAApF;AAAP;AAvEoC;;AAwE7B;AAA8B;;AAA9B;;AAAA;AAA0C;;AAA1C;AAAP;;AAvEiC;AAkFG;AAAA;AAAA;AACpC;AAAA;AAWF;;;AAES;;AAAA;AA5F2C;AAAA;AAAA;AA4F1B;AAAA;AAAxB;AAUF;;;AAES;;AAAA;AAxG2C;AAAA;AAAA;AAwG3C;AAAgC;;;;;;;;;AAAhC;;AAAA;AAAP;AAUF;;;AACE;;AAAA;AAnHkD;AAAA;AAAA;AAmHlD;AAAA;;AAAA;;AAAA;;AASF;;;AACE;;AAAA;AA7HkD;AAAA;AAAA;AA6HjC;;;AAUnB;;;AAE0B;;AAAA;AAzI0B;AAAA;AAAA;AAyI1B;AAAA;AAAA;;AAAA;AAChB;;;;;AAAR;;AAAA;;AAAA;;AAAA;AAAyB;;;;;AAU3B;;;AAEO;;AAAA;AAtJ6C;AAAA;AAAA;AAAA;AAsJ5B;AAAA;;AAAlB;;;AACY;AAAd;AAAA;AAGsB;;AAAA;AAAA;AAAxB;AAAA;AAUF;;;AAES;;AAAA;AAtK2C;AAAA;AAAA;AAsK1B;AAAA;;AAAxB;AAsBF;;;AAES;;AAAA;AA7LqD;;AAAA;AAAA;AA6L9B;AAAA;AAA9B;AAUF;;;AAEE;;AAAA;AAzM4D;;AAAA;AAAA;AAAA;;AAyM5D;;AAAA;AAAA;;AAAA;AAEyB;AAAA;AADzB;AAAA;AAAA;AAAA;;AAAA;AAAA;AAGgB;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAHhB;AAAA;;;AACyB;;AAAA;AAAA;AADzB;;;AAIc;;AAAA;;;AAJd;AAAA;;;AACyB;;AAAA;AAAA;AADzB;;;AAKiB;;AAAA;;;AALjB;AAAA;;;;AAAA;AASO;AAAP;AAAA;;;;;AAUF;;;AAQE;;AAAA;AArO4D;;AAAA;AAAA;AAqO5D;AAAA;;AAAA;AAPc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOd;AAE8B;AAAA;AAAA;AAAY;AAAuB;;AAA1D;AAAP;AAC8B;AAAA;AAAuB;;AAA9C;AAAP;AAEO;AAAP;AAUF;;;AAES;;AAAA;AAtPqD;;AAAA;AAAA;AAsP9B;AAAA;;AAA9B;AAxP4B;;AAmQD;AAA3B;;AACwB;;AApQI;;AAqQ5B;;AAAA;AArQ4B;;AAsQd;AAAA;;AAAA;;AAAA;AACP;AAAA;;AAAA;AAAP;AACA;AASF;;;AAEE;;AAAsB;AAAtB;;AAEA;;AADwB;;AACxB;;AASF;;;AAEE;;AAAA;;AACY;;AAAA;AAAA;AAAuB;;AAAnC;AAAA;;;AAAY;;AAAA;AAAA;;AAAZ;;;;AAAA;;;;;;AASF;;;AAG0B;;AAAA;AACxB;AAUF;;;AAES;;AAAsB;AAAtB;AAAP;AACc;;AAAA;AAAA;AAAd;AASF;;;AAC0B;;AACE;;AAEU;AAAA;AAAqB;;AAAA;AAAhC;AAGlB;;AAAA;AAAA;AAAP;AAEA;;AAAe;AAAf;;AAAA;AACA;;AAAc;AAAG;AAAjB;;AAAA;AAEM;;AAAuB;AAAG;AAAlB;AACR;;AAAuB;AAAI;AAAnB;AAEP;AAAA;;AAAA;AAAP;AACO;AAAP;;AAWF;;;AAGE;;AAAqB;;;;;;AAArB;AAOoB;;AAAA;AAAA;AAAM;AAAG;AAAtB;AAAP;AACoB;;AAAA;AAAA;AAAb;AAAsB;AAAW;AAAjC;AAAP;AACoB;;AAAA;AAAA;AAAM;;AAAG;AAAW;;AAAjC;AAAP;AACoB;;AAAA;AAAA;AAAM;;AAAG;AAAW;;AAAjC;AAAP;AAEoB;;AAAA;AAAA;AAApB", + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAyTE;;AAAA;AAAA;AAAA;;AAAA;AAzTF;;;AAAA;;;AAyTE;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAtBA;;AAAA;AAAA;AAAA;;AAAA;AAnSF;;;AAAA;AAmSE;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AApBA;;AAAA;AAAA;AAAA;;AAAA;AA/QF;;;AAAA;AAAA;;;AA+QE;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAVC;;AAAA;AAAA;AAAA;;AAAA;AArQH;;;AAAA;AAqQG;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAVA;;AAAA;AAAA;AAAA;;AAAA;AA3PH;;;AAAA;AA2PG;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AA1BD;;AAAA;AAAA;AAAA;;AAAA;AAjOF;;;AAAA;;;AAiOE;;;AAAA;;AAZA;;AAAA;AAAA;AAAA;;AAAA;AArNF;;;AAAA;;;AAqNE;;;AAAA;;AARA;;AAAA;AAAA;AAAA;;AAAA;AA7MF;;;AAAA;AA6ME;;;AAAA;;AAdA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAXA;;AAAA;AAAA;AAAA;;AAAA;AApLF;;;AAAA;;;AAoLE;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAdC;;AAAA;AAAA;AAAA;;AAAA;AAtKH;;;AAAA;AAsKG;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAdD;;AAAA;AAAA;AAAA;;AAAA;AAxJF;;;AAAA;;;AAwJE;;;AAAA;;AARA;;AAAA;AAAA;AAAA;;AAAA;AAhJF;;;AAAA;AAAA;;;AAAA;;;AAgJE;;;AAAA;;AATA;;AAAA;AAAA;AAAA;;AAAA;AAvIF;;;AAuIE;;;AAAA;;AARA;;AAAA;AAAA;AAAA;;AAAA;AA/HF;;;AAAA;;;AA+HE;;;AAAA;;AARA;;AAAA;AAAA;AAAA;;AAAA;AAvHF;;;AAAA;AAuHE;;;AAAA;;AAbC;;AAAA;AAAA;AAAA;;AAAA;AA1GH;;;AAAA;;;AA0GG;;;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AATA;;AAAA;AAAA;AAAA;;AAAA;AAjGH;;;AAAA;AAiGG;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAdD;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AATC;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;;;;;;AAAA;AAAA;;AAVA;;AAAA;AAAA;AAAA;;AAAA;AAhEH;;;AAAA;AAgEG;;;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAVA;;AAAA;AAAA;AAAA;;AAAA;AAtDH;;;AAAA;AAsDG;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAVA;;AAAA;AAAA;AAAA;;AAAA;AA5CH;;;AAAA;AA4CG;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAXA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AATA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AARA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAhBH;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAGqC;AAed;AAAA;AAAA;AAAA;AAAA;AAAnB;AAfiC;AAuBd;AAAA;AAAA;AAAA;AAAA;AAAnB;AAvBiC;AAgCG;AAAA;AAAA;AACpC;AAAA;AAQF;;;AAES;;AAAA;AAvC2C;AAAA;AAAA;AAuC1B;AAAA;AAAxB;AAQF;;;AAES;;AAAA;AAjD2C;AAAA;AAAA;AAiD3C;AAAgC;;;;;;;;;AAAhC;;AAAA;AAAP;AAQF;;;AAE0B;;AAAA;AA3D0B;AAAA;AAAA;AA2D1B;AAAA;AAAA;;AAAA;AAChB;;;;;AAAR;;AAAA;;AAAA;;AAAA;AAAyB;;;;;AA7DG;;AA8ED;AAA3B;;AACwB;;AA/EI;;AAgF5B;;AAAA;AAhF4B;;AAiFd;AAAA;;AAAA;;AAAA;AACP;AAAA;;AAAA;AAAP;AACA;AAQF;;;AAES;;AAAA;AA5F2C;AAAA;AAAA;AA4F1B;AAAA;;AAAxB;AAOF;;;AAG0B;;AAAA;AACxB;AASF;;;AACE;;AAAA;AArHiC;AAqHjC;AAAA;;AAOF;;;AA7HsC;;AA8HpC;;AA9HoC;;AA8HpC;;AAAA;;AAOF;;;AAlIuD;;AAmIrD;;AAnIqD;;AAmIrD;;AAAA;;AAQF;;;AACE;;AAAA;AA1IkD;AAAA;AAAA;AA0IlD;AAAA;;AAAA;;AAAA;;AAOF;;;AAEE;;AAAsB;AAAtB;;AAEA;;AADwB;;AACxB;;AAUF;;;AAEO;;AAAA;AAjK6C;AAAA;AAAA;AAAA;AAiK5B;AAAA;;AAAlB;;;AACY;AAAd;AAAA;AAGsB;;AAAA;AAAA;AAAxB;AAAA;AAQF;;;AAES;;AAAsB;AAAtB;AAAP;AACc;;AAAA;AAAA;AAAd;AApLiC;AA6LrB;;AA3LyC;;AA4LhC;;AA/Le;;AAgMrB;;AA/LkB;AAiM1B;AAAA;AAAA;AAAkC;AAAlC;AAAA;;AAAA;AAA6C;AAA7C;AAAP;AA/LqD;;AAgM9C;AAAoC;;;;;;AAApC;;AAAA;AAAmE;;;AAAiB;;AAApF;AAAP;AAnMoC;;AAoM7B;AAA8B;;AAA9B;;AAAA;AAA0C;;AAA1C;AAAP;;AAOF;;;AACE;;AAAA;AAvMkD;AAAA;AAAA;AAuMjC;;;AAOnB;;;AAEE;;AAAA;;AACY;;AAAA;AAAA;AAAuB;;AAAnC;AAAA;;;AAAY;;AAAA;AAAA;;AAAZ;;;;AAAA;;;;;;AASF;;;AAC0B;;AACE;;AAEU;AAAA;AAAqB;;AAAA;AAAhC;AAGlB;;AAAA;AAAA;AAAP;AAEA;;AAAe;AAAf;;AAAA;AACA;;AAAc;AAAG;AAAjB;;AAAA;AAEM;;AAAuB;AAAG;AAAlB;AACR;;AAAuB;AAAI;AAAnB;AAEP;AAAA;;AAAA;AAAP;AACO;AAAP;;AAUF;;;AAES;;AAAA;AArPqD;;AAAA;AAAA;AAqP9B;AAAA;AAA9B;AAQF;;;AAES;;AAAA;AA/PqD;;AAAA;AAAA;AA+P9B;AAAA;;AAA9B;AAQF;;;AAEE;;AAAA;AAzQ4D;;AAAA;AAAA;AAAA;;AAyQ5D;;AAAA;AAAA;;AAAA;AAEyB;AAAA;AADzB;AAAA;AAAA;AAAA;;AAAA;AAAA;AAGgB;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAHhB;AAAA;;;AACyB;;AAAA;AAAA;AADzB;;;AAIc;;AAAA;;;AAJd;AAAA;;;AACyB;;AAAA;AAAA;AADzB;;;AAKiB;;AAAA;;;AALjB;AAAA;;;;AAAA;AASO;AAAP;AAAA;;;;;AAQF;;;AAOE;;AAAA;AAlS4D;;AAAA;AAAA;AAkS5D;AAAA;;AAAA;AANc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMd;AAE8B;AAAA;AAAA;AAAY;AAAuB;;AAA1D;AAAP;AAC8B;AAAA;AAAuB;;AAA9C;AAAP;AAEO;AAAP;AAUF;;;AAGE;;AAAqB;;;;;;AAArB;AAOoB;;AAAA;AAAA;AAAM;AAAG;AAAtB;AAAP;AACoB;;AAAA;AAAA;AAAb;AAAsB;AAAW;AAAjC;AAAP;AACoB;;AAAA;AAAA;AAAM;;AAAG;AAAW;;AAAjC;AAAP;AACoB;;AAAA;AAAA;AAAM;;AAAG;AAAW;;AAAjC;AAAP;AAEoB;;AAAA;AAAA;AAApB", "op_pc_offset": 0, "pc_events": { "1": { @@ -14,7 +14,7 @@ "op": "intcblock 1 0 32 42" }, "7": { - "op": "bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"42\" \"boxRef\" 0x0003" + "op": "bytecblock 0x151f7c75 0x00 \"boxMap\" \"boxInt\" \"boxString\" \"boxDynamicBytes\" \"users\" \"boxRef\" \"42\" 0x0003" }, "75": { "op": "txn NumAppArgs", @@ -30,7 +30,7 @@ "stack_out": [] }, "80": { - "op": "pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74 // method \"getBox()uint64\", method \"valueBox()uint64\", method \"setBox(uint64)void\", method \"setBoxString(string)void\", method \"setBoxDynamicBytes(byte[])void\", method \"deleteBox()void\", method \"maybeBox()(uint64,bool)\", method \"getBoxMap(uint64)string\", method \"getBoxMapWithDefault(uint64)string\", method \"setBoxMap(uint64,string)void\", method \"deleteBoxMap(uint64)void\", method \"maybeBoxMap(uint64)(string,bool)\", method \"boxMapLength(uint64)uint64\", method \"boxMapExists(uint64)bool\", method \"keyPrefixBoxMap()byte[]\", method \"getBoxMapStruct(uint64)(string,uint64,uint64)\", method \"setBoxMapStruct(uint64,(string,uint64,uint64))bool\", method \"boxMapStructLength(uint64)bool\", method \"boxMapStructExists(uint64)bool\", method \"getBoxRef()address\", method \"setBoxRef(string)void\", method \"deleteBoxRef(string)void\", method \"maybeBoxRef(string)(byte[],bool)\", method \"lengthBoxRef(string)uint64\", method \"extractBoxRef(string)void\", method \"arc4Box(string)uint8[4]\"", + "op": "pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74 // method \"getBox()uint64\", method \"valueBox()uint64\", method \"maybeBox()(uint64,bool)\", method \"getBoxMap(uint64)string\", method \"getBoxMapWithDefault(uint64)string\", method \"maybeBoxMap(uint64)(string,bool)\", method \"keyPrefixBoxMap()byte[]\", method \"getBoxRef()address\", method \"boxMapExists(uint64)bool\", method \"maybeBoxRef(string)(byte[],bool)\", method \"setBox(uint64)void\", method \"setBoxString(string)void\", method \"setBoxDynamicBytes(byte[])void\", method \"setBoxMap(uint64,string)void\", method \"setBoxRef(string)void\", method \"boxMapLength(uint64)uint64\", method \"lengthBoxRef(string)uint64\", method \"deleteBox()void\", method \"deleteBoxMap(uint64)void\", method \"deleteBoxRef(string)void\", method \"extractBoxRef(string)void\", method \"getBoxMapStruct(uint64)(string,uint64,uint64)\", method \"boxMapStructExists(uint64)bool\", method \"setBoxMapStruct(uint64,(string,uint64,uint64))bool\", method \"boxMapStructLength(uint64)bool\", method \"arc4Box(string)uint8[4]\"", "defined_out": [ "Method(arc4Box(string)uint8[4])", "Method(boxMapExists(uint64)bool)", @@ -62,29 +62,29 @@ "stack_out": [ "Method(getBox()uint64)", "Method(valueBox()uint64)", - "Method(setBox(uint64)void)", - "Method(setBoxString(string)void)", - "Method(setBoxDynamicBytes(byte[])void)", - "Method(deleteBox()void)", "Method(maybeBox()(uint64,bool))", "Method(getBoxMap(uint64)string)", "Method(getBoxMapWithDefault(uint64)string)", - "Method(setBoxMap(uint64,string)void)", - "Method(deleteBoxMap(uint64)void)", "Method(maybeBoxMap(uint64)(string,bool))", - "Method(boxMapLength(uint64)uint64)", - "Method(boxMapExists(uint64)bool)", "Method(keyPrefixBoxMap()byte[])", - "Method(getBoxMapStruct(uint64)(string,uint64,uint64))", - "Method(setBoxMapStruct(uint64,(string,uint64,uint64))bool)", - "Method(boxMapStructLength(uint64)bool)", - "Method(boxMapStructExists(uint64)bool)", "Method(getBoxRef()address)", - "Method(setBoxRef(string)void)", - "Method(deleteBoxRef(string)void)", + "Method(boxMapExists(uint64)bool)", "Method(maybeBoxRef(string)(byte[],bool))", + "Method(setBox(uint64)void)", + "Method(setBoxString(string)void)", + "Method(setBoxDynamicBytes(byte[])void)", + "Method(setBoxMap(uint64,string)void)", + "Method(setBoxRef(string)void)", + "Method(boxMapLength(uint64)uint64)", "Method(lengthBoxRef(string)uint64)", + "Method(deleteBox()void)", + "Method(deleteBoxMap(uint64)void)", + "Method(deleteBoxRef(string)void)", "Method(extractBoxRef(string)void)", + "Method(getBoxMapStruct(uint64)(string,uint64,uint64))", + "Method(boxMapStructExists(uint64)bool)", + "Method(setBoxMapStruct(uint64,(string,uint64,uint64))bool)", + "Method(boxMapStructLength(uint64)bool)", "Method(arc4Box(string)uint8[4])" ] }, @@ -122,35 +122,35 @@ "stack_out": [ "Method(getBox()uint64)", "Method(valueBox()uint64)", - "Method(setBox(uint64)void)", - "Method(setBoxString(string)void)", - "Method(setBoxDynamicBytes(byte[])void)", - "Method(deleteBox()void)", "Method(maybeBox()(uint64,bool))", "Method(getBoxMap(uint64)string)", "Method(getBoxMapWithDefault(uint64)string)", - "Method(setBoxMap(uint64,string)void)", - "Method(deleteBoxMap(uint64)void)", "Method(maybeBoxMap(uint64)(string,bool))", - "Method(boxMapLength(uint64)uint64)", - "Method(boxMapExists(uint64)bool)", "Method(keyPrefixBoxMap()byte[])", - "Method(getBoxMapStruct(uint64)(string,uint64,uint64))", - "Method(setBoxMapStruct(uint64,(string,uint64,uint64))bool)", - "Method(boxMapStructLength(uint64)bool)", - "Method(boxMapStructExists(uint64)bool)", "Method(getBoxRef()address)", - "Method(setBoxRef(string)void)", - "Method(deleteBoxRef(string)void)", + "Method(boxMapExists(uint64)bool)", "Method(maybeBoxRef(string)(byte[],bool))", + "Method(setBox(uint64)void)", + "Method(setBoxString(string)void)", + "Method(setBoxDynamicBytes(byte[])void)", + "Method(setBoxMap(uint64,string)void)", + "Method(setBoxRef(string)void)", + "Method(boxMapLength(uint64)uint64)", "Method(lengthBoxRef(string)uint64)", + "Method(deleteBox()void)", + "Method(deleteBoxMap(uint64)void)", + "Method(deleteBoxRef(string)void)", "Method(extractBoxRef(string)void)", + "Method(getBoxMapStruct(uint64)(string,uint64,uint64))", + "Method(boxMapStructExists(uint64)bool)", + "Method(setBoxMapStruct(uint64,(string,uint64,uint64))bool)", + "Method(boxMapStructLength(uint64)bool)", "Method(arc4Box(string)uint8[4])", "tmp%2#0" ] }, "215": { - "op": "match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28", + "op": "match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28", "stack_out": [] }, "269": { @@ -280,7 +280,7 @@ "stack_out": [] }, "293": { - "block": "main_extractBoxRef_route@27", + "block": "main_boxMapStructLength_route@27", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ @@ -320,6 +320,15 @@ }, "300": { "op": "txna ApplicationArgs 1", + "defined_out": [ + "reinterpret_bytes[8]%11#0" + ], + "stack_out": [ + "reinterpret_bytes[8]%11#0" + ] + }, + "303": { + "op": "btoi", "defined_out": [ "tmp%147#0" ], @@ -327,8 +336,77 @@ "tmp%147#0" ] }, - "303": { - "op": "extract 2 0", + "304": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapStructLength", + "op": "callsub boxMapStructLength", + "defined_out": [ + "to_encode%10#0" + ], + "stack_out": [ + "to_encode%10#0" + ] + }, + "307": { + "op": "bytec_1 // 0x00", + "defined_out": [ + "0x00", + "to_encode%10#0" + ], + "stack_out": [ + "to_encode%10#0", + "0x00" + ] + }, + "308": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "0x00", + "to_encode%10#0" + ], + "stack_out": [ + "to_encode%10#0", + "0x00", + "0" + ] + }, + "309": { + "op": "uncover 2", + "stack_out": [ + "0x00", + "0", + "to_encode%10#0" + ] + }, + "311": { + "op": "setbit", + "defined_out": [ + "encoded_bool%6#0" + ], + "stack_out": [ + "encoded_bool%6#0" + ] + }, + "312": { + "op": "bytec_0 // 0x151f7c75", + "defined_out": [ + "0x151f7c75", + "encoded_bool%6#0" + ], + "stack_out": [ + "encoded_bool%6#0", + "0x151f7c75" + ] + }, + "313": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "encoded_bool%6#0" + ] + }, + "314": { + "op": "concat", "defined_out": [ "tmp%148#0" ], @@ -336,12 +414,11 @@ "tmp%148#0" ] }, - "306": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.extractBoxRef", - "op": "callsub extractBoxRef", + "315": { + "op": "log", "stack_out": [] }, - "309": { + "316": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -350,12 +427,12 @@ "tmp%0#0" ] }, - "310": { + "317": { "op": "return", "stack_out": [] }, - "311": { - "block": "main_lengthBoxRef_route@26", + "318": { + "block": "main_setBoxMapStruct_route@26", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ @@ -365,7 +442,7 @@ "tmp%136#0" ] }, - "313": { + "320": { "op": "!", "defined_out": [ "tmp%137#0" @@ -374,12 +451,12 @@ "tmp%137#0" ] }, - "314": { + "321": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "315": { + "322": { "op": "txn ApplicationID", "defined_out": [ "tmp%138#0" @@ -388,13 +465,22 @@ "tmp%138#0" ] }, - "317": { + "324": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "318": { + "325": { "op": "txna ApplicationArgs 1", + "defined_out": [ + "reinterpret_bytes[8]%10#0" + ], + "stack_out": [ + "reinterpret_bytes[8]%10#0" + ] + }, + "328": { + "op": "btoi", "defined_out": [ "tmp%140#0" ], @@ -402,53 +488,87 @@ "tmp%140#0" ] }, - "321": { - "op": "extract 2 0", + "329": { + "op": "txna ApplicationArgs 2", "defined_out": [ + "tmp%140#0", "tmp%141#0" ], "stack_out": [ + "tmp%140#0", "tmp%141#0" ] }, - "324": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.lengthBoxRef", - "op": "callsub lengthBoxRef", + "332": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxMapStruct", + "op": "callsub setBoxMapStruct", "defined_out": [ - "to_encode%10#0" + "to_encode%9#0" ], "stack_out": [ - "to_encode%10#0" + "to_encode%9#0" ] }, - "327": { - "op": "itob", + "335": { + "op": "bytec_1 // 0x00", "defined_out": [ - "val_as_bytes%4#0" + "0x00", + "to_encode%9#0" ], "stack_out": [ - "val_as_bytes%4#0" + "to_encode%9#0", + "0x00" ] }, - "328": { + "336": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "0x00", + "to_encode%9#0" + ], + "stack_out": [ + "to_encode%9#0", + "0x00", + "0" + ] + }, + "337": { + "op": "uncover 2", + "stack_out": [ + "0x00", + "0", + "to_encode%9#0" + ] + }, + "339": { + "op": "setbit", + "defined_out": [ + "encoded_bool%5#0" + ], + "stack_out": [ + "encoded_bool%5#0" + ] + }, + "340": { "op": "bytec_0 // 0x151f7c75", "defined_out": [ "0x151f7c75", - "val_as_bytes%4#0" + "encoded_bool%5#0" ], "stack_out": [ - "val_as_bytes%4#0", + "encoded_bool%5#0", "0x151f7c75" ] }, - "329": { + "341": { "op": "swap", "stack_out": [ "0x151f7c75", - "val_as_bytes%4#0" + "encoded_bool%5#0" ] }, - "330": { + "342": { "op": "concat", "defined_out": [ "tmp%142#0" @@ -457,11 +577,11 @@ "tmp%142#0" ] }, - "331": { + "343": { "op": "log", "stack_out": [] }, - "332": { + "344": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -470,60 +590,60 @@ "tmp%0#0" ] }, - "333": { + "345": { "op": "return", "stack_out": [] }, - "334": { - "block": "main_maybeBoxRef_route@25", + "346": { + "block": "main_boxMapStructExists_route@25", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%129#0" + "tmp%130#0" ], "stack_out": [ - "tmp%129#0" + "tmp%130#0" ] }, - "336": { + "348": { "op": "!", "defined_out": [ - "tmp%130#0" + "tmp%131#0" ], "stack_out": [ - "tmp%130#0" + "tmp%131#0" ] }, - "337": { + "349": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "338": { + "350": { "op": "txn ApplicationID", "defined_out": [ - "tmp%131#0" + "tmp%132#0" ], "stack_out": [ - "tmp%131#0" + "tmp%132#0" ] }, - "340": { + "352": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "341": { + "353": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%133#0" + "reinterpret_bytes[8]%9#0" ], "stack_out": [ - "tmp%133#0" + "reinterpret_bytes[8]%9#0" ] }, - "344": { - "op": "extract 2 0", + "356": { + "op": "btoi", "defined_out": [ "tmp%134#0" ], @@ -531,99 +651,24 @@ "tmp%134#0" ] }, - "347": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.maybeBoxRef", - "op": "callsub maybeBoxRef", + "357": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapStructExists", + "op": "callsub boxMapStructExists", "defined_out": [ - "elements_to_encode%4#0", - "elements_to_encode%5#0" + "to_encode%8#0" ], "stack_out": [ - "elements_to_encode%4#0", - "elements_to_encode%5#0" + "to_encode%8#0" ] }, - "350": { - "op": "dig 1", - "defined_out": [ - "elements_to_encode%4#0", - "elements_to_encode%4#0 (copy)", - "elements_to_encode%5#0" - ], - "stack_out": [ - "elements_to_encode%4#0", - "elements_to_encode%5#0", - "elements_to_encode%4#0 (copy)" - ] - }, - "352": { - "op": "len", - "defined_out": [ - "elements_to_encode%4#0", - "elements_to_encode%5#0", - "length%4#0" - ], - "stack_out": [ - "elements_to_encode%4#0", - "elements_to_encode%5#0", - "length%4#0" - ] - }, - "353": { - "op": "itob", - "defined_out": [ - "as_bytes%5#0", - "elements_to_encode%4#0", - "elements_to_encode%5#0" - ], - "stack_out": [ - "elements_to_encode%4#0", - "elements_to_encode%5#0", - "as_bytes%5#0" - ] - }, - "354": { - "op": "extract 6 2", - "defined_out": [ - "elements_to_encode%4#0", - "elements_to_encode%5#0", - "length_uint16%4#0" - ], - "stack_out": [ - "elements_to_encode%4#0", - "elements_to_encode%5#0", - "length_uint16%4#0" - ] - }, - "357": { - "op": "uncover 2", - "stack_out": [ - "elements_to_encode%5#0", - "length_uint16%4#0", - "elements_to_encode%4#0" - ] - }, - "359": { - "op": "concat", - "defined_out": [ - "elements_to_encode%5#0", - "encoded_value%4#0" - ], - "stack_out": [ - "elements_to_encode%5#0", - "encoded_value%4#0" - ] - }, - "360": { - "op": "bytec_1 // 0x00", + "360": { + "op": "bytec_1 // 0x00", "defined_out": [ "0x00", - "elements_to_encode%5#0", - "encoded_value%4#0" + "to_encode%8#0" ], "stack_out": [ - "elements_to_encode%5#0", - "encoded_value%4#0", + "to_encode%8#0", "0x00" ] }, @@ -632,103 +677,50 @@ "defined_out": [ "0", "0x00", - "elements_to_encode%5#0", - "encoded_value%4#0" + "to_encode%8#0" ], "stack_out": [ - "elements_to_encode%5#0", - "encoded_value%4#0", + "to_encode%8#0", "0x00", "0" ] }, "362": { - "op": "uncover 3", + "op": "uncover 2", "stack_out": [ - "encoded_value%4#0", "0x00", "0", - "elements_to_encode%5#0" + "to_encode%8#0" ] }, "364": { "op": "setbit", "defined_out": [ - "encoded_bool%6#0", - "encoded_value%4#0" + "encoded_bool%4#0" ], "stack_out": [ - "encoded_value%4#0", - "encoded_bool%6#0" + "encoded_bool%4#0" ] }, "365": { - "op": "bytec 9 // 0x0003", - "defined_out": [ - "0x0003", - "encoded_bool%6#0", - "encoded_value%4#0" - ], - "stack_out": [ - "encoded_value%4#0", - "encoded_bool%6#0", - "0x0003" - ] - }, - "367": { - "op": "swap", - "stack_out": [ - "encoded_value%4#0", - "0x0003", - "encoded_bool%6#0" - ] - }, - "368": { - "op": "concat", - "defined_out": [ - "encoded_tuple_buffer%9#0", - "encoded_value%4#0" - ], - "stack_out": [ - "encoded_value%4#0", - "encoded_tuple_buffer%9#0" - ] - }, - "369": { - "op": "swap", - "stack_out": [ - "encoded_tuple_buffer%9#0", - "encoded_value%4#0" - ] - }, - "370": { - "op": "concat", - "defined_out": [ - "encoded_tuple_buffer%10#0" - ], - "stack_out": [ - "encoded_tuple_buffer%10#0" - ] - }, - "371": { "op": "bytec_0 // 0x151f7c75", "defined_out": [ "0x151f7c75", - "encoded_tuple_buffer%10#0" + "encoded_bool%4#0" ], "stack_out": [ - "encoded_tuple_buffer%10#0", + "encoded_bool%4#0", "0x151f7c75" ] }, - "372": { + "366": { "op": "swap", "stack_out": [ "0x151f7c75", - "encoded_tuple_buffer%10#0" + "encoded_bool%4#0" ] }, - "373": { + "367": { "op": "concat", "defined_out": [ "tmp%135#0" @@ -737,11 +729,11 @@ "tmp%135#0" ] }, - "374": { + "368": { "op": "log", "stack_out": [] }, - "375": { + "369": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -750,12 +742,12 @@ "tmp%0#0" ] }, - "376": { + "370": { "op": "return", "stack_out": [] }, - "377": { - "block": "main_deleteBoxRef_route@24", + "371": { + "block": "main_getBoxMapStruct_route@24", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ @@ -765,7 +757,7 @@ "tmp%123#0" ] }, - "379": { + "373": { "op": "!", "defined_out": [ "tmp%124#0" @@ -774,12 +766,12 @@ "tmp%124#0" ] }, - "380": { + "374": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "381": { + "375": { "op": "txn ApplicationID", "defined_out": [ "tmp%125#0" @@ -788,13 +780,22 @@ "tmp%125#0" ] }, - "383": { + "377": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "384": { + "378": { "op": "txna ApplicationArgs 1", + "defined_out": [ + "reinterpret_bytes[8]%8#0" + ], + "stack_out": [ + "reinterpret_bytes[8]%8#0" + ] + }, + "381": { + "op": "btoi", "defined_out": [ "tmp%127#0" ], @@ -802,8 +803,9 @@ "tmp%127#0" ] }, - "387": { - "op": "extract 2 0", + "382": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxMapStruct", + "op": "callsub getBoxMapStruct", "defined_out": [ "tmp%128#0" ], @@ -811,12 +813,38 @@ "tmp%128#0" ] }, - "390": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.deleteBoxRef", - "op": "callsub deleteBoxRef", + "385": { + "op": "bytec_0 // 0x151f7c75", + "defined_out": [ + "0x151f7c75", + "tmp%128#0" + ], + "stack_out": [ + "tmp%128#0", + "0x151f7c75" + ] + }, + "386": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "tmp%128#0" + ] + }, + "387": { + "op": "concat", + "defined_out": [ + "tmp%129#0" + ], + "stack_out": [ + "tmp%129#0" + ] + }, + "388": { + "op": "log", "stack_out": [] }, - "393": { + "389": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -825,12 +853,12 @@ "tmp%0#0" ] }, - "394": { + "390": { "op": "return", "stack_out": [] }, - "395": { - "block": "main_setBoxRef_route@23", + "391": { + "block": "main_extractBoxRef_route@23", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ @@ -840,7 +868,7 @@ "tmp%117#0" ] }, - "397": { + "393": { "op": "!", "defined_out": [ "tmp%118#0" @@ -849,12 +877,12 @@ "tmp%118#0" ] }, - "398": { + "394": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "399": { + "395": { "op": "txn ApplicationID", "defined_out": [ "tmp%119#0" @@ -863,12 +891,12 @@ "tmp%119#0" ] }, - "401": { + "397": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "402": { + "398": { "op": "txna ApplicationArgs 1", "defined_out": [ "tmp%121#0" @@ -877,7 +905,7 @@ "tmp%121#0" ] }, - "405": { + "401": { "op": "extract 2 0", "defined_out": [ "tmp%122#0" @@ -886,12 +914,12 @@ "tmp%122#0" ] }, - "408": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxRef", - "op": "callsub setBoxRef", + "404": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.extractBoxRef", + "op": "callsub extractBoxRef", "stack_out": [] }, - "411": { + "407": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -900,12 +928,12 @@ "tmp%0#0" ] }, - "412": { + "408": { "op": "return", "stack_out": [] }, - "413": { - "block": "main_getBoxRef_route@22", + "409": { + "block": "main_deleteBoxRef_route@22", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ @@ -915,7 +943,7 @@ "tmp%111#0" ] }, - "415": { + "411": { "op": "!", "defined_out": [ "tmp%112#0" @@ -924,12 +952,12 @@ "tmp%112#0" ] }, - "416": { + "412": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "417": { + "413": { "op": "txn ApplicationID", "defined_out": [ "tmp%113#0" @@ -938,14 +966,13 @@ "tmp%113#0" ] }, - "419": { + "415": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "420": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxRef", - "op": "callsub getBoxRef", + "416": { + "op": "txna ApplicationArgs 1", "defined_out": [ "tmp%115#0" ], @@ -953,190 +980,152 @@ "tmp%115#0" ] }, - "423": { - "op": "bytec_0 // 0x151f7c75", + "419": { + "op": "extract 2 0", "defined_out": [ - "0x151f7c75", - "tmp%115#0" + "tmp%116#0" ], "stack_out": [ - "tmp%115#0", - "0x151f7c75" + "tmp%116#0" ] }, - "424": { - "op": "swap", - "stack_out": [ - "0x151f7c75", - "tmp%115#0" - ] + "422": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.deleteBoxRef", + "op": "callsub deleteBoxRef", + "stack_out": [] }, "425": { - "op": "concat", + "op": "intc_0 // 1", "defined_out": [ - "tmp%116#0" + "tmp%0#0" ], "stack_out": [ - "tmp%116#0" + "tmp%0#0" ] }, "426": { - "op": "log", - "stack_out": [] - }, - "427": { - "op": "intc_0 // 1", - "defined_out": [ - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0" - ] - }, - "428": { "op": "return", "stack_out": [] }, - "429": { - "block": "main_boxMapStructExists_route@21", + "427": { + "block": "main_deleteBoxMap_route@21", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%105#0" + "tmp%106#0" ], "stack_out": [ - "tmp%105#0" + "tmp%106#0" ] }, - "431": { + "429": { "op": "!", "defined_out": [ - "tmp%106#0" + "tmp%107#0" ], "stack_out": [ - "tmp%106#0" + "tmp%107#0" ] }, - "432": { + "430": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "433": { + "431": { "op": "txn ApplicationID", "defined_out": [ - "tmp%107#0" + "tmp%108#0" ], "stack_out": [ - "tmp%107#0" + "tmp%108#0" ] }, - "435": { + "433": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "436": { + "434": { "op": "txna ApplicationArgs 1", "defined_out": [ - "reinterpret_bytes[8]%11#0" + "reinterpret_bytes[8]%7#0" ], "stack_out": [ - "reinterpret_bytes[8]%11#0" + "reinterpret_bytes[8]%7#0" ] }, - "439": { + "437": { "op": "btoi", "defined_out": [ - "tmp%109#0" + "tmp%110#0" ], "stack_out": [ - "tmp%109#0" + "tmp%110#0" ] }, - "440": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapStructExists", - "op": "callsub boxMapStructExists", + "438": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.deleteBoxMap", + "op": "callsub deleteBoxMap", + "stack_out": [] + }, + "441": { + "op": "intc_0 // 1", "defined_out": [ - "to_encode%9#0" + "tmp%0#0" ], "stack_out": [ - "to_encode%9#0" + "tmp%0#0" ] }, + "442": { + "op": "return", + "stack_out": [] + }, "443": { - "op": "bytec_1 // 0x00", + "block": "main_deleteBox_route@20", + "stack_in": [], + "op": "txn OnCompletion", "defined_out": [ - "0x00", - "to_encode%9#0" + "tmp%102#0" ], "stack_out": [ - "to_encode%9#0", - "0x00" + "tmp%102#0" ] }, - "444": { - "op": "intc_1 // 0", + "445": { + "op": "!", "defined_out": [ - "0", - "0x00", - "to_encode%9#0" + "tmp%103#0" ], "stack_out": [ - "to_encode%9#0", - "0x00", - "0" + "tmp%103#0" ] }, - "445": { - "op": "uncover 2", - "stack_out": [ - "0x00", - "0", - "to_encode%9#0" - ] + "446": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", + "stack_out": [] }, "447": { - "op": "setbit", - "defined_out": [ - "encoded_bool%5#0" - ], - "stack_out": [ - "encoded_bool%5#0" - ] - }, - "448": { - "op": "bytec_0 // 0x151f7c75", + "op": "txn ApplicationID", "defined_out": [ - "0x151f7c75", - "encoded_bool%5#0" + "tmp%104#0" ], "stack_out": [ - "encoded_bool%5#0", - "0x151f7c75" + "tmp%104#0" ] }, "449": { - "op": "swap", - "stack_out": [ - "0x151f7c75", - "encoded_bool%5#0" - ] + "error": "can only call when not creating", + "op": "assert // can only call when not creating", + "stack_out": [] }, "450": { - "op": "concat", - "defined_out": [ - "tmp%110#0" - ], - "stack_out": [ - "tmp%110#0" - ] - }, - "451": { - "op": "log", - "stack_out": [] + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.deleteBox", + "op": "callsub deleteBox" }, - "452": { + "453": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -1145,150 +1134,118 @@ "tmp%0#0" ] }, - "453": { + "454": { "op": "return", "stack_out": [] }, - "454": { - "block": "main_boxMapStructLength_route@20", + "455": { + "block": "main_lengthBoxRef_route@19", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%99#0" + "tmp%95#0" ], "stack_out": [ - "tmp%99#0" + "tmp%95#0" ] }, - "456": { + "457": { "op": "!", "defined_out": [ - "tmp%100#0" + "tmp%96#0" ], "stack_out": [ - "tmp%100#0" + "tmp%96#0" ] }, - "457": { + "458": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "458": { + "459": { "op": "txn ApplicationID", "defined_out": [ - "tmp%101#0" + "tmp%97#0" ], "stack_out": [ - "tmp%101#0" + "tmp%97#0" ] }, - "460": { + "461": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "461": { + "462": { "op": "txna ApplicationArgs 1", "defined_out": [ - "reinterpret_bytes[8]%10#0" - ], - "stack_out": [ - "reinterpret_bytes[8]%10#0" - ] - }, - "464": { - "op": "btoi", - "defined_out": [ - "tmp%103#0" + "tmp%99#0" ], "stack_out": [ - "tmp%103#0" + "tmp%99#0" ] }, "465": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapStructLength", - "op": "callsub boxMapStructLength", + "op": "extract 2 0", "defined_out": [ - "to_encode%8#0" + "tmp%100#0" ], "stack_out": [ - "to_encode%8#0" + "tmp%100#0" ] }, "468": { - "op": "bytec_1 // 0x00", + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.lengthBoxRef", + "op": "callsub lengthBoxRef", "defined_out": [ - "0x00", - "to_encode%8#0" + "to_encode%7#0" ], "stack_out": [ - "to_encode%8#0", - "0x00" + "to_encode%7#0" ] }, - "469": { - "op": "intc_1 // 0", + "471": { + "op": "itob", "defined_out": [ - "0", - "0x00", - "to_encode%8#0" + "val_as_bytes%4#0" ], "stack_out": [ - "to_encode%8#0", - "0x00", - "0" - ] - }, - "470": { - "op": "uncover 2", - "stack_out": [ - "0x00", - "0", - "to_encode%8#0" + "val_as_bytes%4#0" ] }, "472": { - "op": "setbit", - "defined_out": [ - "encoded_bool%4#0" - ], - "stack_out": [ - "encoded_bool%4#0" - ] - }, - "473": { "op": "bytec_0 // 0x151f7c75", "defined_out": [ "0x151f7c75", - "encoded_bool%4#0" + "val_as_bytes%4#0" ], "stack_out": [ - "encoded_bool%4#0", + "val_as_bytes%4#0", "0x151f7c75" ] }, - "474": { + "473": { "op": "swap", "stack_out": [ "0x151f7c75", - "encoded_bool%4#0" + "val_as_bytes%4#0" ] }, - "475": { + "474": { "op": "concat", "defined_out": [ - "tmp%104#0" + "tmp%101#0" ], "stack_out": [ - "tmp%104#0" + "tmp%101#0" ] }, - "476": { + "475": { "op": "log", "stack_out": [] }, - "477": { + "476": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -1297,161 +1254,193 @@ "tmp%0#0" ] }, - "478": { + "477": { "op": "return", "stack_out": [] }, - "479": { - "block": "main_setBoxMapStruct_route@19", + "478": { + "block": "main_boxMapLength_route@18", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%92#0" + "tmp%89#0" ], "stack_out": [ - "tmp%92#0" + "tmp%89#0" ] }, - "481": { + "480": { "op": "!", "defined_out": [ - "tmp%93#0" + "tmp%90#0" ], "stack_out": [ - "tmp%93#0" + "tmp%90#0" ] }, - "482": { + "481": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "483": { + "482": { "op": "txn ApplicationID", "defined_out": [ - "tmp%94#0" + "tmp%91#0" ], "stack_out": [ - "tmp%94#0" + "tmp%91#0" ] }, - "485": { + "484": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "486": { + "485": { "op": "txna ApplicationArgs 1", "defined_out": [ - "reinterpret_bytes[8]%9#0" + "reinterpret_bytes[8]%6#0" ], "stack_out": [ - "reinterpret_bytes[8]%9#0" + "reinterpret_bytes[8]%6#0" ] }, - "489": { + "488": { "op": "btoi", "defined_out": [ - "tmp%96#0" + "tmp%93#0" ], "stack_out": [ - "tmp%96#0" + "tmp%93#0" ] }, - "490": { - "op": "txna ApplicationArgs 2", + "489": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapLength", + "op": "callsub boxMapLength", "defined_out": [ - "tmp%96#0", - "tmp%97#0" + "to_encode%6#0" ], "stack_out": [ - "tmp%96#0", - "tmp%97#0" + "to_encode%6#0" ] }, - "493": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxMapStruct", - "op": "callsub setBoxMapStruct", + "492": { + "op": "itob", "defined_out": [ - "to_encode%7#0" + "val_as_bytes%3#0" ], "stack_out": [ - "to_encode%7#0" + "val_as_bytes%3#0" ] }, - "496": { - "op": "bytec_1 // 0x00", + "493": { + "op": "bytec_0 // 0x151f7c75", "defined_out": [ - "0x00", - "to_encode%7#0" + "0x151f7c75", + "val_as_bytes%3#0" ], "stack_out": [ - "to_encode%7#0", - "0x00" + "val_as_bytes%3#0", + "0x151f7c75" ] }, - "497": { - "op": "intc_1 // 0", + "494": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "val_as_bytes%3#0" + ] + }, + "495": { + "op": "concat", "defined_out": [ - "0", - "0x00", - "to_encode%7#0" + "tmp%94#0" ], "stack_out": [ - "to_encode%7#0", - "0x00", - "0" + "tmp%94#0" ] }, - "498": { - "op": "uncover 2", + "496": { + "op": "log", + "stack_out": [] + }, + "497": { + "op": "intc_0 // 1", + "defined_out": [ + "tmp%0#0" + ], "stack_out": [ - "0x00", - "0", - "to_encode%7#0" + "tmp%0#0" ] }, - "500": { - "op": "setbit", + "498": { + "op": "return", + "stack_out": [] + }, + "499": { + "block": "main_setBoxRef_route@17", + "stack_in": [], + "op": "txn OnCompletion", "defined_out": [ - "encoded_bool%3#0" + "tmp%83#0" ], "stack_out": [ - "encoded_bool%3#0" + "tmp%83#0" ] }, "501": { - "op": "bytec_0 // 0x151f7c75", + "op": "!", "defined_out": [ - "0x151f7c75", - "encoded_bool%3#0" + "tmp%84#0" ], "stack_out": [ - "encoded_bool%3#0", - "0x151f7c75" + "tmp%84#0" ] }, "502": { - "op": "swap", + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", + "stack_out": [] + }, + "503": { + "op": "txn ApplicationID", + "defined_out": [ + "tmp%85#0" + ], "stack_out": [ - "0x151f7c75", - "encoded_bool%3#0" + "tmp%85#0" ] }, - "503": { - "op": "concat", + "505": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", + "stack_out": [] + }, + "506": { + "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%98#0" + "tmp%87#0" ], "stack_out": [ - "tmp%98#0" + "tmp%87#0" ] }, - "504": { - "op": "log", + "509": { + "op": "extract 2 0", + "defined_out": [ + "tmp%88#0" + ], + "stack_out": [ + "tmp%88#0" + ] + }, + "512": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxRef", + "op": "callsub setBoxRef", "stack_out": [] }, - "505": { + "515": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -1460,109 +1449,95 @@ "tmp%0#0" ] }, - "506": { + "516": { "op": "return", "stack_out": [] }, - "507": { - "block": "main_getBoxMapStruct_route@18", + "517": { + "block": "main_setBoxMap_route@16", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%85#0" + "tmp%76#0" ], "stack_out": [ - "tmp%85#0" + "tmp%76#0" ] }, - "509": { + "519": { "op": "!", "defined_out": [ - "tmp%86#0" + "tmp%77#0" ], "stack_out": [ - "tmp%86#0" + "tmp%77#0" ] }, - "510": { + "520": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "511": { + "521": { "op": "txn ApplicationID", "defined_out": [ - "tmp%87#0" + "tmp%78#0" ], "stack_out": [ - "tmp%87#0" + "tmp%78#0" ] }, - "513": { + "523": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "514": { + "524": { "op": "txna ApplicationArgs 1", "defined_out": [ - "reinterpret_bytes[8]%8#0" + "reinterpret_bytes[8]%5#0" ], "stack_out": [ - "reinterpret_bytes[8]%8#0" + "reinterpret_bytes[8]%5#0" ] }, - "517": { + "527": { "op": "btoi", "defined_out": [ - "tmp%89#0" - ], - "stack_out": [ - "tmp%89#0" - ] - }, - "518": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxMapStruct", - "op": "callsub getBoxMapStruct", - "defined_out": [ - "tmp%90#0" + "tmp%80#0" ], "stack_out": [ - "tmp%90#0" + "tmp%80#0" ] }, - "521": { - "op": "bytec_0 // 0x151f7c75", + "528": { + "op": "txna ApplicationArgs 2", "defined_out": [ - "0x151f7c75", - "tmp%90#0" + "tmp%80#0", + "tmp%81#0" ], "stack_out": [ - "tmp%90#0", - "0x151f7c75" - ] - }, - "522": { - "op": "swap", - "stack_out": [ - "0x151f7c75", - "tmp%90#0" + "tmp%80#0", + "tmp%81#0" ] }, - "523": { - "op": "concat", + "531": { + "op": "extract 2 0", "defined_out": [ - "tmp%91#0" + "tmp%80#0", + "tmp%82#0" ], "stack_out": [ - "tmp%91#0" + "tmp%80#0", + "tmp%82#0" ] }, - "524": { - "op": "log", + "534": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxMap", + "op": "callsub setBoxMap", "stack_out": [] }, - "525": { + "537": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -1571,63 +1546,64 @@ "tmp%0#0" ] }, - "526": { + "538": { "op": "return", "stack_out": [] }, - "527": { - "block": "main_keyPrefixBoxMap_route@17", + "539": { + "block": "main_setBoxDynamicBytes_route@15", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%80#0" + "tmp%71#0" ], "stack_out": [ - "tmp%80#0" + "tmp%71#0" ] }, - "529": { + "541": { "op": "!", "defined_out": [ - "tmp%81#0" + "tmp%72#0" ], "stack_out": [ - "tmp%81#0" + "tmp%72#0" ] }, - "530": { + "542": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "531": { + "543": { "op": "txn ApplicationID", "defined_out": [ - "tmp%82#0" + "tmp%73#0" ], "stack_out": [ - "tmp%82#0" + "tmp%73#0" ] }, - "533": { + "545": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "534": { - "op": "pushbytes 0x151f7c750006626f784d6170", + "546": { + "op": "txna ApplicationArgs 1", "defined_out": [ - "0x151f7c750006626f784d6170" + "tmp%75#0" ], "stack_out": [ - "0x151f7c750006626f784d6170" + "tmp%75#0" ] }, - "548": { - "op": "log", + "549": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxDynamicBytes", + "op": "callsub setBoxDynamicBytes", "stack_out": [] }, - "549": { + "552": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -1636,150 +1612,148 @@ "tmp%0#0" ] }, - "550": { + "553": { "op": "return", "stack_out": [] }, - "551": { - "block": "main_boxMapExists_route@16", + "554": { + "block": "main_setBoxString_route@14", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%74#0" + "tmp%65#0" ], "stack_out": [ - "tmp%74#0" + "tmp%65#0" ] }, - "553": { + "556": { "op": "!", "defined_out": [ - "tmp%75#0" + "tmp%66#0" ], "stack_out": [ - "tmp%75#0" + "tmp%66#0" ] }, - "554": { + "557": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "555": { + "558": { "op": "txn ApplicationID", "defined_out": [ - "tmp%76#0" + "tmp%67#0" ], "stack_out": [ - "tmp%76#0" + "tmp%67#0" ] }, - "557": { + "560": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "558": { + "561": { "op": "txna ApplicationArgs 1", "defined_out": [ - "reinterpret_bytes[8]%7#0" + "tmp%69#0" ], "stack_out": [ - "reinterpret_bytes[8]%7#0" + "tmp%69#0" ] }, - "561": { - "op": "btoi", + "564": { + "op": "extract 2 0", "defined_out": [ - "tmp%78#0" + "tmp%70#0" ], "stack_out": [ - "tmp%78#0" + "tmp%70#0" ] }, - "562": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapExists", - "op": "callsub boxMapExists", + "567": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxString", + "op": "callsub setBoxString", + "stack_out": [] + }, + "570": { + "op": "intc_0 // 1", "defined_out": [ - "to_encode%5#0" + "tmp%0#0" ], "stack_out": [ - "to_encode%5#0" + "tmp%0#0" ] }, - "565": { - "op": "bytec_1 // 0x00", + "571": { + "op": "return", + "stack_out": [] + }, + "572": { + "block": "main_setBox_route@13", + "stack_in": [], + "op": "txn OnCompletion", "defined_out": [ - "0x00", - "to_encode%5#0" + "tmp%60#0" ], "stack_out": [ - "to_encode%5#0", - "0x00" + "tmp%60#0" ] }, - "566": { - "op": "intc_1 // 0", + "574": { + "op": "!", "defined_out": [ - "0", - "0x00", - "to_encode%5#0" + "tmp%61#0" ], "stack_out": [ - "to_encode%5#0", - "0x00", - "0" + "tmp%61#0" ] }, - "567": { - "op": "uncover 2", - "stack_out": [ - "0x00", - "0", - "to_encode%5#0" - ] + "575": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", + "stack_out": [] }, - "569": { - "op": "setbit", + "576": { + "op": "txn ApplicationID", "defined_out": [ - "encoded_bool%2#0" + "tmp%62#0" ], "stack_out": [ - "encoded_bool%2#0" + "tmp%62#0" ] }, - "570": { - "op": "bytec_0 // 0x151f7c75", + "578": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", + "stack_out": [] + }, + "579": { + "op": "txna ApplicationArgs 1", "defined_out": [ - "0x151f7c75", - "encoded_bool%2#0" + "reinterpret_bytes[8]%4#0" ], "stack_out": [ - "encoded_bool%2#0", - "0x151f7c75" - ] - }, - "571": { - "op": "swap", - "stack_out": [ - "0x151f7c75", - "encoded_bool%2#0" + "reinterpret_bytes[8]%4#0" ] }, - "572": { - "op": "concat", + "582": { + "op": "btoi", "defined_out": [ - "tmp%79#0" + "tmp%64#0" ], "stack_out": [ - "tmp%79#0" + "tmp%64#0" ] }, - "573": { - "op": "log", + "583": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBox", + "op": "callsub setBox", "stack_out": [] }, - "574": { + "586": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -1788,398 +1762,430 @@ "tmp%0#0" ] }, - "575": { + "587": { "op": "return", "stack_out": [] }, - "576": { - "block": "main_boxMapLength_route@15", + "588": { + "block": "main_maybeBoxRef_route@12", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%68#0" + "tmp%53#0" ], "stack_out": [ - "tmp%68#0" + "tmp%53#0" ] }, - "578": { + "590": { "op": "!", "defined_out": [ - "tmp%69#0" + "tmp%54#0" ], "stack_out": [ - "tmp%69#0" + "tmp%54#0" ] }, - "579": { + "591": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "580": { + "592": { "op": "txn ApplicationID", "defined_out": [ - "tmp%70#0" + "tmp%55#0" ], "stack_out": [ - "tmp%70#0" + "tmp%55#0" ] }, - "582": { + "594": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "583": { + "595": { "op": "txna ApplicationArgs 1", "defined_out": [ - "reinterpret_bytes[8]%6#0" + "tmp%57#0" ], "stack_out": [ - "reinterpret_bytes[8]%6#0" + "tmp%57#0" ] }, - "586": { - "op": "btoi", + "598": { + "op": "extract 2 0", "defined_out": [ - "tmp%72#0" + "tmp%58#0" ], "stack_out": [ - "tmp%72#0" + "tmp%58#0" ] }, - "587": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapLength", - "op": "callsub boxMapLength", + "601": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.maybeBoxRef", + "op": "callsub maybeBoxRef", "defined_out": [ - "to_encode%4#0" + "elements_to_encode%4#0", + "elements_to_encode%5#0" ], "stack_out": [ - "to_encode%4#0" + "elements_to_encode%4#0", + "elements_to_encode%5#0" ] }, - "590": { - "op": "itob", + "604": { + "op": "dig 1", "defined_out": [ - "val_as_bytes%3#0" + "elements_to_encode%4#0", + "elements_to_encode%4#0 (copy)", + "elements_to_encode%5#0" ], "stack_out": [ - "val_as_bytes%3#0" + "elements_to_encode%4#0", + "elements_to_encode%5#0", + "elements_to_encode%4#0 (copy)" ] }, - "591": { - "op": "bytec_0 // 0x151f7c75", + "606": { + "op": "len", "defined_out": [ - "0x151f7c75", - "val_as_bytes%3#0" + "elements_to_encode%4#0", + "elements_to_encode%5#0", + "length%4#0" ], "stack_out": [ - "val_as_bytes%3#0", - "0x151f7c75" + "elements_to_encode%4#0", + "elements_to_encode%5#0", + "length%4#0" ] }, - "592": { - "op": "swap", + "607": { + "op": "itob", + "defined_out": [ + "as_bytes%5#0", + "elements_to_encode%4#0", + "elements_to_encode%5#0" + ], "stack_out": [ - "0x151f7c75", - "val_as_bytes%3#0" + "elements_to_encode%4#0", + "elements_to_encode%5#0", + "as_bytes%5#0" ] }, - "593": { - "op": "concat", + "608": { + "op": "extract 6 2", "defined_out": [ - "tmp%73#0" + "elements_to_encode%4#0", + "elements_to_encode%5#0", + "length_uint16%4#0" ], "stack_out": [ - "tmp%73#0" + "elements_to_encode%4#0", + "elements_to_encode%5#0", + "length_uint16%4#0" ] }, - "594": { - "op": "log", - "stack_out": [] + "611": { + "op": "uncover 2", + "stack_out": [ + "elements_to_encode%5#0", + "length_uint16%4#0", + "elements_to_encode%4#0" + ] }, - "595": { - "op": "intc_0 // 1", + "613": { + "op": "concat", "defined_out": [ - "tmp%0#0" + "elements_to_encode%5#0", + "encoded_value%4#0" ], "stack_out": [ - "tmp%0#0" + "elements_to_encode%5#0", + "encoded_value%4#0" ] }, - "596": { - "op": "return", - "stack_out": [] - }, - "597": { - "block": "main_maybeBoxMap_route@14", - "stack_in": [], - "op": "txn OnCompletion", + "614": { + "op": "bytec_1 // 0x00", "defined_out": [ - "tmp%62#0" + "0x00", + "elements_to_encode%5#0", + "encoded_value%4#0" ], "stack_out": [ - "tmp%62#0" + "elements_to_encode%5#0", + "encoded_value%4#0", + "0x00" ] }, - "599": { - "op": "!", + "615": { + "op": "intc_1 // 0", "defined_out": [ - "tmp%63#0" + "0", + "0x00", + "elements_to_encode%5#0", + "encoded_value%4#0" ], "stack_out": [ - "tmp%63#0" + "elements_to_encode%5#0", + "encoded_value%4#0", + "0x00", + "0" ] }, - "600": { - "error": "OnCompletion is not NoOp", - "op": "assert // OnCompletion is not NoOp", - "stack_out": [] + "616": { + "op": "uncover 3", + "stack_out": [ + "encoded_value%4#0", + "0x00", + "0", + "elements_to_encode%5#0" + ] }, - "601": { - "op": "txn ApplicationID", + "618": { + "op": "setbit", "defined_out": [ - "tmp%64#0" + "encoded_bool%3#0", + "encoded_value%4#0" ], "stack_out": [ - "tmp%64#0" + "encoded_value%4#0", + "encoded_bool%3#0" ] }, - "603": { - "error": "can only call when not creating", - "op": "assert // can only call when not creating", - "stack_out": [] - }, - "604": { - "op": "txna ApplicationArgs 1", + "619": { + "op": "bytec 9 // 0x0003", "defined_out": [ - "reinterpret_bytes[8]%5#0" + "0x0003", + "encoded_bool%3#0", + "encoded_value%4#0" ], "stack_out": [ - "reinterpret_bytes[8]%5#0" + "encoded_value%4#0", + "encoded_bool%3#0", + "0x0003" ] }, - "607": { - "op": "btoi", - "defined_out": [ - "tmp%66#0" - ], + "621": { + "op": "swap", "stack_out": [ - "tmp%66#0" + "encoded_value%4#0", + "0x0003", + "encoded_bool%3#0" ] }, - "608": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.maybeBoxMap", - "op": "callsub maybeBoxMap", + "622": { + "op": "concat", "defined_out": [ - "elements_to_encode%2#0", - "elements_to_encode%3#0" + "encoded_tuple_buffer%9#0", + "encoded_value%4#0" ], "stack_out": [ - "elements_to_encode%2#0", - "elements_to_encode%3#0" + "encoded_value%4#0", + "encoded_tuple_buffer%9#0" ] }, - "611": { - "op": "dig 1", - "defined_out": [ - "elements_to_encode%2#0", - "elements_to_encode%2#0 (copy)", - "elements_to_encode%3#0" - ], + "623": { + "op": "swap", "stack_out": [ - "elements_to_encode%2#0", - "elements_to_encode%3#0", - "elements_to_encode%2#0 (copy)" + "encoded_tuple_buffer%9#0", + "encoded_value%4#0" ] }, - "613": { - "op": "len", + "624": { + "op": "concat", "defined_out": [ - "elements_to_encode%2#0", - "elements_to_encode%3#0", - "length%2#0" + "encoded_tuple_buffer%10#0" ], "stack_out": [ - "elements_to_encode%2#0", - "elements_to_encode%3#0", - "length%2#0" + "encoded_tuple_buffer%10#0" ] }, - "614": { - "op": "itob", + "625": { + "op": "bytec_0 // 0x151f7c75", "defined_out": [ - "as_bytes%2#0", - "elements_to_encode%2#0", - "elements_to_encode%3#0" + "0x151f7c75", + "encoded_tuple_buffer%10#0" ], "stack_out": [ - "elements_to_encode%2#0", - "elements_to_encode%3#0", - "as_bytes%2#0" + "encoded_tuple_buffer%10#0", + "0x151f7c75" ] }, - "615": { - "op": "extract 6 2", + "626": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "encoded_tuple_buffer%10#0" + ] + }, + "627": { + "op": "concat", "defined_out": [ - "elements_to_encode%2#0", - "elements_to_encode%3#0", - "length_uint16%2#0" + "tmp%59#0" ], "stack_out": [ - "elements_to_encode%2#0", - "elements_to_encode%3#0", - "length_uint16%2#0" + "tmp%59#0" ] }, - "618": { - "op": "uncover 2", + "628": { + "op": "log", + "stack_out": [] + }, + "629": { + "op": "intc_0 // 1", + "defined_out": [ + "tmp%0#0" + ], "stack_out": [ - "elements_to_encode%3#0", - "length_uint16%2#0", - "elements_to_encode%2#0" + "tmp%0#0" ] }, - "620": { - "op": "concat", + "630": { + "op": "return", + "stack_out": [] + }, + "631": { + "block": "main_boxMapExists_route@11", + "stack_in": [], + "op": "txn OnCompletion", "defined_out": [ - "elements_to_encode%3#0", - "encoded_value%2#0" + "tmp%47#0" ], "stack_out": [ - "elements_to_encode%3#0", - "encoded_value%2#0" + "tmp%47#0" ] }, - "621": { - "op": "bytec_1 // 0x00", + "633": { + "op": "!", "defined_out": [ - "0x00", - "elements_to_encode%3#0", - "encoded_value%2#0" + "tmp%48#0" ], "stack_out": [ - "elements_to_encode%3#0", - "encoded_value%2#0", - "0x00" + "tmp%48#0" ] }, - "622": { - "op": "intc_1 // 0", + "634": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", + "stack_out": [] + }, + "635": { + "op": "txn ApplicationID", "defined_out": [ - "0", - "0x00", - "elements_to_encode%3#0", - "encoded_value%2#0" + "tmp%49#0" ], "stack_out": [ - "elements_to_encode%3#0", - "encoded_value%2#0", - "0x00", - "0" + "tmp%49#0" ] }, - "623": { - "op": "uncover 3", + "637": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", + "stack_out": [] + }, + "638": { + "op": "txna ApplicationArgs 1", + "defined_out": [ + "reinterpret_bytes[8]%3#0" + ], "stack_out": [ - "encoded_value%2#0", - "0x00", - "0", - "elements_to_encode%3#0" + "reinterpret_bytes[8]%3#0" ] }, - "625": { - "op": "setbit", + "641": { + "op": "btoi", "defined_out": [ - "encoded_bool%1#0", - "encoded_value%2#0" + "tmp%51#0" ], "stack_out": [ - "encoded_value%2#0", - "encoded_bool%1#0" + "tmp%51#0" ] }, - "626": { - "op": "bytec 9 // 0x0003", + "642": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapExists", + "op": "callsub boxMapExists", "defined_out": [ - "0x0003", - "encoded_bool%1#0", - "encoded_value%2#0" + "to_encode%5#0" ], "stack_out": [ - "encoded_value%2#0", - "encoded_bool%1#0", - "0x0003" + "to_encode%5#0" ] }, - "628": { - "op": "swap", + "645": { + "op": "bytec_1 // 0x00", + "defined_out": [ + "0x00", + "to_encode%5#0" + ], "stack_out": [ - "encoded_value%2#0", - "0x0003", - "encoded_bool%1#0" + "to_encode%5#0", + "0x00" ] }, - "629": { - "op": "concat", + "646": { + "op": "intc_1 // 0", "defined_out": [ - "encoded_tuple_buffer%5#0", - "encoded_value%2#0" + "0", + "0x00", + "to_encode%5#0" ], "stack_out": [ - "encoded_value%2#0", - "encoded_tuple_buffer%5#0" + "to_encode%5#0", + "0x00", + "0" ] }, - "630": { - "op": "swap", + "647": { + "op": "uncover 2", "stack_out": [ - "encoded_tuple_buffer%5#0", - "encoded_value%2#0" + "0x00", + "0", + "to_encode%5#0" ] }, - "631": { - "op": "concat", + "649": { + "op": "setbit", "defined_out": [ - "encoded_tuple_buffer%6#0" + "encoded_bool%2#0" ], "stack_out": [ - "encoded_tuple_buffer%6#0" + "encoded_bool%2#0" ] }, - "632": { + "650": { "op": "bytec_0 // 0x151f7c75", "defined_out": [ "0x151f7c75", - "encoded_tuple_buffer%6#0" + "encoded_bool%2#0" ], "stack_out": [ - "encoded_tuple_buffer%6#0", + "encoded_bool%2#0", "0x151f7c75" ] }, - "633": { + "651": { "op": "swap", "stack_out": [ "0x151f7c75", - "encoded_tuple_buffer%6#0" + "encoded_bool%2#0" ] }, - "634": { + "652": { "op": "concat", "defined_out": [ - "tmp%67#0" + "tmp%52#0" ], "stack_out": [ - "tmp%67#0" + "tmp%52#0" ] }, - "635": { + "653": { "op": "log", "stack_out": [] }, - "636": { + "654": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -2188,73 +2194,91 @@ "tmp%0#0" ] }, - "637": { + "655": { "op": "return", "stack_out": [] }, - "638": { - "block": "main_deleteBoxMap_route@13", + "656": { + "block": "main_getBoxRef_route@10", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%57#0" + "tmp%41#0" ], "stack_out": [ - "tmp%57#0" + "tmp%41#0" ] }, - "640": { + "658": { "op": "!", "defined_out": [ - "tmp%58#0" + "tmp%42#0" ], "stack_out": [ - "tmp%58#0" + "tmp%42#0" ] }, - "641": { + "659": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "642": { + "660": { "op": "txn ApplicationID", "defined_out": [ - "tmp%59#0" + "tmp%43#0" ], "stack_out": [ - "tmp%59#0" + "tmp%43#0" ] }, - "644": { + "662": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "645": { - "op": "txna ApplicationArgs 1", + "663": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxRef", + "op": "callsub getBoxRef", "defined_out": [ - "reinterpret_bytes[8]%4#0" + "tmp%45#0" ], "stack_out": [ - "reinterpret_bytes[8]%4#0" + "tmp%45#0" ] }, - "648": { - "op": "btoi", + "666": { + "op": "bytec_0 // 0x151f7c75", "defined_out": [ - "tmp%61#0" + "0x151f7c75", + "tmp%45#0" ], "stack_out": [ - "tmp%61#0" + "tmp%45#0", + "0x151f7c75" ] }, - "649": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.deleteBoxMap", - "op": "callsub deleteBoxMap", + "667": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "tmp%45#0" + ] + }, + "668": { + "op": "concat", + "defined_out": [ + "tmp%46#0" + ], + "stack_out": [ + "tmp%46#0" + ] + }, + "669": { + "op": "log", "stack_out": [] }, - "652": { + "670": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -2263,95 +2287,63 @@ "tmp%0#0" ] }, - "653": { + "671": { "op": "return", "stack_out": [] }, - "654": { - "block": "main_setBoxMap_route@12", + "672": { + "block": "main_keyPrefixBoxMap_route@9", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%50#0" + "tmp%36#0" ], "stack_out": [ - "tmp%50#0" + "tmp%36#0" ] }, - "656": { + "674": { "op": "!", "defined_out": [ - "tmp%51#0" + "tmp%37#0" ], "stack_out": [ - "tmp%51#0" + "tmp%37#0" ] }, - "657": { + "675": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "658": { + "676": { "op": "txn ApplicationID", "defined_out": [ - "tmp%52#0" + "tmp%38#0" ], "stack_out": [ - "tmp%52#0" + "tmp%38#0" ] }, - "660": { + "678": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "661": { - "op": "txna ApplicationArgs 1", + "679": { + "op": "pushbytes 0x151f7c750006626f784d6170", "defined_out": [ - "reinterpret_bytes[8]%3#0" + "0x151f7c750006626f784d6170" ], "stack_out": [ - "reinterpret_bytes[8]%3#0" + "0x151f7c750006626f784d6170" ] }, - "664": { - "op": "btoi", - "defined_out": [ - "tmp%54#0" - ], - "stack_out": [ - "tmp%54#0" - ] - }, - "665": { - "op": "txna ApplicationArgs 2", - "defined_out": [ - "tmp%54#0", - "tmp%55#0" - ], - "stack_out": [ - "tmp%54#0", - "tmp%55#0" - ] - }, - "668": { - "op": "extract 2 0", - "defined_out": [ - "tmp%54#0", - "tmp%56#0" - ], - "stack_out": [ - "tmp%54#0", - "tmp%56#0" - ] - }, - "671": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxMap", - "op": "callsub setBoxMap", + "693": { + "op": "log", "stack_out": [] }, - "674": { + "694": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -2360,50 +2352,50 @@ "tmp%0#0" ] }, - "675": { + "695": { "op": "return", "stack_out": [] }, - "676": { - "block": "main_getBoxMapWithDefault_route@11", + "696": { + "block": "main_maybeBoxMap_route@8", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%44#0" + "tmp%30#0" ], "stack_out": [ - "tmp%44#0" + "tmp%30#0" ] }, - "678": { + "698": { "op": "!", "defined_out": [ - "tmp%45#0" + "tmp%31#0" ], "stack_out": [ - "tmp%45#0" + "tmp%31#0" ] }, - "679": { + "699": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "680": { + "700": { "op": "txn ApplicationID", "defined_out": [ - "tmp%46#0" + "tmp%32#0" ], "stack_out": [ - "tmp%46#0" + "tmp%32#0" ] }, - "682": { + "702": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "683": { + "703": { "op": "txna ApplicationArgs 1", "defined_out": [ "reinterpret_bytes[8]%2#0" @@ -2412,117 +2404,226 @@ "reinterpret_bytes[8]%2#0" ] }, - "686": { + "706": { "op": "btoi", "defined_out": [ - "tmp%48#0" + "tmp%34#0" ], "stack_out": [ - "tmp%48#0" + "tmp%34#0" ] }, - "687": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxMapWithDefault", - "op": "callsub getBoxMapWithDefault", + "707": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.maybeBoxMap", + "op": "callsub maybeBoxMap", "defined_out": [ - "to_encode%3#0" + "elements_to_encode%2#0", + "elements_to_encode%3#0" ], "stack_out": [ - "to_encode%3#0" + "elements_to_encode%2#0", + "elements_to_encode%3#0" ] }, - "690": { - "op": "dup", + "710": { + "op": "dig 1", "defined_out": [ - "to_encode%3#0", - "to_encode%3#0 (copy)" + "elements_to_encode%2#0", + "elements_to_encode%2#0 (copy)", + "elements_to_encode%3#0" ], "stack_out": [ - "to_encode%3#0", - "to_encode%3#0 (copy)" + "elements_to_encode%2#0", + "elements_to_encode%3#0", + "elements_to_encode%2#0 (copy)" ] }, - "691": { + "712": { "op": "len", "defined_out": [ - "length%1#0", - "to_encode%3#0" + "elements_to_encode%2#0", + "elements_to_encode%3#0", + "length%2#0" ], "stack_out": [ - "to_encode%3#0", - "length%1#0" + "elements_to_encode%2#0", + "elements_to_encode%3#0", + "length%2#0" ] }, - "692": { + "713": { "op": "itob", "defined_out": [ - "as_bytes%1#0", - "to_encode%3#0" + "as_bytes%2#0", + "elements_to_encode%2#0", + "elements_to_encode%3#0" ], "stack_out": [ - "to_encode%3#0", - "as_bytes%1#0" + "elements_to_encode%2#0", + "elements_to_encode%3#0", + "as_bytes%2#0" ] }, - "693": { + "714": { "op": "extract 6 2", "defined_out": [ - "length_uint16%1#0", - "to_encode%3#0" + "elements_to_encode%2#0", + "elements_to_encode%3#0", + "length_uint16%2#0" ], "stack_out": [ - "to_encode%3#0", - "length_uint16%1#0" + "elements_to_encode%2#0", + "elements_to_encode%3#0", + "length_uint16%2#0" ] }, - "696": { + "717": { + "op": "uncover 2", + "stack_out": [ + "elements_to_encode%3#0", + "length_uint16%2#0", + "elements_to_encode%2#0" + ] + }, + "719": { + "op": "concat", + "defined_out": [ + "elements_to_encode%3#0", + "encoded_value%2#0" + ], + "stack_out": [ + "elements_to_encode%3#0", + "encoded_value%2#0" + ] + }, + "720": { + "op": "bytec_1 // 0x00", + "defined_out": [ + "0x00", + "elements_to_encode%3#0", + "encoded_value%2#0" + ], + "stack_out": [ + "elements_to_encode%3#0", + "encoded_value%2#0", + "0x00" + ] + }, + "721": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "0x00", + "elements_to_encode%3#0", + "encoded_value%2#0" + ], + "stack_out": [ + "elements_to_encode%3#0", + "encoded_value%2#0", + "0x00", + "0" + ] + }, + "722": { + "op": "uncover 3", + "stack_out": [ + "encoded_value%2#0", + "0x00", + "0", + "elements_to_encode%3#0" + ] + }, + "724": { + "op": "setbit", + "defined_out": [ + "encoded_bool%1#0", + "encoded_value%2#0" + ], + "stack_out": [ + "encoded_value%2#0", + "encoded_bool%1#0" + ] + }, + "725": { + "op": "bytec 9 // 0x0003", + "defined_out": [ + "0x0003", + "encoded_bool%1#0", + "encoded_value%2#0" + ], + "stack_out": [ + "encoded_value%2#0", + "encoded_bool%1#0", + "0x0003" + ] + }, + "727": { "op": "swap", "stack_out": [ - "length_uint16%1#0", - "to_encode%3#0" + "encoded_value%2#0", + "0x0003", + "encoded_bool%1#0" ] }, - "697": { + "728": { "op": "concat", "defined_out": [ - "encoded_value%1#0" + "encoded_tuple_buffer%5#0", + "encoded_value%2#0" ], "stack_out": [ - "encoded_value%1#0" + "encoded_value%2#0", + "encoded_tuple_buffer%5#0" ] }, - "698": { + "729": { + "op": "swap", + "stack_out": [ + "encoded_tuple_buffer%5#0", + "encoded_value%2#0" + ] + }, + "730": { + "op": "concat", + "defined_out": [ + "encoded_tuple_buffer%6#0" + ], + "stack_out": [ + "encoded_tuple_buffer%6#0" + ] + }, + "731": { "op": "bytec_0 // 0x151f7c75", "defined_out": [ "0x151f7c75", - "encoded_value%1#0" + "encoded_tuple_buffer%6#0" ], "stack_out": [ - "encoded_value%1#0", + "encoded_tuple_buffer%6#0", "0x151f7c75" ] }, - "699": { + "732": { "op": "swap", "stack_out": [ "0x151f7c75", - "encoded_value%1#0" + "encoded_tuple_buffer%6#0" ] }, - "700": { + "733": { "op": "concat", "defined_out": [ - "tmp%49#0" + "tmp%35#0" ], "stack_out": [ - "tmp%49#0" + "tmp%35#0" ] }, - "701": { + "734": { "op": "log", "stack_out": [] }, - "702": { + "735": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -2531,50 +2632,50 @@ "tmp%0#0" ] }, - "703": { + "736": { "op": "return", "stack_out": [] }, - "704": { - "block": "main_getBoxMap_route@10", + "737": { + "block": "main_getBoxMapWithDefault_route@7", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%38#0" + "tmp%24#0" ], "stack_out": [ - "tmp%38#0" + "tmp%24#0" ] }, - "706": { + "739": { "op": "!", "defined_out": [ - "tmp%39#0" + "tmp%25#0" ], "stack_out": [ - "tmp%39#0" + "tmp%25#0" ] }, - "707": { + "740": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "708": { + "741": { "op": "txn ApplicationID", "defined_out": [ - "tmp%40#0" + "tmp%26#0" ], "stack_out": [ - "tmp%40#0" + "tmp%26#0" ] }, - "710": { + "743": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "711": { + "744": { "op": "txna ApplicationArgs 1", "defined_out": [ "reinterpret_bytes[8]%1#0" @@ -2583,18 +2684,189 @@ "reinterpret_bytes[8]%1#0" ] }, - "714": { + "747": { "op": "btoi", "defined_out": [ - "tmp%42#0" + "tmp%28#0" ], "stack_out": [ - "tmp%42#0" + "tmp%28#0" ] }, - "715": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxMap", - "op": "callsub getBoxMap", + "748": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxMapWithDefault", + "op": "callsub getBoxMapWithDefault", + "defined_out": [ + "to_encode%3#0" + ], + "stack_out": [ + "to_encode%3#0" + ] + }, + "751": { + "op": "dup", + "defined_out": [ + "to_encode%3#0", + "to_encode%3#0 (copy)" + ], + "stack_out": [ + "to_encode%3#0", + "to_encode%3#0 (copy)" + ] + }, + "752": { + "op": "len", + "defined_out": [ + "length%1#0", + "to_encode%3#0" + ], + "stack_out": [ + "to_encode%3#0", + "length%1#0" + ] + }, + "753": { + "op": "itob", + "defined_out": [ + "as_bytes%1#0", + "to_encode%3#0" + ], + "stack_out": [ + "to_encode%3#0", + "as_bytes%1#0" + ] + }, + "754": { + "op": "extract 6 2", + "defined_out": [ + "length_uint16%1#0", + "to_encode%3#0" + ], + "stack_out": [ + "to_encode%3#0", + "length_uint16%1#0" + ] + }, + "757": { + "op": "swap", + "stack_out": [ + "length_uint16%1#0", + "to_encode%3#0" + ] + }, + "758": { + "op": "concat", + "defined_out": [ + "encoded_value%1#0" + ], + "stack_out": [ + "encoded_value%1#0" + ] + }, + "759": { + "op": "bytec_0 // 0x151f7c75", + "defined_out": [ + "0x151f7c75", + "encoded_value%1#0" + ], + "stack_out": [ + "encoded_value%1#0", + "0x151f7c75" + ] + }, + "760": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "encoded_value%1#0" + ] + }, + "761": { + "op": "concat", + "defined_out": [ + "tmp%29#0" + ], + "stack_out": [ + "tmp%29#0" + ] + }, + "762": { + "op": "log", + "stack_out": [] + }, + "763": { + "op": "intc_0 // 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "764": { + "op": "return", + "stack_out": [] + }, + "765": { + "block": "main_getBoxMap_route@6", + "stack_in": [], + "op": "txn OnCompletion", + "defined_out": [ + "tmp%18#0" + ], + "stack_out": [ + "tmp%18#0" + ] + }, + "767": { + "op": "!", + "defined_out": [ + "tmp%19#0" + ], + "stack_out": [ + "tmp%19#0" + ] + }, + "768": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", + "stack_out": [] + }, + "769": { + "op": "txn ApplicationID", + "defined_out": [ + "tmp%20#0" + ], + "stack_out": [ + "tmp%20#0" + ] + }, + "771": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", + "stack_out": [] + }, + "772": { + "op": "txna ApplicationArgs 1", + "defined_out": [ + "reinterpret_bytes[8]%0#0" + ], + "stack_out": [ + "reinterpret_bytes[8]%0#0" + ] + }, + "775": { + "op": "btoi", + "defined_out": [ + "tmp%22#0" + ], + "stack_out": [ + "tmp%22#0" + ] + }, + "776": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxMap", + "op": "callsub getBoxMap", "defined_out": [ "to_encode%2#0" ], @@ -2602,7 +2874,7 @@ "to_encode%2#0" ] }, - "718": { + "779": { "op": "dup", "defined_out": [ "to_encode%2#0", @@ -2613,7 +2885,7 @@ "to_encode%2#0 (copy)" ] }, - "719": { + "780": { "op": "len", "defined_out": [ "length%0#0", @@ -2624,7 +2896,7 @@ "length%0#0" ] }, - "720": { + "781": { "op": "itob", "defined_out": [ "as_bytes%0#0", @@ -2635,7 +2907,7 @@ "as_bytes%0#0" ] }, - "721": { + "782": { "op": "extract 6 2", "defined_out": [ "length_uint16%0#0", @@ -2646,14 +2918,14 @@ "length_uint16%0#0" ] }, - "724": { + "785": { "op": "swap", "stack_out": [ "length_uint16%0#0", "to_encode%2#0" ] }, - "725": { + "786": { "op": "concat", "defined_out": [ "encoded_value%0#0" @@ -2662,7 +2934,7 @@ "encoded_value%0#0" ] }, - "726": { + "787": { "op": "bytec_0 // 0x151f7c75", "defined_out": [ "0x151f7c75", @@ -2673,27 +2945,27 @@ "0x151f7c75" ] }, - "727": { + "788": { "op": "swap", "stack_out": [ "0x151f7c75", "encoded_value%0#0" ] }, - "728": { + "789": { "op": "concat", "defined_out": [ - "tmp%43#0" + "tmp%23#0" ], "stack_out": [ - "tmp%43#0" + "tmp%23#0" ] }, - "729": { + "790": { "op": "log", "stack_out": [] }, - "730": { + "791": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -2702,50 +2974,50 @@ "tmp%0#0" ] }, - "731": { + "792": { "op": "return", "stack_out": [] }, - "732": { - "block": "main_maybeBox_route@9", + "793": { + "block": "main_maybeBox_route@5", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%33#0" + "tmp%13#0" ], "stack_out": [ - "tmp%33#0" + "tmp%13#0" ] }, - "734": { + "795": { "op": "!", "defined_out": [ - "tmp%34#0" + "tmp%14#0" ], "stack_out": [ - "tmp%34#0" + "tmp%14#0" ] }, - "735": { + "796": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "736": { + "797": { "op": "txn ApplicationID", "defined_out": [ - "tmp%35#0" + "tmp%15#0" ], "stack_out": [ - "tmp%35#0" + "tmp%15#0" ] }, - "738": { + "799": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "739": { + "800": { "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.maybeBox", "op": "callsub maybeBox", "defined_out": [ @@ -2757,14 +3029,14 @@ "elements_to_encode%1#0" ] }, - "742": { + "803": { "op": "swap", "stack_out": [ "elements_to_encode%1#0", "elements_to_encode%0#0" ] }, - "743": { + "804": { "op": "itob", "defined_out": [ "elements_to_encode%1#0", @@ -2775,7 +3047,7 @@ "val_as_bytes%2#0" ] }, - "744": { + "805": { "op": "bytec_1 // 0x00", "defined_out": [ "0x00", @@ -2788,7 +3060,7 @@ "0x00" ] }, - "745": { + "806": { "op": "intc_1 // 0", "defined_out": [ "0", @@ -2803,7 +3075,7 @@ "0" ] }, - "746": { + "807": { "op": "uncover 3", "stack_out": [ "val_as_bytes%2#0", @@ -2812,7 +3084,7 @@ "elements_to_encode%1#0" ] }, - "748": { + "809": { "op": "setbit", "defined_out": [ "encoded_bool%0#0", @@ -2823,7 +3095,7 @@ "encoded_bool%0#0" ] }, - "749": { + "810": { "op": "concat", "defined_out": [ "encoded_tuple_buffer%2#0" @@ -2832,7 +3104,7 @@ "encoded_tuple_buffer%2#0" ] }, - "750": { + "811": { "op": "bytec_0 // 0x151f7c75", "defined_out": [ "0x151f7c75", @@ -2843,27 +3115,27 @@ "0x151f7c75" ] }, - "751": { + "812": { "op": "swap", "stack_out": [ "0x151f7c75", "encoded_tuple_buffer%2#0" ] }, - "752": { + "813": { "op": "concat", "defined_out": [ - "tmp%37#0" + "tmp%17#0" ], "stack_out": [ - "tmp%37#0" + "tmp%17#0" ] }, - "753": { + "814": { "op": "log", "stack_out": [] }, - "754": { + "815": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -2872,120 +3144,100 @@ "tmp%0#0" ] }, - "755": { + "816": { "op": "return", "stack_out": [] }, - "756": { - "block": "main_deleteBox_route@8", + "817": { + "block": "main_valueBox_route@4", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%29#0" + "tmp%8#0" ], "stack_out": [ - "tmp%29#0" + "tmp%8#0" ] }, - "758": { + "819": { "op": "!", "defined_out": [ - "tmp%30#0" + "tmp%9#0" ], "stack_out": [ - "tmp%30#0" + "tmp%9#0" ] }, - "759": { + "820": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "760": { + "821": { "op": "txn ApplicationID", "defined_out": [ - "tmp%31#0" + "tmp%10#0" ], "stack_out": [ - "tmp%31#0" + "tmp%10#0" ] }, - "762": { + "823": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "763": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.deleteBox", - "op": "callsub deleteBox" - }, - "766": { - "op": "intc_0 // 1", + "824": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.valueBox", + "op": "callsub valueBox", "defined_out": [ - "tmp%0#0" + "to_encode%1#0" ], "stack_out": [ - "tmp%0#0" + "to_encode%1#0" ] }, - "767": { - "op": "return", - "stack_out": [] - }, - "768": { - "block": "main_setBoxDynamicBytes_route@7", - "stack_in": [], - "op": "txn OnCompletion", + "827": { + "op": "itob", "defined_out": [ - "tmp%24#0" + "val_as_bytes%1#0" ], "stack_out": [ - "tmp%24#0" + "val_as_bytes%1#0" ] }, - "770": { - "op": "!", + "828": { + "op": "bytec_0 // 0x151f7c75", "defined_out": [ - "tmp%25#0" + "0x151f7c75", + "val_as_bytes%1#0" ], "stack_out": [ - "tmp%25#0" + "val_as_bytes%1#0", + "0x151f7c75" ] }, - "771": { - "error": "OnCompletion is not NoOp", - "op": "assert // OnCompletion is not NoOp", - "stack_out": [] - }, - "772": { - "op": "txn ApplicationID", - "defined_out": [ - "tmp%26#0" - ], + "829": { + "op": "swap", "stack_out": [ - "tmp%26#0" + "0x151f7c75", + "val_as_bytes%1#0" ] }, - "774": { - "error": "can only call when not creating", - "op": "assert // can only call when not creating", - "stack_out": [] - }, - "775": { - "op": "txna ApplicationArgs 1", + "830": { + "op": "concat", "defined_out": [ - "tmp%28#0" + "tmp%12#0" ], "stack_out": [ - "tmp%28#0" + "tmp%12#0" ] }, - "778": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxDynamicBytes", - "op": "callsub setBoxDynamicBytes", + "831": { + "op": "log", "stack_out": [] }, - "781": { + "832": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -2994,148 +3246,151 @@ "tmp%0#0" ] }, - "782": { + "833": { "op": "return", "stack_out": [] }, - "783": { - "block": "main_setBoxString_route@6", + "834": { + "block": "main_getBox_route@3", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%18#0" + "tmp%3#0" ], "stack_out": [ - "tmp%18#0" + "tmp%3#0" ] }, - "785": { + "836": { "op": "!", "defined_out": [ - "tmp%19#0" + "tmp%4#0" ], "stack_out": [ - "tmp%19#0" + "tmp%4#0" ] }, - "786": { + "837": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "787": { + "838": { "op": "txn ApplicationID", "defined_out": [ - "tmp%20#0" + "tmp%5#0" ], "stack_out": [ - "tmp%20#0" + "tmp%5#0" ] }, - "789": { + "840": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "790": { - "op": "txna ApplicationArgs 1", + "841": { + "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBox", + "op": "callsub getBox", "defined_out": [ - "tmp%22#0" + "to_encode%0#0" ], "stack_out": [ - "tmp%22#0" + "to_encode%0#0" ] }, - "793": { - "op": "extract 2 0", + "844": { + "op": "itob", "defined_out": [ - "tmp%23#0" + "val_as_bytes%0#0" ], "stack_out": [ - "tmp%23#0" + "val_as_bytes%0#0" ] }, - "796": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxString", - "op": "callsub setBoxString", - "stack_out": [] - }, - "799": { - "op": "intc_0 // 1", + "845": { + "op": "bytec_0 // 0x151f7c75", "defined_out": [ - "tmp%0#0" + "0x151f7c75", + "val_as_bytes%0#0" ], "stack_out": [ - "tmp%0#0" + "val_as_bytes%0#0", + "0x151f7c75" ] }, - "800": { - "op": "return", - "stack_out": [] + "846": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "val_as_bytes%0#0" + ] }, - "801": { - "block": "main_setBox_route@5", - "stack_in": [], - "op": "txn OnCompletion", + "847": { + "op": "concat", "defined_out": [ - "tmp%13#0" + "tmp%7#0" ], "stack_out": [ - "tmp%13#0" + "tmp%7#0" ] }, - "803": { - "op": "!", + "848": { + "op": "log", + "stack_out": [] + }, + "849": { + "op": "intc_0 // 1", "defined_out": [ - "tmp%14#0" + "tmp%0#0" ], "stack_out": [ - "tmp%14#0" + "tmp%0#0" ] }, - "804": { - "error": "OnCompletion is not NoOp", - "op": "assert // OnCompletion is not NoOp", + "850": { + "op": "return", "stack_out": [] }, - "805": { - "op": "txn ApplicationID", + "851": { + "block": "main_bare_routing@31", + "stack_in": [], + "op": "txn OnCompletion", "defined_out": [ - "tmp%15#0" + "tmp%157#0" ], "stack_out": [ - "tmp%15#0" + "tmp%157#0" ] }, - "807": { - "error": "can only call when not creating", - "op": "assert // can only call when not creating", + "853": { + "op": "bnz main_after_if_else@35", "stack_out": [] }, - "808": { - "op": "txna ApplicationArgs 1", + "856": { + "op": "txn ApplicationID", "defined_out": [ - "reinterpret_bytes[8]%0#0" + "tmp%158#0" ], "stack_out": [ - "reinterpret_bytes[8]%0#0" + "tmp%158#0" ] }, - "811": { - "op": "btoi", + "858": { + "op": "!", "defined_out": [ - "tmp%17#0" + "tmp%159#0" ], "stack_out": [ - "tmp%17#0" + "tmp%159#0" ] }, - "812": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBox", - "op": "callsub setBox", + "859": { + "error": "can only call when creating", + "op": "assert // can only call when creating", "stack_out": [] }, - "815": { + "860": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -3144,279 +3399,238 @@ "tmp%0#0" ] }, - "816": { + "861": { "op": "return", "stack_out": [] }, - "817": { - "block": "main_valueBox_route@4", + "862": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBox", + "params": {}, + "block": "getBox", "stack_in": [], - "op": "txn OnCompletion", + "op": "bytec_3 // \"boxInt\"", "defined_out": [ - "tmp%8#0" + "\"boxInt\"" ], "stack_out": [ - "tmp%8#0" + "\"boxInt\"" ] }, - "819": { - "op": "!", + "863": { + "op": "box_get", "defined_out": [ - "tmp%9#0" + "maybe_exists%0#0", + "maybe_value%0#0" ], "stack_out": [ - "tmp%9#0" + "maybe_value%0#0", + "maybe_exists%0#0" ] }, - "820": { - "error": "OnCompletion is not NoOp", - "op": "assert // OnCompletion is not NoOp", - "stack_out": [] - }, - "821": { - "op": "txn ApplicationID", - "defined_out": [ - "tmp%10#0" - ], + "864": { + "op": "swap", "stack_out": [ - "tmp%10#0" + "maybe_exists%0#0", + "maybe_value%0#0" ] }, - "823": { - "error": "can only call when not creating", - "op": "assert // can only call when not creating", - "stack_out": [] - }, - "824": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.valueBox", - "op": "callsub valueBox", + "865": { + "op": "btoi", "defined_out": [ - "to_encode%1#0" + "maybe_exists%0#0", + "maybe_value_converted%0#0" ], "stack_out": [ - "to_encode%1#0" + "maybe_exists%0#0", + "maybe_value_converted%0#0" ] }, - "827": { - "op": "itob", - "defined_out": [ - "val_as_bytes%1#0" - ], + "866": { + "op": "swap", "stack_out": [ - "val_as_bytes%1#0" + "maybe_value_converted%0#0", + "maybe_exists%0#0" ] }, - "828": { - "op": "bytec_0 // 0x151f7c75", - "defined_out": [ - "0x151f7c75", - "val_as_bytes%1#0" - ], + "867": { + "error": "Box must have value", + "op": "assert // Box must have value", "stack_out": [ - "val_as_bytes%1#0", - "0x151f7c75" + "maybe_value_converted%0#0" ] }, - "829": { - "op": "swap", - "stack_out": [ - "0x151f7c75", - "val_as_bytes%1#0" - ] + "868": { + "retsub": true, + "op": "retsub" }, - "830": { - "op": "concat", + "869": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.valueBox", + "params": {}, + "block": "valueBox", + "stack_in": [], + "op": "bytec_3 // \"boxInt\"", "defined_out": [ - "tmp%12#0" + "\"boxInt\"" ], "stack_out": [ - "tmp%12#0" + "\"boxInt\"" ] }, - "831": { - "op": "log", - "stack_out": [] - }, - "832": { - "op": "intc_0 // 1", + "870": { + "op": "box_get", "defined_out": [ - "tmp%0#0" + "maybe_exists%0#0", + "maybe_value%0#0" ], "stack_out": [ - "tmp%0#0" + "maybe_value%0#0", + "maybe_exists%0#0" ] }, - "833": { - "op": "return", - "stack_out": [] - }, - "834": { - "block": "main_getBox_route@3", - "stack_in": [], - "op": "txn OnCompletion", - "defined_out": [ - "tmp%3#0" - ], + "871": { + "op": "swap", "stack_out": [ - "tmp%3#0" + "maybe_exists%0#0", + "maybe_value%0#0" ] }, - "836": { - "op": "!", + "872": { + "op": "btoi", "defined_out": [ - "tmp%4#0" + "maybe_exists%0#0", + "maybe_value_converted%0#0" ], "stack_out": [ - "tmp%4#0" + "maybe_exists%0#0", + "maybe_value_converted%0#0" ] }, - "837": { - "error": "OnCompletion is not NoOp", - "op": "assert // OnCompletion is not NoOp", - "stack_out": [] - }, - "838": { - "op": "txn ApplicationID", - "defined_out": [ - "tmp%5#0" - ], + "873": { + "op": "swap", "stack_out": [ - "tmp%5#0" + "maybe_value_converted%0#0", + "maybe_exists%0#0" ] }, - "840": { - "error": "can only call when not creating", - "op": "assert // can only call when not creating", - "stack_out": [] - }, - "841": { - "callsub": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBox", - "op": "callsub getBox", - "defined_out": [ - "to_encode%0#0" - ], + "874": { + "error": "Box must have value", + "op": "assert // Box must have value", "stack_out": [ - "to_encode%0#0" + "maybe_value_converted%0#0" ] }, - "844": { - "op": "itob", + "875": { + "retsub": true, + "op": "retsub" + }, + "876": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.maybeBox", + "params": {}, + "block": "maybeBox", + "stack_in": [], + "op": "bytec_3 // \"boxInt\"", "defined_out": [ - "val_as_bytes%0#0" + "\"boxInt\"" ], "stack_out": [ - "val_as_bytes%0#0" + "\"boxInt\"" ] }, - "845": { - "op": "bytec_0 // 0x151f7c75", + "877": { + "op": "box_get", "defined_out": [ - "0x151f7c75", - "val_as_bytes%0#0" + "boxIntExists#0", + "maybe_value%0#0" ], "stack_out": [ - "val_as_bytes%0#0", - "0x151f7c75" + "maybe_value%0#0", + "boxIntExists#0" ] }, - "846": { + "878": { "op": "swap", "stack_out": [ - "0x151f7c75", - "val_as_bytes%0#0" + "boxIntExists#0", + "maybe_value%0#0" ] }, - "847": { - "op": "concat", + "879": { + "op": "btoi", "defined_out": [ - "tmp%7#0" + "boxIntExists#0", + "boxIntValue#0" ], "stack_out": [ - "tmp%7#0" + "boxIntExists#0", + "boxIntValue#0" ] }, - "848": { - "op": "log", - "stack_out": [] - }, - "849": { - "op": "intc_0 // 1", - "defined_out": [ - "tmp%0#0" - ], + "880": { + "op": "swap", "stack_out": [ - "tmp%0#0" + "boxIntValue#0", + "boxIntExists#0" ] }, - "850": { - "op": "return", - "stack_out": [] + "881": { + "retsub": true, + "op": "retsub" }, - "851": { - "block": "main_bare_routing@31", + "882": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxMap", + "params": { + "key#0": "uint64" + }, + "block": "getBoxMap", "stack_in": [], - "op": "txn OnCompletion", + "op": "proto 1 1" + }, + "885": { + "op": "frame_dig -1", "defined_out": [ - "tmp%157#0" + "key#0 (copy)" ], "stack_out": [ - "tmp%157#0" + "key#0 (copy)" ] }, - "853": { - "op": "bnz main_after_if_else@35", - "stack_out": [] - }, - "856": { - "op": "txn ApplicationID", + "887": { + "op": "itob", "defined_out": [ - "tmp%158#0" + "tmp%0#0" ], "stack_out": [ - "tmp%158#0" + "tmp%0#0" ] }, - "858": { - "op": "!", + "888": { + "op": "bytec_2 // \"boxMap\"", "defined_out": [ - "tmp%159#0" + "\"boxMap\"", + "tmp%0#0" ], "stack_out": [ - "tmp%159#0" + "tmp%0#0", + "\"boxMap\"" ] }, - "859": { - "error": "can only call when creating", - "op": "assert // can only call when creating", - "stack_out": [] - }, - "860": { - "op": "intc_0 // 1", - "defined_out": [ - "tmp%0#0" - ], + "889": { + "op": "swap", "stack_out": [ + "\"boxMap\"", "tmp%0#0" ] }, - "861": { - "op": "return", - "stack_out": [] - }, - "862": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBox", - "params": {}, - "block": "getBox", - "stack_in": [], - "op": "bytec_3 // \"boxInt\"", + "890": { + "op": "concat", "defined_out": [ - "\"boxInt\"" + "tmp%1#0" ], "stack_out": [ - "\"boxInt\"" + "tmp%1#0" ] }, - "863": { + "891": { "op": "box_get", "defined_out": [ "maybe_exists%0#0", @@ -3427,56 +3641,72 @@ "maybe_exists%0#0" ] }, - "864": { - "op": "swap", + "892": { + "error": "Box must have value", + "op": "assert // Box must have value", "stack_out": [ - "maybe_exists%0#0", "maybe_value%0#0" ] }, - "865": { - "op": "btoi", + "893": { + "retsub": true, + "op": "retsub" + }, + "894": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxMapWithDefault", + "params": { + "key#0": "uint64" + }, + "block": "getBoxMapWithDefault", + "stack_in": [], + "op": "proto 1 1" + }, + "897": { + "op": "frame_dig -1", "defined_out": [ - "maybe_exists%0#0", - "maybe_value_converted%0#0" + "key#0 (copy)" ], "stack_out": [ - "maybe_exists%0#0", - "maybe_value_converted%0#0" + "key#0 (copy)" ] }, - "866": { - "op": "swap", + "899": { + "op": "itob", + "defined_out": [ + "tmp%0#0" + ], "stack_out": [ - "maybe_value_converted%0#0", - "maybe_exists%0#0" + "tmp%0#0" ] }, - "867": { - "error": "Box must have value", - "op": "assert // Box must have value", + "900": { + "op": "bytec_2 // \"boxMap\"", + "defined_out": [ + "\"boxMap\"", + "tmp%0#0" + ], "stack_out": [ - "maybe_value_converted%0#0" + "tmp%0#0", + "\"boxMap\"" ] }, - "868": { - "retsub": true, - "op": "retsub" + "901": { + "op": "swap", + "stack_out": [ + "\"boxMap\"", + "tmp%0#0" + ] }, - "869": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.valueBox", - "params": {}, - "block": "valueBox", - "stack_in": [], - "op": "bytec_3 // \"boxInt\"", + "902": { + "op": "concat", "defined_out": [ - "\"boxInt\"" + "tmp%1#0" ], "stack_out": [ - "\"boxInt\"" + "tmp%1#0" ] }, - "870": { + "903": { "op": "box_get", "defined_out": [ "maybe_exists%0#0", @@ -3487,413 +3717,416 @@ "maybe_exists%0#0" ] }, - "871": { - "op": "swap", - "stack_out": [ - "maybe_exists%0#0", - "maybe_value%0#0" - ] - }, - "872": { - "op": "btoi", + "904": { + "op": "pushbytes \"default\"", "defined_out": [ + "\"default\"", "maybe_exists%0#0", - "maybe_value_converted%0#0" + "maybe_value%0#0" ], "stack_out": [ + "maybe_value%0#0", "maybe_exists%0#0", - "maybe_value_converted%0#0" + "\"default\"" ] }, - "873": { - "op": "swap", + "913": { + "op": "cover 2", "stack_out": [ - "maybe_value_converted%0#0", + "\"default\"", + "maybe_value%0#0", "maybe_exists%0#0" ] }, - "874": { - "error": "Box must have value", - "op": "assert // Box must have value", + "915": { + "op": "select", + "defined_out": [ + "state_get%0#0" + ], "stack_out": [ - "maybe_value_converted%0#0" + "state_get%0#0" ] }, - "875": { + "916": { "retsub": true, "op": "retsub" }, - "876": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBox", + "917": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.maybeBoxMap", "params": { - "valueInt#0": "uint64" + "key#0": "uint64" }, - "block": "setBox", + "block": "maybeBoxMap", "stack_in": [], - "op": "proto 1 0" + "op": "proto 1 2" }, - "879": { + "920": { "op": "frame_dig -1", "defined_out": [ - "valueInt#0 (copy)" + "key#0 (copy)" ], "stack_out": [ - "valueInt#0 (copy)" + "key#0 (copy)" ] }, - "881": { + "922": { "op": "itob", "defined_out": [ - "new_box_value%0#0" + "tmp%0#0" ], "stack_out": [ - "new_box_value%0#0" + "tmp%0#0" ] }, - "882": { - "op": "bytec_3 // \"boxInt\"", + "923": { + "op": "bytec_2 // \"boxMap\"", "defined_out": [ - "\"boxInt\"", - "new_box_value%0#0" + "\"boxMap\"", + "tmp%0#0" ], "stack_out": [ - "new_box_value%0#0", - "\"boxInt\"" + "tmp%0#0", + "\"boxMap\"" ] }, - "883": { + "924": { "op": "swap", "stack_out": [ - "\"boxInt\"", - "new_box_value%0#0" + "\"boxMap\"", + "tmp%0#0" ] }, - "884": { - "op": "box_put", - "stack_out": [] - }, - "885": { - "retsub": true, - "op": "retsub" - }, - "886": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxString", - "params": { - "value#0": "bytes" - }, - "block": "setBoxString", - "stack_in": [], - "op": "proto 1 0" - }, - "889": { - "op": "bytec 4 // \"boxString\"", + "925": { + "op": "concat", "defined_out": [ - "\"boxString\"" + "tmp%1#0" ], "stack_out": [ - "\"boxString\"" + "tmp%1#0" ] }, - "891": { - "op": "box_del", + "926": { + "op": "box_get", "defined_out": [ - "{box_del}" + "exists#0", + "value#0" ], "stack_out": [ - "{box_del}" + "value#0", + "exists#0" ] }, - "892": { - "op": "pop", - "stack_out": [] - }, - "893": { - "op": "bytec 4 // \"boxString\"", + "927": { + "op": "dup", "stack_out": [ - "\"boxString\"" + "value#0", + "exists#0", + "exists#0 (copy)" ] }, - "895": { - "op": "frame_dig -1", + "928": { + "op": "uncover 2", "defined_out": [ - "\"boxString\"", - "value#0 (copy)" + "exists#0", + "value#0" ], "stack_out": [ - "\"boxString\"", - "value#0 (copy)" + "exists#0", + "exists#0", + "value#0" ] }, - "897": { - "op": "box_put", - "stack_out": [] - }, - "898": { - "retsub": true, - "op": "retsub" - }, - "899": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxDynamicBytes", - "params": { - "value#0": "bytes" - }, - "block": "setBoxDynamicBytes", - "stack_in": [], - "op": "proto 1 0" - }, - "902": { - "op": "bytec 5 // \"boxDynamicBytes\"", + "930": { + "op": "swap", "defined_out": [ - "\"boxDynamicBytes\"" + "exists#0", + "value#0" ], "stack_out": [ - "\"boxDynamicBytes\"" + "exists#0", + "value#0", + "exists#0" ] }, - "904": { - "op": "box_del", - "defined_out": [ - "{box_del}" - ], + "931": { + "op": "bz maybeBoxMap_ternary_false@2", "stack_out": [ - "{box_del}" + "exists#0", + "value#0" ] }, - "905": { - "op": "pop", - "stack_out": [] - }, - "906": { - "op": "bytec 5 // \"boxDynamicBytes\"", + "934": { + "op": "frame_dig 1", + "defined_out": [ + "exists#0", + "ternary_result%0#1", + "value#0" + ], "stack_out": [ - "\"boxDynamicBytes\"" + "exists#0", + "value#0", + "ternary_result%0#1" ] }, - "908": { - "op": "frame_dig -1", + "936": { + "block": "maybeBoxMap_ternary_merge@3", + "stack_in": [ + "exists#0", + "value#0", + "ternary_result%0#1" + ], + "op": "frame_dig 0", "defined_out": [ - "\"boxDynamicBytes\"", - "value#0 (copy)" + "exists#0", + "ternary_result%0#1" ], "stack_out": [ - "\"boxDynamicBytes\"", - "value#0 (copy)" + "exists#0", + "value#0", + "ternary_result%0#1", + "exists#0" ] }, - "910": { - "op": "box_put", - "stack_out": [] + "938": { + "op": "uncover 3" + }, + "940": { + "op": "uncover 3" }, - "911": { + "942": { "retsub": true, "op": "retsub" }, - "912": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.deleteBox", - "params": {}, - "block": "deleteBox", - "stack_in": [], - "op": "bytec_3 // \"boxInt\"", - "defined_out": [ - "\"boxInt\"" - ], - "stack_out": [ - "\"boxInt\"" + "943": { + "block": "maybeBoxMap_ternary_false@2", + "stack_in": [ + "exists#0", + "value#0" + ], + "op": "pushbytes \"\"", + "defined_out": [ + "ternary_result%0#1" + ], + "stack_out": [ + "exists#0", + "value#0", + "ternary_result%0#1" ] }, - "913": { - "op": "box_del", + "945": { + "op": "b maybeBoxMap_ternary_merge@3" + }, + "948": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxRef", + "params": {}, + "block": "getBoxRef", + "stack_in": [], + "op": "bytec 7 // \"boxRef\"", "defined_out": [ - "{box_del}" + "\"boxRef\"" ], "stack_out": [ - "{box_del}" + "\"boxRef\"" ] }, - "914": { - "op": "pop", - "stack_out": [] - }, - "915": { - "op": "bytec 5 // \"boxDynamicBytes\"", + "950": { + "op": "intc_2 // 32", "defined_out": [ - "\"boxDynamicBytes\"" + "\"boxRef\"", + "32" ], "stack_out": [ - "\"boxDynamicBytes\"" + "\"boxRef\"", + "32" ] }, - "917": { - "op": "box_del", + "951": { + "op": "box_create", + "defined_out": [ + "{box_create}" + ], "stack_out": [ - "{box_del}" + "{box_create}" ] }, - "918": { + "952": { "op": "pop", "stack_out": [] }, - "919": { - "op": "bytec 4 // \"boxString\"", + "953": { + "op": "txn Sender", "defined_out": [ - "\"boxString\"" + "senderBytes#0" ], "stack_out": [ - "\"boxString\"" - ] - }, - "921": { - "op": "box_del", - "stack_out": [ - "{box_del}" + "senderBytes#0" ] }, - "922": { - "op": "pop", - "stack_out": [] - }, - "923": { - "op": "bytec_3 // \"boxInt\"", + "955": { + "op": "bytec 7 // \"boxRef\"", "stack_out": [ - "\"boxInt\"" + "senderBytes#0", + "\"boxRef\"" ] }, - "924": { - "op": "box_get", + "957": { + "op": "dig 1", "defined_out": [ - "maybe_exists%0#0", - "maybe_value%0#0" + "\"boxRef\"", + "senderBytes#0", + "senderBytes#0 (copy)" ], "stack_out": [ - "maybe_value%0#0", - "maybe_exists%0#0" + "senderBytes#0", + "\"boxRef\"", + "senderBytes#0 (copy)" ] }, - "925": { - "op": "swap", + "959": { + "op": "box_put", "stack_out": [ - "maybe_exists%0#0", - "maybe_value%0#0" + "senderBytes#0" ] }, - "926": { - "op": "btoi", - "defined_out": [ - "maybe_exists%0#0", - "maybe_value_converted%0#0" - ], + "960": { + "op": "bytec 7 // \"boxRef\"", "stack_out": [ - "maybe_exists%0#0", - "maybe_value_converted%0#0" + "senderBytes#0", + "\"boxRef\"" ] }, - "927": { - "op": "intc_3 // 42", + "962": { + "op": "box_get", "defined_out": [ - "42", "maybe_exists%0#0", - "maybe_value_converted%0#0" + "maybe_value%0#0", + "senderBytes#0" ], "stack_out": [ - "maybe_exists%0#0", - "maybe_value_converted%0#0", - "42" + "senderBytes#0", + "maybe_value%0#0", + "maybe_exists%0#0" ] }, - "928": { - "op": "swap", + "963": { + "op": "dig 2", "stack_out": [ + "senderBytes#0", + "maybe_value%0#0", "maybe_exists%0#0", - "42", - "maybe_value_converted%0#0" + "senderBytes#0 (copy)" ] }, - "929": { - "op": "uncover 2", + "965": { + "op": "cover 2", "stack_out": [ - "42", - "maybe_value_converted%0#0", + "senderBytes#0", + "senderBytes#0 (copy)", + "maybe_value%0#0", "maybe_exists%0#0" ] }, - "931": { + "967": { "op": "select", "defined_out": [ - "state_get%0#0" + "senderBytes#0", + "value#0" ], "stack_out": [ - "state_get%0#0" + "senderBytes#0", + "value#0" ] }, - "932": { - "op": "intc_3 // 42", + "968": { + "op": "dup", + "defined_out": [ + "senderBytes#0", + "value#0", + "value#0 (copy)" + ], "stack_out": [ - "state_get%0#0", - "42" + "senderBytes#0", + "value#0", + "value#0 (copy)" + ] + }, + "969": { + "op": "uncover 2", + "stack_out": [ + "value#0", + "value#0 (copy)", + "senderBytes#0" ] }, - "933": { + "971": { "op": "==", "defined_out": [ - "tmp%0#0" + "tmp%0#0", + "value#0" ], "stack_out": [ + "value#0", "tmp%0#0" ] }, - "934": { - "op": "assert", - "stack_out": [] - }, - "935": { - "op": "bytec 5 // \"boxDynamicBytes\"", + "972": { + "error": "boxRef value mismatch", + "op": "assert // boxRef value mismatch", "stack_out": [ - "\"boxDynamicBytes\"" + "value#0" ] }, - "937": { - "op": "box_get", + "973": { + "retsub": true, + "op": "retsub" + }, + "974": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapExists", + "params": { + "key#0": "uint64" + }, + "block": "boxMapExists", + "stack_in": [], + "op": "proto 1 1" + }, + "977": { + "op": "frame_dig -1", "defined_out": [ - "maybe_exists%1#0", - "maybe_value%1#0" + "key#0 (copy)" ], "stack_out": [ - "maybe_value%1#0", - "maybe_exists%1#0" + "key#0 (copy)" ] }, - "938": { - "op": "pushbytes 0x00023432", + "979": { + "op": "itob", "defined_out": [ - "0x00023432", - "maybe_exists%1#0", - "maybe_value%1#0" + "tmp%0#0" ], "stack_out": [ - "maybe_value%1#0", - "maybe_exists%1#0", - "0x00023432" + "tmp%0#0" ] }, - "944": { - "op": "cover 2", + "980": { + "op": "bytec_2 // \"boxMap\"", + "defined_out": [ + "\"boxMap\"", + "tmp%0#0" + ], "stack_out": [ - "0x00023432", - "maybe_value%1#0", - "maybe_exists%1#0" + "tmp%0#0", + "\"boxMap\"" ] }, - "946": { - "op": "select", - "defined_out": [ - "state_get%1#0" - ], + "981": { + "op": "swap", "stack_out": [ - "state_get%1#0" + "\"boxMap\"", + "tmp%0#0" ] }, - "947": { - "op": "extract 2 0", + "982": { + "op": "concat", "defined_out": [ "tmp%1#0" ], @@ -3901,236 +4134,237 @@ "tmp%1#0" ] }, - "950": { - "op": "bytec 7 // \"42\"", + "983": { + "op": "box_len", "defined_out": [ - "\"42\"", - "tmp%1#0" + "maybe_exists%0#0", + "maybe_value%0#0" ], "stack_out": [ - "tmp%1#0", - "\"42\"" + "maybe_value%0#0", + "maybe_exists%0#0" ] }, - "952": { - "op": "==", - "defined_out": [ - "tmp%2#0" - ], + "984": { + "op": "bury 1", "stack_out": [ - "tmp%2#0" + "maybe_exists%0#0" ] }, - "953": { - "op": "assert", - "stack_out": [] + "986": { + "retsub": true, + "op": "retsub" }, - "954": { - "op": "bytec 4 // \"boxString\"", + "987": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.maybeBoxRef", + "params": { + "key#0": "bytes" + }, + "block": "maybeBoxRef", + "stack_in": [], + "op": "proto 1 2" + }, + "990": { + "op": "frame_dig -1", + "defined_out": [ + "key#0 (copy)" + ], "stack_out": [ - "\"boxString\"" + "key#0 (copy)" ] }, - "956": { + "992": { "op": "box_get", "defined_out": [ - "maybe_exists%2#0", - "maybe_value%2#0" + "exists#0", + "value#0" ], "stack_out": [ - "maybe_value%2#0", - "maybe_exists%2#0" + "value#0", + "exists#0" ] }, - "957": { - "op": "bytec 7 // \"42\"", - "stack_out": [ - "maybe_value%2#0", - "maybe_exists%2#0", - "\"42\"" - ] + "993": { + "retsub": true, + "op": "retsub" }, - "959": { - "op": "cover 2", - "stack_out": [ - "\"42\"", - "maybe_value%2#0", - "maybe_exists%2#0" - ] + "994": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBox", + "params": { + "valueInt#0": "uint64" + }, + "block": "setBox", + "stack_in": [], + "op": "proto 1 0" }, - "961": { - "op": "select", + "997": { + "op": "frame_dig -1", "defined_out": [ - "state_get%2#0" + "valueInt#0 (copy)" ], "stack_out": [ - "state_get%2#0" + "valueInt#0 (copy)" ] }, - "962": { - "op": "bytec 7 // \"42\"", + "999": { + "op": "itob", + "defined_out": [ + "new_box_value%0#0" + ], "stack_out": [ - "state_get%2#0", - "\"42\"" + "new_box_value%0#0" ] }, - "964": { - "op": "==", + "1000": { + "op": "bytec_3 // \"boxInt\"", "defined_out": [ - "tmp%3#0" + "\"boxInt\"", + "new_box_value%0#0" ], "stack_out": [ - "tmp%3#0" + "new_box_value%0#0", + "\"boxInt\"" ] }, - "965": { - "op": "assert", + "1001": { + "op": "swap", + "stack_out": [ + "\"boxInt\"", + "new_box_value%0#0" + ] + }, + "1002": { + "op": "box_put", "stack_out": [] }, - "966": { + "1003": { "retsub": true, "op": "retsub" }, - "967": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.maybeBox", - "params": {}, - "block": "maybeBox", + "1004": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxString", + "params": { + "value#0": "bytes" + }, + "block": "setBoxString", "stack_in": [], - "op": "bytec_3 // \"boxInt\"", + "op": "proto 1 0" + }, + "1007": { + "op": "bytec 4 // \"boxString\"", "defined_out": [ - "\"boxInt\"" + "\"boxString\"" ], "stack_out": [ - "\"boxInt\"" + "\"boxString\"" ] }, - "968": { - "op": "box_get", + "1009": { + "op": "box_del", "defined_out": [ - "boxIntExists#0", - "maybe_value%0#0" + "{box_del}" ], "stack_out": [ - "maybe_value%0#0", - "boxIntExists#0" + "{box_del}" ] }, - "969": { - "op": "swap", + "1010": { + "op": "pop", + "stack_out": [] + }, + "1011": { + "op": "bytec 4 // \"boxString\"", "stack_out": [ - "boxIntExists#0", - "maybe_value%0#0" + "\"boxString\"" ] }, - "970": { - "op": "btoi", + "1013": { + "op": "frame_dig -1", "defined_out": [ - "boxIntExists#0", - "boxIntValue#0" + "\"boxString\"", + "value#0 (copy)" ], "stack_out": [ - "boxIntExists#0", - "boxIntValue#0" + "\"boxString\"", + "value#0 (copy)" ] }, - "971": { - "op": "swap", - "stack_out": [ - "boxIntValue#0", - "boxIntExists#0" - ] + "1015": { + "op": "box_put", + "stack_out": [] }, - "972": { + "1016": { "retsub": true, "op": "retsub" }, - "973": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxMap", + "1017": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxDynamicBytes", "params": { - "key#0": "uint64" + "value#0": "bytes" }, - "block": "getBoxMap", + "block": "setBoxDynamicBytes", "stack_in": [], - "op": "proto 1 1" - }, - "976": { - "op": "frame_dig -1", - "defined_out": [ - "key#0 (copy)" - ], - "stack_out": [ - "key#0 (copy)" - ] + "op": "proto 1 0" }, - "978": { - "op": "itob", + "1020": { + "op": "bytec 5 // \"boxDynamicBytes\"", "defined_out": [ - "tmp%0#0" + "\"boxDynamicBytes\"" ], "stack_out": [ - "tmp%0#0" + "\"boxDynamicBytes\"" ] }, - "979": { - "op": "bytec_2 // \"boxMap\"", + "1022": { + "op": "box_del", "defined_out": [ - "\"boxMap\"", - "tmp%0#0" + "{box_del}" ], "stack_out": [ - "tmp%0#0", - "\"boxMap\"" + "{box_del}" ] }, - "980": { - "op": "swap", - "stack_out": [ - "\"boxMap\"", - "tmp%0#0" - ] + "1023": { + "op": "pop", + "stack_out": [] }, - "981": { - "op": "concat", - "defined_out": [ - "tmp%1#0" - ], + "1024": { + "op": "bytec 5 // \"boxDynamicBytes\"", "stack_out": [ - "tmp%1#0" + "\"boxDynamicBytes\"" ] }, - "982": { - "op": "box_get", + "1026": { + "op": "frame_dig -1", "defined_out": [ - "maybe_exists%0#0", - "maybe_value%0#0" + "\"boxDynamicBytes\"", + "value#0 (copy)" ], "stack_out": [ - "maybe_value%0#0", - "maybe_exists%0#0" + "\"boxDynamicBytes\"", + "value#0 (copy)" ] }, - "983": { - "error": "Box must have value", - "op": "assert // Box must have value", - "stack_out": [ - "maybe_value%0#0" - ] + "1028": { + "op": "box_put", + "stack_out": [] }, - "984": { + "1029": { "retsub": true, "op": "retsub" }, - "985": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxMapWithDefault", + "1030": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxMap", "params": { - "key#0": "uint64" + "key#0": "uint64", + "value#0": "bytes" }, - "block": "getBoxMapWithDefault", + "block": "setBoxMap", "stack_in": [], - "op": "proto 1 1" + "op": "proto 2 0" }, - "988": { - "op": "frame_dig -1", + "1033": { + "op": "frame_dig -2", "defined_out": [ "key#0 (copy)" ], @@ -4138,7 +4372,7 @@ "key#0 (copy)" ] }, - "990": { + "1035": { "op": "itob", "defined_out": [ "tmp%0#0" @@ -4147,7 +4381,7 @@ "tmp%0#0" ] }, - "991": { + "1036": { "op": "bytec_2 // \"boxMap\"", "defined_out": [ "\"boxMap\"", @@ -4158,14 +4392,14 @@ "\"boxMap\"" ] }, - "992": { + "1037": { "op": "swap", "stack_out": [ "\"boxMap\"", "tmp%0#0" ] }, - "993": { + "1038": { "op": "concat", "defined_out": [ "tmp%1#0" @@ -4174,63 +4408,64 @@ "tmp%1#0" ] }, - "994": { - "op": "box_get", + "1039": { + "op": "dup", "defined_out": [ - "maybe_exists%0#0", - "maybe_value%0#0" + "tmp%1#0", + "tmp%1#0 (copy)" ], "stack_out": [ - "maybe_value%0#0", - "maybe_exists%0#0" + "tmp%1#0", + "tmp%1#0 (copy)" ] }, - "995": { - "op": "pushbytes \"default\"", + "1040": { + "op": "box_del", "defined_out": [ - "\"default\"", - "maybe_exists%0#0", - "maybe_value%0#0" + "tmp%1#0", + "{box_del}" ], "stack_out": [ - "maybe_value%0#0", - "maybe_exists%0#0", - "\"default\"" + "tmp%1#0", + "{box_del}" ] }, - "1004": { - "op": "cover 2", + "1041": { + "op": "pop", "stack_out": [ - "\"default\"", - "maybe_value%0#0", - "maybe_exists%0#0" + "tmp%1#0" ] }, - "1006": { - "op": "select", + "1042": { + "op": "frame_dig -1", "defined_out": [ - "state_get%0#0" + "tmp%1#0", + "value#0 (copy)" ], "stack_out": [ - "state_get%0#0" + "tmp%1#0", + "value#0 (copy)" ] }, - "1007": { + "1044": { + "op": "box_put", + "stack_out": [] + }, + "1045": { "retsub": true, "op": "retsub" }, - "1008": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxMap", + "1046": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxRef", "params": { - "key#0": "uint64", - "value#0": "bytes" + "key#0": "bytes" }, - "block": "setBoxMap", + "block": "setBoxRef", "stack_in": [], - "op": "proto 2 0" + "op": "proto 1 0" }, - "1011": { - "op": "frame_dig -2", + "1049": { + "op": "frame_dig -1", "defined_out": [ "key#0 (copy)" ], @@ -4238,99 +4473,65 @@ "key#0 (copy)" ] }, - "1013": { - "op": "itob", - "defined_out": [ - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0" - ] - }, - "1014": { - "op": "bytec_2 // \"boxMap\"", - "defined_out": [ - "\"boxMap\"", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "\"boxMap\"" - ] - }, - "1015": { - "op": "swap", - "stack_out": [ - "\"boxMap\"", - "tmp%0#0" - ] - }, - "1016": { - "op": "concat", - "defined_out": [ - "tmp%1#0" - ], - "stack_out": [ - "tmp%1#0" - ] - }, - "1017": { - "op": "dup", + "1051": { + "op": "intc_2 // 32", "defined_out": [ - "tmp%1#0", - "tmp%1#0 (copy)" + "32", + "key#0 (copy)" ], "stack_out": [ - "tmp%1#0", - "tmp%1#0 (copy)" + "key#0 (copy)", + "32" ] }, - "1018": { - "op": "box_del", + "1052": { + "op": "box_create", "defined_out": [ - "tmp%1#0", - "{box_del}" + "{box_create}" ], "stack_out": [ - "tmp%1#0", - "{box_del}" + "{box_create}" ] }, - "1019": { + "1053": { "op": "pop", + "stack_out": [] + }, + "1054": { + "op": "frame_dig -1", "stack_out": [ - "tmp%1#0" + "key#0 (copy)" ] }, - "1020": { - "op": "frame_dig -1", + "1056": { + "op": "txn Sender", "defined_out": [ - "tmp%1#0", - "value#0 (copy)" + "key#0 (copy)", + "senderBytes#0" ], "stack_out": [ - "tmp%1#0", - "value#0 (copy)" + "key#0 (copy)", + "senderBytes#0" ] }, - "1022": { + "1058": { "op": "box_put", "stack_out": [] }, - "1023": { + "1059": { "retsub": true, "op": "retsub" }, - "1024": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.deleteBoxMap", + "1060": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapLength", "params": { "key#0": "uint64" }, - "block": "deleteBoxMap", + "block": "boxMapLength", "stack_in": [], - "op": "proto 1 0" + "op": "proto 1 1" }, - "1027": { + "1063": { "op": "frame_dig -1", "defined_out": [ "key#0 (copy)" @@ -4339,7 +4540,7 @@ "key#0 (copy)" ] }, - "1029": { + "1065": { "op": "itob", "defined_out": [ "tmp%0#0" @@ -4348,7 +4549,7 @@ "tmp%0#0" ] }, - "1030": { + "1066": { "op": "bytec_2 // \"boxMap\"", "defined_out": [ "\"boxMap\"", @@ -4359,14 +4560,14 @@ "\"boxMap\"" ] }, - "1031": { + "1067": { "op": "swap", "stack_out": [ "\"boxMap\"", "tmp%0#0" ] }, - "1032": { + "1068": { "op": "concat", "defined_out": [ "tmp%1#0" @@ -4375,419 +4576,482 @@ "tmp%1#0" ] }, - "1033": { - "op": "box_del", + "1069": { + "op": "dup", "defined_out": [ - "{box_del}" + "tmp%1#0" ], "stack_out": [ - "{box_del}" + "tmp%1#0", + "tmp%1#0" ] }, - "1034": { - "op": "pop", - "stack_out": [] - }, - "1035": { - "retsub": true, - "op": "retsub" - }, - "1036": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.maybeBoxMap", - "params": { - "key#0": "uint64" - }, - "block": "maybeBoxMap", - "stack_in": [], - "op": "proto 1 2" - }, - "1039": { - "op": "frame_dig -1", + "1070": { + "op": "box_len", "defined_out": [ - "key#0 (copy)" + "maybe_exists%0#0", + "maybe_value%0#0", + "tmp%1#0" ], "stack_out": [ - "key#0 (copy)" + "tmp%1#0", + "maybe_value%0#0", + "maybe_exists%0#0" ] }, - "1041": { - "op": "itob", - "defined_out": [ - "tmp%0#0" - ], + "1071": { + "op": "bury 1", "stack_out": [ - "tmp%0#0" + "tmp%1#0", + "maybe_exists%0#0" ] }, - "1042": { - "op": "bytec_2 // \"boxMap\"", - "defined_out": [ - "\"boxMap\"", - "tmp%0#0" - ], + "1073": { + "op": "bnz boxMapLength_after_if_else@2", "stack_out": [ - "tmp%0#0", - "\"boxMap\"" + "tmp%1#0" ] }, - "1043": { - "op": "swap", + "1076": { + "op": "intc_1 // 0", "stack_out": [ - "\"boxMap\"", - "tmp%0#0" + "tmp%1#0", + "0" ] }, - "1044": { - "op": "concat", + "1077": { + "op": "swap" + }, + "1078": { + "retsub": true, + "op": "retsub" + }, + "1079": { + "block": "boxMapLength_after_if_else@2", + "stack_in": [ + "tmp%1#0" + ], + "op": "frame_dig 0", "defined_out": [ "tmp%1#0" ], "stack_out": [ + "tmp%1#0", "tmp%1#0" ] }, - "1045": { - "op": "box_get", + "1081": { + "op": "box_len", "defined_out": [ - "exists#0", - "value#0" + "check%0#0", + "tmp%1#0", + "value%0#0" ], "stack_out": [ - "value#0", - "exists#0" + "tmp%1#0", + "value%0#0", + "check%0#0" ] }, - "1046": { - "op": "dup", + "1082": { + "error": "Box must have value", + "op": "assert // Box must have value", "stack_out": [ - "value#0", - "exists#0", - "exists#0 (copy)" + "tmp%1#0", + "value%0#0" ] }, - "1047": { - "op": "uncover 2", + "1083": { + "op": "swap" + }, + "1084": { + "retsub": true, + "op": "retsub" + }, + "1085": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.lengthBoxRef", + "params": { + "key#0": "bytes" + }, + "block": "lengthBoxRef", + "stack_in": [], + "op": "proto 1 1" + }, + "1088": { + "op": "frame_dig -1", "defined_out": [ - "exists#0", - "value#0" + "key#0 (copy)" ], "stack_out": [ - "exists#0", - "exists#0", - "value#0" + "key#0 (copy)" ] }, - "1049": { - "op": "swap", + "1090": { + "op": "intc_2 // 32", "defined_out": [ - "exists#0", - "value#0" + "32", + "key#0 (copy)" ], "stack_out": [ - "exists#0", - "value#0", - "exists#0" + "key#0 (copy)", + "32" ] }, - "1050": { - "op": "bz maybeBoxMap_ternary_false@2", + "1091": { + "op": "box_create", + "defined_out": [ + "tmp%0#0" + ], "stack_out": [ - "exists#0", - "value#0" + "tmp%0#0" ] }, - "1053": { - "op": "frame_dig 1", - "defined_out": [ - "exists#0", - "ternary_result%0#1", - "value#0" - ], + "1092": { + "error": "boxRef creation failed", + "op": "assert // boxRef creation failed", + "stack_out": [] + }, + "1093": { + "op": "frame_dig -1", "stack_out": [ - "exists#0", - "value#0", - "ternary_result%0#1" + "key#0 (copy)" ] }, - "1055": { - "block": "maybeBoxMap_ternary_merge@3", - "stack_in": [ - "exists#0", - "value#0", - "ternary_result%0#1" - ], - "op": "frame_dig 0", + "1095": { + "op": "box_len", "defined_out": [ - "exists#0", - "ternary_result%0#1" + "check%0#0", + "value%0#0" ], "stack_out": [ - "exists#0", - "value#0", - "ternary_result%0#1", - "exists#0" + "value%0#0", + "check%0#0" ] }, - "1057": { - "op": "uncover 3" - }, - "1059": { - "op": "uncover 3" + "1096": { + "error": "Box must have value", + "op": "assert // Box must have value", + "stack_out": [ + "value%0#0" + ] }, - "1061": { + "1097": { "retsub": true, "op": "retsub" }, - "1062": { - "block": "maybeBoxMap_ternary_false@2", - "stack_in": [ - "exists#0", - "value#0" - ], - "op": "pushbytes \"\"", + "1098": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.deleteBox", + "params": {}, + "block": "deleteBox", + "stack_in": [], + "op": "bytec_3 // \"boxInt\"", "defined_out": [ - "ternary_result%0#1" + "\"boxInt\"" ], "stack_out": [ - "exists#0", - "value#0", - "ternary_result%0#1" + "\"boxInt\"" ] }, - "1064": { - "op": "b maybeBoxMap_ternary_merge@3" - }, - "1067": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapLength", - "params": { - "key#0": "uint64" - }, - "block": "boxMapLength", - "stack_in": [], - "op": "proto 1 1" - }, - "1070": { - "op": "frame_dig -1", + "1099": { + "op": "box_del", "defined_out": [ - "key#0 (copy)" + "{box_del}" ], "stack_out": [ - "key#0 (copy)" + "{box_del}" ] }, - "1072": { - "op": "itob", + "1100": { + "op": "pop", + "stack_out": [] + }, + "1101": { + "op": "bytec 5 // \"boxDynamicBytes\"", "defined_out": [ - "tmp%0#0" + "\"boxDynamicBytes\"" ], "stack_out": [ - "tmp%0#0" + "\"boxDynamicBytes\"" ] }, - "1073": { - "op": "bytec_2 // \"boxMap\"", + "1103": { + "op": "box_del", + "stack_out": [ + "{box_del}" + ] + }, + "1104": { + "op": "pop", + "stack_out": [] + }, + "1105": { + "op": "bytec 4 // \"boxString\"", "defined_out": [ - "\"boxMap\"", - "tmp%0#0" + "\"boxString\"" ], "stack_out": [ - "tmp%0#0", - "\"boxMap\"" + "\"boxString\"" ] }, - "1074": { - "op": "swap", + "1107": { + "op": "box_del", "stack_out": [ - "\"boxMap\"", - "tmp%0#0" + "{box_del}" ] }, - "1075": { - "op": "concat", + "1108": { + "op": "pop", + "stack_out": [] + }, + "1109": { + "op": "bytec_3 // \"boxInt\"", + "stack_out": [ + "\"boxInt\"" + ] + }, + "1110": { + "op": "box_get", "defined_out": [ - "tmp%1#0" + "maybe_exists%0#0", + "maybe_value%0#0" ], "stack_out": [ - "tmp%1#0" + "maybe_value%0#0", + "maybe_exists%0#0" ] }, - "1076": { - "op": "dup", + "1111": { + "op": "swap", + "stack_out": [ + "maybe_exists%0#0", + "maybe_value%0#0" + ] + }, + "1112": { + "op": "btoi", "defined_out": [ - "tmp%1#0" + "maybe_exists%0#0", + "maybe_value_converted%0#0" ], "stack_out": [ - "tmp%1#0", - "tmp%1#0" + "maybe_exists%0#0", + "maybe_value_converted%0#0" ] }, - "1077": { - "op": "box_len", + "1113": { + "op": "intc_3 // 42", "defined_out": [ + "42", "maybe_exists%0#0", - "maybe_value%0#0", - "tmp%1#0" + "maybe_value_converted%0#0" ], "stack_out": [ - "tmp%1#0", - "maybe_value%0#0", - "maybe_exists%0#0" + "maybe_exists%0#0", + "maybe_value_converted%0#0", + "42" ] }, - "1078": { - "op": "bury 1", + "1114": { + "op": "swap", "stack_out": [ - "tmp%1#0", - "maybe_exists%0#0" + "maybe_exists%0#0", + "42", + "maybe_value_converted%0#0" ] }, - "1080": { - "op": "bnz boxMapLength_after_if_else@2", + "1115": { + "op": "uncover 2", "stack_out": [ - "tmp%1#0" + "42", + "maybe_value_converted%0#0", + "maybe_exists%0#0" ] }, - "1083": { - "op": "intc_1 // 0", + "1117": { + "op": "select", + "defined_out": [ + "state_get%0#0" + ], "stack_out": [ - "tmp%1#0", - "0" + "state_get%0#0" ] }, - "1084": { - "op": "swap" - }, - "1085": { - "retsub": true, - "op": "retsub" + "1118": { + "op": "intc_3 // 42", + "stack_out": [ + "state_get%0#0", + "42" + ] }, - "1086": { - "block": "boxMapLength_after_if_else@2", - "stack_in": [ - "tmp%1#0" - ], - "op": "frame_dig 0", + "1119": { + "op": "==", "defined_out": [ - "tmp%1#0" + "tmp%0#0" ], "stack_out": [ - "tmp%1#0", - "tmp%1#0" + "tmp%0#0" ] }, - "1088": { - "op": "box_len", - "defined_out": [ - "check%0#0", - "tmp%1#0", - "value%0#0" - ], + "1120": { + "op": "assert", + "stack_out": [] + }, + "1121": { + "op": "bytec 5 // \"boxDynamicBytes\"", "stack_out": [ - "tmp%1#0", - "value%0#0", - "check%0#0" + "\"boxDynamicBytes\"" ] }, - "1089": { - "error": "Box must have value", - "op": "assert // Box must have value", + "1123": { + "op": "box_get", + "defined_out": [ + "maybe_exists%1#0", + "maybe_value%1#0" + ], "stack_out": [ - "tmp%1#0", - "value%0#0" + "maybe_value%1#0", + "maybe_exists%1#0" ] }, - "1090": { - "op": "swap" + "1124": { + "op": "pushbytes 0x00023432", + "defined_out": [ + "0x00023432", + "maybe_exists%1#0", + "maybe_value%1#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_exists%1#0", + "0x00023432" + ] }, - "1091": { - "retsub": true, - "op": "retsub" + "1130": { + "op": "cover 2", + "stack_out": [ + "0x00023432", + "maybe_value%1#0", + "maybe_exists%1#0" + ] }, - "1092": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapExists", - "params": { - "key#0": "uint64" - }, - "block": "boxMapExists", - "stack_in": [], - "op": "proto 1 1" + "1132": { + "op": "select", + "defined_out": [ + "state_get%1#0" + ], + "stack_out": [ + "state_get%1#0" + ] }, - "1095": { - "op": "frame_dig -1", + "1133": { + "op": "extract 2 0", "defined_out": [ - "key#0 (copy)" + "tmp%1#0" ], "stack_out": [ - "key#0 (copy)" + "tmp%1#0" ] }, - "1097": { - "op": "itob", + "1136": { + "op": "bytec 8 // \"42\"", "defined_out": [ - "tmp%0#0" + "\"42\"", + "tmp%1#0" ], "stack_out": [ - "tmp%0#0" + "tmp%1#0", + "\"42\"" ] }, - "1098": { - "op": "bytec_2 // \"boxMap\"", + "1138": { + "op": "==", "defined_out": [ - "\"boxMap\"", - "tmp%0#0" + "tmp%2#0" ], "stack_out": [ - "tmp%0#0", - "\"boxMap\"" + "tmp%2#0" ] }, - "1099": { - "op": "swap", + "1139": { + "op": "assert", + "stack_out": [] + }, + "1140": { + "op": "bytec 4 // \"boxString\"", "stack_out": [ - "\"boxMap\"", - "tmp%0#0" + "\"boxString\"" ] }, - "1100": { - "op": "concat", + "1142": { + "op": "box_get", "defined_out": [ - "tmp%1#0" + "maybe_exists%2#0", + "maybe_value%2#0" ], "stack_out": [ - "tmp%1#0" + "maybe_value%2#0", + "maybe_exists%2#0" ] }, - "1101": { - "op": "box_len", + "1143": { + "op": "bytec 8 // \"42\"", + "stack_out": [ + "maybe_value%2#0", + "maybe_exists%2#0", + "\"42\"" + ] + }, + "1145": { + "op": "cover 2", + "stack_out": [ + "\"42\"", + "maybe_value%2#0", + "maybe_exists%2#0" + ] + }, + "1147": { + "op": "select", "defined_out": [ - "maybe_exists%0#0", - "maybe_value%0#0" + "state_get%2#0" ], "stack_out": [ - "maybe_value%0#0", - "maybe_exists%0#0" + "state_get%2#0" ] }, - "1102": { - "op": "bury 1", + "1148": { + "op": "bytec 8 // \"42\"", "stack_out": [ - "maybe_exists%0#0" + "state_get%2#0", + "\"42\"" ] }, - "1104": { + "1150": { + "op": "==", + "defined_out": [ + "tmp%3#0" + ], + "stack_out": [ + "tmp%3#0" + ] + }, + "1151": { + "op": "assert", + "stack_out": [] + }, + "1152": { "retsub": true, "op": "retsub" }, - "1105": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxMapStruct", + "1153": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.deleteBoxMap", "params": { "key#0": "uint64" }, - "block": "getBoxMapStruct", + "block": "deleteBoxMap", "stack_in": [], - "op": "proto 1 1" + "op": "proto 1 0" }, - "1108": { + "1156": { "op": "frame_dig -1", "defined_out": [ "key#0 (copy)" @@ -4796,7 +5060,7 @@ "key#0 (copy)" ] }, - "1110": { + "1158": { "op": "itob", "defined_out": [ "tmp%0#0" @@ -4805,25 +5069,25 @@ "tmp%0#0" ] }, - "1111": { - "op": "bytec 6 // \"users\"", + "1159": { + "op": "bytec_2 // \"boxMap\"", "defined_out": [ - "\"users\"", + "\"boxMap\"", "tmp%0#0" ], "stack_out": [ "tmp%0#0", - "\"users\"" + "\"boxMap\"" ] }, - "1113": { + "1160": { "op": "swap", "stack_out": [ - "\"users\"", + "\"boxMap\"", "tmp%0#0" ] }, - "1114": { + "1161": { "op": "concat", "defined_out": [ "tmp%1#0" @@ -4832,40 +5096,34 @@ "tmp%1#0" ] }, - "1115": { - "op": "box_get", + "1162": { + "op": "box_del", "defined_out": [ - "maybe_exists%0#0", - "maybe_value%0#0" + "{box_del}" ], "stack_out": [ - "maybe_value%0#0", - "maybe_exists%0#0" + "{box_del}" ] }, - "1116": { - "error": "Box must have value", - "op": "assert // Box must have value", - "stack_out": [ - "maybe_value%0#0" - ] + "1163": { + "op": "pop", + "stack_out": [] }, - "1117": { + "1164": { "retsub": true, "op": "retsub" }, - "1118": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxMapStruct", + "1165": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.deleteBoxRef", "params": { - "key#0": "uint64", - "value#0": "bytes" + "key#0": "bytes" }, - "block": "setBoxMapStruct", + "block": "deleteBoxRef", "stack_in": [], - "op": "proto 2 1" + "op": "proto 1 0" }, - "1121": { - "op": "frame_dig -2", + "1168": { + "op": "frame_dig -1", "defined_out": [ "key#0 (copy)" ], @@ -4873,753 +5131,517 @@ "key#0 (copy)" ] }, - "1123": { - "op": "itob", + "1170": { + "op": "box_del", "defined_out": [ - "tmp%0#0" + "{box_del}" ], "stack_out": [ - "tmp%0#0" + "{box_del}" ] }, - "1124": { - "op": "bytec 6 // \"users\"", - "defined_out": [ - "\"users\"", - "tmp%0#0" - ], - "stack_out": [ - "tmp%0#0", - "\"users\"" - ] + "1171": { + "op": "pop", + "stack_out": [] }, - "1126": { - "op": "swap", + "1172": { + "op": "frame_dig -1", "stack_out": [ - "\"users\"", - "tmp%0#0" + "key#0 (copy)" ] }, - "1127": { - "op": "concat", + "1174": { + "op": "box_get", "defined_out": [ - "tmp%1#0" + "maybe_exists%0#0", + "maybe_value%0#0" ], "stack_out": [ - "tmp%1#0" + "maybe_value%0#0", + "maybe_exists%0#0" ] }, - "1128": { - "op": "dupn 2", - "defined_out": [ - "tmp%1#0", - "tmp%1#0 (copy)" - ], + "1175": { + "op": "pop", "stack_out": [ - "tmp%1#0", - "tmp%1#0", - "tmp%1#0 (copy)" + "maybe_value%0#0" ] }, - "1130": { - "op": "box_del", + "1176": { + "op": "pushbytes \"\"", "defined_out": [ - "tmp%1#0", - "{box_del}" + "\"\"", + "maybe_value%0#0" ], "stack_out": [ - "tmp%1#0", - "tmp%1#0", - "{box_del}" + "maybe_value%0#0", + "\"\"" ] }, - "1131": { - "op": "pop", + "1178": { + "op": "==", + "defined_out": [ + "tmp%1#0" + ], "stack_out": [ - "tmp%1#0", "tmp%1#0" ] }, - "1132": { - "op": "dup", - "stack_out": [ - "tmp%1#0", - "tmp%1#0", - "tmp%1#0 (copy)" - ] + "1179": { + "op": "bz deleteBoxRef_bool_false@4", + "stack_out": [] }, - "1133": { + "1182": { "op": "frame_dig -1", - "defined_out": [ - "tmp%1#0", - "tmp%1#0 (copy)", - "value#0 (copy)" - ], - "stack_out": [ - "tmp%1#0", - "tmp%1#0", - "tmp%1#0 (copy)", - "value#0 (copy)" - ] - }, - "1135": { - "op": "box_put", "stack_out": [ - "tmp%1#0", - "tmp%1#0" + "key#0 (copy)" ] }, - "1136": { + "1184": { "op": "box_get", "defined_out": [ - "maybe_exists%0#0", - "maybe_value%0#0", - "tmp%1#0" - ], - "stack_out": [ - "tmp%1#0", - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "1137": { - "error": "Box must have value", - "op": "assert // Box must have value", - "stack_out": [ - "tmp%1#0", - "maybe_value%0#0" - ] - }, - "1138": { - "op": "dup", - "defined_out": [ - "maybe_value%0#0", - "maybe_value%0#0 (copy)", - "tmp%1#0" + "maybe_exists%1#0", + "maybe_value%1#0" ], "stack_out": [ - "tmp%1#0", - "maybe_value%0#0", - "maybe_value%0#0 (copy)" - ] - }, - "1139": { - "op": "intc_1 // 0", - "stack_out": [ - "tmp%1#0", - "maybe_value%0#0", - "maybe_value%0#0 (copy)", - "0" + "maybe_value%1#0", + "maybe_exists%1#0" ] }, - "1140": { - "op": "extract_uint16", - "defined_out": [ - "item_start_offset%0#0", - "maybe_value%0#0", - "tmp%1#0" - ], + "1185": { + "op": "bury 1", "stack_out": [ - "tmp%1#0", - "maybe_value%0#0", - "item_start_offset%0#0" + "maybe_exists%1#0" ] }, - "1141": { - "op": "dig 1", - "stack_out": [ - "tmp%1#0", - "maybe_value%0#0", - "item_start_offset%0#0", - "maybe_value%0#0 (copy)" - ] + "1187": { + "op": "bnz deleteBoxRef_bool_false@4", + "stack_out": [] }, - "1143": { - "op": "len", + "1190": { + "op": "intc_0 // 1", "defined_out": [ - "item_end_offset%0#0", - "item_start_offset%0#0", - "maybe_value%0#0", - "tmp%1#0" + "and_result%0#0" ], "stack_out": [ - "tmp%1#0", - "maybe_value%0#0", - "item_start_offset%0#0", - "item_end_offset%0#0" + "and_result%0#0" ] }, - "1144": { - "op": "substring3", - "defined_out": [ - "tmp%1#0", - "tmp%4#0" + "1191": { + "block": "deleteBoxRef_bool_merge@5", + "stack_in": [ + "and_result%0#0" ], - "stack_out": [ - "tmp%1#0", - "tmp%4#0" - ] + "error": "assert target is match for conditions", + "op": "assert // assert target is match for conditions", + "defined_out": [], + "stack_out": [] }, - "1145": { - "op": "frame_dig -1", - "stack_out": [ - "tmp%1#0", - "tmp%4#0", - "value#0 (copy)" - ] + "1192": { + "retsub": true, + "op": "retsub" }, - "1147": { + "1193": { + "block": "deleteBoxRef_bool_false@4", + "stack_in": [], "op": "intc_1 // 0", - "stack_out": [ - "tmp%1#0", - "tmp%4#0", - "value#0 (copy)", - "0" - ] - }, - "1148": { - "op": "extract_uint16", - "defined_out": [ - "item_start_offset%1#0", - "tmp%1#0", - "tmp%4#0" - ], - "stack_out": [ - "tmp%1#0", - "tmp%4#0", - "item_start_offset%1#0" - ] - }, - "1149": { - "op": "frame_dig -1", - "stack_out": [ - "tmp%1#0", - "tmp%4#0", - "item_start_offset%1#0", - "value#0 (copy)" - ] - }, - "1151": { - "op": "len", "defined_out": [ - "item_end_offset%1#0", - "item_start_offset%1#0", - "tmp%1#0", - "tmp%4#0" + "and_result%0#0" ], "stack_out": [ - "tmp%1#0", - "tmp%4#0", - "item_start_offset%1#0", - "item_end_offset%1#0" - ] - }, - "1152": { - "op": "frame_dig -1", - "stack_out": [ - "tmp%1#0", - "tmp%4#0", - "item_start_offset%1#0", - "item_end_offset%1#0", - "value#0 (copy)" + "and_result%0#0" ] }, - "1154": { - "op": "cover 2", - "stack_out": [ - "tmp%1#0", - "tmp%4#0", - "value#0 (copy)", - "item_start_offset%1#0", - "item_end_offset%1#0" - ] + "1194": { + "op": "b deleteBoxRef_bool_merge@5" }, - "1156": { - "op": "substring3", - "defined_out": [ - "tmp%1#0", - "tmp%4#0", - "tmp%5#0" - ], - "stack_out": [ - "tmp%1#0", - "tmp%4#0", - "tmp%5#0" - ] + "1197": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.extractBoxRef", + "params": { + "key#0": "bytes" + }, + "block": "extractBoxRef", + "stack_in": [], + "op": "proto 1 0" }, - "1157": { - "op": "==", + "1200": { + "op": "txn Sender", "defined_out": [ - "tmp%1#0", - "tmp%6#0" + "senderBytes#0" ], "stack_out": [ - "tmp%1#0", - "tmp%6#0" - ] - }, - "1158": { - "op": "bz setBoxMapStruct_bool_false@4", - "stack_out": [ - "tmp%1#0" - ] - }, - "1161": { - "op": "frame_dig 0", - "stack_out": [ - "tmp%1#0", - "tmp%1#0" + "senderBytes#0" ] }, - "1163": { - "op": "box_get", + "1202": { + "op": "global CurrentApplicationAddress", "defined_out": [ - "maybe_exists%1#0", - "maybe_value%1#0", - "tmp%1#0" + "appAddress#0", + "senderBytes#0" ], "stack_out": [ - "tmp%1#0", - "maybe_value%1#0", - "maybe_exists%1#0" - ] - }, - "1164": { - "error": "Box must have value", - "op": "assert // Box must have value", - "stack_out": [ - "tmp%1#0", - "maybe_value%1#0" + "senderBytes#0", + "appAddress#0" ] }, - "1165": { - "error": "Index access is out of bounds", - "op": "extract 2 8 // on error: Index access is out of bounds", + "1204": { + "op": "dup", "defined_out": [ - "tmp%1#0", - "tmp%9#0" + "appAddress#0", + "appAddress#0 (copy)", + "senderBytes#0" ], "stack_out": [ - "tmp%1#0", - "tmp%9#0" - ] - }, - "1168": { - "op": "frame_dig -1", - "stack_out": [ - "tmp%1#0", - "tmp%9#0", - "value#0 (copy)" + "senderBytes#0", + "appAddress#0", + "appAddress#0 (copy)" ] }, - "1170": { - "error": "Index access is out of bounds", - "op": "extract 2 8 // on error: Index access is out of bounds", + "1205": { + "op": "len", "defined_out": [ - "tmp%1#0", - "tmp%10#0", - "tmp%9#0" + "appAddress#0", + "senderBytes#0", + "tmp%0#0" ], "stack_out": [ - "tmp%1#0", - "tmp%9#0", - "tmp%10#0" + "senderBytes#0", + "appAddress#0", + "tmp%0#0" ] }, - "1173": { - "op": "==", + "1206": { + "op": "dig 2", "defined_out": [ - "tmp%1#0", - "tmp%11#0" + "appAddress#0", + "senderBytes#0", + "senderBytes#0 (copy)", + "tmp%0#0" ], "stack_out": [ - "tmp%1#0", - "tmp%11#0" - ] - }, - "1174": { - "op": "bz setBoxMapStruct_bool_false@4", - "stack_out": [ - "tmp%1#0" - ] - }, - "1177": { - "op": "frame_dig 0", - "stack_out": [ - "tmp%1#0", - "tmp%1#0" + "senderBytes#0", + "appAddress#0", + "tmp%0#0", + "senderBytes#0 (copy)" ] }, - "1179": { - "op": "box_get", + "1208": { + "op": "len", "defined_out": [ - "maybe_exists%2#0", - "maybe_value%2#0", + "appAddress#0", + "senderBytes#0", + "tmp%0#0", "tmp%1#0" ], "stack_out": [ - "tmp%1#0", - "maybe_value%2#0", - "maybe_exists%2#0" - ] - }, - "1180": { - "error": "Box must have value", - "op": "assert // Box must have value", - "stack_out": [ - "tmp%1#0", - "maybe_value%2#0" + "senderBytes#0", + "appAddress#0", + "tmp%0#0", + "tmp%1#0" ] }, - "1181": { - "error": "Index access is out of bounds", - "op": "extract 10 8 // on error: Index access is out of bounds", + "1209": { + "op": "+", "defined_out": [ - "tmp%1#0", - "tmp%14#0" + "appAddress#0", + "senderBytes#0", + "totalSize#0" ], "stack_out": [ - "tmp%1#0", - "tmp%14#0" + "senderBytes#0", + "appAddress#0", + "totalSize#0" ] }, - "1184": { + "1210": { "op": "frame_dig -1", - "stack_out": [ - "tmp%1#0", - "tmp%14#0", - "value#0 (copy)" - ] - }, - "1186": { - "error": "Index access is out of bounds", - "op": "extract 10 8 // on error: Index access is out of bounds", - "defined_out": [ - "tmp%1#0", - "tmp%14#0", - "tmp%15#0" - ], - "stack_out": [ - "tmp%1#0", - "tmp%14#0", - "tmp%15#0" - ] - }, - "1189": { - "op": "==", - "defined_out": [ - "tmp%1#0", - "tmp%16#0" - ], - "stack_out": [ - "tmp%1#0", - "tmp%16#0" - ] - }, - "1190": { - "op": "bz setBoxMapStruct_bool_false@4", - "stack_out": [ - "tmp%1#0" - ] - }, - "1193": { - "op": "intc_0 // 1", "defined_out": [ - "and_result%0#0", - "tmp%1#0" + "appAddress#0", + "key#0 (copy)", + "senderBytes#0", + "totalSize#0" ], "stack_out": [ - "tmp%1#0", - "and_result%0#0" + "senderBytes#0", + "appAddress#0", + "totalSize#0", + "key#0 (copy)" ] }, - "1194": { - "block": "setBoxMapStruct_bool_merge@5", - "stack_in": [ - "tmp%1#0", - "and_result%0#0" - ], - "error": "boxMapStruct value mismatch", - "op": "assert // boxMapStruct value mismatch", - "defined_out": [], + "1212": { + "op": "swap", "stack_out": [ - "tmp%1#0" + "senderBytes#0", + "appAddress#0", + "key#0 (copy)", + "totalSize#0" ] }, - "1195": { - "op": "intc_0 // 1", + "1213": { + "op": "box_create", "defined_out": [ - "1" + "appAddress#0", + "senderBytes#0", + "tmp%2#0" ], "stack_out": [ - "tmp%1#0", - "1" + "senderBytes#0", + "appAddress#0", + "tmp%2#0" ] }, - "1196": { - "op": "swap" - }, - "1197": { - "retsub": true, - "op": "retsub" - }, - "1198": { - "block": "setBoxMapStruct_bool_false@4", - "stack_in": [ - "tmp%1#0" - ], - "op": "intc_1 // 0", - "defined_out": [ - "and_result%0#0" - ], + "1214": { + "error": "boxRef creation failed", + "op": "assert // boxRef creation failed", "stack_out": [ - "tmp%1#0", - "and_result%0#0" + "senderBytes#0", + "appAddress#0" ] }, - "1199": { - "op": "b setBoxMapStruct_bool_merge@5" - }, - "1202": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapStructLength", - "params": { - "key#0": "uint64" - }, - "block": "boxMapStructLength", - "stack_in": [], - "op": "proto 1 1" - }, - "1205": { + "1215": { "op": "frame_dig -1", - "defined_out": [ - "key#0 (copy)" - ], "stack_out": [ + "senderBytes#0", + "appAddress#0", "key#0 (copy)" ] }, - "1207": { - "op": "itob", + "1217": { + "op": "intc_1 // 0", "defined_out": [ - "tmp%0#0" + "0", + "appAddress#0", + "key#0 (copy)", + "senderBytes#0" ], "stack_out": [ - "tmp%0#0" + "senderBytes#0", + "appAddress#0", + "key#0 (copy)", + "0" ] }, - "1208": { - "op": "bytec 6 // \"users\"", - "defined_out": [ - "\"users\"", - "tmp%0#0" - ], + "1218": { + "op": "dig 3", "stack_out": [ - "tmp%0#0", - "\"users\"" + "senderBytes#0", + "appAddress#0", + "key#0 (copy)", + "0", + "senderBytes#0 (copy)" ] }, - "1210": { - "op": "swap", + "1220": { + "op": "box_replace", "stack_out": [ - "\"users\"", - "tmp%0#0" + "senderBytes#0", + "appAddress#0" ] }, - "1211": { - "op": "concat", - "defined_out": [ - "tmp%1#0" - ], + "1221": { + "op": "frame_dig -1", "stack_out": [ - "tmp%1#0" + "senderBytes#0", + "appAddress#0", + "key#0 (copy)" ] }, - "1212": { - "op": "dup", - "defined_out": [ - "tmp%1#0", - "tmp%1#0 (copy)" - ], + "1223": { + "op": "intc_1 // 0", "stack_out": [ - "tmp%1#0", - "tmp%1#0 (copy)" + "senderBytes#0", + "appAddress#0", + "key#0 (copy)", + "0" ] }, - "1213": { - "op": "box_del", - "defined_out": [ - "tmp%1#0", - "{box_del}" - ], + "1224": { + "op": "dup", "stack_out": [ - "tmp%1#0", - "{box_del}" + "senderBytes#0", + "appAddress#0", + "key#0 (copy)", + "0", + "0" ] }, - "1214": { - "op": "pop", + "1225": { + "op": "dig 3", "stack_out": [ - "tmp%1#0" + "senderBytes#0", + "appAddress#0", + "key#0 (copy)", + "0", + "0", + "appAddress#0 (copy)" ] }, - "1215": { - "op": "dup", + "1227": { + "op": "box_splice", "stack_out": [ - "tmp%1#0", - "tmp%1#0 (copy)" + "senderBytes#0", + "appAddress#0" ] }, - "1216": { - "op": "pushbytes 0x0012000000000000004600000000000004d20008746573744e616d65", - "defined_out": [ - "0x0012000000000000004600000000000004d20008746573744e616d65", - "tmp%1#0", - "tmp%1#0 (copy)" - ], + "1228": { + "op": "frame_dig -1", "stack_out": [ - "tmp%1#0", - "tmp%1#0 (copy)", - "0x0012000000000000004600000000000004d20008746573744e616d65" + "senderBytes#0", + "appAddress#0", + "key#0 (copy)" ] }, - "1246": { - "op": "box_put", + "1230": { + "op": "intc_1 // 0", "stack_out": [ - "tmp%1#0" + "senderBytes#0", + "appAddress#0", + "key#0 (copy)", + "0" ] }, - "1247": { - "op": "dup", + "1231": { + "op": "intc_2 // 32", + "defined_out": [ + "0", + "32", + "appAddress#0", + "key#0 (copy)", + "senderBytes#0" + ], "stack_out": [ - "tmp%1#0", - "tmp%1#0 (copy)" + "senderBytes#0", + "appAddress#0", + "key#0 (copy)", + "0", + "32" ] }, - "1248": { - "op": "box_get", + "1232": { + "op": "box_extract", "defined_out": [ - "maybe_exists%0#0", - "maybe_value%0#0", - "tmp%1#0" + "appAddress#0", + "part1#0", + "senderBytes#0" ], "stack_out": [ - "tmp%1#0", - "maybe_value%0#0", - "maybe_exists%0#0" + "senderBytes#0", + "appAddress#0", + "part1#0" ] }, - "1249": { - "error": "Box must have value", - "op": "assert // Box must have value", + "1233": { + "op": "frame_dig -1", "stack_out": [ - "tmp%1#0", - "maybe_value%0#0" + "senderBytes#0", + "appAddress#0", + "part1#0", + "key#0 (copy)" ] }, - "1250": { - "op": "len", - "defined_out": [ - "tmp%1#0", - "tmp%4#0" - ], + "1235": { + "op": "intc_2 // 32", "stack_out": [ - "tmp%1#0", - "tmp%4#0" + "senderBytes#0", + "appAddress#0", + "part1#0", + "key#0 (copy)", + "32" ] }, - "1251": { - "op": "pushint 28 // 28", - "defined_out": [ - "28", - "tmp%1#0", - "tmp%4#0" - ], + "1236": { + "op": "dup", "stack_out": [ - "tmp%1#0", - "tmp%4#0", - "28" + "senderBytes#0", + "appAddress#0", + "part1#0", + "key#0 (copy)", + "32", + "32" ] }, - "1253": { - "op": "==", + "1237": { + "op": "box_extract", "defined_out": [ - "tmp%1#0", - "tmp%6#0" + "appAddress#0", + "part1#0", + "part2#0", + "senderBytes#0" ], "stack_out": [ - "tmp%1#0", - "tmp%6#0" + "senderBytes#0", + "appAddress#0", + "part1#0", + "part2#0" ] }, - "1254": { - "error": "boxMapStruct bytes length mismatch", - "op": "assert // boxMapStruct bytes length mismatch", + "1238": { + "op": "swap", "stack_out": [ - "tmp%1#0" + "senderBytes#0", + "appAddress#0", + "part2#0", + "part1#0" ] }, - "1255": { - "op": "box_len", - "defined_out": [ - "check%0#0", - "value%0#0" - ], + "1239": { + "op": "uncover 2", "stack_out": [ - "value%0#0", - "check%0#0" + "senderBytes#0", + "part2#0", + "part1#0", + "appAddress#0" ] }, - "1256": { - "error": "Box must have value", - "op": "assert // Box must have value", + "1241": { + "op": "==", + "defined_out": [ + "part2#0", + "senderBytes#0", + "tmp%3#0" + ], "stack_out": [ - "value%0#0" + "senderBytes#0", + "part2#0", + "tmp%3#0" ] }, - "1257": { - "op": "pushint 28 // 28", + "1242": { + "error": "First part should match app address", + "op": "assert // First part should match app address", "stack_out": [ - "value%0#0", - "28" + "senderBytes#0", + "part2#0" ] }, - "1259": { + "1243": { "op": "==", "defined_out": [ - "tmp%10#0" + "tmp%4#0" ], "stack_out": [ - "tmp%10#0" + "tmp%4#0" ] }, - "1260": { - "error": "boxMapStruct length mismatch", - "op": "assert // boxMapStruct length mismatch", + "1244": { + "error": "Second part should match sender bytes", + "op": "assert // Second part should match sender bytes", "stack_out": [] }, - "1261": { - "op": "intc_0 // 1", - "defined_out": [ - "1" - ], - "stack_out": [ - "1" - ] - }, - "1262": { + "1245": { "retsub": true, "op": "retsub" }, - "1263": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapStructExists", + "1246": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxMapStruct", "params": { "key#0": "uint64" }, - "block": "boxMapStructExists", + "block": "getBoxMapStruct", "stack_in": [], "op": "proto 1 1" }, - "1266": { + "1249": { "op": "frame_dig -1", "defined_out": [ "key#0 (copy)" @@ -5628,7 +5650,7 @@ "key#0 (copy)" ] }, - "1268": { + "1251": { "op": "itob", "defined_out": [ "tmp%0#0" @@ -5637,7 +5659,7 @@ "tmp%0#0" ] }, - "1269": { + "1252": { "op": "bytec 6 // \"users\"", "defined_out": [ "\"users\"", @@ -5648,14 +5670,14 @@ "\"users\"" ] }, - "1271": { + "1254": { "op": "swap", "stack_out": [ "\"users\"", "tmp%0#0" ] }, - "1272": { + "1255": { "op": "concat", "defined_out": [ "tmp%1#0" @@ -5664,8 +5686,8 @@ "tmp%1#0" ] }, - "1273": { - "op": "box_len", + "1256": { + "op": "box_get", "defined_out": [ "maybe_exists%0#0", "maybe_value%0#0" @@ -5675,191 +5697,104 @@ "maybe_exists%0#0" ] }, - "1274": { - "op": "bury 1", + "1257": { + "error": "Box must have value", + "op": "assert // Box must have value", "stack_out": [ - "maybe_exists%0#0" + "maybe_value%0#0" ] }, - "1276": { + "1258": { "retsub": true, "op": "retsub" }, - "1277": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxRef", - "params": {}, - "block": "getBoxRef", + "1259": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapStructExists", + "params": { + "key#0": "uint64" + }, + "block": "boxMapStructExists", "stack_in": [], - "op": "bytec 8 // \"boxRef\"", - "defined_out": [ - "\"boxRef\"" - ], - "stack_out": [ - "\"boxRef\"" - ] + "op": "proto 1 1" }, - "1279": { - "op": "intc_2 // 32", + "1262": { + "op": "frame_dig -1", "defined_out": [ - "\"boxRef\"", - "32" + "key#0 (copy)" ], "stack_out": [ - "\"boxRef\"", - "32" + "key#0 (copy)" ] }, - "1280": { - "op": "box_create", + "1264": { + "op": "itob", "defined_out": [ - "{box_create}" + "tmp%0#0" ], "stack_out": [ - "{box_create}" + "tmp%0#0" ] }, - "1281": { - "op": "pop", - "stack_out": [] - }, - "1282": { - "op": "txn Sender", + "1265": { + "op": "bytec 6 // \"users\"", "defined_out": [ - "senderBytes#0" + "\"users\"", + "tmp%0#0" ], "stack_out": [ - "senderBytes#0" + "tmp%0#0", + "\"users\"" ] }, - "1284": { - "op": "bytec 8 // \"boxRef\"", + "1267": { + "op": "swap", "stack_out": [ - "senderBytes#0", - "\"boxRef\"" + "\"users\"", + "tmp%0#0" ] }, - "1286": { - "op": "dig 1", + "1268": { + "op": "concat", "defined_out": [ - "\"boxRef\"", - "senderBytes#0", - "senderBytes#0 (copy)" + "tmp%1#0" ], "stack_out": [ - "senderBytes#0", - "\"boxRef\"", - "senderBytes#0 (copy)" - ] - }, - "1288": { - "op": "box_put", - "stack_out": [ - "senderBytes#0" - ] - }, - "1289": { - "op": "bytec 8 // \"boxRef\"", - "stack_out": [ - "senderBytes#0", - "\"boxRef\"" + "tmp%1#0" ] }, - "1291": { - "op": "box_get", + "1269": { + "op": "box_len", "defined_out": [ "maybe_exists%0#0", - "maybe_value%0#0", - "senderBytes#0" + "maybe_value%0#0" ], "stack_out": [ - "senderBytes#0", "maybe_value%0#0", "maybe_exists%0#0" ] }, - "1292": { - "op": "dig 2", - "stack_out": [ - "senderBytes#0", - "maybe_value%0#0", - "maybe_exists%0#0", - "senderBytes#0 (copy)" - ] - }, - "1294": { - "op": "cover 2", + "1270": { + "op": "bury 1", "stack_out": [ - "senderBytes#0", - "senderBytes#0 (copy)", - "maybe_value%0#0", "maybe_exists%0#0" ] }, - "1296": { - "op": "select", - "defined_out": [ - "senderBytes#0", - "value#0" - ], - "stack_out": [ - "senderBytes#0", - "value#0" - ] - }, - "1297": { - "op": "dup", - "defined_out": [ - "senderBytes#0", - "value#0", - "value#0 (copy)" - ], - "stack_out": [ - "senderBytes#0", - "value#0", - "value#0 (copy)" - ] - }, - "1298": { - "op": "uncover 2", - "stack_out": [ - "value#0", - "value#0 (copy)", - "senderBytes#0" - ] - }, - "1300": { - "op": "==", - "defined_out": [ - "tmp%0#0", - "value#0" - ], - "stack_out": [ - "value#0", - "tmp%0#0" - ] - }, - "1301": { - "error": "boxRef value mismatch", - "op": "assert // boxRef value mismatch", - "stack_out": [ - "value#0" - ] - }, - "1302": { + "1272": { "retsub": true, "op": "retsub" }, - "1303": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxRef", + "1273": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxMapStruct", "params": { - "key#0": "bytes" + "key#0": "uint64", + "value#0": "bytes" }, - "block": "setBoxRef", + "block": "setBoxMapStruct", "stack_in": [], - "op": "proto 1 0" + "op": "proto 2 1" }, - "1306": { - "op": "frame_dig -1", + "1276": { + "op": "frame_dig -2", "defined_out": [ "key#0 (copy)" ], @@ -5867,674 +5802,739 @@ "key#0 (copy)" ] }, - "1308": { - "op": "intc_2 // 32", + "1278": { + "op": "itob", "defined_out": [ - "32", - "key#0 (copy)" + "tmp%0#0" ], "stack_out": [ - "key#0 (copy)", - "32" + "tmp%0#0" ] }, - "1309": { - "op": "box_create", + "1279": { + "op": "bytec 6 // \"users\"", "defined_out": [ - "{box_create}" + "\"users\"", + "tmp%0#0" ], "stack_out": [ - "{box_create}" + "tmp%0#0", + "\"users\"" ] }, - "1310": { - "op": "pop", - "stack_out": [] - }, - "1311": { - "op": "frame_dig -1", + "1281": { + "op": "swap", "stack_out": [ - "key#0 (copy)" + "\"users\"", + "tmp%0#0" ] }, - "1313": { - "op": "txn Sender", + "1282": { + "op": "concat", "defined_out": [ - "key#0 (copy)", - "senderBytes#0" + "tmp%1#0" ], "stack_out": [ - "key#0 (copy)", - "senderBytes#0" - ] - }, - "1315": { - "op": "box_put", - "stack_out": [] - }, - "1316": { - "retsub": true, - "op": "retsub" - }, - "1317": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.deleteBoxRef", - "params": { - "key#0": "bytes" - }, - "block": "deleteBoxRef", - "stack_in": [], - "op": "proto 1 0" + "tmp%1#0" + ] }, - "1320": { - "op": "frame_dig -1", + "1283": { + "op": "dupn 2", "defined_out": [ - "key#0 (copy)" + "tmp%1#0", + "tmp%1#0 (copy)" ], "stack_out": [ - "key#0 (copy)" + "tmp%1#0", + "tmp%1#0", + "tmp%1#0 (copy)" ] }, - "1322": { + "1285": { "op": "box_del", "defined_out": [ + "tmp%1#0", "{box_del}" ], "stack_out": [ + "tmp%1#0", + "tmp%1#0", "{box_del}" ] }, - "1323": { + "1286": { "op": "pop", - "stack_out": [] + "stack_out": [ + "tmp%1#0", + "tmp%1#0" + ] + }, + "1287": { + "op": "dup", + "stack_out": [ + "tmp%1#0", + "tmp%1#0", + "tmp%1#0 (copy)" + ] }, - "1324": { + "1288": { "op": "frame_dig -1", + "defined_out": [ + "tmp%1#0", + "tmp%1#0 (copy)", + "value#0 (copy)" + ], "stack_out": [ - "key#0 (copy)" + "tmp%1#0", + "tmp%1#0", + "tmp%1#0 (copy)", + "value#0 (copy)" ] }, - "1326": { + "1290": { + "op": "box_put", + "stack_out": [ + "tmp%1#0", + "tmp%1#0" + ] + }, + "1291": { "op": "box_get", "defined_out": [ "maybe_exists%0#0", - "maybe_value%0#0" + "maybe_value%0#0", + "tmp%1#0" ], "stack_out": [ + "tmp%1#0", "maybe_value%0#0", "maybe_exists%0#0" ] }, - "1327": { - "op": "pop", + "1292": { + "error": "Box must have value", + "op": "assert // Box must have value", "stack_out": [ + "tmp%1#0", "maybe_value%0#0" ] }, - "1328": { - "op": "pushbytes \"\"", + "1293": { + "op": "dup", "defined_out": [ - "\"\"", - "maybe_value%0#0" + "maybe_value%0#0", + "maybe_value%0#0 (copy)", + "tmp%1#0" ], "stack_out": [ + "tmp%1#0", "maybe_value%0#0", - "\"\"" + "maybe_value%0#0 (copy)" ] }, - "1330": { - "op": "==", + "1294": { + "op": "intc_1 // 0", + "stack_out": [ + "tmp%1#0", + "maybe_value%0#0", + "maybe_value%0#0 (copy)", + "0" + ] + }, + "1295": { + "op": "extract_uint16", "defined_out": [ + "item_start_offset%0#0", + "maybe_value%0#0", "tmp%1#0" ], "stack_out": [ - "tmp%1#0" + "tmp%1#0", + "maybe_value%0#0", + "item_start_offset%0#0" ] }, - "1331": { - "op": "bz deleteBoxRef_bool_false@4", - "stack_out": [] + "1296": { + "op": "dig 1", + "stack_out": [ + "tmp%1#0", + "maybe_value%0#0", + "item_start_offset%0#0", + "maybe_value%0#0 (copy)" + ] }, - "1334": { - "op": "frame_dig -1", + "1298": { + "op": "len", + "defined_out": [ + "item_end_offset%0#0", + "item_start_offset%0#0", + "maybe_value%0#0", + "tmp%1#0" + ], "stack_out": [ - "key#0 (copy)" + "tmp%1#0", + "maybe_value%0#0", + "item_start_offset%0#0", + "item_end_offset%0#0" ] }, - "1336": { - "op": "box_get", + "1299": { + "op": "substring3", "defined_out": [ - "maybe_exists%1#0", - "maybe_value%1#0" + "tmp%1#0", + "tmp%4#0" ], "stack_out": [ - "maybe_value%1#0", - "maybe_exists%1#0" + "tmp%1#0", + "tmp%4#0" ] }, - "1337": { - "op": "bury 1", + "1300": { + "op": "frame_dig -1", "stack_out": [ - "maybe_exists%1#0" + "tmp%1#0", + "tmp%4#0", + "value#0 (copy)" ] }, - "1339": { - "op": "bnz deleteBoxRef_bool_false@4", - "stack_out": [] + "1302": { + "op": "intc_1 // 0", + "stack_out": [ + "tmp%1#0", + "tmp%4#0", + "value#0 (copy)", + "0" + ] }, - "1342": { - "op": "intc_0 // 1", + "1303": { + "op": "extract_uint16", "defined_out": [ - "and_result%0#0" + "item_start_offset%1#0", + "tmp%1#0", + "tmp%4#0" ], "stack_out": [ - "and_result%0#0" + "tmp%1#0", + "tmp%4#0", + "item_start_offset%1#0" ] }, - "1343": { - "block": "deleteBoxRef_bool_merge@5", - "stack_in": [ - "and_result%0#0" + "1304": { + "op": "frame_dig -1", + "stack_out": [ + "tmp%1#0", + "tmp%4#0", + "item_start_offset%1#0", + "value#0 (copy)" + ] + }, + "1306": { + "op": "len", + "defined_out": [ + "item_end_offset%1#0", + "item_start_offset%1#0", + "tmp%1#0", + "tmp%4#0" ], - "error": "assert target is match for conditions", - "op": "assert // assert target is match for conditions", - "defined_out": [], - "stack_out": [] + "stack_out": [ + "tmp%1#0", + "tmp%4#0", + "item_start_offset%1#0", + "item_end_offset%1#0" + ] }, - "1344": { - "retsub": true, - "op": "retsub" + "1307": { + "op": "frame_dig -1", + "stack_out": [ + "tmp%1#0", + "tmp%4#0", + "item_start_offset%1#0", + "item_end_offset%1#0", + "value#0 (copy)" + ] }, - "1345": { - "block": "deleteBoxRef_bool_false@4", - "stack_in": [], - "op": "intc_1 // 0", + "1309": { + "op": "cover 2", + "stack_out": [ + "tmp%1#0", + "tmp%4#0", + "value#0 (copy)", + "item_start_offset%1#0", + "item_end_offset%1#0" + ] + }, + "1311": { + "op": "substring3", "defined_out": [ - "and_result%0#0" + "tmp%1#0", + "tmp%4#0", + "tmp%5#0" ], "stack_out": [ - "and_result%0#0" + "tmp%1#0", + "tmp%4#0", + "tmp%5#0" ] }, - "1346": { - "op": "b deleteBoxRef_bool_merge@5" + "1312": { + "op": "==", + "defined_out": [ + "tmp%1#0", + "tmp%6#0" + ], + "stack_out": [ + "tmp%1#0", + "tmp%6#0" + ] }, - "1349": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.maybeBoxRef", - "params": { - "key#0": "bytes" - }, - "block": "maybeBoxRef", - "stack_in": [], - "op": "proto 1 2" + "1313": { + "op": "bz setBoxMapStruct_bool_false@4", + "stack_out": [ + "tmp%1#0" + ] }, - "1352": { - "op": "frame_dig -1", + "1316": { + "op": "frame_dig 0", + "stack_out": [ + "tmp%1#0", + "tmp%1#0" + ] + }, + "1318": { + "op": "box_get", "defined_out": [ - "key#0 (copy)" + "maybe_exists%1#0", + "maybe_value%1#0", + "tmp%1#0" ], "stack_out": [ - "key#0 (copy)" + "tmp%1#0", + "maybe_value%1#0", + "maybe_exists%1#0" + ] + }, + "1319": { + "error": "Box must have value", + "op": "assert // Box must have value", + "stack_out": [ + "tmp%1#0", + "maybe_value%1#0" ] }, - "1354": { - "op": "box_get", + "1320": { + "error": "Index access is out of bounds", + "op": "extract 2 8 // on error: Index access is out of bounds", "defined_out": [ - "exists#0", - "value#0" + "tmp%1#0", + "tmp%9#0" ], "stack_out": [ - "value#0", - "exists#0" + "tmp%1#0", + "tmp%9#0" ] }, - "1355": { - "retsub": true, - "op": "retsub" - }, - "1356": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.lengthBoxRef", - "params": { - "key#0": "bytes" - }, - "block": "lengthBoxRef", - "stack_in": [], - "op": "proto 1 1" - }, - "1359": { + "1323": { "op": "frame_dig -1", - "defined_out": [ - "key#0 (copy)" - ], "stack_out": [ - "key#0 (copy)" + "tmp%1#0", + "tmp%9#0", + "value#0 (copy)" ] }, - "1361": { - "op": "intc_2 // 32", + "1325": { + "error": "Index access is out of bounds", + "op": "extract 2 8 // on error: Index access is out of bounds", "defined_out": [ - "32", - "key#0 (copy)" + "tmp%1#0", + "tmp%10#0", + "tmp%9#0" ], "stack_out": [ - "key#0 (copy)", - "32" + "tmp%1#0", + "tmp%9#0", + "tmp%10#0" ] }, - "1362": { - "op": "box_create", + "1328": { + "op": "==", "defined_out": [ - "tmp%0#0" + "tmp%1#0", + "tmp%11#0" ], "stack_out": [ - "tmp%0#0" + "tmp%1#0", + "tmp%11#0" ] }, - "1363": { - "error": "boxRef creation failed", - "op": "assert // boxRef creation failed", - "stack_out": [] + "1329": { + "op": "bz setBoxMapStruct_bool_false@4", + "stack_out": [ + "tmp%1#0" + ] }, - "1364": { - "op": "frame_dig -1", + "1332": { + "op": "frame_dig 0", "stack_out": [ - "key#0 (copy)" + "tmp%1#0", + "tmp%1#0" ] }, - "1366": { - "op": "box_len", + "1334": { + "op": "box_get", "defined_out": [ - "check%0#0", - "value%0#0" + "maybe_exists%2#0", + "maybe_value%2#0", + "tmp%1#0" ], "stack_out": [ - "value%0#0", - "check%0#0" + "tmp%1#0", + "maybe_value%2#0", + "maybe_exists%2#0" ] }, - "1367": { + "1335": { "error": "Box must have value", "op": "assert // Box must have value", "stack_out": [ - "value%0#0" + "tmp%1#0", + "maybe_value%2#0" ] }, - "1368": { - "retsub": true, - "op": "retsub" - }, - "1369": { - "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.extractBoxRef", - "params": { - "key#0": "bytes" - }, - "block": "extractBoxRef", - "stack_in": [], - "op": "proto 1 0" - }, - "1372": { - "op": "txn Sender", + "1336": { + "error": "Index access is out of bounds", + "op": "extract 10 8 // on error: Index access is out of bounds", "defined_out": [ - "senderBytes#0" + "tmp%1#0", + "tmp%14#0" ], "stack_out": [ - "senderBytes#0" + "tmp%1#0", + "tmp%14#0" ] }, - "1374": { - "op": "global CurrentApplicationAddress", - "defined_out": [ - "appAddress#0", - "senderBytes#0" - ], + "1339": { + "op": "frame_dig -1", "stack_out": [ - "senderBytes#0", - "appAddress#0" + "tmp%1#0", + "tmp%14#0", + "value#0 (copy)" ] }, - "1376": { - "op": "dup", + "1341": { + "error": "Index access is out of bounds", + "op": "extract 10 8 // on error: Index access is out of bounds", "defined_out": [ - "appAddress#0", - "appAddress#0 (copy)", - "senderBytes#0" + "tmp%1#0", + "tmp%14#0", + "tmp%15#0" ], "stack_out": [ - "senderBytes#0", - "appAddress#0", - "appAddress#0 (copy)" + "tmp%1#0", + "tmp%14#0", + "tmp%15#0" ] }, - "1377": { - "op": "len", + "1344": { + "op": "==", "defined_out": [ - "appAddress#0", - "senderBytes#0", - "tmp%0#0" + "tmp%1#0", + "tmp%16#0" ], "stack_out": [ - "senderBytes#0", - "appAddress#0", - "tmp%0#0" + "tmp%1#0", + "tmp%16#0" ] }, - "1378": { - "op": "dig 2", - "defined_out": [ - "appAddress#0", - "senderBytes#0", - "senderBytes#0 (copy)", - "tmp%0#0" - ], + "1345": { + "op": "bz setBoxMapStruct_bool_false@4", "stack_out": [ - "senderBytes#0", - "appAddress#0", - "tmp%0#0", - "senderBytes#0 (copy)" + "tmp%1#0" ] }, - "1380": { - "op": "len", + "1348": { + "op": "intc_0 // 1", "defined_out": [ - "appAddress#0", - "senderBytes#0", - "tmp%0#0", + "and_result%0#0", "tmp%1#0" ], "stack_out": [ - "senderBytes#0", - "appAddress#0", - "tmp%0#0", - "tmp%1#0" + "tmp%1#0", + "and_result%0#0" ] }, - "1381": { - "op": "+", - "defined_out": [ - "appAddress#0", - "senderBytes#0", - "totalSize#0" + "1349": { + "block": "setBoxMapStruct_bool_merge@5", + "stack_in": [ + "tmp%1#0", + "and_result%0#0" ], + "error": "boxMapStruct value mismatch", + "op": "assert // boxMapStruct value mismatch", + "defined_out": [], "stack_out": [ - "senderBytes#0", - "appAddress#0", - "totalSize#0" + "tmp%1#0" ] }, - "1382": { - "op": "frame_dig -1", + "1350": { + "op": "intc_0 // 1", "defined_out": [ - "appAddress#0", - "key#0 (copy)", - "senderBytes#0", - "totalSize#0" + "1" ], "stack_out": [ - "senderBytes#0", - "appAddress#0", - "totalSize#0", - "key#0 (copy)" + "tmp%1#0", + "1" ] }, - "1384": { - "op": "swap", - "stack_out": [ - "senderBytes#0", - "appAddress#0", - "key#0 (copy)", - "totalSize#0" - ] + "1351": { + "op": "swap" }, - "1385": { - "op": "box_create", + "1352": { + "retsub": true, + "op": "retsub" + }, + "1353": { + "block": "setBoxMapStruct_bool_false@4", + "stack_in": [ + "tmp%1#0" + ], + "op": "intc_1 // 0", "defined_out": [ - "appAddress#0", - "senderBytes#0", - "tmp%2#0" + "and_result%0#0" ], "stack_out": [ - "senderBytes#0", - "appAddress#0", - "tmp%2#0" + "tmp%1#0", + "and_result%0#0" ] }, - "1386": { - "error": "boxRef creation failed", - "op": "assert // boxRef creation failed", + "1354": { + "op": "b setBoxMapStruct_bool_merge@5" + }, + "1357": { + "subroutine": "contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapStructLength", + "params": { + "key#0": "uint64" + }, + "block": "boxMapStructLength", + "stack_in": [], + "op": "proto 1 1" + }, + "1360": { + "op": "frame_dig -1", + "defined_out": [ + "key#0 (copy)" + ], "stack_out": [ - "senderBytes#0", - "appAddress#0" + "key#0 (copy)" ] }, - "1387": { - "op": "frame_dig -1", + "1362": { + "op": "itob", + "defined_out": [ + "tmp%0#0" + ], "stack_out": [ - "senderBytes#0", - "appAddress#0", - "key#0 (copy)" + "tmp%0#0" ] }, - "1389": { - "op": "intc_1 // 0", + "1363": { + "op": "bytec 6 // \"users\"", "defined_out": [ - "0", - "appAddress#0", - "key#0 (copy)", - "senderBytes#0" + "\"users\"", + "tmp%0#0" ], "stack_out": [ - "senderBytes#0", - "appAddress#0", - "key#0 (copy)", - "0" + "tmp%0#0", + "\"users\"" ] }, - "1390": { - "op": "dig 3", + "1365": { + "op": "swap", "stack_out": [ - "senderBytes#0", - "appAddress#0", - "key#0 (copy)", - "0", - "senderBytes#0 (copy)" + "\"users\"", + "tmp%0#0" ] }, - "1392": { - "op": "box_replace", + "1366": { + "op": "concat", + "defined_out": [ + "tmp%1#0" + ], "stack_out": [ - "senderBytes#0", - "appAddress#0" + "tmp%1#0" ] }, - "1393": { - "op": "frame_dig -1", + "1367": { + "op": "dup", + "defined_out": [ + "tmp%1#0", + "tmp%1#0 (copy)" + ], "stack_out": [ - "senderBytes#0", - "appAddress#0", - "key#0 (copy)" + "tmp%1#0", + "tmp%1#0 (copy)" ] }, - "1395": { - "op": "intc_1 // 0", + "1368": { + "op": "box_del", + "defined_out": [ + "tmp%1#0", + "{box_del}" + ], "stack_out": [ - "senderBytes#0", - "appAddress#0", - "key#0 (copy)", - "0" + "tmp%1#0", + "{box_del}" ] }, - "1396": { - "op": "dup", + "1369": { + "op": "pop", "stack_out": [ - "senderBytes#0", - "appAddress#0", - "key#0 (copy)", - "0", - "0" + "tmp%1#0" ] }, - "1397": { - "op": "dig 3", + "1370": { + "op": "dup", "stack_out": [ - "senderBytes#0", - "appAddress#0", - "key#0 (copy)", - "0", - "0", - "appAddress#0 (copy)" + "tmp%1#0", + "tmp%1#0 (copy)" ] }, - "1399": { - "op": "box_splice", + "1371": { + "op": "pushbytes 0x0012000000000000004600000000000004d20008746573744e616d65", + "defined_out": [ + "0x0012000000000000004600000000000004d20008746573744e616d65", + "tmp%1#0", + "tmp%1#0 (copy)" + ], "stack_out": [ - "senderBytes#0", - "appAddress#0" + "tmp%1#0", + "tmp%1#0 (copy)", + "0x0012000000000000004600000000000004d20008746573744e616d65" ] }, - "1400": { - "op": "frame_dig -1", + "1401": { + "op": "box_put", "stack_out": [ - "senderBytes#0", - "appAddress#0", - "key#0 (copy)" + "tmp%1#0" ] }, "1402": { - "op": "intc_1 // 0", + "op": "dup", "stack_out": [ - "senderBytes#0", - "appAddress#0", - "key#0 (copy)", - "0" + "tmp%1#0", + "tmp%1#0 (copy)" ] }, "1403": { - "op": "intc_2 // 32", + "op": "box_get", "defined_out": [ - "0", - "32", - "appAddress#0", - "key#0 (copy)", - "senderBytes#0" + "maybe_exists%0#0", + "maybe_value%0#0", + "tmp%1#0" ], "stack_out": [ - "senderBytes#0", - "appAddress#0", - "key#0 (copy)", - "0", - "32" + "tmp%1#0", + "maybe_value%0#0", + "maybe_exists%0#0" ] }, "1404": { - "op": "box_extract", - "defined_out": [ - "appAddress#0", - "part1#0", - "senderBytes#0" - ], + "error": "Box must have value", + "op": "assert // Box must have value", "stack_out": [ - "senderBytes#0", - "appAddress#0", - "part1#0" + "tmp%1#0", + "maybe_value%0#0" ] }, "1405": { - "op": "frame_dig -1", + "op": "len", + "defined_out": [ + "tmp%1#0", + "tmp%4#0" + ], "stack_out": [ - "senderBytes#0", - "appAddress#0", - "part1#0", - "key#0 (copy)" + "tmp%1#0", + "tmp%4#0" ] }, - "1407": { - "op": "intc_2 // 32", + "1406": { + "op": "pushint 28 // 28", + "defined_out": [ + "28", + "tmp%1#0", + "tmp%4#0" + ], "stack_out": [ - "senderBytes#0", - "appAddress#0", - "part1#0", - "key#0 (copy)", - "32" + "tmp%1#0", + "tmp%4#0", + "28" ] }, "1408": { - "op": "dup", + "op": "==", + "defined_out": [ + "tmp%1#0", + "tmp%6#0" + ], "stack_out": [ - "senderBytes#0", - "appAddress#0", - "part1#0", - "key#0 (copy)", - "32", - "32" + "tmp%1#0", + "tmp%6#0" ] }, "1409": { - "op": "box_extract", - "defined_out": [ - "appAddress#0", - "part1#0", - "part2#0", - "senderBytes#0" - ], + "error": "boxMapStruct bytes length mismatch", + "op": "assert // boxMapStruct bytes length mismatch", "stack_out": [ - "senderBytes#0", - "appAddress#0", - "part1#0", - "part2#0" + "tmp%1#0" ] }, "1410": { - "op": "swap", + "op": "box_len", + "defined_out": [ + "check%0#0", + "value%0#0" + ], "stack_out": [ - "senderBytes#0", - "appAddress#0", - "part2#0", - "part1#0" + "value%0#0", + "check%0#0" ] }, "1411": { - "op": "uncover 2", + "error": "Box must have value", + "op": "assert // Box must have value", "stack_out": [ - "senderBytes#0", - "part2#0", - "part1#0", - "appAddress#0" + "value%0#0" ] }, - "1413": { - "op": "==", - "defined_out": [ - "part2#0", - "senderBytes#0", - "tmp%3#0" - ], + "1412": { + "op": "pushint 28 // 28", "stack_out": [ - "senderBytes#0", - "part2#0", - "tmp%3#0" + "value%0#0", + "28" ] }, "1414": { - "error": "First part should match app address", - "op": "assert // First part should match app address", + "op": "==", + "defined_out": [ + "tmp%10#0" + ], "stack_out": [ - "senderBytes#0", - "part2#0" + "tmp%10#0" ] }, "1415": { - "op": "==", + "error": "boxMapStruct length mismatch", + "op": "assert // boxMapStruct length mismatch", + "stack_out": [] + }, + "1416": { + "op": "intc_0 // 1", "defined_out": [ - "tmp%4#0" + "1" ], "stack_out": [ - "tmp%4#0" + "1" ] }, - "1416": { - "error": "Second part should match sender bytes", - "op": "assert // Second part should match sender bytes", - "stack_out": [] - }, "1417": { "retsub": true, "op": "retsub" diff --git a/projects/typescript-examples/contracts/artifacts/contracts/BoxStorage/BoxStorage.approval.teal b/projects/typescript-examples/contracts/artifacts/contracts/BoxStorage/BoxStorage.approval.teal index fc24e41..e0d521b 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/BoxStorage/BoxStorage.approval.teal +++ b/projects/typescript-examples/contracts/artifacts/contracts/BoxStorage/BoxStorage.approval.teal @@ -4,14 +4,14 @@ // @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: main: intcblock 1 0 32 42 - bytecblock 0x151f7c75 0x00 "boxMap" "boxInt" "boxString" "boxDynamicBytes" "users" "42" "boxRef" 0x0003 + bytecblock 0x151f7c75 0x00 "boxMap" "boxInt" "boxString" "boxDynamicBytes" "users" "boxRef" "42" 0x0003 // contracts/BoxStorage/contract.algo.ts:39 // export default class BoxStorage extends Contract { txn NumAppArgs bz main_bare_routing@31 - pushbytess 0xb7491344 0x49cf4105 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9101a7de 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x9e11fd7a 0xa4552eb5 0x644a3994 0xf53418c4 0xd829d2a3 0xb1f5a9b6 0x53c28820 0xd5dd922c 0x595b87bb 0xf183207a 0x03e8c77e 0x5e6ceac0 0x38acf53e 0x8c22bfd5 0x39e9b226 0x8600e0eb 0x547f0a74 // method "getBox()uint64", method "valueBox()uint64", method "setBox(uint64)void", method "setBoxString(string)void", method "setBoxDynamicBytes(byte[])void", method "deleteBox()void", method "maybeBox()(uint64,bool)", method "getBoxMap(uint64)string", method "getBoxMapWithDefault(uint64)string", method "setBoxMap(uint64,string)void", method "deleteBoxMap(uint64)void", method "maybeBoxMap(uint64)(string,bool)", method "boxMapLength(uint64)uint64", method "boxMapExists(uint64)bool", method "keyPrefixBoxMap()byte[]", method "getBoxMapStruct(uint64)(string,uint64,uint64)", method "setBoxMapStruct(uint64,(string,uint64,uint64))bool", method "boxMapStructLength(uint64)bool", method "boxMapStructExists(uint64)bool", method "getBoxRef()address", method "setBoxRef(string)void", method "deleteBoxRef(string)void", method "maybeBoxRef(string)(byte[],bool)", method "lengthBoxRef(string)uint64", method "extractBoxRef(string)void", method "arc4Box(string)uint8[4]" + pushbytess 0xb7491344 0x49cf4105 0x6ab3e9bc 0x26ca648a 0x28cc7139 0x644a3994 0xb1f5a9b6 0x03e8c77e 0xd829d2a3 0x8c22bfd5 0xfa1562f7 0xc497bc6f 0xf4f9cbad 0x9e11fd7a 0x5e6ceac0 0xf53418c4 0x39e9b226 0x9101a7de 0xa4552eb5 0x38acf53e 0x8600e0eb 0x53c28820 0xf183207a 0xd5dd922c 0x595b87bb 0x547f0a74 // method "getBox()uint64", method "valueBox()uint64", method "maybeBox()(uint64,bool)", method "getBoxMap(uint64)string", method "getBoxMapWithDefault(uint64)string", method "maybeBoxMap(uint64)(string,bool)", method "keyPrefixBoxMap()byte[]", method "getBoxRef()address", method "boxMapExists(uint64)bool", method "maybeBoxRef(string)(byte[],bool)", method "setBox(uint64)void", method "setBoxString(string)void", method "setBoxDynamicBytes(byte[])void", method "setBoxMap(uint64,string)void", method "setBoxRef(string)void", method "boxMapLength(uint64)uint64", method "lengthBoxRef(string)uint64", method "deleteBox()void", method "deleteBoxMap(uint64)void", method "deleteBoxRef(string)void", method "extractBoxRef(string)void", method "getBoxMapStruct(uint64)(string,uint64,uint64)", method "boxMapStructExists(uint64)bool", method "setBoxMapStruct(uint64,(string,uint64,uint64))bool", method "boxMapStructLength(uint64)bool", method "arc4Box(string)uint8[4]" txna ApplicationArgs 0 - match main_getBox_route@3 main_valueBox_route@4 main_setBox_route@5 main_setBoxString_route@6 main_setBoxDynamicBytes_route@7 main_deleteBox_route@8 main_maybeBox_route@9 main_getBoxMap_route@10 main_getBoxMapWithDefault_route@11 main_setBoxMap_route@12 main_deleteBoxMap_route@13 main_maybeBoxMap_route@14 main_boxMapLength_route@15 main_boxMapExists_route@16 main_keyPrefixBoxMap_route@17 main_getBoxMapStruct_route@18 main_setBoxMapStruct_route@19 main_boxMapStructLength_route@20 main_boxMapStructExists_route@21 main_getBoxRef_route@22 main_setBoxRef_route@23 main_deleteBoxRef_route@24 main_maybeBoxRef_route@25 main_lengthBoxRef_route@26 main_extractBoxRef_route@27 main_arc4Box_route@28 + match main_getBox_route@3 main_valueBox_route@4 main_maybeBox_route@5 main_getBoxMap_route@6 main_getBoxMapWithDefault_route@7 main_maybeBoxMap_route@8 main_keyPrefixBoxMap_route@9 main_getBoxRef_route@10 main_boxMapExists_route@11 main_maybeBoxRef_route@12 main_setBox_route@13 main_setBoxString_route@14 main_setBoxDynamicBytes_route@15 main_setBoxMap_route@16 main_setBoxRef_route@17 main_boxMapLength_route@18 main_lengthBoxRef_route@19 main_deleteBox_route@20 main_deleteBoxMap_route@21 main_deleteBoxRef_route@22 main_extractBoxRef_route@23 main_getBoxMapStruct_route@24 main_boxMapStructExists_route@25 main_setBoxMapStruct_route@26 main_boxMapStructLength_route@27 main_arc4Box_route@28 main_after_if_else@35: // contracts/BoxStorage/contract.algo.ts:39 @@ -20,7 +20,7 @@ main_after_if_else@35: return main_arc4Box_route@28: - // contracts/BoxStorage/contract.algo.ts:396 + // contracts/BoxStorage/contract.algo.ts:352 // public arc4Box(key: string): StaticInts { txn OnCompletion ! @@ -31,7 +31,7 @@ main_arc4Box_route@28: // export default class BoxStorage extends Contract { txna ApplicationArgs 1 extract 2 0 - // contracts/BoxStorage/contract.algo.ts:396 + // contracts/BoxStorage/contract.algo.ts:352 // public arc4Box(key: string): StaticInts { callsub arc4Box bytec_0 // 0x151f7c75 @@ -41,9 +41,9 @@ main_arc4Box_route@28: intc_0 // 1 return -main_extractBoxRef_route@27: - // contracts/BoxStorage/contract.algo.ts:369 - // public extractBoxRef(key: string): void { +main_boxMapStructLength_route@27: + // contracts/BoxStorage/contract.algo.ts:330 + // public boxMapStructLength(key: uint64): boolean { txn OnCompletion ! assert // OnCompletion is not NoOp @@ -52,16 +52,24 @@ main_extractBoxRef_route@27: // contracts/BoxStorage/contract.algo.ts:39 // export default class BoxStorage extends Contract { txna ApplicationArgs 1 - extract 2 0 - // contracts/BoxStorage/contract.algo.ts:369 - // public extractBoxRef(key: string): void { - callsub extractBoxRef + btoi + // contracts/BoxStorage/contract.algo.ts:330 + // public boxMapStructLength(key: uint64): boolean { + callsub boxMapStructLength + bytec_1 // 0x00 + intc_1 // 0 + uncover 2 + setbit + bytec_0 // 0x151f7c75 + swap + concat + log intc_0 // 1 return -main_lengthBoxRef_route@26: - // contracts/BoxStorage/contract.algo.ts:357 - // public lengthBoxRef(key: string): uint64 { +main_setBoxMapStruct_route@26: + // contracts/BoxStorage/contract.algo.ts:310 + // public setBoxMapStruct(key: uint64, value: UserStruct): boolean { txn OnCompletion ! assert // OnCompletion is not NoOp @@ -70,11 +78,15 @@ main_lengthBoxRef_route@26: // contracts/BoxStorage/contract.algo.ts:39 // export default class BoxStorage extends Contract { txna ApplicationArgs 1 - extract 2 0 - // contracts/BoxStorage/contract.algo.ts:357 - // public lengthBoxRef(key: string): uint64 { - callsub lengthBoxRef - itob + btoi + txna ApplicationArgs 2 + // contracts/BoxStorage/contract.algo.ts:310 + // public setBoxMapStruct(key: uint64, value: UserStruct): boolean { + callsub setBoxMapStruct + bytec_1 // 0x00 + intc_1 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat @@ -82,8 +94,8 @@ main_lengthBoxRef_route@26: intc_0 // 1 return -main_maybeBoxRef_route@25: - // contracts/BoxStorage/contract.algo.ts:343 +main_boxMapStructExists_route@25: + // contracts/BoxStorage/contract.algo.ts:300 // @abimethod({ readonly: true }) txn OnCompletion ! @@ -93,25 +105,36 @@ main_maybeBoxRef_route@25: // contracts/BoxStorage/contract.algo.ts:39 // export default class BoxStorage extends Contract { txna ApplicationArgs 1 - extract 2 0 - // contracts/BoxStorage/contract.algo.ts:343 + btoi + // contracts/BoxStorage/contract.algo.ts:300 // @abimethod({ readonly: true }) - callsub maybeBoxRef - dig 1 - len - itob - extract 6 2 - uncover 2 - concat + callsub boxMapStructExists bytec_1 // 0x00 intc_1 // 0 - uncover 3 + uncover 2 setbit - bytec 9 // 0x0003 - swap - concat + bytec_0 // 0x151f7c75 swap concat + log + intc_0 // 1 + return + +main_getBoxMapStruct_route@24: + // contracts/BoxStorage/contract.algo.ts:290 + // @abimethod({ readonly: true }) + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + // contracts/BoxStorage/contract.algo.ts:39 + // export default class BoxStorage extends Contract { + txna ApplicationArgs 1 + btoi + // contracts/BoxStorage/contract.algo.ts:290 + // @abimethod({ readonly: true }) + callsub getBoxMapStruct bytec_0 // 0x151f7c75 swap concat @@ -119,8 +142,26 @@ main_maybeBoxRef_route@25: intc_0 // 1 return -main_deleteBoxRef_route@24: - // contracts/BoxStorage/contract.algo.ts:331 +main_extractBoxRef_route@23: + // contracts/BoxStorage/contract.algo.ts:264 + // public extractBoxRef(key: string): void { + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + // contracts/BoxStorage/contract.algo.ts:39 + // export default class BoxStorage extends Contract { + txna ApplicationArgs 1 + extract 2 0 + // contracts/BoxStorage/contract.algo.ts:264 + // public extractBoxRef(key: string): void { + callsub extractBoxRef + intc_0 // 1 + return + +main_deleteBoxRef_route@22: + // contracts/BoxStorage/contract.algo.ts:252 // public deleteBoxRef(key: string): void { txn OnCompletion ! @@ -131,15 +172,15 @@ main_deleteBoxRef_route@24: // export default class BoxStorage extends Contract { txna ApplicationArgs 1 extract 2 0 - // contracts/BoxStorage/contract.algo.ts:331 + // contracts/BoxStorage/contract.algo.ts:252 // public deleteBoxRef(key: string): void { callsub deleteBoxRef intc_0 // 1 return -main_setBoxRef_route@23: - // contracts/BoxStorage/contract.algo.ts:318 - // public setBoxRef(key: string): void { +main_deleteBoxMap_route@21: + // contracts/BoxStorage/contract.algo.ts:244 + // public deleteBoxMap(key: uint64): void { txn OnCompletion ! assert // OnCompletion is not NoOp @@ -148,32 +189,28 @@ main_setBoxRef_route@23: // contracts/BoxStorage/contract.algo.ts:39 // export default class BoxStorage extends Contract { txna ApplicationArgs 1 - extract 2 0 - // contracts/BoxStorage/contract.algo.ts:318 - // public setBoxRef(key: string): void { - callsub setBoxRef + btoi + // contracts/BoxStorage/contract.algo.ts:244 + // public deleteBoxMap(key: uint64): void { + callsub deleteBoxMap intc_0 // 1 return -main_getBoxRef_route@22: - // contracts/BoxStorage/contract.algo.ts:303 - // public getBoxRef(): arc4.Address { +main_deleteBox_route@20: + // contracts/BoxStorage/contract.algo.ts:230 + // public deleteBox(): void { txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - callsub getBoxRef - bytec_0 // 0x151f7c75 - swap - concat - log + callsub deleteBox intc_0 // 1 return -main_boxMapStructExists_route@21: - // contracts/BoxStorage/contract.algo.ts:291 - // @abimethod({ readonly: true }) +main_lengthBoxRef_route@19: + // contracts/BoxStorage/contract.algo.ts:219 + // public lengthBoxRef(key: string): uint64 { txn OnCompletion ! assert // OnCompletion is not NoOp @@ -182,14 +219,11 @@ main_boxMapStructExists_route@21: // contracts/BoxStorage/contract.algo.ts:39 // export default class BoxStorage extends Contract { txna ApplicationArgs 1 - btoi - // contracts/BoxStorage/contract.algo.ts:291 - // @abimethod({ readonly: true }) - callsub boxMapStructExists - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit + extract 2 0 + // contracts/BoxStorage/contract.algo.ts:219 + // public lengthBoxRef(key: string): uint64 { + callsub lengthBoxRef + itob bytec_0 // 0x151f7c75 swap concat @@ -197,9 +231,9 @@ main_boxMapStructExists_route@21: intc_0 // 1 return -main_boxMapStructLength_route@20: - // contracts/BoxStorage/contract.algo.ts:268 - // public boxMapStructLength(key: uint64): boolean { +main_boxMapLength_route@18: + // contracts/BoxStorage/contract.algo.ts:205 + // @abimethod({ readonly: true }) txn OnCompletion ! assert // OnCompletion is not NoOp @@ -209,13 +243,10 @@ main_boxMapStructLength_route@20: // export default class BoxStorage extends Contract { txna ApplicationArgs 1 btoi - // contracts/BoxStorage/contract.algo.ts:268 - // public boxMapStructLength(key: uint64): boolean { - callsub boxMapStructLength - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit + // contracts/BoxStorage/contract.algo.ts:205 + // @abimethod({ readonly: true }) + callsub boxMapLength + itob bytec_0 // 0x151f7c75 swap concat @@ -223,9 +254,9 @@ main_boxMapStructLength_route@20: intc_0 // 1 return -main_setBoxMapStruct_route@19: - // contracts/BoxStorage/contract.algo.ts:246 - // public setBoxMapStruct(key: uint64, value: UserStruct): boolean { +main_setBoxRef_route@17: + // contracts/BoxStorage/contract.algo.ts:191 + // public setBoxRef(key: string): void { txn OnCompletion ! assert // OnCompletion is not NoOp @@ -234,25 +265,16 @@ main_setBoxMapStruct_route@19: // contracts/BoxStorage/contract.algo.ts:39 // export default class BoxStorage extends Contract { txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - // contracts/BoxStorage/contract.algo.ts:246 - // public setBoxMapStruct(key: uint64, value: UserStruct): boolean { - callsub setBoxMapStruct - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log + extract 2 0 + // contracts/BoxStorage/contract.algo.ts:191 + // public setBoxRef(key: string): void { + callsub setBoxRef intc_0 // 1 return -main_getBoxMapStruct_route@18: - // contracts/BoxStorage/contract.algo.ts:234 - // @abimethod({ readonly: true }) +main_setBoxMap_route@16: + // contracts/BoxStorage/contract.algo.ts:183 + // public setBoxMap(key: uint64, value: string): void { txn OnCompletion ! assert // OnCompletion is not NoOp @@ -262,32 +284,34 @@ main_getBoxMapStruct_route@18: // export default class BoxStorage extends Contract { txna ApplicationArgs 1 btoi - // contracts/BoxStorage/contract.algo.ts:234 - // @abimethod({ readonly: true }) - callsub getBoxMapStruct - bytec_0 // 0x151f7c75 - swap - concat - log + txna ApplicationArgs 2 + extract 2 0 + // contracts/BoxStorage/contract.algo.ts:183 + // public setBoxMap(key: uint64, value: string): void { + callsub setBoxMap intc_0 // 1 return -main_keyPrefixBoxMap_route@17: - // contracts/BoxStorage/contract.algo.ts:221 - // @abimethod({ readonly: true }) +main_setBoxDynamicBytes_route@15: + // contracts/BoxStorage/contract.algo.ts:174 + // public setBoxDynamicBytes(value: arc4.DynamicBytes): void { txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - pushbytes 0x151f7c750006626f784d6170 - log + // contracts/BoxStorage/contract.algo.ts:39 + // export default class BoxStorage extends Contract { + txna ApplicationArgs 1 + // contracts/BoxStorage/contract.algo.ts:174 + // public setBoxDynamicBytes(value: arc4.DynamicBytes): void { + callsub setBoxDynamicBytes intc_0 // 1 return -main_boxMapExists_route@16: - // contracts/BoxStorage/contract.algo.ts:210 - // @abimethod({ readonly: true }) +main_setBoxString_route@14: + // contracts/BoxStorage/contract.algo.ts:166 + // public setBoxString(value: string): void { txn OnCompletion ! assert // OnCompletion is not NoOp @@ -296,24 +320,16 @@ main_boxMapExists_route@16: // contracts/BoxStorage/contract.algo.ts:39 // export default class BoxStorage extends Contract { txna ApplicationArgs 1 - btoi - // contracts/BoxStorage/contract.algo.ts:210 - // @abimethod({ readonly: true }) - callsub boxMapExists - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log + extract 2 0 + // contracts/BoxStorage/contract.algo.ts:166 + // public setBoxString(value: string): void { + callsub setBoxString intc_0 // 1 return -main_boxMapLength_route@15: - // contracts/BoxStorage/contract.algo.ts:194 - // @abimethod({ readonly: true }) +main_setBox_route@13: + // contracts/BoxStorage/contract.algo.ts:158 + // public setBox(valueInt: uint64): void { txn OnCompletion ! assert // OnCompletion is not NoOp @@ -323,19 +339,14 @@ main_boxMapLength_route@15: // export default class BoxStorage extends Contract { txna ApplicationArgs 1 btoi - // contracts/BoxStorage/contract.algo.ts:194 - // @abimethod({ readonly: true }) - callsub boxMapLength - itob - bytec_0 // 0x151f7c75 - swap - concat - log + // contracts/BoxStorage/contract.algo.ts:158 + // public setBox(valueInt: uint64): void { + callsub setBox intc_0 // 1 return -main_maybeBoxMap_route@14: - // contracts/BoxStorage/contract.algo.ts:181 +main_maybeBoxRef_route@12: + // contracts/BoxStorage/contract.algo.ts:145 // @abimethod({ readonly: true }) txn OnCompletion ! @@ -345,10 +356,10 @@ main_maybeBoxMap_route@14: // contracts/BoxStorage/contract.algo.ts:39 // export default class BoxStorage extends Contract { txna ApplicationArgs 1 - btoi - // contracts/BoxStorage/contract.algo.ts:181 + extract 2 0 + // contracts/BoxStorage/contract.algo.ts:145 // @abimethod({ readonly: true }) - callsub maybeBoxMap + callsub maybeBoxRef dig 1 len itob @@ -371,9 +382,9 @@ main_maybeBoxMap_route@14: intc_0 // 1 return -main_deleteBoxMap_route@13: - // contracts/BoxStorage/contract.algo.ts:170 - // public deleteBoxMap(key: uint64): void { +main_boxMapExists_route@11: + // contracts/BoxStorage/contract.algo.ts:136 + // @abimethod({ readonly: true }) txn OnCompletion ! assert // OnCompletion is not NoOp @@ -383,62 +394,51 @@ main_deleteBoxMap_route@13: // export default class BoxStorage extends Contract { txna ApplicationArgs 1 btoi - // contracts/BoxStorage/contract.algo.ts:170 - // public deleteBoxMap(key: uint64): void { - callsub deleteBoxMap + // contracts/BoxStorage/contract.algo.ts:136 + // @abimethod({ readonly: true }) + callsub boxMapExists + bytec_1 // 0x00 + intc_1 // 0 + uncover 2 + setbit + bytec_0 // 0x151f7c75 + swap + concat + log intc_0 // 1 return -main_setBoxMap_route@12: - // contracts/BoxStorage/contract.algo.ts:160 - // public setBoxMap(key: uint64, value: string): void { +main_getBoxRef_route@10: + // contracts/BoxStorage/contract.algo.ts:122 + // public getBoxRef(): arc4.Address { txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // contracts/BoxStorage/contract.algo.ts:39 - // export default class BoxStorage extends Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - extract 2 0 - // contracts/BoxStorage/contract.algo.ts:160 - // public setBoxMap(key: uint64, value: string): void { - callsub setBoxMap + callsub getBoxRef + bytec_0 // 0x151f7c75 + swap + concat + log intc_0 // 1 return -main_getBoxMapWithDefault_route@11: - // contracts/BoxStorage/contract.algo.ts:148 +main_keyPrefixBoxMap_route@9: + // contracts/BoxStorage/contract.algo.ts:113 // @abimethod({ readonly: true }) txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // contracts/BoxStorage/contract.algo.ts:39 - // export default class BoxStorage extends Contract { - txna ApplicationArgs 1 - btoi - // contracts/BoxStorage/contract.algo.ts:148 - // @abimethod({ readonly: true }) - callsub getBoxMapWithDefault - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat + pushbytes 0x151f7c750006626f784d6170 log intc_0 // 1 return -main_getBoxMap_route@10: - // contracts/BoxStorage/contract.algo.ts:136 +main_maybeBoxMap_route@8: + // contracts/BoxStorage/contract.algo.ts:103 // @abimethod({ readonly: true }) txn OnCompletion ! @@ -449,37 +449,23 @@ main_getBoxMap_route@10: // export default class BoxStorage extends Contract { txna ApplicationArgs 1 btoi - // contracts/BoxStorage/contract.algo.ts:136 + // contracts/BoxStorage/contract.algo.ts:103 // @abimethod({ readonly: true }) - callsub getBoxMap - dup + callsub maybeBoxMap + dig 1 len itob extract 6 2 - swap + uncover 2 concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_maybeBox_route@9: - // contracts/BoxStorage/contract.algo.ts:122 - // @abimethod({ readonly: true }) - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - callsub maybeBox - swap - itob bytec_1 // 0x00 intc_1 // 0 uncover 3 setbit + bytec 9 // 0x0003 + swap + concat + swap concat bytec_0 // 0x151f7c75 swap @@ -488,21 +474,9 @@ main_maybeBox_route@9: intc_0 // 1 return -main_deleteBox_route@8: - // contracts/BoxStorage/contract.algo.ts:106 - // public deleteBox(): void { - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - callsub deleteBox - intc_0 // 1 - return - -main_setBoxDynamicBytes_route@7: - // contracts/BoxStorage/contract.algo.ts:97 - // public setBoxDynamicBytes(value: arc4.DynamicBytes): void { +main_getBoxMapWithDefault_route@7: + // contracts/BoxStorage/contract.algo.ts:93 + // @abimethod({ readonly: true }) txn OnCompletion ! assert // OnCompletion is not NoOp @@ -511,15 +485,26 @@ main_setBoxDynamicBytes_route@7: // contracts/BoxStorage/contract.algo.ts:39 // export default class BoxStorage extends Contract { txna ApplicationArgs 1 - // contracts/BoxStorage/contract.algo.ts:97 - // public setBoxDynamicBytes(value: arc4.DynamicBytes): void { - callsub setBoxDynamicBytes + btoi + // contracts/BoxStorage/contract.algo.ts:93 + // @abimethod({ readonly: true }) + callsub getBoxMapWithDefault + dup + len + itob + extract 6 2 + swap + concat + bytec_0 // 0x151f7c75 + swap + concat + log intc_0 // 1 return -main_setBoxString_route@6: - // contracts/BoxStorage/contract.algo.ts:87 - // public setBoxString(value: string): void { +main_getBoxMap_route@6: + // contracts/BoxStorage/contract.algo.ts:83 + // @abimethod({ readonly: true }) txn OnCompletion ! assert // OnCompletion is not NoOp @@ -528,33 +513,48 @@ main_setBoxString_route@6: // contracts/BoxStorage/contract.algo.ts:39 // export default class BoxStorage extends Contract { txna ApplicationArgs 1 - extract 2 0 - // contracts/BoxStorage/contract.algo.ts:87 - // public setBoxString(value: string): void { - callsub setBoxString + btoi + // contracts/BoxStorage/contract.algo.ts:83 + // @abimethod({ readonly: true }) + callsub getBoxMap + dup + len + itob + extract 6 2 + swap + concat + bytec_0 // 0x151f7c75 + swap + concat + log intc_0 // 1 return -main_setBox_route@5: - // contracts/BoxStorage/contract.algo.ts:77 - // public setBox(valueInt: uint64): void { +main_maybeBox_route@5: + // contracts/BoxStorage/contract.algo.ts:72 + // @abimethod({ readonly: true }) txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // contracts/BoxStorage/contract.algo.ts:39 - // export default class BoxStorage extends Contract { - txna ApplicationArgs 1 - btoi - // contracts/BoxStorage/contract.algo.ts:77 - // public setBox(valueInt: uint64): void { - callsub setBox + callsub maybeBox + swap + itob + bytec_1 // 0x00 + intc_1 // 0 + uncover 3 + setbit + concat + bytec_0 // 0x151f7c75 + swap + concat + log intc_0 // 1 return main_valueBox_route@4: - // contracts/BoxStorage/contract.algo.ts:66 + // contracts/BoxStorage/contract.algo.ts:63 // @abimethod({ readonly: true }) txn OnCompletion ! @@ -571,7 +571,7 @@ main_valueBox_route@4: return main_getBox_route@3: - // contracts/BoxStorage/contract.algo.ts:56 + // contracts/BoxStorage/contract.algo.ts:55 // @abimethod({ readonly: true }) txn OnCompletion ! @@ -604,7 +604,7 @@ getBox: // contracts/BoxStorage/contract.algo.ts:42 // public boxInt = Box({ key: 'boxInt' }) bytec_3 // "boxInt" - // contracts/BoxStorage/contract.algo.ts:58 + // contracts/BoxStorage/contract.algo.ts:57 // return this.boxInt.value box_get swap @@ -619,7 +619,7 @@ valueBox: // contracts/BoxStorage/contract.algo.ts:42 // public boxInt = Box({ key: 'boxInt' }) bytec_3 // "boxInt" - // contracts/BoxStorage/contract.algo.ts:68 + // contracts/BoxStorage/contract.algo.ts:65 // return this.boxInt.value box_get swap @@ -629,146 +629,17 @@ valueBox: retsub -// contracts/BoxStorage/contract.algo.ts::BoxStorage.setBox(valueInt: uint64) -> void: -setBox: - // contracts/BoxStorage/contract.algo.ts:77 - // public setBox(valueInt: uint64): void { - proto 1 0 - // contracts/BoxStorage/contract.algo.ts:78 - // this.boxInt.value = valueInt - frame_dig -1 - itob - // contracts/BoxStorage/contract.algo.ts:42 - // public boxInt = Box({ key: 'boxInt' }) - bytec_3 // "boxInt" - // contracts/BoxStorage/contract.algo.ts:78 - // this.boxInt.value = valueInt - swap - box_put - retsub - - -// contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxString(value: bytes) -> void: -setBoxString: - // contracts/BoxStorage/contract.algo.ts:87 - // public setBoxString(value: string): void { - proto 1 0 - // contracts/BoxStorage/contract.algo.ts:41 - // public boxString = Box({ key: 'boxString' }) - bytec 4 // "boxString" - // contracts/BoxStorage/contract.algo.ts:88 - // this.boxString.value = value - box_del - pop - // contracts/BoxStorage/contract.algo.ts:41 - // public boxString = Box({ key: 'boxString' }) - bytec 4 // "boxString" - // contracts/BoxStorage/contract.algo.ts:88 - // this.boxString.value = value - frame_dig -1 - box_put - retsub - - -// contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxDynamicBytes(value: bytes) -> void: -setBoxDynamicBytes: - // contracts/BoxStorage/contract.algo.ts:97 - // public setBoxDynamicBytes(value: arc4.DynamicBytes): void { - proto 1 0 - // contracts/BoxStorage/contract.algo.ts:44 - // public boxDynamicBytes = Box({ key: 'boxDynamicBytes' }) - bytec 5 // "boxDynamicBytes" - // contracts/BoxStorage/contract.algo.ts:98 - // this.boxDynamicBytes.value = value - box_del - pop - // contracts/BoxStorage/contract.algo.ts:44 - // public boxDynamicBytes = Box({ key: 'boxDynamicBytes' }) - bytec 5 // "boxDynamicBytes" - // contracts/BoxStorage/contract.algo.ts:98 - // this.boxDynamicBytes.value = value - frame_dig -1 - box_put - retsub - - -// contracts/BoxStorage/contract.algo.ts::BoxStorage.deleteBox() -> void: -deleteBox: - // contracts/BoxStorage/contract.algo.ts:42 - // public boxInt = Box({ key: 'boxInt' }) - bytec_3 // "boxInt" - // contracts/BoxStorage/contract.algo.ts:107 - // this.boxInt.delete() - box_del - pop - // contracts/BoxStorage/contract.algo.ts:44 - // public boxDynamicBytes = Box({ key: 'boxDynamicBytes' }) - bytec 5 // "boxDynamicBytes" - // contracts/BoxStorage/contract.algo.ts:108 - // this.boxDynamicBytes.delete() - box_del - pop - // contracts/BoxStorage/contract.algo.ts:41 - // public boxString = Box({ key: 'boxString' }) - bytec 4 // "boxString" - // contracts/BoxStorage/contract.algo.ts:109 - // this.boxString.delete() - box_del - pop - // contracts/BoxStorage/contract.algo.ts:42 - // public boxInt = Box({ key: 'boxInt' }) - bytec_3 // "boxInt" - // contracts/BoxStorage/contract.algo.ts:111 - // assert(this.boxInt.get({ default: Uint64(42) }) === 42) - box_get - swap - btoi - intc_3 // 42 - swap - uncover 2 - select - intc_3 // 42 - == - assert - // contracts/BoxStorage/contract.algo.ts:44 - // public boxDynamicBytes = Box({ key: 'boxDynamicBytes' }) - bytec 5 // "boxDynamicBytes" - // contracts/BoxStorage/contract.algo.ts:112 - // assert(this.boxDynamicBytes.get({ default: new arc4.DynamicBytes('42') }).native === Bytes('42')) - box_get - pushbytes 0x00023432 - cover 2 - select - extract 2 0 - bytec 7 // "42" - == - assert - // contracts/BoxStorage/contract.algo.ts:41 - // public boxString = Box({ key: 'boxString' }) - bytec 4 // "boxString" - // contracts/BoxStorage/contract.algo.ts:113 - // assert(this.boxString.get({ default: '42' }) === '42') - box_get - bytec 7 // "42" - cover 2 - select - bytec 7 // "42" - == - assert - retsub - - // contracts/BoxStorage/contract.algo.ts::BoxStorage.maybeBox() -> uint64, uint64: maybeBox: // contracts/BoxStorage/contract.algo.ts:42 // public boxInt = Box({ key: 'boxInt' }) bytec_3 // "boxInt" - // contracts/BoxStorage/contract.algo.ts:124 + // contracts/BoxStorage/contract.algo.ts:74 // const [boxIntValue, boxIntExists] = this.boxInt.maybe() box_get swap btoi - // contracts/BoxStorage/contract.algo.ts:125 + // contracts/BoxStorage/contract.algo.ts:75 // return [boxIntValue, boxIntExists] swap retsub @@ -776,11 +647,11 @@ maybeBox: // contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxMap(key: uint64) -> bytes: getBoxMap: - // contracts/BoxStorage/contract.algo.ts:136-137 + // contracts/BoxStorage/contract.algo.ts:83-84 // @abimethod({ readonly: true }) // public getBoxMap(key: uint64): string { proto 1 1 - // contracts/BoxStorage/contract.algo.ts:138 + // contracts/BoxStorage/contract.algo.ts:85 // return this.boxMap(key).value frame_dig -1 itob @@ -789,7 +660,7 @@ getBoxMap: bytec_2 // "boxMap" swap concat - // contracts/BoxStorage/contract.algo.ts:138 + // contracts/BoxStorage/contract.algo.ts:85 // return this.boxMap(key).value box_get assert // Box must have value @@ -798,11 +669,11 @@ getBoxMap: // contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxMapWithDefault(key: uint64) -> bytes: getBoxMapWithDefault: - // contracts/BoxStorage/contract.algo.ts:148-149 + // contracts/BoxStorage/contract.algo.ts:93-94 // @abimethod({ readonly: true }) // public getBoxMapWithDefault(key: uint64): string { proto 1 1 - // contracts/BoxStorage/contract.algo.ts:150 + // contracts/BoxStorage/contract.algo.ts:95 // return this.boxMap(key).get({ default: 'default' }) frame_dig -1 itob @@ -811,7 +682,7 @@ getBoxMapWithDefault: bytec_2 // "boxMap" swap concat - // contracts/BoxStorage/contract.algo.ts:150 + // contracts/BoxStorage/contract.algo.ts:95 // return this.boxMap(key).get({ default: 'default' }) box_get pushbytes "default" @@ -820,58 +691,13 @@ getBoxMapWithDefault: retsub -// contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxMap(key: uint64, value: bytes) -> void: -setBoxMap: - // contracts/BoxStorage/contract.algo.ts:160 - // public setBoxMap(key: uint64, value: string): void { - proto 2 0 - // contracts/BoxStorage/contract.algo.ts:161 - // this.boxMap(key).value = value - frame_dig -2 - itob - // contracts/BoxStorage/contract.algo.ts:46 - // public boxMap = BoxMap({ keyPrefix: 'boxMap' }) - bytec_2 // "boxMap" - swap - concat - // contracts/BoxStorage/contract.algo.ts:161 - // this.boxMap(key).value = value - dup - box_del - pop - frame_dig -1 - box_put - retsub - - -// contracts/BoxStorage/contract.algo.ts::BoxStorage.deleteBoxMap(key: uint64) -> void: -deleteBoxMap: - // contracts/BoxStorage/contract.algo.ts:170 - // public deleteBoxMap(key: uint64): void { - proto 1 0 - // contracts/BoxStorage/contract.algo.ts:171 - // this.boxMap(key).delete() - frame_dig -1 - itob - // contracts/BoxStorage/contract.algo.ts:46 - // public boxMap = BoxMap({ keyPrefix: 'boxMap' }) - bytec_2 // "boxMap" - swap - concat - // contracts/BoxStorage/contract.algo.ts:171 - // this.boxMap(key).delete() - box_del - pop - retsub - - // contracts/BoxStorage/contract.algo.ts::BoxStorage.maybeBoxMap(key: uint64) -> bytes, uint64: maybeBoxMap: - // contracts/BoxStorage/contract.algo.ts:181-182 + // contracts/BoxStorage/contract.algo.ts:103-104 // @abimethod({ readonly: true }) // public maybeBoxMap(key: uint64): [string, boolean] { proto 1 2 - // contracts/BoxStorage/contract.algo.ts:183 + // contracts/BoxStorage/contract.algo.ts:105 // const [value, exists] = this.boxMap(key).maybe() frame_dig -1 itob @@ -880,19 +706,19 @@ maybeBoxMap: bytec_2 // "boxMap" swap concat - // contracts/BoxStorage/contract.algo.ts:183 + // contracts/BoxStorage/contract.algo.ts:105 // const [value, exists] = this.boxMap(key).maybe() box_get dup uncover 2 swap - // contracts/BoxStorage/contract.algo.ts:184 + // contracts/BoxStorage/contract.algo.ts:106 // return [exists ? value : '', exists] bz maybeBoxMap_ternary_false@2 frame_dig 1 maybeBoxMap_ternary_merge@3: - // contracts/BoxStorage/contract.algo.ts:184 + // contracts/BoxStorage/contract.algo.ts:106 // return [exists ? value : '', exists] frame_dig 0 uncover 3 @@ -900,79 +726,469 @@ maybeBoxMap_ternary_merge@3: retsub maybeBoxMap_ternary_false@2: - // contracts/BoxStorage/contract.algo.ts:184 + // contracts/BoxStorage/contract.algo.ts:106 // return [exists ? value : '', exists] pushbytes "" b maybeBoxMap_ternary_merge@3 -// contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapLength(key: uint64) -> uint64: -boxMapLength: - // contracts/BoxStorage/contract.algo.ts:194-195 - // @abimethod({ readonly: true }) - // public boxMapLength(key: uint64): uint64 { - proto 1 1 - // contracts/BoxStorage/contract.algo.ts:196 +// contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxRef() -> bytes: +getBoxRef: + // contracts/BoxStorage/contract.algo.ts:45 + // public boxRef = BoxRef({ key: 'boxRef' }) + bytec 7 // "boxRef" + // contracts/BoxStorage/contract.algo.ts:123 + // this.boxRef.create({ size: 32 }) + intc_2 // 32 + box_create + pop + // contracts/BoxStorage/contract.algo.ts:124 + // const senderBytes = Txn.sender.bytes + txn Sender + // contracts/BoxStorage/contract.algo.ts:45 + // public boxRef = BoxRef({ key: 'boxRef' }) + bytec 7 // "boxRef" + // contracts/BoxStorage/contract.algo.ts:125 + // this.boxRef.put(senderBytes) + dig 1 + box_put + // contracts/BoxStorage/contract.algo.ts:45 + // public boxRef = BoxRef({ key: 'boxRef' }) + bytec 7 // "boxRef" + // contracts/BoxStorage/contract.algo.ts:126 + // const value = this.boxRef.get({ default: senderBytes }) + box_get + dig 2 + cover 2 + select + // contracts/BoxStorage/contract.algo.ts:127 + // assert(value === senderBytes, 'boxRef value mismatch') + dup + uncover 2 + == + assert // boxRef value mismatch + // contracts/BoxStorage/contract.algo.ts:128 + // return new arc4.Address(value) + retsub + + +// contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapExists(key: uint64) -> uint64: +boxMapExists: + // contracts/BoxStorage/contract.algo.ts:136-137 + // @abimethod({ readonly: true }) + // public boxMapExists(key: uint64): boolean { + proto 1 1 + // contracts/BoxStorage/contract.algo.ts:138 + // return this.boxMap(key).exists + frame_dig -1 + itob + // contracts/BoxStorage/contract.algo.ts:46 + // public boxMap = BoxMap({ keyPrefix: 'boxMap' }) + bytec_2 // "boxMap" + swap + concat + // contracts/BoxStorage/contract.algo.ts:138 + // return this.boxMap(key).exists + box_len + bury 1 + retsub + + +// contracts/BoxStorage/contract.algo.ts::BoxStorage.maybeBoxRef(key: bytes) -> bytes, uint64: +maybeBoxRef: + // contracts/BoxStorage/contract.algo.ts:145-146 + // @abimethod({ readonly: true }) + // public maybeBoxRef(key: string): [bytes, boolean] { + proto 1 2 + // contracts/BoxStorage/contract.algo.ts:148 + // const [value, exists] = boxRef.maybe() + frame_dig -1 + box_get + // contracts/BoxStorage/contract.algo.ts:149 + // return [value, exists] + retsub + + +// contracts/BoxStorage/contract.algo.ts::BoxStorage.setBox(valueInt: uint64) -> void: +setBox: + // contracts/BoxStorage/contract.algo.ts:158 + // public setBox(valueInt: uint64): void { + proto 1 0 + // contracts/BoxStorage/contract.algo.ts:159 + // this.boxInt.value = valueInt + frame_dig -1 + itob + // contracts/BoxStorage/contract.algo.ts:42 + // public boxInt = Box({ key: 'boxInt' }) + bytec_3 // "boxInt" + // contracts/BoxStorage/contract.algo.ts:159 + // this.boxInt.value = valueInt + swap + box_put + retsub + + +// contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxString(value: bytes) -> void: +setBoxString: + // contracts/BoxStorage/contract.algo.ts:166 + // public setBoxString(value: string): void { + proto 1 0 + // contracts/BoxStorage/contract.algo.ts:41 + // public boxString = Box({ key: 'boxString' }) + bytec 4 // "boxString" + // contracts/BoxStorage/contract.algo.ts:167 + // this.boxString.value = value + box_del + pop + // contracts/BoxStorage/contract.algo.ts:41 + // public boxString = Box({ key: 'boxString' }) + bytec 4 // "boxString" + // contracts/BoxStorage/contract.algo.ts:167 + // this.boxString.value = value + frame_dig -1 + box_put + retsub + + +// contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxDynamicBytes(value: bytes) -> void: +setBoxDynamicBytes: + // contracts/BoxStorage/contract.algo.ts:174 + // public setBoxDynamicBytes(value: arc4.DynamicBytes): void { + proto 1 0 + // contracts/BoxStorage/contract.algo.ts:44 + // public boxDynamicBytes = Box({ key: 'boxDynamicBytes' }) + bytec 5 // "boxDynamicBytes" + // contracts/BoxStorage/contract.algo.ts:175 + // this.boxDynamicBytes.value = value + box_del + pop + // contracts/BoxStorage/contract.algo.ts:44 + // public boxDynamicBytes = Box({ key: 'boxDynamicBytes' }) + bytec 5 // "boxDynamicBytes" + // contracts/BoxStorage/contract.algo.ts:175 + // this.boxDynamicBytes.value = value + frame_dig -1 + box_put + retsub + + +// contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxMap(key: uint64, value: bytes) -> void: +setBoxMap: + // contracts/BoxStorage/contract.algo.ts:183 + // public setBoxMap(key: uint64, value: string): void { + proto 2 0 + // contracts/BoxStorage/contract.algo.ts:184 + // this.boxMap(key).value = value + frame_dig -2 + itob + // contracts/BoxStorage/contract.algo.ts:46 + // public boxMap = BoxMap({ keyPrefix: 'boxMap' }) + bytec_2 // "boxMap" + swap + concat + // contracts/BoxStorage/contract.algo.ts:184 + // this.boxMap(key).value = value + dup + box_del + pop + frame_dig -1 + box_put + retsub + + +// contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxRef(key: bytes) -> void: +setBoxRef: + // contracts/BoxStorage/contract.algo.ts:191 + // public setBoxRef(key: string): void { + proto 1 0 + // contracts/BoxStorage/contract.algo.ts:193 + // boxRef.create({ size: 32 }) + frame_dig -1 + intc_2 // 32 + box_create + pop + // contracts/BoxStorage/contract.algo.ts:195 + // boxRef.put(senderBytes) + frame_dig -1 + // contracts/BoxStorage/contract.algo.ts:194 + // const senderBytes = Txn.sender.bytes + txn Sender + // contracts/BoxStorage/contract.algo.ts:195 + // boxRef.put(senderBytes) + box_put + retsub + + +// contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapLength(key: uint64) -> uint64: +boxMapLength: + // contracts/BoxStorage/contract.algo.ts:205-206 + // @abimethod({ readonly: true }) + // public boxMapLength(key: uint64): uint64 { + proto 1 1 + // contracts/BoxStorage/contract.algo.ts:207 // if (!this.boxMap(key).exists) { frame_dig -1 - itob - // contracts/BoxStorage/contract.algo.ts:46 - // public boxMap = BoxMap({ keyPrefix: 'boxMap' }) - bytec_2 // "boxMap" - swap - concat + itob + // contracts/BoxStorage/contract.algo.ts:46 + // public boxMap = BoxMap({ keyPrefix: 'boxMap' }) + bytec_2 // "boxMap" + swap + concat + dup + // contracts/BoxStorage/contract.algo.ts:207 + // if (!this.boxMap(key).exists) { + box_len + bury 1 + bnz boxMapLength_after_if_else@2 + // contracts/BoxStorage/contract.algo.ts:208 + // return Uint64(0) + intc_1 // 0 + swap + retsub + +boxMapLength_after_if_else@2: + // contracts/BoxStorage/contract.algo.ts:211 + // return this.boxMap(key).length + frame_dig 0 + box_len + assert // Box must have value + swap + retsub + + +// contracts/BoxStorage/contract.algo.ts::BoxStorage.lengthBoxRef(key: bytes) -> uint64: +lengthBoxRef: + // contracts/BoxStorage/contract.algo.ts:219 + // public lengthBoxRef(key: string): uint64 { + proto 1 1 + // contracts/BoxStorage/contract.algo.ts:221 + // assert(boxRef.create({ size: 32 }), 'boxRef creation failed') + frame_dig -1 + intc_2 // 32 + box_create + assert // boxRef creation failed + // contracts/BoxStorage/contract.algo.ts:222 + // return boxRef.length + frame_dig -1 + box_len + assert // Box must have value + retsub + + +// contracts/BoxStorage/contract.algo.ts::BoxStorage.deleteBox() -> void: +deleteBox: + // contracts/BoxStorage/contract.algo.ts:42 + // public boxInt = Box({ key: 'boxInt' }) + bytec_3 // "boxInt" + // contracts/BoxStorage/contract.algo.ts:231 + // this.boxInt.delete() + box_del + pop + // contracts/BoxStorage/contract.algo.ts:44 + // public boxDynamicBytes = Box({ key: 'boxDynamicBytes' }) + bytec 5 // "boxDynamicBytes" + // contracts/BoxStorage/contract.algo.ts:232 + // this.boxDynamicBytes.delete() + box_del + pop + // contracts/BoxStorage/contract.algo.ts:41 + // public boxString = Box({ key: 'boxString' }) + bytec 4 // "boxString" + // contracts/BoxStorage/contract.algo.ts:233 + // this.boxString.delete() + box_del + pop + // contracts/BoxStorage/contract.algo.ts:42 + // public boxInt = Box({ key: 'boxInt' }) + bytec_3 // "boxInt" + // contracts/BoxStorage/contract.algo.ts:235 + // assert(this.boxInt.get({ default: Uint64(42) }) === 42) + box_get + swap + btoi + intc_3 // 42 + swap + uncover 2 + select + intc_3 // 42 + == + assert + // contracts/BoxStorage/contract.algo.ts:44 + // public boxDynamicBytes = Box({ key: 'boxDynamicBytes' }) + bytec 5 // "boxDynamicBytes" + // contracts/BoxStorage/contract.algo.ts:236 + // assert(this.boxDynamicBytes.get({ default: new arc4.DynamicBytes('42') }).native === Bytes('42')) + box_get + pushbytes 0x00023432 + cover 2 + select + extract 2 0 + bytec 8 // "42" + == + assert + // contracts/BoxStorage/contract.algo.ts:41 + // public boxString = Box({ key: 'boxString' }) + bytec 4 // "boxString" + // contracts/BoxStorage/contract.algo.ts:237 + // assert(this.boxString.get({ default: '42' }) === '42') + box_get + bytec 8 // "42" + cover 2 + select + bytec 8 // "42" + == + assert + retsub + + +// contracts/BoxStorage/contract.algo.ts::BoxStorage.deleteBoxMap(key: uint64) -> void: +deleteBoxMap: + // contracts/BoxStorage/contract.algo.ts:244 + // public deleteBoxMap(key: uint64): void { + proto 1 0 + // contracts/BoxStorage/contract.algo.ts:245 + // this.boxMap(key).delete() + frame_dig -1 + itob + // contracts/BoxStorage/contract.algo.ts:46 + // public boxMap = BoxMap({ keyPrefix: 'boxMap' }) + bytec_2 // "boxMap" + swap + concat + // contracts/BoxStorage/contract.algo.ts:245 + // this.boxMap(key).delete() + box_del + pop + retsub + + +// contracts/BoxStorage/contract.algo.ts::BoxStorage.deleteBoxRef(key: bytes) -> void: +deleteBoxRef: + // contracts/BoxStorage/contract.algo.ts:252 + // public deleteBoxRef(key: string): void { + proto 1 0 + // contracts/BoxStorage/contract.algo.ts:254 + // boxRef.delete() + frame_dig -1 + box_del + pop + // contracts/BoxStorage/contract.algo.ts:255 + // assertMatch(boxRef.maybe(), [Bytes(''), false]) + frame_dig -1 + box_get + pop + pushbytes "" + == + bz deleteBoxRef_bool_false@4 + frame_dig -1 + box_get + bury 1 + bnz deleteBoxRef_bool_false@4 + intc_0 // 1 + +deleteBoxRef_bool_merge@5: + // contracts/BoxStorage/contract.algo.ts:255 + // assertMatch(boxRef.maybe(), [Bytes(''), false]) + assert // assert target is match for conditions + retsub + +deleteBoxRef_bool_false@4: + intc_1 // 0 + b deleteBoxRef_bool_merge@5 + + +// contracts/BoxStorage/contract.algo.ts::BoxStorage.extractBoxRef(key: bytes) -> void: +extractBoxRef: + // contracts/BoxStorage/contract.algo.ts:264 + // public extractBoxRef(key: string): void { + proto 1 0 + // contracts/BoxStorage/contract.algo.ts:265 + // const senderBytes = Txn.sender.bytes + txn Sender + // contracts/BoxStorage/contract.algo.ts:266 + // const appAddress = Global.currentApplicationAddress.bytes + global CurrentApplicationAddress + // contracts/BoxStorage/contract.algo.ts:268 + // const totalSize = Uint64(appAddress.length + senderBytes.length) + dup + len + dig 2 + len + + + // contracts/BoxStorage/contract.algo.ts:271 + // assert(boxRef.create({ size: totalSize }), 'boxRef creation failed') + frame_dig -1 + swap + box_create + assert // boxRef creation failed + // contracts/BoxStorage/contract.algo.ts:273 + // boxRef.replace(0, senderBytes) + frame_dig -1 + intc_1 // 0 + dig 3 + box_replace + // contracts/BoxStorage/contract.algo.ts:274 + // boxRef.splice(0, 0, appAddress) + frame_dig -1 + intc_1 // 0 + dup + dig 3 + box_splice + // contracts/BoxStorage/contract.algo.ts:276 + // const part1 = boxRef.extract(0, 32) + frame_dig -1 + intc_1 // 0 + intc_2 // 32 + box_extract + // contracts/BoxStorage/contract.algo.ts:277 + // const part2 = boxRef.extract(32, 32) + frame_dig -1 + intc_2 // 32 dup - // contracts/BoxStorage/contract.algo.ts:196 - // if (!this.boxMap(key).exists) { - box_len - bury 1 - bnz boxMapLength_after_if_else@2 - // contracts/BoxStorage/contract.algo.ts:197 - // return Uint64(0) - intc_1 // 0 - swap - retsub - -boxMapLength_after_if_else@2: - // contracts/BoxStorage/contract.algo.ts:200 - // return this.boxMap(key).length - frame_dig 0 - box_len - assert // Box must have value + box_extract + // contracts/BoxStorage/contract.algo.ts:279 + // assert(part1.equals(appAddress), 'First part should match app address') swap + uncover 2 + == + assert // First part should match app address + // contracts/BoxStorage/contract.algo.ts:280 + // assert(part2.equals(senderBytes), 'Second part should match sender bytes') + == + assert // Second part should match sender bytes retsub -// contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapExists(key: uint64) -> uint64: -boxMapExists: - // contracts/BoxStorage/contract.algo.ts:210-211 +// contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxMapStruct(key: uint64) -> bytes: +getBoxMapStruct: + // contracts/BoxStorage/contract.algo.ts:290-291 // @abimethod({ readonly: true }) - // public boxMapExists(key: uint64): boolean { + // public getBoxMapStruct(key: uint64): UserStruct { proto 1 1 - // contracts/BoxStorage/contract.algo.ts:212 - // return this.boxMap(key).exists + // contracts/BoxStorage/contract.algo.ts:292 + // return this.boxMapStruct(key).value frame_dig -1 itob - // contracts/BoxStorage/contract.algo.ts:46 - // public boxMap = BoxMap({ keyPrefix: 'boxMap' }) - bytec_2 // "boxMap" + // contracts/BoxStorage/contract.algo.ts:47 + // public boxMapStruct = BoxMap({ keyPrefix: 'users' }) + bytec 6 // "users" swap concat - // contracts/BoxStorage/contract.algo.ts:212 - // return this.boxMap(key).exists - box_len - bury 1 + // contracts/BoxStorage/contract.algo.ts:292 + // return this.boxMapStruct(key).value + box_get + assert // Box must have value retsub -// contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxMapStruct(key: uint64) -> bytes: -getBoxMapStruct: - // contracts/BoxStorage/contract.algo.ts:234-235 +// contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapStructExists(key: uint64) -> uint64: +boxMapStructExists: + // contracts/BoxStorage/contract.algo.ts:300-301 // @abimethod({ readonly: true }) - // public getBoxMapStruct(key: uint64): UserStruct { + // public boxMapStructExists(key: uint64): boolean { proto 1 1 - // contracts/BoxStorage/contract.algo.ts:236 - // return this.boxMapStruct(key).value + // contracts/BoxStorage/contract.algo.ts:302 + // return this.boxMapStruct(key).exists frame_dig -1 itob // contracts/BoxStorage/contract.algo.ts:47 @@ -980,19 +1196,19 @@ getBoxMapStruct: bytec 6 // "users" swap concat - // contracts/BoxStorage/contract.algo.ts:236 - // return this.boxMapStruct(key).value - box_get - assert // Box must have value + // contracts/BoxStorage/contract.algo.ts:302 + // return this.boxMapStruct(key).exists + box_len + bury 1 retsub // contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxMapStruct(key: uint64, value: bytes) -> uint64: setBoxMapStruct: - // contracts/BoxStorage/contract.algo.ts:246 + // contracts/BoxStorage/contract.algo.ts:310 // public setBoxMapStruct(key: uint64, value: UserStruct): boolean { proto 2 1 - // contracts/BoxStorage/contract.algo.ts:248 + // contracts/BoxStorage/contract.algo.ts:312 // this.boxMapStruct(key).value = value.copy() frame_dig -2 itob @@ -1002,18 +1218,18 @@ setBoxMapStruct: swap concat dupn 2 - // contracts/BoxStorage/contract.algo.ts:248 + // contracts/BoxStorage/contract.algo.ts:312 // this.boxMapStruct(key).value = value.copy() box_del pop dup frame_dig -1 box_put - // contracts/BoxStorage/contract.algo.ts:250 + // contracts/BoxStorage/contract.algo.ts:314 // this.boxMapStruct(key).value, box_get assert // Box must have value - // contracts/BoxStorage/contract.algo.ts:249-257 + // contracts/BoxStorage/contract.algo.ts:313-321 // assertMatch( // this.boxMapStruct(key).value, // { @@ -1029,7 +1245,7 @@ setBoxMapStruct: dig 1 len substring3 - // contracts/BoxStorage/contract.algo.ts:252 + // contracts/BoxStorage/contract.algo.ts:316 // name: value.name, frame_dig -1 intc_1 // 0 @@ -1039,7 +1255,7 @@ setBoxMapStruct: frame_dig -1 cover 2 substring3 - // contracts/BoxStorage/contract.algo.ts:249-257 + // contracts/BoxStorage/contract.algo.ts:313-321 // assertMatch( // this.boxMapStruct(key).value, // { @@ -1051,12 +1267,12 @@ setBoxMapStruct: // ) == bz setBoxMapStruct_bool_false@4 - // contracts/BoxStorage/contract.algo.ts:250 + // contracts/BoxStorage/contract.algo.ts:314 // this.boxMapStruct(key).value, frame_dig 0 box_get assert // Box must have value - // contracts/BoxStorage/contract.algo.ts:249-257 + // contracts/BoxStorage/contract.algo.ts:313-321 // assertMatch( // this.boxMapStruct(key).value, // { @@ -1067,11 +1283,11 @@ setBoxMapStruct: // 'boxMapStruct value mismatch', // ) extract 2 8 // on error: Index access is out of bounds - // contracts/BoxStorage/contract.algo.ts:253 + // contracts/BoxStorage/contract.algo.ts:317 // id: value.id, frame_dig -1 extract 2 8 // on error: Index access is out of bounds - // contracts/BoxStorage/contract.algo.ts:249-257 + // contracts/BoxStorage/contract.algo.ts:313-321 // assertMatch( // this.boxMapStruct(key).value, // { @@ -1083,12 +1299,12 @@ setBoxMapStruct: // ) == bz setBoxMapStruct_bool_false@4 - // contracts/BoxStorage/contract.algo.ts:250 + // contracts/BoxStorage/contract.algo.ts:314 // this.boxMapStruct(key).value, frame_dig 0 box_get assert // Box must have value - // contracts/BoxStorage/contract.algo.ts:249-257 + // contracts/BoxStorage/contract.algo.ts:313-321 // assertMatch( // this.boxMapStruct(key).value, // { @@ -1099,11 +1315,11 @@ setBoxMapStruct: // 'boxMapStruct value mismatch', // ) extract 10 8 // on error: Index access is out of bounds - // contracts/BoxStorage/contract.algo.ts:254 + // contracts/BoxStorage/contract.algo.ts:318 // asset: value.asset, frame_dig -1 extract 10 8 // on error: Index access is out of bounds - // contracts/BoxStorage/contract.algo.ts:249-257 + // contracts/BoxStorage/contract.algo.ts:313-321 // assertMatch( // this.boxMapStruct(key).value, // { @@ -1118,7 +1334,7 @@ setBoxMapStruct: intc_0 // 1 setBoxMapStruct_bool_merge@5: - // contracts/BoxStorage/contract.algo.ts:249-257 + // contracts/BoxStorage/contract.algo.ts:313-321 // assertMatch( // this.boxMapStruct(key).value, // { @@ -1129,7 +1345,7 @@ setBoxMapStruct_bool_merge@5: // 'boxMapStruct value mismatch', // ) assert // boxMapStruct value mismatch - // contracts/BoxStorage/contract.algo.ts:258 + // contracts/BoxStorage/contract.algo.ts:322 // return true intc_0 // 1 swap @@ -1142,10 +1358,10 @@ setBoxMapStruct_bool_false@4: // contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapStructLength(key: uint64) -> uint64: boxMapStructLength: - // contracts/BoxStorage/contract.algo.ts:268 + // contracts/BoxStorage/contract.algo.ts:330 // public boxMapStructLength(key: uint64): boolean { proto 1 1 - // contracts/BoxStorage/contract.algo.ts:276 + // contracts/BoxStorage/contract.algo.ts:337 // this.boxMapStruct(key).value = value.copy() frame_dig -1 itob @@ -1154,23 +1370,23 @@ boxMapStructLength: bytec 6 // "users" swap concat - // contracts/BoxStorage/contract.algo.ts:276 + // contracts/BoxStorage/contract.algo.ts:337 // this.boxMapStruct(key).value = value.copy() dup box_del pop dup - // contracts/BoxStorage/contract.algo.ts:269-273 + // contracts/BoxStorage/contract.algo.ts:331-335 // const value = new UserStruct({ // name: new arc4.Str('testName'), // id: new arc4.UintN64(70), // asset: new arc4.UintN64(1234), // }) pushbytes 0x0012000000000000004600000000000004d20008746573744e616d65 - // contracts/BoxStorage/contract.algo.ts:276 + // contracts/BoxStorage/contract.algo.ts:337 // this.boxMapStruct(key).value = value.copy() box_put - // contracts/BoxStorage/contract.algo.ts:278 + // contracts/BoxStorage/contract.algo.ts:339 // assert(this.boxMapStruct(key).value.bytes.length === value.bytes.length, 'boxMapStruct bytes length mismatch') dup box_get @@ -1179,241 +1395,25 @@ boxMapStructLength: pushint 28 // 28 == assert // boxMapStruct bytes length mismatch - // contracts/BoxStorage/contract.algo.ts:279 + // contracts/BoxStorage/contract.algo.ts:340 // assert(this.boxMapStruct(key).length === value.bytes.length, 'boxMapStruct length mismatch') box_len assert // Box must have value pushint 28 // 28 == assert // boxMapStruct length mismatch - // contracts/BoxStorage/contract.algo.ts:281 + // contracts/BoxStorage/contract.algo.ts:342 // return true intc_0 // 1 retsub -// contracts/BoxStorage/contract.algo.ts::BoxStorage.boxMapStructExists(key: uint64) -> uint64: -boxMapStructExists: - // contracts/BoxStorage/contract.algo.ts:291-292 - // @abimethod({ readonly: true }) - // public boxMapStructExists(key: uint64): boolean { - proto 1 1 - // contracts/BoxStorage/contract.algo.ts:293 - // return this.boxMapStruct(key).exists - frame_dig -1 - itob - // contracts/BoxStorage/contract.algo.ts:47 - // public boxMapStruct = BoxMap({ keyPrefix: 'users' }) - bytec 6 // "users" - swap - concat - // contracts/BoxStorage/contract.algo.ts:293 - // return this.boxMapStruct(key).exists - box_len - bury 1 - retsub - - -// contracts/BoxStorage/contract.algo.ts::BoxStorage.getBoxRef() -> bytes: -getBoxRef: - // contracts/BoxStorage/contract.algo.ts:45 - // public boxRef = BoxRef({ key: 'boxRef' }) - bytec 8 // "boxRef" - // contracts/BoxStorage/contract.algo.ts:304 - // this.boxRef.create({ size: 32 }) - intc_2 // 32 - box_create - pop - // contracts/BoxStorage/contract.algo.ts:305 - // const senderBytes = Txn.sender.bytes - txn Sender - // contracts/BoxStorage/contract.algo.ts:45 - // public boxRef = BoxRef({ key: 'boxRef' }) - bytec 8 // "boxRef" - // contracts/BoxStorage/contract.algo.ts:306 - // this.boxRef.put(senderBytes) - dig 1 - box_put - // contracts/BoxStorage/contract.algo.ts:45 - // public boxRef = BoxRef({ key: 'boxRef' }) - bytec 8 // "boxRef" - // contracts/BoxStorage/contract.algo.ts:307 - // const value = this.boxRef.get({ default: senderBytes }) - box_get - dig 2 - cover 2 - select - // contracts/BoxStorage/contract.algo.ts:308 - // assert(value === senderBytes, 'boxRef value mismatch') - dup - uncover 2 - == - assert // boxRef value mismatch - // contracts/BoxStorage/contract.algo.ts:309 - // return new arc4.Address(value) - retsub - - -// contracts/BoxStorage/contract.algo.ts::BoxStorage.setBoxRef(key: bytes) -> void: -setBoxRef: - // contracts/BoxStorage/contract.algo.ts:318 - // public setBoxRef(key: string): void { - proto 1 0 - // contracts/BoxStorage/contract.algo.ts:320 - // boxRef.create({ size: 32 }) - frame_dig -1 - intc_2 // 32 - box_create - pop - // contracts/BoxStorage/contract.algo.ts:322 - // boxRef.put(senderBytes) - frame_dig -1 - // contracts/BoxStorage/contract.algo.ts:321 - // const senderBytes = Txn.sender.bytes - txn Sender - // contracts/BoxStorage/contract.algo.ts:322 - // boxRef.put(senderBytes) - box_put - retsub - - -// contracts/BoxStorage/contract.algo.ts::BoxStorage.deleteBoxRef(key: bytes) -> void: -deleteBoxRef: - // contracts/BoxStorage/contract.algo.ts:331 - // public deleteBoxRef(key: string): void { - proto 1 0 - // contracts/BoxStorage/contract.algo.ts:333 - // boxRef.delete() - frame_dig -1 - box_del - pop - // contracts/BoxStorage/contract.algo.ts:334 - // assertMatch(boxRef.maybe(), [Bytes(''), false]) - frame_dig -1 - box_get - pop - pushbytes "" - == - bz deleteBoxRef_bool_false@4 - frame_dig -1 - box_get - bury 1 - bnz deleteBoxRef_bool_false@4 - intc_0 // 1 - -deleteBoxRef_bool_merge@5: - // contracts/BoxStorage/contract.algo.ts:334 - // assertMatch(boxRef.maybe(), [Bytes(''), false]) - assert // assert target is match for conditions - retsub - -deleteBoxRef_bool_false@4: - intc_1 // 0 - b deleteBoxRef_bool_merge@5 - - -// contracts/BoxStorage/contract.algo.ts::BoxStorage.maybeBoxRef(key: bytes) -> bytes, uint64: -maybeBoxRef: - // contracts/BoxStorage/contract.algo.ts:343-344 - // @abimethod({ readonly: true }) - // public maybeBoxRef(key: string): [bytes, boolean] { - proto 1 2 - // contracts/BoxStorage/contract.algo.ts:346 - // const [value, exists] = boxRef.maybe() - frame_dig -1 - box_get - // contracts/BoxStorage/contract.algo.ts:347 - // return [value, exists] - retsub - - -// contracts/BoxStorage/contract.algo.ts::BoxStorage.lengthBoxRef(key: bytes) -> uint64: -lengthBoxRef: - // contracts/BoxStorage/contract.algo.ts:357 - // public lengthBoxRef(key: string): uint64 { - proto 1 1 - // contracts/BoxStorage/contract.algo.ts:359 - // assert(boxRef.create({ size: 32 }), 'boxRef creation failed') - frame_dig -1 - intc_2 // 32 - box_create - assert // boxRef creation failed - // contracts/BoxStorage/contract.algo.ts:360 - // return boxRef.length - frame_dig -1 - box_len - assert // Box must have value - retsub - - -// contracts/BoxStorage/contract.algo.ts::BoxStorage.extractBoxRef(key: bytes) -> void: -extractBoxRef: - // contracts/BoxStorage/contract.algo.ts:369 - // public extractBoxRef(key: string): void { - proto 1 0 - // contracts/BoxStorage/contract.algo.ts:370 - // const senderBytes = Txn.sender.bytes - txn Sender - // contracts/BoxStorage/contract.algo.ts:371 - // const appAddress = Global.currentApplicationAddress.bytes - global CurrentApplicationAddress - // contracts/BoxStorage/contract.algo.ts:373 - // const totalSize = Uint64(appAddress.length + senderBytes.length) - dup - len - dig 2 - len - + - // contracts/BoxStorage/contract.algo.ts:376 - // assert(boxRef.create({ size: totalSize }), 'boxRef creation failed') - frame_dig -1 - swap - box_create - assert // boxRef creation failed - // contracts/BoxStorage/contract.algo.ts:378 - // boxRef.replace(0, senderBytes) - frame_dig -1 - intc_1 // 0 - dig 3 - box_replace - // contracts/BoxStorage/contract.algo.ts:379 - // boxRef.splice(0, 0, appAddress) - frame_dig -1 - intc_1 // 0 - dup - dig 3 - box_splice - // contracts/BoxStorage/contract.algo.ts:381 - // const part1 = boxRef.extract(0, 32) - frame_dig -1 - intc_1 // 0 - intc_2 // 32 - box_extract - // contracts/BoxStorage/contract.algo.ts:382 - // const part2 = boxRef.extract(32, 32) - frame_dig -1 - intc_2 // 32 - dup - box_extract - // contracts/BoxStorage/contract.algo.ts:384 - // assert(part1.equals(appAddress), 'First part should match app address') - swap - uncover 2 - == - assert // First part should match app address - // contracts/BoxStorage/contract.algo.ts:385 - // assert(part2.equals(senderBytes), 'Second part should match sender bytes') - == - assert // Second part should match sender bytes - retsub - - // contracts/BoxStorage/contract.algo.ts::BoxStorage.arc4Box(key: bytes) -> bytes: arc4Box: - // contracts/BoxStorage/contract.algo.ts:396 + // contracts/BoxStorage/contract.algo.ts:352 // public arc4Box(key: string): StaticInts { proto 1 1 - // contracts/BoxStorage/contract.algo.ts:399-404 + // contracts/BoxStorage/contract.algo.ts:355-360 // staticIntBox.value = new arc4.StaticArray( // new arc4.UintN8(0), // new arc4.UintN8(1), @@ -1423,7 +1423,7 @@ arc4Box: frame_dig -1 pushbytes 0x00010203 box_put - // contracts/BoxStorage/contract.algo.ts:406 + // contracts/BoxStorage/contract.algo.ts:362 // assert(staticIntBox.value[0].native === 0) frame_dig -1 box_get @@ -1432,7 +1432,7 @@ arc4Box: getbyte ! assert - // contracts/BoxStorage/contract.algo.ts:407 + // contracts/BoxStorage/contract.algo.ts:363 // assert(staticIntBox.value[1].native === 1) frame_dig -1 box_get @@ -1442,7 +1442,7 @@ arc4Box: intc_0 // 1 == assert - // contracts/BoxStorage/contract.algo.ts:408 + // contracts/BoxStorage/contract.algo.ts:364 // assert(staticIntBox.value[2].native === 2) frame_dig -1 box_get @@ -1452,7 +1452,7 @@ arc4Box: pushint 2 // 2 == assert - // contracts/BoxStorage/contract.algo.ts:409 + // contracts/BoxStorage/contract.algo.ts:365 // assert(staticIntBox.value[3].native === 3) frame_dig -1 box_get @@ -1462,7 +1462,7 @@ arc4Box: pushint 3 // 3 == assert - // contracts/BoxStorage/contract.algo.ts:411 + // contracts/BoxStorage/contract.algo.ts:367 // return staticIntBox.value frame_dig -1 box_get diff --git a/projects/typescript-examples/contracts/artifacts/contracts/BoxStorage/BoxStorage.arc32.json b/projects/typescript-examples/contracts/artifacts/contracts/BoxStorage/BoxStorage.arc32.json index 700398a..3fd7aaa 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/BoxStorage/BoxStorage.arc32.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/BoxStorage/BoxStorage.arc32.json @@ -12,56 +12,74 @@ "no_op": "CALL" } }, - "setBox(uint64)void": { + "maybeBox()(uint64,bool)": { + "read_only": true, "call_config": { "no_op": "CALL" } }, - "setBoxString(string)void": { + "getBoxMap(uint64)string": { + "read_only": true, "call_config": { "no_op": "CALL" } }, - "setBoxDynamicBytes(byte[])void": { + "getBoxMapWithDefault(uint64)string": { + "read_only": true, "call_config": { "no_op": "CALL" } }, - "deleteBox()void": { + "maybeBoxMap(uint64)(string,bool)": { + "read_only": true, "call_config": { "no_op": "CALL" } }, - "maybeBox()(uint64,bool)": { + "keyPrefixBoxMap()byte[]": { "read_only": true, "call_config": { "no_op": "CALL" } }, - "getBoxMap(uint64)string": { + "getBoxRef()address": { + "call_config": { + "no_op": "CALL" + } + }, + "boxMapExists(uint64)bool": { "read_only": true, "call_config": { "no_op": "CALL" } }, - "getBoxMapWithDefault(uint64)string": { + "maybeBoxRef(string)(byte[],bool)": { "read_only": true, "call_config": { "no_op": "CALL" } }, - "setBoxMap(uint64,string)void": { + "setBox(uint64)void": { "call_config": { "no_op": "CALL" } }, - "deleteBoxMap(uint64)void": { + "setBoxString(string)void": { "call_config": { "no_op": "CALL" } }, - "maybeBoxMap(uint64)(string,bool)": { - "read_only": true, + "setBoxDynamicBytes(byte[])void": { + "call_config": { + "no_op": "CALL" + } + }, + "setBoxMap(uint64,string)void": { + "call_config": { + "no_op": "CALL" + } + }, + "setBoxRef(string)void": { "call_config": { "no_op": "CALL" } @@ -72,14 +90,27 @@ "no_op": "CALL" } }, - "boxMapExists(uint64)bool": { - "read_only": true, + "lengthBoxRef(string)uint64": { "call_config": { "no_op": "CALL" } }, - "keyPrefixBoxMap()byte[]": { - "read_only": true, + "deleteBox()void": { + "call_config": { + "no_op": "CALL" + } + }, + "deleteBoxMap(uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "deleteBoxRef(string)void": { + "call_config": { + "no_op": "CALL" + } + }, + "extractBoxRef(string)void": { "call_config": { "no_op": "CALL" } @@ -109,6 +140,12 @@ } } }, + "boxMapStructExists(uint64)bool": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, "setBoxMapStruct(uint64,(string,uint64,uint64))bool": { "call_config": { "no_op": "CALL" @@ -138,43 +175,6 @@ "no_op": "CALL" } }, - "boxMapStructExists(uint64)bool": { - "read_only": true, - "call_config": { - "no_op": "CALL" - } - }, - "getBoxRef()address": { - "call_config": { - "no_op": "CALL" - } - }, - "setBoxRef(string)void": { - "call_config": { - "no_op": "CALL" - } - }, - "deleteBoxRef(string)void": { - "call_config": { - "no_op": "CALL" - } - }, - "maybeBoxRef(string)(byte[],bool)": { - "read_only": true, - "call_config": { - "no_op": "CALL" - } - }, - "lengthBoxRef(string)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "extractBoxRef(string)void": { - "call_config": { - "no_op": "CALL" - } - }, "arc4Box(string)uint8[4]": { "call_config": { "no_op": "CALL" @@ -182,7 +182,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDMyIDQyCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgMHgwMCAiYm94TWFwIiAiYm94SW50IiAiYm94U3RyaW5nIiAiYm94RHluYW1pY0J5dGVzIiAidXNlcnMiICI0MiIgImJveFJlZiIgMHgwMDAzCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDMxCiAgICBwdXNoYnl0ZXNzIDB4Yjc0OTEzNDQgMHg0OWNmNDEwNSAweGZhMTU2MmY3IDB4YzQ5N2JjNmYgMHhmNGY5Y2JhZCAweDkxMDFhN2RlIDB4NmFiM2U5YmMgMHgyNmNhNjQ4YSAweDI4Y2M3MTM5IDB4OWUxMWZkN2EgMHhhNDU1MmViNSAweDY0NGEzOTk0IDB4ZjUzNDE4YzQgMHhkODI5ZDJhMyAweGIxZjVhOWI2IDB4NTNjMjg4MjAgMHhkNWRkOTIyYyAweDU5NWI4N2JiIDB4ZjE4MzIwN2EgMHgwM2U4Yzc3ZSAweDVlNmNlYWMwIDB4MzhhY2Y1M2UgMHg4YzIyYmZkNSAweDM5ZTliMjI2IDB4ODYwMGUwZWIgMHg1NDdmMGE3NCAvLyBtZXRob2QgImdldEJveCgpdWludDY0IiwgbWV0aG9kICJ2YWx1ZUJveCgpdWludDY0IiwgbWV0aG9kICJzZXRCb3godWludDY0KXZvaWQiLCBtZXRob2QgInNldEJveFN0cmluZyhzdHJpbmcpdm9pZCIsIG1ldGhvZCAic2V0Qm94RHluYW1pY0J5dGVzKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJkZWxldGVCb3goKXZvaWQiLCBtZXRob2QgIm1heWJlQm94KCkodWludDY0LGJvb2wpIiwgbWV0aG9kICJnZXRCb3hNYXAodWludDY0KXN0cmluZyIsIG1ldGhvZCAiZ2V0Qm94TWFwV2l0aERlZmF1bHQodWludDY0KXN0cmluZyIsIG1ldGhvZCAic2V0Qm94TWFwKHVpbnQ2NCxzdHJpbmcpdm9pZCIsIG1ldGhvZCAiZGVsZXRlQm94TWFwKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJtYXliZUJveE1hcCh1aW50NjQpKHN0cmluZyxib29sKSIsIG1ldGhvZCAiYm94TWFwTGVuZ3RoKHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgImJveE1hcEV4aXN0cyh1aW50NjQpYm9vbCIsIG1ldGhvZCAia2V5UHJlZml4Qm94TWFwKClieXRlW10iLCBtZXRob2QgImdldEJveE1hcFN0cnVjdCh1aW50NjQpKHN0cmluZyx1aW50NjQsdWludDY0KSIsIG1ldGhvZCAic2V0Qm94TWFwU3RydWN0KHVpbnQ2NCwoc3RyaW5nLHVpbnQ2NCx1aW50NjQpKWJvb2wiLCBtZXRob2QgImJveE1hcFN0cnVjdExlbmd0aCh1aW50NjQpYm9vbCIsIG1ldGhvZCAiYm94TWFwU3RydWN0RXhpc3RzKHVpbnQ2NClib29sIiwgbWV0aG9kICJnZXRCb3hSZWYoKWFkZHJlc3MiLCBtZXRob2QgInNldEJveFJlZihzdHJpbmcpdm9pZCIsIG1ldGhvZCAiZGVsZXRlQm94UmVmKHN0cmluZyl2b2lkIiwgbWV0aG9kICJtYXliZUJveFJlZihzdHJpbmcpKGJ5dGVbXSxib29sKSIsIG1ldGhvZCAibGVuZ3RoQm94UmVmKHN0cmluZyl1aW50NjQiLCBtZXRob2QgImV4dHJhY3RCb3hSZWYoc3RyaW5nKXZvaWQiLCBtZXRob2QgImFyYzRCb3goc3RyaW5nKXVpbnQ4WzRdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9nZXRCb3hfcm91dGVAMyBtYWluX3ZhbHVlQm94X3JvdXRlQDQgbWFpbl9zZXRCb3hfcm91dGVANSBtYWluX3NldEJveFN0cmluZ19yb3V0ZUA2IG1haW5fc2V0Qm94RHluYW1pY0J5dGVzX3JvdXRlQDcgbWFpbl9kZWxldGVCb3hfcm91dGVAOCBtYWluX21heWJlQm94X3JvdXRlQDkgbWFpbl9nZXRCb3hNYXBfcm91dGVAMTAgbWFpbl9nZXRCb3hNYXBXaXRoRGVmYXVsdF9yb3V0ZUAxMSBtYWluX3NldEJveE1hcF9yb3V0ZUAxMiBtYWluX2RlbGV0ZUJveE1hcF9yb3V0ZUAxMyBtYWluX21heWJlQm94TWFwX3JvdXRlQDE0IG1haW5fYm94TWFwTGVuZ3RoX3JvdXRlQDE1IG1haW5fYm94TWFwRXhpc3RzX3JvdXRlQDE2IG1haW5fa2V5UHJlZml4Qm94TWFwX3JvdXRlQDE3IG1haW5fZ2V0Qm94TWFwU3RydWN0X3JvdXRlQDE4IG1haW5fc2V0Qm94TWFwU3RydWN0X3JvdXRlQDE5IG1haW5fYm94TWFwU3RydWN0TGVuZ3RoX3JvdXRlQDIwIG1haW5fYm94TWFwU3RydWN0RXhpc3RzX3JvdXRlQDIxIG1haW5fZ2V0Qm94UmVmX3JvdXRlQDIyIG1haW5fc2V0Qm94UmVmX3JvdXRlQDIzIG1haW5fZGVsZXRlQm94UmVmX3JvdXRlQDI0IG1haW5fbWF5YmVCb3hSZWZfcm91dGVAMjUgbWFpbl9sZW5ndGhCb3hSZWZfcm91dGVAMjYgbWFpbl9leHRyYWN0Qm94UmVmX3JvdXRlQDI3IG1haW5fYXJjNEJveF9yb3V0ZUAyOAoKbWFpbl9hZnRlcl9pZl9lbHNlQDM1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fYXJjNEJveF9yb3V0ZUAyODoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mzk2CiAgICAvLyBwdWJsaWMgYXJjNEJveChrZXk6IHN0cmluZyk6IFN0YXRpY0ludHMgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mzk2CiAgICAvLyBwdWJsaWMgYXJjNEJveChrZXk6IHN0cmluZyk6IFN0YXRpY0ludHMgewogICAgY2FsbHN1YiBhcmM0Qm94CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2V4dHJhY3RCb3hSZWZfcm91dGVAMjc6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gcHVibGljIGV4dHJhY3RCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gcHVibGljIGV4dHJhY3RCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIGNhbGxzdWIgZXh0cmFjdEJveFJlZgogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9sZW5ndGhCb3hSZWZfcm91dGVAMjY6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM1NwogICAgLy8gcHVibGljIGxlbmd0aEJveFJlZihrZXk6IHN0cmluZyk6IHVpbnQ2NCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNTcKICAgIC8vIHB1YmxpYyBsZW5ndGhCb3hSZWYoa2V5OiBzdHJpbmcpOiB1aW50NjQgewogICAgY2FsbHN1YiBsZW5ndGhCb3hSZWYKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWF5YmVCb3hSZWZfcm91dGVAMjU6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM0MwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNDMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBtYXliZUJveFJlZgogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgYnl0ZWMgOSAvLyAweDAwMDMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2RlbGV0ZUJveFJlZl9yb3V0ZUAyNDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzMxCiAgICAvLyBwdWJsaWMgZGVsZXRlQm94UmVmKGtleTogc3RyaW5nKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzEKICAgIC8vIHB1YmxpYyBkZWxldGVCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIGNhbGxzdWIgZGVsZXRlQm94UmVmCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3NldEJveFJlZl9yb3V0ZUAyMzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBwdWJsaWMgc2V0Qm94UmVmKGtleTogc3RyaW5nKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTgKICAgIC8vIHB1YmxpYyBzZXRCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIGNhbGxzdWIgc2V0Qm94UmVmCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveFJlZl9yb3V0ZUAyMjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzAzCiAgICAvLyBwdWJsaWMgZ2V0Qm94UmVmKCk6IGFyYzQuQWRkcmVzcyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qm94UmVmCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JveE1hcFN0cnVjdEV4aXN0c19yb3V0ZUAyMToKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjkxCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjkxCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgYm94TWFwU3RydWN0RXhpc3RzCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hNYXBTdHJ1Y3RMZW5ndGhfcm91dGVAMjA6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI2OAogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdExlbmd0aChrZXk6IHVpbnQ2NCk6IGJvb2xlYW4gewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIHB1YmxpYyBib3hNYXBTdHJ1Y3RMZW5ndGgoa2V5OiB1aW50NjQpOiBib29sZWFuIHsKICAgIGNhbGxzdWIgYm94TWFwU3RydWN0TGVuZ3RoCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRCb3hNYXBTdHJ1Y3Rfcm91dGVAMTk6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0NgogICAgLy8gcHVibGljIHNldEJveE1hcFN0cnVjdChrZXk6IHVpbnQ2NCwgdmFsdWU6IFVzZXJTdHJ1Y3QpOiBib29sZWFuIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQ2CiAgICAvLyBwdWJsaWMgc2V0Qm94TWFwU3RydWN0KGtleTogdWludDY0LCB2YWx1ZTogVXNlclN0cnVjdCk6IGJvb2xlYW4gewogICAgY2FsbHN1YiBzZXRCb3hNYXBTdHJ1Y3QKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveE1hcFN0cnVjdF9yb3V0ZUAxODoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjM0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjM0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0Qm94TWFwU3RydWN0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2tleVByZWZpeEJveE1hcF9yb3V0ZUAxNzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjIxCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUwMDA2NjI2Zjc4NGQ2MTcwCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94TWFwRXhpc3RzX3JvdXRlQDE2OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBib3hNYXBFeGlzdHMKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JveE1hcExlbmd0aF9yb3V0ZUAxNToKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTk0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTk0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgYm94TWFwTGVuZ3RoCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21heWJlQm94TWFwX3JvdXRlQDE0OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBtYXliZUJveE1hcAogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgYnl0ZWMgOSAvLyAweDAwMDMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2RlbGV0ZUJveE1hcF9yb3V0ZUAxMzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTcwCiAgICAvLyBwdWJsaWMgZGVsZXRlQm94TWFwKGtleTogdWludDY0KTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3MAogICAgLy8gcHVibGljIGRlbGV0ZUJveE1hcChrZXk6IHVpbnQ2NCk6IHZvaWQgewogICAgY2FsbHN1YiBkZWxldGVCb3hNYXAKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0Qm94TWFwX3JvdXRlQDEyOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNjAKICAgIC8vIHB1YmxpYyBzZXRCb3hNYXAoa2V5OiB1aW50NjQsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2MAogICAgLy8gcHVibGljIHNldEJveE1hcChrZXk6IHVpbnQ2NCwgdmFsdWU6IHN0cmluZyk6IHZvaWQgewogICAgY2FsbHN1YiBzZXRCb3hNYXAKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0Qm94TWFwV2l0aERlZmF1bHRfcm91dGVAMTE6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE0OAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE0OAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGdldEJveE1hcFdpdGhEZWZhdWx0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRCb3hNYXBfcm91dGVAMTA6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEzNgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEzNgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGdldEJveE1hcAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWF5YmVCb3hfcm91dGVAOToKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTIyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZUJveAogICAgc3dhcAogICAgaXRvYgogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZWxldGVCb3hfcm91dGVAODoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTA2CiAgICAvLyBwdWJsaWMgZGVsZXRlQm94KCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZUJveAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRCb3hEeW5hbWljQnl0ZXNfcm91dGVANzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTcKICAgIC8vIHB1YmxpYyBzZXRCb3hEeW5hbWljQnl0ZXModmFsdWU6IGFyYzQuRHluYW1pY0J5dGVzKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjk3CiAgICAvLyBwdWJsaWMgc2V0Qm94RHluYW1pY0J5dGVzKHZhbHVlOiBhcmM0LkR5bmFtaWNCeXRlcyk6IHZvaWQgewogICAgY2FsbHN1YiBzZXRCb3hEeW5hbWljQnl0ZXMKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0Qm94U3RyaW5nX3JvdXRlQDY6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyBwdWJsaWMgc2V0Qm94U3RyaW5nKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyBwdWJsaWMgc2V0Qm94U3RyaW5nKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsKICAgIGNhbGxzdWIgc2V0Qm94U3RyaW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3NldEJveF9yb3V0ZUA1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo3NwogICAgLy8gcHVibGljIHNldEJveCh2YWx1ZUludDogdWludDY0KTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjc3CiAgICAvLyBwdWJsaWMgc2V0Qm94KHZhbHVlSW50OiB1aW50NjQpOiB2b2lkIHsKICAgIGNhbGxzdWIgc2V0Qm94CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZhbHVlQm94X3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjY2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB2YWx1ZUJveAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRCb3hfcm91dGVAMzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldEJveAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMzE6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAzNQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmdldEJveCgpIC0+IHVpbnQ2NDoKZ2V0Qm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcHVibGljIGJveEludCA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94SW50JyB9KQogICAgYnl0ZWNfMyAvLyAiYm94SW50IgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo1OAogICAgLy8gcmV0dXJuIHRoaXMuYm94SW50LnZhbHVlCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS52YWx1ZUJveCgpIC0+IHVpbnQ2NDoKdmFsdWVCb3g6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyBwdWJsaWMgYm94SW50ID0gQm94PHVpbnQ2ND4oeyBrZXk6ICdib3hJbnQnIH0pCiAgICBieXRlY18zIC8vICJib3hJbnQiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyByZXR1cm4gdGhpcy5ib3hJbnQudmFsdWUKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLnNldEJveCh2YWx1ZUludDogdWludDY0KSAtPiB2b2lkOgpzZXRCb3g6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjc3CiAgICAvLyBwdWJsaWMgc2V0Qm94KHZhbHVlSW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo3OAogICAgLy8gdGhpcy5ib3hJbnQudmFsdWUgPSB2YWx1ZUludAogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyBwdWJsaWMgYm94SW50ID0gQm94PHVpbnQ2ND4oeyBrZXk6ICdib3hJbnQnIH0pCiAgICBieXRlY18zIC8vICJib3hJbnQiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjc4CiAgICAvLyB0aGlzLmJveEludC52YWx1ZSA9IHZhbHVlSW50CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLnNldEJveFN0cmluZyh2YWx1ZTogYnl0ZXMpIC0+IHZvaWQ6CnNldEJveFN0cmluZzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIHB1YmxpYyBzZXRCb3hTdHJpbmcodmFsdWU6IHN0cmluZyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBwdWJsaWMgYm94U3RyaW5nID0gQm94PHN0cmluZz4oeyBrZXk6ICdib3hTdHJpbmcnIH0pCiAgICBieXRlYyA0IC8vICJib3hTdHJpbmciCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg4CiAgICAvLyB0aGlzLmJveFN0cmluZy52YWx1ZSA9IHZhbHVlCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHB1YmxpYyBib3hTdHJpbmcgPSBCb3g8c3RyaW5nPih7IGtleTogJ2JveFN0cmluZycgfSkKICAgIGJ5dGVjIDQgLy8gImJveFN0cmluZyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIHRoaXMuYm94U3RyaW5nLnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5zZXRCb3hEeW5hbWljQnl0ZXModmFsdWU6IGJ5dGVzKSAtPiB2b2lkOgpzZXRCb3hEeW5hbWljQnl0ZXM6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjk3CiAgICAvLyBwdWJsaWMgc2V0Qm94RHluYW1pY0J5dGVzKHZhbHVlOiBhcmM0LkR5bmFtaWNCeXRlcyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBwdWJsaWMgYm94RHluYW1pY0J5dGVzID0gQm94PGFyYzQuRHluYW1pY0J5dGVzPih7IGtleTogJ2JveER5bmFtaWNCeXRlcycgfSkKICAgIGJ5dGVjIDUgLy8gImJveER5bmFtaWNCeXRlcyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTgKICAgIC8vIHRoaXMuYm94RHluYW1pY0J5dGVzLnZhbHVlID0gdmFsdWUKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcHVibGljIGJveER5bmFtaWNCeXRlcyA9IEJveDxhcmM0LkR5bmFtaWNCeXRlcz4oeyBrZXk6ICdib3hEeW5hbWljQnl0ZXMnIH0pCiAgICBieXRlYyA1IC8vICJib3hEeW5hbWljQnl0ZXMiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjk4CiAgICAvLyB0aGlzLmJveER5bmFtaWNCeXRlcy52YWx1ZSA9IHZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZGVsZXRlQm94KCkgLT4gdm9pZDoKZGVsZXRlQm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcHVibGljIGJveEludCA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94SW50JyB9KQogICAgYnl0ZWNfMyAvLyAiYm94SW50IgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIHRoaXMuYm94SW50LmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHB1YmxpYyBib3hEeW5hbWljQnl0ZXMgPSBCb3g8YXJjNC5EeW5hbWljQnl0ZXM+KHsga2V5OiAnYm94RHluYW1pY0J5dGVzJyB9KQogICAgYnl0ZWMgNSAvLyAiYm94RHluYW1pY0J5dGVzIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDgKICAgIC8vIHRoaXMuYm94RHluYW1pY0J5dGVzLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHB1YmxpYyBib3hTdHJpbmcgPSBCb3g8c3RyaW5nPih7IGtleTogJ2JveFN0cmluZycgfSkKICAgIGJ5dGVjIDQgLy8gImJveFN0cmluZyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTA5CiAgICAvLyB0aGlzLmJveFN0cmluZy5kZWxldGUoKQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyBwdWJsaWMgYm94SW50ID0gQm94PHVpbnQ2ND4oeyBrZXk6ICdib3hJbnQnIH0pCiAgICBieXRlY18zIC8vICJib3hJbnQiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gYXNzZXJ0KHRoaXMuYm94SW50LmdldCh7IGRlZmF1bHQ6IFVpbnQ2NCg0MikgfSkgPT09IDQyKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18zIC8vIDQyCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgaW50Y18zIC8vIDQyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBwdWJsaWMgYm94RHluYW1pY0J5dGVzID0gQm94PGFyYzQuRHluYW1pY0J5dGVzPih7IGtleTogJ2JveER5bmFtaWNCeXRlcycgfSkKICAgIGJ5dGVjIDUgLy8gImJveER5bmFtaWNCeXRlcyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTEyCiAgICAvLyBhc3NlcnQodGhpcy5ib3hEeW5hbWljQnl0ZXMuZ2V0KHsgZGVmYXVsdDogbmV3IGFyYzQuRHluYW1pY0J5dGVzKCc0MicpIH0pLm5hdGl2ZSA9PT0gQnl0ZXMoJzQyJykpCiAgICBib3hfZ2V0CiAgICBwdXNoYnl0ZXMgMHgwMDAyMzQzMgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICBleHRyYWN0IDIgMAogICAgYnl0ZWMgNyAvLyAiNDIiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBwdWJsaWMgYm94U3RyaW5nID0gQm94PHN0cmluZz4oeyBrZXk6ICdib3hTdHJpbmcnIH0pCiAgICBieXRlYyA0IC8vICJib3hTdHJpbmciCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjExMwogICAgLy8gYXNzZXJ0KHRoaXMuYm94U3RyaW5nLmdldCh7IGRlZmF1bHQ6ICc0MicgfSkgPT09ICc0MicpCiAgICBib3hfZ2V0CiAgICBieXRlYyA3IC8vICI0MiIKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgYnl0ZWMgNyAvLyAiNDIiCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLm1heWJlQm94KCkgLT4gdWludDY0LCB1aW50NjQ6Cm1heWJlQm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcHVibGljIGJveEludCA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94SW50JyB9KQogICAgYnl0ZWNfMyAvLyAiYm94SW50IgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMjQKICAgIC8vIGNvbnN0IFtib3hJbnRWYWx1ZSwgYm94SW50RXhpc3RzXSA9IHRoaXMuYm94SW50Lm1heWJlKCkKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTI1CiAgICAvLyByZXR1cm4gW2JveEludFZhbHVlLCBib3hJbnRFeGlzdHNdCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmdldEJveE1hcChrZXk6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldEJveE1hcDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTM2LTEzNwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0Qm94TWFwKGtleTogdWludDY0KTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMzgKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLnZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHB1YmxpYyBib3hNYXAgPSBCb3hNYXA8dWludDY0LCBzdHJpbmc+KHsga2V5UHJlZml4OiAnYm94TWFwJyB9KQogICAgYnl0ZWNfMiAvLyAiYm94TWFwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEzOAogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwKGtleSkudmFsdWUKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmdldEJveE1hcFdpdGhEZWZhdWx0KGtleTogdWludDY0KSAtPiBieXRlczoKZ2V0Qm94TWFwV2l0aERlZmF1bHQ6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE0OC0xNDkKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldEJveE1hcFdpdGhEZWZhdWx0KGtleTogdWludDY0KTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLmdldCh7IGRlZmF1bHQ6ICdkZWZhdWx0JyB9KQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBwdWJsaWMgYm94TWFwID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2JveE1hcCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveE1hcCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLmdldCh7IGRlZmF1bHQ6ICdkZWZhdWx0JyB9KQogICAgYm94X2dldAogICAgcHVzaGJ5dGVzICJkZWZhdWx0IgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLnNldEJveE1hcChrZXk6IHVpbnQ2NCwgdmFsdWU6IGJ5dGVzKSAtPiB2b2lkOgpzZXRCb3hNYXA6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2MAogICAgLy8gcHVibGljIHNldEJveE1hcChrZXk6IHVpbnQ2NCwgdmFsdWU6IHN0cmluZyk6IHZvaWQgewogICAgcHJvdG8gMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gdGhpcy5ib3hNYXAoa2V5KS52YWx1ZSA9IHZhbHVlCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHB1YmxpYyBib3hNYXAgPSBCb3hNYXA8dWludDY0LCBzdHJpbmc+KHsga2V5UHJlZml4OiAnYm94TWFwJyB9KQogICAgYnl0ZWNfMiAvLyAiYm94TWFwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gdGhpcy5ib3hNYXAoa2V5KS52YWx1ZSA9IHZhbHVlCiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmRlbGV0ZUJveE1hcChrZXk6IHVpbnQ2NCkgLT4gdm9pZDoKZGVsZXRlQm94TWFwOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNzAKICAgIC8vIHB1YmxpYyBkZWxldGVCb3hNYXAoa2V5OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNzEKICAgIC8vIHRoaXMuYm94TWFwKGtleSkuZGVsZXRlKCkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NgogICAgLy8gcHVibGljIGJveE1hcCA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdib3hNYXAnIH0pCiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTcxCiAgICAvLyB0aGlzLmJveE1hcChrZXkpLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UubWF5YmVCb3hNYXAoa2V5OiB1aW50NjQpIC0+IGJ5dGVzLCB1aW50NjQ6Cm1heWJlQm94TWFwOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODEtMTgyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBtYXliZUJveE1hcChrZXk6IHVpbnQ2NCk6IFtzdHJpbmcsIGJvb2xlYW5dIHsKICAgIHByb3RvIDEgMgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IHRoaXMuYm94TWFwKGtleSkubWF5YmUoKQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBwdWJsaWMgYm94TWFwID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2JveE1hcCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveE1hcCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IHRoaXMuYm94TWFwKGtleSkubWF5YmUoKQogICAgYm94X2dldAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTg0CiAgICAvLyByZXR1cm4gW2V4aXN0cyA/IHZhbHVlIDogJycsIGV4aXN0c10KICAgIGJ6IG1heWJlQm94TWFwX3Rlcm5hcnlfZmFsc2VAMgogICAgZnJhbWVfZGlnIDEKCm1heWJlQm94TWFwX3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTg0CiAgICAvLyByZXR1cm4gW2V4aXN0cyA/IHZhbHVlIDogJycsIGV4aXN0c10KICAgIGZyYW1lX2RpZyAwCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgcmV0c3ViCgptYXliZUJveE1hcF90ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE4NAogICAgLy8gcmV0dXJuIFtleGlzdHMgPyB2YWx1ZSA6ICcnLCBleGlzdHNdCiAgICBwdXNoYnl0ZXMgIiIKICAgIGIgbWF5YmVCb3hNYXBfdGVybmFyeV9tZXJnZUAzCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5ib3hNYXBMZW5ndGgoa2V5OiB1aW50NjQpIC0+IHVpbnQ2NDoKYm94TWFwTGVuZ3RoOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxOTQtMTk1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBib3hNYXBMZW5ndGgoa2V5OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE5NgogICAgLy8gaWYgKCF0aGlzLmJveE1hcChrZXkpLmV4aXN0cykgewogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBwdWJsaWMgYm94TWFwID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2JveE1hcCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveE1hcCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE5NgogICAgLy8gaWYgKCF0aGlzLmJveE1hcChrZXkpLmV4aXN0cykgewogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBibnogYm94TWFwTGVuZ3RoX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxOTcKICAgIC8vIHJldHVybiBVaW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmJveE1hcExlbmd0aF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIwMAogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwKGtleSkubGVuZ3RoCiAgICBmcmFtZV9kaWcgMAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuYm94TWFwRXhpc3RzKGtleTogdWludDY0KSAtPiB1aW50NjQ6CmJveE1hcEV4aXN0czoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjEwLTIxMQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgYm94TWFwRXhpc3RzKGtleTogdWludDY0KTogYm9vbGVhbiB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjEyCiAgICAvLyByZXR1cm4gdGhpcy5ib3hNYXAoa2V5KS5leGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NgogICAgLy8gcHVibGljIGJveE1hcCA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdib3hNYXAnIH0pCiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjEyCiAgICAvLyByZXR1cm4gdGhpcy5ib3hNYXAoa2V5KS5leGlzdHMKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5nZXRCb3hNYXBTdHJ1Y3Qoa2V5OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRCb3hNYXBTdHJ1Y3Q6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIzNC0yMzUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldEJveE1hcFN0cnVjdChrZXk6IHVpbnQ2NCk6IFVzZXJTdHJ1Y3QgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIzNgogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdCA9IEJveE1hcDx1aW50NjQsIFVzZXJTdHJ1Y3Q+KHsga2V5UHJlZml4OiAndXNlcnMnIH0pCiAgICBieXRlYyA2IC8vICJ1c2VycyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMzYKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcFN0cnVjdChrZXkpLnZhbHVlCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5zZXRCb3hNYXBTdHJ1Y3Qoa2V5OiB1aW50NjQsIHZhbHVlOiBieXRlcykgLT4gdWludDY0OgpzZXRCb3hNYXBTdHJ1Y3Q6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0NgogICAgLy8gcHVibGljIHNldEJveE1hcFN0cnVjdChrZXk6IHVpbnQ2NCwgdmFsdWU6IFVzZXJTdHJ1Y3QpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDgKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdCA9IEJveE1hcDx1aW50NjQsIFVzZXJTdHJ1Y3Q+KHsga2V5UHJlZml4OiAndXNlcnMnIH0pCiAgICBieXRlYyA2IC8vICJ1c2VycyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwbiAyCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0OAogICAgLy8gdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSA9IHZhbHVlLmNvcHkoKQogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNTAKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDktMjU3CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSwKICAgIC8vICAgewogICAgLy8gICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAvLyAgICAgaWQ6IHZhbHVlLmlkLAogICAgLy8gICAgIGFzc2V0OiB2YWx1ZS5hc3NldCwKICAgIC8vICAgfSwKICAgIC8vICAgJ2JveE1hcFN0cnVjdCB2YWx1ZSBtaXNtYXRjaCcsCiAgICAvLyApCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGxlbgogICAgc3Vic3RyaW5nMwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNTIKICAgIC8vIG5hbWU6IHZhbHVlLm5hbWUsCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMQogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDktMjU3CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSwKICAgIC8vICAgewogICAgLy8gICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAvLyAgICAgaWQ6IHZhbHVlLmlkLAogICAgLy8gICAgIGFzc2V0OiB2YWx1ZS5hc3NldCwKICAgIC8vICAgfSwKICAgIC8vICAgJ2JveE1hcFN0cnVjdCB2YWx1ZSBtaXNtYXRjaCcsCiAgICAvLyApCiAgICA9PQogICAgYnogc2V0Qm94TWFwU3RydWN0X2Jvb2xfZmFsc2VANAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNTAKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICBmcmFtZV9kaWcgMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQ5LTI1NwogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICAvLyAgIHsKICAgIC8vICAgICBuYW1lOiB2YWx1ZS5uYW1lLAogICAgLy8gICAgIGlkOiB2YWx1ZS5pZCwKICAgIC8vICAgICBhc3NldDogdmFsdWUuYXNzZXQsCiAgICAvLyAgIH0sCiAgICAvLyAgICdib3hNYXBTdHJ1Y3QgdmFsdWUgbWlzbWF0Y2gnLAogICAgLy8gKQogICAgZXh0cmFjdCAyIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1MwogICAgLy8gaWQ6IHZhbHVlLmlkLAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQ5LTI1NwogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICAvLyAgIHsKICAgIC8vICAgICBuYW1lOiB2YWx1ZS5uYW1lLAogICAgLy8gICAgIGlkOiB2YWx1ZS5pZCwKICAgIC8vICAgICBhc3NldDogdmFsdWUuYXNzZXQsCiAgICAvLyAgIH0sCiAgICAvLyAgICdib3hNYXBTdHJ1Y3QgdmFsdWUgbWlzbWF0Y2gnLAogICAgLy8gKQogICAgPT0KICAgIGJ6IHNldEJveE1hcFN0cnVjdF9ib29sX2ZhbHNlQDQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjUwCiAgICAvLyB0aGlzLmJveE1hcFN0cnVjdChrZXkpLnZhbHVlLAogICAgZnJhbWVfZGlnIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0OS0yNTcKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICB0aGlzLmJveE1hcFN0cnVjdChrZXkpLnZhbHVlLAogICAgLy8gICB7CiAgICAvLyAgICAgbmFtZTogdmFsdWUubmFtZSwKICAgIC8vICAgICBpZDogdmFsdWUuaWQsCiAgICAvLyAgICAgYXNzZXQ6IHZhbHVlLmFzc2V0LAogICAgLy8gICB9LAogICAgLy8gICAnYm94TWFwU3RydWN0IHZhbHVlIG1pc21hdGNoJywKICAgIC8vICkKICAgIGV4dHJhY3QgMTAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjU0CiAgICAvLyBhc3NldDogdmFsdWUuYXNzZXQsCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMTAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQ5LTI1NwogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICAvLyAgIHsKICAgIC8vICAgICBuYW1lOiB2YWx1ZS5uYW1lLAogICAgLy8gICAgIGlkOiB2YWx1ZS5pZCwKICAgIC8vICAgICBhc3NldDogdmFsdWUuYXNzZXQsCiAgICAvLyAgIH0sCiAgICAvLyAgICdib3hNYXBTdHJ1Y3QgdmFsdWUgbWlzbWF0Y2gnLAogICAgLy8gKQogICAgPT0KICAgIGJ6IHNldEJveE1hcFN0cnVjdF9ib29sX2ZhbHNlQDQKICAgIGludGNfMCAvLyAxCgpzZXRCb3hNYXBTdHJ1Y3RfYm9vbF9tZXJnZUA1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDktMjU3CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSwKICAgIC8vICAgewogICAgLy8gICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAvLyAgICAgaWQ6IHZhbHVlLmlkLAogICAgLy8gICAgIGFzc2V0OiB2YWx1ZS5hc3NldCwKICAgIC8vICAgfSwKICAgIC8vICAgJ2JveE1hcFN0cnVjdCB2YWx1ZSBtaXNtYXRjaCcsCiAgICAvLyApCiAgICBhc3NlcnQgLy8gYm94TWFwU3RydWN0IHZhbHVlIG1pc21hdGNoCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1OAogICAgLy8gcmV0dXJuIHRydWUKICAgIGludGNfMCAvLyAxCiAgICBzd2FwCiAgICByZXRzdWIKCnNldEJveE1hcFN0cnVjdF9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzEgLy8gMAogICAgYiBzZXRCb3hNYXBTdHJ1Y3RfYm9vbF9tZXJnZUA1CgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5ib3hNYXBTdHJ1Y3RMZW5ndGgoa2V5OiB1aW50NjQpIC0+IHVpbnQ2NDoKYm94TWFwU3RydWN0TGVuZ3RoOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIHB1YmxpYyBib3hNYXBTdHJ1Y3RMZW5ndGgoa2V5OiB1aW50NjQpOiBib29sZWFuIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdCA9IEJveE1hcDx1aW50NjQsIFVzZXJTdHJ1Y3Q+KHsga2V5UHJlZml4OiAndXNlcnMnIH0pCiAgICBieXRlYyA2IC8vICJ1c2VycyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjY5LTI3MwogICAgLy8gY29uc3QgdmFsdWUgPSBuZXcgVXNlclN0cnVjdCh7CiAgICAvLyAgIG5hbWU6IG5ldyBhcmM0LlN0cigndGVzdE5hbWUnKSwKICAgIC8vICAgaWQ6IG5ldyBhcmM0LlVpbnRONjQoNzApLAogICAgLy8gICBhc3NldDogbmV3IGFyYzQuVWludE42NCgxMjM0KSwKICAgIC8vIH0pCiAgICBwdXNoYnl0ZXMgMHgwMDEyMDAwMDAwMDAwMDAwMDA0NjAwMDAwMDAwMDAwMDA0ZDIwMDA4NzQ2NTczNzQ0ZTYxNmQ2NQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mjc4CiAgICAvLyBhc3NlcnQodGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZS5ieXRlcy5sZW5ndGggPT09IHZhbHVlLmJ5dGVzLmxlbmd0aCwgJ2JveE1hcFN0cnVjdCBieXRlcyBsZW5ndGggbWlzbWF0Y2gnKQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgbGVuCiAgICBwdXNoaW50IDI4IC8vIDI4CiAgICA9PQogICAgYXNzZXJ0IC8vIGJveE1hcFN0cnVjdCBieXRlcyBsZW5ndGggbWlzbWF0Y2gKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mjc5CiAgICAvLyBhc3NlcnQodGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS5sZW5ndGggPT09IHZhbHVlLmJ5dGVzLmxlbmd0aCwgJ2JveE1hcFN0cnVjdCBsZW5ndGggbWlzbWF0Y2gnKQogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHB1c2hpbnQgMjggLy8gMjgKICAgID09CiAgICBhc3NlcnQgLy8gYm94TWFwU3RydWN0IGxlbmd0aCBtaXNtYXRjaAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyODEKICAgIC8vIHJldHVybiB0cnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5ib3hNYXBTdHJ1Y3RFeGlzdHMoa2V5OiB1aW50NjQpIC0+IHVpbnQ2NDoKYm94TWFwU3RydWN0RXhpc3RzOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyOTEtMjkyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBib3hNYXBTdHJ1Y3RFeGlzdHMoa2V5OiB1aW50NjQpOiBib29sZWFuIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyOTMKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcFN0cnVjdChrZXkpLmV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyBwdWJsaWMgYm94TWFwU3RydWN0ID0gQm94TWFwPHVpbnQ2NCwgVXNlclN0cnVjdD4oeyBrZXlQcmVmaXg6ICd1c2VycycgfSkKICAgIGJ5dGVjIDYgLy8gInVzZXJzIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI5MwogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwU3RydWN0KGtleSkuZXhpc3RzCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZ2V0Qm94UmVmKCkgLT4gYnl0ZXM6CmdldEJveFJlZjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIHB1YmxpYyBib3hSZWYgPSBCb3hSZWYoeyBrZXk6ICdib3hSZWYnIH0pCiAgICBieXRlYyA4IC8vICJib3hSZWYiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gdGhpcy5ib3hSZWYuY3JlYXRlKHsgc2l6ZTogMzIgfSkKICAgIGludGNfMiAvLyAzMgogICAgYm94X2NyZWF0ZQogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMwNQogICAgLy8gY29uc3Qgc2VuZGVyQnl0ZXMgPSBUeG4uc2VuZGVyLmJ5dGVzCiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBwdWJsaWMgYm94UmVmID0gQm94UmVmKHsga2V5OiAnYm94UmVmJyB9KQogICAgYnl0ZWMgOCAvLyAiYm94UmVmIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMDYKICAgIC8vIHRoaXMuYm94UmVmLnB1dChzZW5kZXJCeXRlcykKICAgIGRpZyAxCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBwdWJsaWMgYm94UmVmID0gQm94UmVmKHsga2V5OiAnYm94UmVmJyB9KQogICAgYnl0ZWMgOCAvLyAiYm94UmVmIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMDcKICAgIC8vIGNvbnN0IHZhbHVlID0gdGhpcy5ib3hSZWYuZ2V0KHsgZGVmYXVsdDogc2VuZGVyQnl0ZXMgfSkKICAgIGJveF9nZXQKICAgIGRpZyAyCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzA4CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHNlbmRlckJ5dGVzLCAnYm94UmVmIHZhbHVlIG1pc21hdGNoJykKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGJveFJlZiB2YWx1ZSBtaXNtYXRjaAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMDkKICAgIC8vIHJldHVybiBuZXcgYXJjNC5BZGRyZXNzKHZhbHVlKQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5zZXRCb3hSZWYoa2V5OiBieXRlcykgLT4gdm9pZDoKc2V0Qm94UmVmOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTgKICAgIC8vIHB1YmxpYyBzZXRCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMjAKICAgIC8vIGJveFJlZi5jcmVhdGUoeyBzaXplOiAzMiB9KQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMjIKICAgIC8vIGJveFJlZi5wdXQoc2VuZGVyQnl0ZXMpCiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzIxCiAgICAvLyBjb25zdCBzZW5kZXJCeXRlcyA9IFR4bi5zZW5kZXIuYnl0ZXMKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzIyCiAgICAvLyBib3hSZWYucHV0KHNlbmRlckJ5dGVzKQogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5kZWxldGVCb3hSZWYoa2V5OiBieXRlcykgLT4gdm9pZDoKZGVsZXRlQm94UmVmOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzEKICAgIC8vIHB1YmxpYyBkZWxldGVCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzMKICAgIC8vIGJveFJlZi5kZWxldGUoKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzM0CiAgICAvLyBhc3NlcnRNYXRjaChib3hSZWYubWF5YmUoKSwgW0J5dGVzKCcnKSwgZmFsc2VdKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIHB1c2hieXRlcyAiIgogICAgPT0KICAgIGJ6IGRlbGV0ZUJveFJlZl9ib29sX2ZhbHNlQDQKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgYnVyeSAxCiAgICBibnogZGVsZXRlQm94UmVmX2Jvb2xfZmFsc2VANAogICAgaW50Y18wIC8vIDEKCmRlbGV0ZUJveFJlZl9ib29sX21lcmdlQDU6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMzNAogICAgLy8gYXNzZXJ0TWF0Y2goYm94UmVmLm1heWJlKCksIFtCeXRlcygnJyksIGZhbHNlXSkKICAgIGFzc2VydCAvLyBhc3NlcnQgdGFyZ2V0IGlzIG1hdGNoIGZvciBjb25kaXRpb25zCiAgICByZXRzdWIKCmRlbGV0ZUJveFJlZl9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzEgLy8gMAogICAgYiBkZWxldGVCb3hSZWZfYm9vbF9tZXJnZUA1CgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5tYXliZUJveFJlZihrZXk6IGJ5dGVzKSAtPiBieXRlcywgdWludDY0OgptYXliZUJveFJlZjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzQzLTM0NAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgbWF5YmVCb3hSZWYoa2V5OiBzdHJpbmcpOiBbYnl0ZXMsIGJvb2xlYW5dIHsKICAgIHByb3RvIDEgMgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNDYKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IGJveFJlZi5tYXliZSgpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzQ3CiAgICAvLyByZXR1cm4gW3ZhbHVlLCBleGlzdHNdCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmxlbmd0aEJveFJlZihrZXk6IGJ5dGVzKSAtPiB1aW50NjQ6Cmxlbmd0aEJveFJlZjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzU3CiAgICAvLyBwdWJsaWMgbGVuZ3RoQm94UmVmKGtleTogc3RyaW5nKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNTkKICAgIC8vIGFzc2VydChib3hSZWYuY3JlYXRlKHsgc2l6ZTogMzIgfSksICdib3hSZWYgY3JlYXRpb24gZmFpbGVkJykKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQgLy8gYm94UmVmIGNyZWF0aW9uIGZhaWxlZAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNjAKICAgIC8vIHJldHVybiBib3hSZWYubGVuZ3RoCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmV4dHJhY3RCb3hSZWYoa2V5OiBieXRlcykgLT4gdm9pZDoKZXh0cmFjdEJveFJlZjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBwdWJsaWMgZXh0cmFjdEJveFJlZihrZXk6IHN0cmluZyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM3MAogICAgLy8gY29uc3Qgc2VuZGVyQnl0ZXMgPSBUeG4uc2VuZGVyLmJ5dGVzCiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM3MQogICAgLy8gY29uc3QgYXBwQWRkcmVzcyA9IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLmJ5dGVzCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNzMKICAgIC8vIGNvbnN0IHRvdGFsU2l6ZSA9IFVpbnQ2NChhcHBBZGRyZXNzLmxlbmd0aCArIHNlbmRlckJ5dGVzLmxlbmd0aCkKICAgIGR1cAogICAgbGVuCiAgICBkaWcgMgogICAgbGVuCiAgICArCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM3NgogICAgLy8gYXNzZXJ0KGJveFJlZi5jcmVhdGUoeyBzaXplOiB0b3RhbFNpemUgfSksICdib3hSZWYgY3JlYXRpb24gZmFpbGVkJykKICAgIGZyYW1lX2RpZyAtMQogICAgc3dhcAogICAgYm94X2NyZWF0ZQogICAgYXNzZXJ0IC8vIGJveFJlZiBjcmVhdGlvbiBmYWlsZWQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mzc4CiAgICAvLyBib3hSZWYucmVwbGFjZSgwLCBzZW5kZXJCeXRlcykKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIGRpZyAzCiAgICBib3hfcmVwbGFjZQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNzkKICAgIC8vIGJveFJlZi5zcGxpY2UoMCwgMCwgYXBwQWRkcmVzcykKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIGR1cAogICAgZGlnIDMKICAgIGJveF9zcGxpY2UKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzgxCiAgICAvLyBjb25zdCBwYXJ0MSA9IGJveFJlZi5leHRyYWN0KDAsIDMyKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18yIC8vIDMyCiAgICBib3hfZXh0cmFjdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozODIKICAgIC8vIGNvbnN0IHBhcnQyID0gYm94UmVmLmV4dHJhY3QoMzIsIDMyKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMzIKICAgIGR1cAogICAgYm94X2V4dHJhY3QKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mzg0CiAgICAvLyBhc3NlcnQocGFydDEuZXF1YWxzKGFwcEFkZHJlc3MpLCAnRmlyc3QgcGFydCBzaG91bGQgbWF0Y2ggYXBwIGFkZHJlc3MnKQogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIEZpcnN0IHBhcnQgc2hvdWxkIG1hdGNoIGFwcCBhZGRyZXNzCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM4NQogICAgLy8gYXNzZXJ0KHBhcnQyLmVxdWFscyhzZW5kZXJCeXRlcyksICdTZWNvbmQgcGFydCBzaG91bGQgbWF0Y2ggc2VuZGVyIGJ5dGVzJykKICAgID09CiAgICBhc3NlcnQgLy8gU2Vjb25kIHBhcnQgc2hvdWxkIG1hdGNoIHNlbmRlciBieXRlcwogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5hcmM0Qm94KGtleTogYnl0ZXMpIC0+IGJ5dGVzOgphcmM0Qm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOTYKICAgIC8vIHB1YmxpYyBhcmM0Qm94KGtleTogc3RyaW5nKTogU3RhdGljSW50cyB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mzk5LTQwNAogICAgLy8gc3RhdGljSW50Qm94LnZhbHVlID0gbmV3IGFyYzQuU3RhdGljQXJyYXk8YXJjNC5VaW50TjgsIDQ+KAogICAgLy8gICBuZXcgYXJjNC5VaW50TjgoMCksCiAgICAvLyAgIG5ldyBhcmM0LlVpbnROOCgxKSwKICAgIC8vICAgbmV3IGFyYzQuVWludE44KDIpLAogICAgLy8gICBuZXcgYXJjNC5VaW50TjgoMyksCiAgICAvLyApCiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweDAwMDEwMjAzCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQwNgogICAgLy8gYXNzZXJ0KHN0YXRpY0ludEJveC52YWx1ZVswXS5uYXRpdmUgPT09IDApCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Ynl0ZQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQwNwogICAgLy8gYXNzZXJ0KHN0YXRpY0ludEJveC52YWx1ZVsxXS5uYXRpdmUgPT09IDEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpbnRjXzAgLy8gMQogICAgZ2V0Ynl0ZQogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDA4CiAgICAvLyBhc3NlcnQoc3RhdGljSW50Qm94LnZhbHVlWzJdLm5hdGl2ZSA9PT0gMikKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBnZXRieXRlCiAgICBwdXNoaW50IDIgLy8gMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MDkKICAgIC8vIGFzc2VydChzdGF0aWNJbnRCb3gudmFsdWVbM10ubmF0aXZlID09PSAzKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcHVzaGludCAzIC8vIDMKICAgIGdldGJ5dGUKICAgIHB1c2hpbnQgMyAvLyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQxMQogICAgLy8gcmV0dXJuIHN0YXRpY0ludEJveC52YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDMyIDQyCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgMHgwMCAiYm94TWFwIiAiYm94SW50IiAiYm94U3RyaW5nIiAiYm94RHluYW1pY0J5dGVzIiAidXNlcnMiICJib3hSZWYiICI0MiIgMHgwMDAzCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDMxCiAgICBwdXNoYnl0ZXNzIDB4Yjc0OTEzNDQgMHg0OWNmNDEwNSAweDZhYjNlOWJjIDB4MjZjYTY0OGEgMHgyOGNjNzEzOSAweDY0NGEzOTk0IDB4YjFmNWE5YjYgMHgwM2U4Yzc3ZSAweGQ4MjlkMmEzIDB4OGMyMmJmZDUgMHhmYTE1NjJmNyAweGM0OTdiYzZmIDB4ZjRmOWNiYWQgMHg5ZTExZmQ3YSAweDVlNmNlYWMwIDB4ZjUzNDE4YzQgMHgzOWU5YjIyNiAweDkxMDFhN2RlIDB4YTQ1NTJlYjUgMHgzOGFjZjUzZSAweDg2MDBlMGViIDB4NTNjMjg4MjAgMHhmMTgzMjA3YSAweGQ1ZGQ5MjJjIDB4NTk1Yjg3YmIgMHg1NDdmMGE3NCAvLyBtZXRob2QgImdldEJveCgpdWludDY0IiwgbWV0aG9kICJ2YWx1ZUJveCgpdWludDY0IiwgbWV0aG9kICJtYXliZUJveCgpKHVpbnQ2NCxib29sKSIsIG1ldGhvZCAiZ2V0Qm94TWFwKHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImdldEJveE1hcFdpdGhEZWZhdWx0KHVpbnQ2NClzdHJpbmciLCBtZXRob2QgIm1heWJlQm94TWFwKHVpbnQ2NCkoc3RyaW5nLGJvb2wpIiwgbWV0aG9kICJrZXlQcmVmaXhCb3hNYXAoKWJ5dGVbXSIsIG1ldGhvZCAiZ2V0Qm94UmVmKClhZGRyZXNzIiwgbWV0aG9kICJib3hNYXBFeGlzdHModWludDY0KWJvb2wiLCBtZXRob2QgIm1heWJlQm94UmVmKHN0cmluZykoYnl0ZVtdLGJvb2wpIiwgbWV0aG9kICJzZXRCb3godWludDY0KXZvaWQiLCBtZXRob2QgInNldEJveFN0cmluZyhzdHJpbmcpdm9pZCIsIG1ldGhvZCAic2V0Qm94RHluYW1pY0J5dGVzKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJzZXRCb3hNYXAodWludDY0LHN0cmluZyl2b2lkIiwgbWV0aG9kICJzZXRCb3hSZWYoc3RyaW5nKXZvaWQiLCBtZXRob2QgImJveE1hcExlbmd0aCh1aW50NjQpdWludDY0IiwgbWV0aG9kICJsZW5ndGhCb3hSZWYoc3RyaW5nKXVpbnQ2NCIsIG1ldGhvZCAiZGVsZXRlQm94KCl2b2lkIiwgbWV0aG9kICJkZWxldGVCb3hNYXAodWludDY0KXZvaWQiLCBtZXRob2QgImRlbGV0ZUJveFJlZihzdHJpbmcpdm9pZCIsIG1ldGhvZCAiZXh0cmFjdEJveFJlZihzdHJpbmcpdm9pZCIsIG1ldGhvZCAiZ2V0Qm94TWFwU3RydWN0KHVpbnQ2NCkoc3RyaW5nLHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJib3hNYXBTdHJ1Y3RFeGlzdHModWludDY0KWJvb2wiLCBtZXRob2QgInNldEJveE1hcFN0cnVjdCh1aW50NjQsKHN0cmluZyx1aW50NjQsdWludDY0KSlib29sIiwgbWV0aG9kICJib3hNYXBTdHJ1Y3RMZW5ndGgodWludDY0KWJvb2wiLCBtZXRob2QgImFyYzRCb3goc3RyaW5nKXVpbnQ4WzRdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9nZXRCb3hfcm91dGVAMyBtYWluX3ZhbHVlQm94X3JvdXRlQDQgbWFpbl9tYXliZUJveF9yb3V0ZUA1IG1haW5fZ2V0Qm94TWFwX3JvdXRlQDYgbWFpbl9nZXRCb3hNYXBXaXRoRGVmYXVsdF9yb3V0ZUA3IG1haW5fbWF5YmVCb3hNYXBfcm91dGVAOCBtYWluX2tleVByZWZpeEJveE1hcF9yb3V0ZUA5IG1haW5fZ2V0Qm94UmVmX3JvdXRlQDEwIG1haW5fYm94TWFwRXhpc3RzX3JvdXRlQDExIG1haW5fbWF5YmVCb3hSZWZfcm91dGVAMTIgbWFpbl9zZXRCb3hfcm91dGVAMTMgbWFpbl9zZXRCb3hTdHJpbmdfcm91dGVAMTQgbWFpbl9zZXRCb3hEeW5hbWljQnl0ZXNfcm91dGVAMTUgbWFpbl9zZXRCb3hNYXBfcm91dGVAMTYgbWFpbl9zZXRCb3hSZWZfcm91dGVAMTcgbWFpbl9ib3hNYXBMZW5ndGhfcm91dGVAMTggbWFpbl9sZW5ndGhCb3hSZWZfcm91dGVAMTkgbWFpbl9kZWxldGVCb3hfcm91dGVAMjAgbWFpbl9kZWxldGVCb3hNYXBfcm91dGVAMjEgbWFpbl9kZWxldGVCb3hSZWZfcm91dGVAMjIgbWFpbl9leHRyYWN0Qm94UmVmX3JvdXRlQDIzIG1haW5fZ2V0Qm94TWFwU3RydWN0X3JvdXRlQDI0IG1haW5fYm94TWFwU3RydWN0RXhpc3RzX3JvdXRlQDI1IG1haW5fc2V0Qm94TWFwU3RydWN0X3JvdXRlQDI2IG1haW5fYm94TWFwU3RydWN0TGVuZ3RoX3JvdXRlQDI3IG1haW5fYXJjNEJveF9yb3V0ZUAyOAoKbWFpbl9hZnRlcl9pZl9lbHNlQDM1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fYXJjNEJveF9yb3V0ZUAyODoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzUyCiAgICAvLyBwdWJsaWMgYXJjNEJveChrZXk6IHN0cmluZyk6IFN0YXRpY0ludHMgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzUyCiAgICAvLyBwdWJsaWMgYXJjNEJveChrZXk6IHN0cmluZyk6IFN0YXRpY0ludHMgewogICAgY2FsbHN1YiBhcmM0Qm94CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JveE1hcFN0cnVjdExlbmd0aF9yb3V0ZUAyNzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzMwCiAgICAvLyBwdWJsaWMgYm94TWFwU3RydWN0TGVuZ3RoKGtleTogdWludDY0KTogYm9vbGVhbiB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMzMAogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdExlbmd0aChrZXk6IHVpbnQ2NCk6IGJvb2xlYW4gewogICAgY2FsbHN1YiBib3hNYXBTdHJ1Y3RMZW5ndGgKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3NldEJveE1hcFN0cnVjdF9yb3V0ZUAyNjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzEwCiAgICAvLyBwdWJsaWMgc2V0Qm94TWFwU3RydWN0KGtleTogdWludDY0LCB2YWx1ZTogVXNlclN0cnVjdCk6IGJvb2xlYW4gewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTAKICAgIC8vIHB1YmxpYyBzZXRCb3hNYXBTdHJ1Y3Qoa2V5OiB1aW50NjQsIHZhbHVlOiBVc2VyU3RydWN0KTogYm9vbGVhbiB7CiAgICBjYWxsc3ViIHNldEJveE1hcFN0cnVjdAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94TWFwU3RydWN0RXhpc3RzX3JvdXRlQDI1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMDAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMDAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBib3hNYXBTdHJ1Y3RFeGlzdHMKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveE1hcFN0cnVjdF9yb3V0ZUAyNDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0Qm94TWFwU3RydWN0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2V4dHJhY3RCb3hSZWZfcm91dGVAMjM6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI2NAogICAgLy8gcHVibGljIGV4dHJhY3RCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI2NAogICAgLy8gcHVibGljIGV4dHJhY3RCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIGNhbGxzdWIgZXh0cmFjdEJveFJlZgogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZWxldGVCb3hSZWZfcm91dGVAMjI6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gcHVibGljIGRlbGV0ZUJveFJlZihrZXk6IHN0cmluZyk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjUyCiAgICAvLyBwdWJsaWMgZGVsZXRlQm94UmVmKGtleTogc3RyaW5nKTogdm9pZCB7CiAgICBjYWxsc3ViIGRlbGV0ZUJveFJlZgogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZWxldGVCb3hNYXBfcm91dGVAMjE6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0NAogICAgLy8gcHVibGljIGRlbGV0ZUJveE1hcChrZXk6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDQKICAgIC8vIHB1YmxpYyBkZWxldGVCb3hNYXAoa2V5OiB1aW50NjQpOiB2b2lkIHsKICAgIGNhbGxzdWIgZGVsZXRlQm94TWFwCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2RlbGV0ZUJveF9yb3V0ZUAyMDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjMwCiAgICAvLyBwdWJsaWMgZGVsZXRlQm94KCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZUJveAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9sZW5ndGhCb3hSZWZfcm91dGVAMTk6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIxOQogICAgLy8gcHVibGljIGxlbmd0aEJveFJlZihrZXk6IHN0cmluZyk6IHVpbnQ2NCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIHB1YmxpYyBsZW5ndGhCb3hSZWYoa2V5OiBzdHJpbmcpOiB1aW50NjQgewogICAgY2FsbHN1YiBsZW5ndGhCb3hSZWYKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94TWFwTGVuZ3RoX3JvdXRlQDE4OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMDUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMDUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBib3hNYXBMZW5ndGgKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0Qm94UmVmX3JvdXRlQDE3OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIHB1YmxpYyBzZXRCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE5MQogICAgLy8gcHVibGljIHNldEJveFJlZihrZXk6IHN0cmluZyk6IHZvaWQgewogICAgY2FsbHN1YiBzZXRCb3hSZWYKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0Qm94TWFwX3JvdXRlQDE2OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHB1YmxpYyBzZXRCb3hNYXAoa2V5OiB1aW50NjQsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE4MwogICAgLy8gcHVibGljIHNldEJveE1hcChrZXk6IHVpbnQ2NCwgdmFsdWU6IHN0cmluZyk6IHZvaWQgewogICAgY2FsbHN1YiBzZXRCb3hNYXAKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0Qm94RHluYW1pY0J5dGVzX3JvdXRlQDE1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNzQKICAgIC8vIHB1YmxpYyBzZXRCb3hEeW5hbWljQnl0ZXModmFsdWU6IGFyYzQuRHluYW1pY0J5dGVzKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3NAogICAgLy8gcHVibGljIHNldEJveER5bmFtaWNCeXRlcyh2YWx1ZTogYXJjNC5EeW5hbWljQnl0ZXMpOiB2b2lkIHsKICAgIGNhbGxzdWIgc2V0Qm94RHluYW1pY0J5dGVzCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3NldEJveFN0cmluZ19yb3V0ZUAxNDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBwdWJsaWMgc2V0Qm94U3RyaW5nKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2NgogICAgLy8gcHVibGljIHNldEJveFN0cmluZyh2YWx1ZTogc3RyaW5nKTogdm9pZCB7CiAgICBjYWxsc3ViIHNldEJveFN0cmluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRCb3hfcm91dGVAMTM6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE1OAogICAgLy8gcHVibGljIHNldEJveCh2YWx1ZUludDogdWludDY0KTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE1OAogICAgLy8gcHVibGljIHNldEJveCh2YWx1ZUludDogdWludDY0KTogdm9pZCB7CiAgICBjYWxsc3ViIHNldEJveAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tYXliZUJveFJlZl9yb3V0ZUAxMjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTQ1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE0NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIG1heWJlQm94UmVmCiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBieXRlYyA5IC8vIDB4MDAwMwogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94TWFwRXhpc3RzX3JvdXRlQDExOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMzYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMzYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBib3hNYXBFeGlzdHMKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveFJlZl9yb3V0ZUAxMDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTIyCiAgICAvLyBwdWJsaWMgZ2V0Qm94UmVmKCk6IGFyYzQuQWRkcmVzcyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qm94UmVmCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2tleVByZWZpeEJveE1hcF9yb3V0ZUA5OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDY2MjZmNzg0ZDYxNzAKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tYXliZUJveE1hcF9yb3V0ZUA4OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBtYXliZUJveE1hcAogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgYnl0ZWMgOSAvLyAweDAwMDMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveE1hcFdpdGhEZWZhdWx0X3JvdXRlQDc6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjkzCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXRCb3hNYXBXaXRoRGVmYXVsdAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0Qm94TWFwX3JvdXRlQDY6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXRCb3hNYXAKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21heWJlQm94X3JvdXRlQDU6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjcyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZUJveAogICAgc3dhcAogICAgaXRvYgogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92YWx1ZUJveF9yb3V0ZUA0OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdmFsdWVCb3gKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0Qm94X3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRCb3gKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDMxOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5nZXRCb3goKSAtPiB1aW50NjQ6CmdldEJveDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIHB1YmxpYyBib3hJbnQgPSBCb3g8dWludDY0Pih7IGtleTogJ2JveEludCcgfSkKICAgIGJ5dGVjXzMgLy8gImJveEludCIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIHJldHVybiB0aGlzLmJveEludC52YWx1ZQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UudmFsdWVCb3goKSAtPiB1aW50NjQ6CnZhbHVlQm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcHVibGljIGJveEludCA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94SW50JyB9KQogICAgYnl0ZWNfMyAvLyAiYm94SW50IgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo2NQogICAgLy8gcmV0dXJuIHRoaXMuYm94SW50LnZhbHVlCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5tYXliZUJveCgpIC0+IHVpbnQ2NCwgdWludDY0OgptYXliZUJveDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIHB1YmxpYyBib3hJbnQgPSBCb3g8dWludDY0Pih7IGtleTogJ2JveEludCcgfSkKICAgIGJ5dGVjXzMgLy8gImJveEludCIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NzQKICAgIC8vIGNvbnN0IFtib3hJbnRWYWx1ZSwgYm94SW50RXhpc3RzXSA9IHRoaXMuYm94SW50Lm1heWJlKCkKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NzUKICAgIC8vIHJldHVybiBbYm94SW50VmFsdWUsIGJveEludEV4aXN0c10KICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZ2V0Qm94TWFwKGtleTogdWludDY0KSAtPiBieXRlczoKZ2V0Qm94TWFwOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4My04NAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0Qm94TWFwKGtleTogdWludDY0KTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4NQogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwKGtleSkudmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NgogICAgLy8gcHVibGljIGJveE1hcCA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdib3hNYXAnIH0pCiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLnZhbHVlCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5nZXRCb3hNYXBXaXRoRGVmYXVsdChrZXk6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldEJveE1hcFdpdGhEZWZhdWx0OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo5My05NAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0Qm94TWFwV2l0aERlZmF1bHQoa2V5OiB1aW50NjQpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjk1CiAgICAvLyByZXR1cm4gdGhpcy5ib3hNYXAoa2V5KS5nZXQoeyBkZWZhdWx0OiAnZGVmYXVsdCcgfSkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NgogICAgLy8gcHVibGljIGJveE1hcCA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdib3hNYXAnIH0pCiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTUKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLmdldCh7IGRlZmF1bHQ6ICdkZWZhdWx0JyB9KQogICAgYm94X2dldAogICAgcHVzaGJ5dGVzICJkZWZhdWx0IgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLm1heWJlQm94TWFwKGtleTogdWludDY0KSAtPiBieXRlcywgdWludDY0OgptYXliZUJveE1hcDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTAzLTEwNAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgbWF5YmVCb3hNYXAoa2V5OiB1aW50NjQpOiBbc3RyaW5nLCBib29sZWFuXSB7CiAgICBwcm90byAxIDIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTA1CiAgICAvLyBjb25zdCBbdmFsdWUsIGV4aXN0c10gPSB0aGlzLmJveE1hcChrZXkpLm1heWJlKCkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NgogICAgLy8gcHVibGljIGJveE1hcCA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdib3hNYXAnIH0pCiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTA1CiAgICAvLyBjb25zdCBbdmFsdWUsIGV4aXN0c10gPSB0aGlzLmJveE1hcChrZXkpLm1heWJlKCkKICAgIGJveF9nZXQKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEwNgogICAgLy8gcmV0dXJuIFtleGlzdHMgPyB2YWx1ZSA6ICcnLCBleGlzdHNdCiAgICBieiBtYXliZUJveE1hcF90ZXJuYXJ5X2ZhbHNlQDIKICAgIGZyYW1lX2RpZyAxCgptYXliZUJveE1hcF90ZXJuYXJ5X21lcmdlQDM6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEwNgogICAgLy8gcmV0dXJuIFtleGlzdHMgPyB2YWx1ZSA6ICcnLCBleGlzdHNdCiAgICBmcmFtZV9kaWcgMAogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDMKICAgIHJldHN1YgoKbWF5YmVCb3hNYXBfdGVybmFyeV9mYWxzZUAyOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIHJldHVybiBbZXhpc3RzID8gdmFsdWUgOiAnJywgZXhpc3RzXQogICAgcHVzaGJ5dGVzICIiCiAgICBiIG1heWJlQm94TWFwX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZ2V0Qm94UmVmKCkgLT4gYnl0ZXM6CmdldEJveFJlZjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIHB1YmxpYyBib3hSZWYgPSBCb3hSZWYoeyBrZXk6ICdib3hSZWYnIH0pCiAgICBieXRlYyA3IC8vICJib3hSZWYiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEyMwogICAgLy8gdGhpcy5ib3hSZWYuY3JlYXRlKHsgc2l6ZTogMzIgfSkKICAgIGludGNfMiAvLyAzMgogICAgYm94X2NyZWF0ZQogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEyNAogICAgLy8gY29uc3Qgc2VuZGVyQnl0ZXMgPSBUeG4uc2VuZGVyLmJ5dGVzCiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBwdWJsaWMgYm94UmVmID0gQm94UmVmKHsga2V5OiAnYm94UmVmJyB9KQogICAgYnl0ZWMgNyAvLyAiYm94UmVmIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMjUKICAgIC8vIHRoaXMuYm94UmVmLnB1dChzZW5kZXJCeXRlcykKICAgIGRpZyAxCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBwdWJsaWMgYm94UmVmID0gQm94UmVmKHsga2V5OiAnYm94UmVmJyB9KQogICAgYnl0ZWMgNyAvLyAiYm94UmVmIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMjYKICAgIC8vIGNvbnN0IHZhbHVlID0gdGhpcy5ib3hSZWYuZ2V0KHsgZGVmYXVsdDogc2VuZGVyQnl0ZXMgfSkKICAgIGJveF9nZXQKICAgIGRpZyAyCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTI3CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHNlbmRlckJ5dGVzLCAnYm94UmVmIHZhbHVlIG1pc21hdGNoJykKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGJveFJlZiB2YWx1ZSBtaXNtYXRjaAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIHJldHVybiBuZXcgYXJjNC5BZGRyZXNzKHZhbHVlKQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5ib3hNYXBFeGlzdHMoa2V5OiB1aW50NjQpIC0+IHVpbnQ2NDoKYm94TWFwRXhpc3RzOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMzYtMTM3CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBib3hNYXBFeGlzdHMoa2V5OiB1aW50NjQpOiBib29sZWFuIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMzgKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLmV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBwdWJsaWMgYm94TWFwID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2JveE1hcCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveE1hcCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMzgKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLmV4aXN0cwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLm1heWJlQm94UmVmKGtleTogYnl0ZXMpIC0+IGJ5dGVzLCB1aW50NjQ6Cm1heWJlQm94UmVmOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNDUtMTQ2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBtYXliZUJveFJlZihrZXk6IHN0cmluZyk6IFtieXRlcywgYm9vbGVhbl0gewogICAgcHJvdG8gMSAyCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE0OAogICAgLy8gY29uc3QgW3ZhbHVlLCBleGlzdHNdID0gYm94UmVmLm1heWJlKCkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIHJldHVybiBbdmFsdWUsIGV4aXN0c10KICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2Uuc2V0Qm94KHZhbHVlSW50OiB1aW50NjQpIC0+IHZvaWQ6CnNldEJveDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTU4CiAgICAvLyBwdWJsaWMgc2V0Qm94KHZhbHVlSW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNTkKICAgIC8vIHRoaXMuYm94SW50LnZhbHVlID0gdmFsdWVJbnQKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcHVibGljIGJveEludCA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94SW50JyB9KQogICAgYnl0ZWNfMyAvLyAiYm94SW50IgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNTkKICAgIC8vIHRoaXMuYm94SW50LnZhbHVlID0gdmFsdWVJbnQKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2Uuc2V0Qm94U3RyaW5nKHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0Qm94U3RyaW5nOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNjYKICAgIC8vIHB1YmxpYyBzZXRCb3hTdHJpbmcodmFsdWU6IHN0cmluZyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBwdWJsaWMgYm94U3RyaW5nID0gQm94PHN0cmluZz4oeyBrZXk6ICdib3hTdHJpbmcnIH0pCiAgICBieXRlYyA0IC8vICJib3hTdHJpbmciCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2NwogICAgLy8gdGhpcy5ib3hTdHJpbmcudmFsdWUgPSB2YWx1ZQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBwdWJsaWMgYm94U3RyaW5nID0gQm94PHN0cmluZz4oeyBrZXk6ICdib3hTdHJpbmcnIH0pCiAgICBieXRlYyA0IC8vICJib3hTdHJpbmciCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2NwogICAgLy8gdGhpcy5ib3hTdHJpbmcudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLnNldEJveER5bmFtaWNCeXRlcyh2YWx1ZTogYnl0ZXMpIC0+IHZvaWQ6CnNldEJveER5bmFtaWNCeXRlczoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTc0CiAgICAvLyBwdWJsaWMgc2V0Qm94RHluYW1pY0J5dGVzKHZhbHVlOiBhcmM0LkR5bmFtaWNCeXRlcyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBwdWJsaWMgYm94RHluYW1pY0J5dGVzID0gQm94PGFyYzQuRHluYW1pY0J5dGVzPih7IGtleTogJ2JveER5bmFtaWNCeXRlcycgfSkKICAgIGJ5dGVjIDUgLy8gImJveER5bmFtaWNCeXRlcyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTc1CiAgICAvLyB0aGlzLmJveER5bmFtaWNCeXRlcy52YWx1ZSA9IHZhbHVlCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHB1YmxpYyBib3hEeW5hbWljQnl0ZXMgPSBCb3g8YXJjNC5EeW5hbWljQnl0ZXM+KHsga2V5OiAnYm94RHluYW1pY0J5dGVzJyB9KQogICAgYnl0ZWMgNSAvLyAiYm94RHluYW1pY0J5dGVzIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNzUKICAgIC8vIHRoaXMuYm94RHluYW1pY0J5dGVzLnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5zZXRCb3hNYXAoa2V5OiB1aW50NjQsIHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0Qm94TWFwOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHB1YmxpYyBzZXRCb3hNYXAoa2V5OiB1aW50NjQsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsKICAgIHByb3RvIDIgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODQKICAgIC8vIHRoaXMuYm94TWFwKGtleSkudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0yCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBwdWJsaWMgYm94TWFwID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2JveE1hcCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveE1hcCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODQKICAgIC8vIHRoaXMuYm94TWFwKGtleSkudmFsdWUgPSB2YWx1ZQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5zZXRCb3hSZWYoa2V5OiBieXRlcykgLT4gdm9pZDoKc2V0Qm94UmVmOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIHB1YmxpYyBzZXRCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxOTMKICAgIC8vIGJveFJlZi5jcmVhdGUoeyBzaXplOiAzMiB9KQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxOTUKICAgIC8vIGJveFJlZi5wdXQoc2VuZGVyQnl0ZXMpCiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTk0CiAgICAvLyBjb25zdCBzZW5kZXJCeXRlcyA9IFR4bi5zZW5kZXIuYnl0ZXMKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTk1CiAgICAvLyBib3hSZWYucHV0KHNlbmRlckJ5dGVzKQogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5ib3hNYXBMZW5ndGgoa2V5OiB1aW50NjQpIC0+IHVpbnQ2NDoKYm94TWFwTGVuZ3RoOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMDUtMjA2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBib3hNYXBMZW5ndGgoa2V5OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gaWYgKCF0aGlzLmJveE1hcChrZXkpLmV4aXN0cykgewogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBwdWJsaWMgYm94TWFwID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2JveE1hcCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveE1hcCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gaWYgKCF0aGlzLmJveE1hcChrZXkpLmV4aXN0cykgewogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBibnogYm94TWFwTGVuZ3RoX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMDgKICAgIC8vIHJldHVybiBVaW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmJveE1hcExlbmd0aF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIxMQogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwKGtleSkubGVuZ3RoCiAgICBmcmFtZV9kaWcgMAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UubGVuZ3RoQm94UmVmKGtleTogYnl0ZXMpIC0+IHVpbnQ2NDoKbGVuZ3RoQm94UmVmOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIHB1YmxpYyBsZW5ndGhCb3hSZWYoa2V5OiBzdHJpbmcpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIyMQogICAgLy8gYXNzZXJ0KGJveFJlZi5jcmVhdGUoeyBzaXplOiAzMiB9KSwgJ2JveFJlZiBjcmVhdGlvbiBmYWlsZWQnKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9jcmVhdGUKICAgIGFzc2VydCAvLyBib3hSZWYgY3JlYXRpb24gZmFpbGVkCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIyMgogICAgLy8gcmV0dXJuIGJveFJlZi5sZW5ndGgKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZGVsZXRlQm94KCkgLT4gdm9pZDoKZGVsZXRlQm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcHVibGljIGJveEludCA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94SW50JyB9KQogICAgYnl0ZWNfMyAvLyAiYm94SW50IgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMzEKICAgIC8vIHRoaXMuYm94SW50LmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHB1YmxpYyBib3hEeW5hbWljQnl0ZXMgPSBCb3g8YXJjNC5EeW5hbWljQnl0ZXM+KHsga2V5OiAnYm94RHluYW1pY0J5dGVzJyB9KQogICAgYnl0ZWMgNSAvLyAiYm94RHluYW1pY0J5dGVzIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMzIKICAgIC8vIHRoaXMuYm94RHluYW1pY0J5dGVzLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHB1YmxpYyBib3hTdHJpbmcgPSBCb3g8c3RyaW5nPih7IGtleTogJ2JveFN0cmluZycgfSkKICAgIGJ5dGVjIDQgLy8gImJveFN0cmluZyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjMzCiAgICAvLyB0aGlzLmJveFN0cmluZy5kZWxldGUoKQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyBwdWJsaWMgYm94SW50ID0gQm94PHVpbnQ2ND4oeyBrZXk6ICdib3hJbnQnIH0pCiAgICBieXRlY18zIC8vICJib3hJbnQiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIzNQogICAgLy8gYXNzZXJ0KHRoaXMuYm94SW50LmdldCh7IGRlZmF1bHQ6IFVpbnQ2NCg0MikgfSkgPT09IDQyKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18zIC8vIDQyCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgaW50Y18zIC8vIDQyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBwdWJsaWMgYm94RHluYW1pY0J5dGVzID0gQm94PGFyYzQuRHluYW1pY0J5dGVzPih7IGtleTogJ2JveER5bmFtaWNCeXRlcycgfSkKICAgIGJ5dGVjIDUgLy8gImJveER5bmFtaWNCeXRlcyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjM2CiAgICAvLyBhc3NlcnQodGhpcy5ib3hEeW5hbWljQnl0ZXMuZ2V0KHsgZGVmYXVsdDogbmV3IGFyYzQuRHluYW1pY0J5dGVzKCc0MicpIH0pLm5hdGl2ZSA9PT0gQnl0ZXMoJzQyJykpCiAgICBib3hfZ2V0CiAgICBwdXNoYnl0ZXMgMHgwMDAyMzQzMgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICBleHRyYWN0IDIgMAogICAgYnl0ZWMgOCAvLyAiNDIiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBwdWJsaWMgYm94U3RyaW5nID0gQm94PHN0cmluZz4oeyBrZXk6ICdib3hTdHJpbmcnIH0pCiAgICBieXRlYyA0IC8vICJib3hTdHJpbmciCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIzNwogICAgLy8gYXNzZXJ0KHRoaXMuYm94U3RyaW5nLmdldCh7IGRlZmF1bHQ6ICc0MicgfSkgPT09ICc0MicpCiAgICBib3hfZ2V0CiAgICBieXRlYyA4IC8vICI0MiIKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgYnl0ZWMgOCAvLyAiNDIiCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmRlbGV0ZUJveE1hcChrZXk6IHVpbnQ2NCkgLT4gdm9pZDoKZGVsZXRlQm94TWFwOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDQKICAgIC8vIHB1YmxpYyBkZWxldGVCb3hNYXAoa2V5OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDUKICAgIC8vIHRoaXMuYm94TWFwKGtleSkuZGVsZXRlKCkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NgogICAgLy8gcHVibGljIGJveE1hcCA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdib3hNYXAnIH0pCiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQ1CiAgICAvLyB0aGlzLmJveE1hcChrZXkpLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZGVsZXRlQm94UmVmKGtleTogYnl0ZXMpIC0+IHZvaWQ6CmRlbGV0ZUJveFJlZjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjUyCiAgICAvLyBwdWJsaWMgZGVsZXRlQm94UmVmKGtleTogc3RyaW5nKTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjU0CiAgICAvLyBib3hSZWYuZGVsZXRlKCkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1NQogICAgLy8gYXNzZXJ0TWF0Y2goYm94UmVmLm1heWJlKCksIFtCeXRlcygnJyksIGZhbHNlXSkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgcG9wCiAgICBwdXNoYnl0ZXMgIiIKICAgID09CiAgICBieiBkZWxldGVCb3hSZWZfYm9vbF9mYWxzZUA0CiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGJ1cnkgMQogICAgYm56IGRlbGV0ZUJveFJlZl9ib29sX2ZhbHNlQDQKICAgIGludGNfMCAvLyAxCgpkZWxldGVCb3hSZWZfYm9vbF9tZXJnZUA1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIGFzc2VydE1hdGNoKGJveFJlZi5tYXliZSgpLCBbQnl0ZXMoJycpLCBmYWxzZV0pCiAgICBhc3NlcnQgLy8gYXNzZXJ0IHRhcmdldCBpcyBtYXRjaCBmb3IgY29uZGl0aW9ucwogICAgcmV0c3ViCgpkZWxldGVCb3hSZWZfYm9vbF9mYWxzZUA0OgogICAgaW50Y18xIC8vIDAKICAgIGIgZGVsZXRlQm94UmVmX2Jvb2xfbWVyZ2VANQoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZXh0cmFjdEJveFJlZihrZXk6IGJ5dGVzKSAtPiB2b2lkOgpleHRyYWN0Qm94UmVmOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHB1YmxpYyBleHRyYWN0Qm94UmVmKGtleTogc3RyaW5nKTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjY1CiAgICAvLyBjb25zdCBzZW5kZXJCeXRlcyA9IFR4bi5zZW5kZXIuYnl0ZXMKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjY2CiAgICAvLyBjb25zdCBhcHBBZGRyZXNzID0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MuYnl0ZXMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI2OAogICAgLy8gY29uc3QgdG90YWxTaXplID0gVWludDY0KGFwcEFkZHJlc3MubGVuZ3RoICsgc2VuZGVyQnl0ZXMubGVuZ3RoKQogICAgZHVwCiAgICBsZW4KICAgIGRpZyAyCiAgICBsZW4KICAgICsKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjcxCiAgICAvLyBhc3NlcnQoYm94UmVmLmNyZWF0ZSh7IHNpemU6IHRvdGFsU2l6ZSB9KSwgJ2JveFJlZiBjcmVhdGlvbiBmYWlsZWQnKQogICAgZnJhbWVfZGlnIC0xCiAgICBzd2FwCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQgLy8gYm94UmVmIGNyZWF0aW9uIGZhaWxlZAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIGJveFJlZi5yZXBsYWNlKDAsIHNlbmRlckJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgZGlnIDMKICAgIGJveF9yZXBsYWNlCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gYm94UmVmLnNwbGljZSgwLCAwLCBhcHBBZGRyZXNzKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgZHVwCiAgICBkaWcgMwogICAgYm94X3NwbGljZQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIGNvbnN0IHBhcnQxID0gYm94UmVmLmV4dHJhY3QoMCwgMzIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9leHRyYWN0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI3NwogICAgLy8gY29uc3QgcGFydDIgPSBib3hSZWYuZXh0cmFjdCgzMiwgMzIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMiAvLyAzMgogICAgZHVwCiAgICBib3hfZXh0cmFjdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNzkKICAgIC8vIGFzc2VydChwYXJ0MS5lcXVhbHMoYXBwQWRkcmVzcyksICdGaXJzdCBwYXJ0IHNob3VsZCBtYXRjaCBhcHAgYWRkcmVzcycpCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gRmlyc3QgcGFydCBzaG91bGQgbWF0Y2ggYXBwIGFkZHJlc3MKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjgwCiAgICAvLyBhc3NlcnQocGFydDIuZXF1YWxzKHNlbmRlckJ5dGVzKSwgJ1NlY29uZCBwYXJ0IHNob3VsZCBtYXRjaCBzZW5kZXIgYnl0ZXMnKQogICAgPT0KICAgIGFzc2VydCAvLyBTZWNvbmQgcGFydCBzaG91bGQgbWF0Y2ggc2VuZGVyIGJ5dGVzCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmdldEJveE1hcFN0cnVjdChrZXk6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldEJveE1hcFN0cnVjdDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjkwLTI5MQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0Qm94TWFwU3RydWN0KGtleTogdWludDY0KTogVXNlclN0cnVjdCB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjkyCiAgICAvLyByZXR1cm4gdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyBwdWJsaWMgYm94TWFwU3RydWN0ID0gQm94TWFwPHVpbnQ2NCwgVXNlclN0cnVjdD4oeyBrZXlQcmVmaXg6ICd1c2VycycgfSkKICAgIGJ5dGVjIDYgLy8gInVzZXJzIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI5MgogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmJveE1hcFN0cnVjdEV4aXN0cyhrZXk6IHVpbnQ2NCkgLT4gdWludDY0Ogpib3hNYXBTdHJ1Y3RFeGlzdHM6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMwMC0zMDEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdEV4aXN0cyhrZXk6IHVpbnQ2NCk6IGJvb2xlYW4gewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMwMgogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwU3RydWN0KGtleSkuZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHB1YmxpYyBib3hNYXBTdHJ1Y3QgPSBCb3hNYXA8dWludDY0LCBVc2VyU3RydWN0Pih7IGtleVByZWZpeDogJ3VzZXJzJyB9KQogICAgYnl0ZWMgNiAvLyAidXNlcnMiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzAyCiAgICAvLyByZXR1cm4gdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS5leGlzdHMKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5zZXRCb3hNYXBTdHJ1Y3Qoa2V5OiB1aW50NjQsIHZhbHVlOiBieXRlcykgLT4gdWludDY0OgpzZXRCb3hNYXBTdHJ1Y3Q6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMxMAogICAgLy8gcHVibGljIHNldEJveE1hcFN0cnVjdChrZXk6IHVpbnQ2NCwgdmFsdWU6IFVzZXJTdHJ1Y3QpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdCA9IEJveE1hcDx1aW50NjQsIFVzZXJTdHJ1Y3Q+KHsga2V5UHJlZml4OiAndXNlcnMnIH0pCiAgICBieXRlYyA2IC8vICJ1c2VycyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwbiAyCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMxMgogICAgLy8gdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSA9IHZhbHVlLmNvcHkoKQogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTQKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTMtMzIxCiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSwKICAgIC8vICAgewogICAgLy8gICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAvLyAgICAgaWQ6IHZhbHVlLmlkLAogICAgLy8gICAgIGFzc2V0OiB2YWx1ZS5hc3NldCwKICAgIC8vICAgfSwKICAgIC8vICAgJ2JveE1hcFN0cnVjdCB2YWx1ZSBtaXNtYXRjaCcsCiAgICAvLyApCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGxlbgogICAgc3Vic3RyaW5nMwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTYKICAgIC8vIG5hbWU6IHZhbHVlLm5hbWUsCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMQogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTMtMzIxCiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSwKICAgIC8vICAgewogICAgLy8gICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAvLyAgICAgaWQ6IHZhbHVlLmlkLAogICAgLy8gICAgIGFzc2V0OiB2YWx1ZS5hc3NldCwKICAgIC8vICAgfSwKICAgIC8vICAgJ2JveE1hcFN0cnVjdCB2YWx1ZSBtaXNtYXRjaCcsCiAgICAvLyApCiAgICA9PQogICAgYnogc2V0Qm94TWFwU3RydWN0X2Jvb2xfZmFsc2VANAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTQKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICBmcmFtZV9kaWcgMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzEzLTMyMQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICAvLyAgIHsKICAgIC8vICAgICBuYW1lOiB2YWx1ZS5uYW1lLAogICAgLy8gICAgIGlkOiB2YWx1ZS5pZCwKICAgIC8vICAgICBhc3NldDogdmFsdWUuYXNzZXQsCiAgICAvLyAgIH0sCiAgICAvLyAgICdib3hNYXBTdHJ1Y3QgdmFsdWUgbWlzbWF0Y2gnLAogICAgLy8gKQogICAgZXh0cmFjdCAyIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMxNwogICAgLy8gaWQ6IHZhbHVlLmlkLAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzEzLTMyMQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICAvLyAgIHsKICAgIC8vICAgICBuYW1lOiB2YWx1ZS5uYW1lLAogICAgLy8gICAgIGlkOiB2YWx1ZS5pZCwKICAgIC8vICAgICBhc3NldDogdmFsdWUuYXNzZXQsCiAgICAvLyAgIH0sCiAgICAvLyAgICdib3hNYXBTdHJ1Y3QgdmFsdWUgbWlzbWF0Y2gnLAogICAgLy8gKQogICAgPT0KICAgIGJ6IHNldEJveE1hcFN0cnVjdF9ib29sX2ZhbHNlQDQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLmJveE1hcFN0cnVjdChrZXkpLnZhbHVlLAogICAgZnJhbWVfZGlnIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMxMy0zMjEKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICB0aGlzLmJveE1hcFN0cnVjdChrZXkpLnZhbHVlLAogICAgLy8gICB7CiAgICAvLyAgICAgbmFtZTogdmFsdWUubmFtZSwKICAgIC8vICAgICBpZDogdmFsdWUuaWQsCiAgICAvLyAgICAgYXNzZXQ6IHZhbHVlLmFzc2V0LAogICAgLy8gICB9LAogICAgLy8gICAnYm94TWFwU3RydWN0IHZhbHVlIG1pc21hdGNoJywKICAgIC8vICkKICAgIGV4dHJhY3QgMTAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBhc3NldDogdmFsdWUuYXNzZXQsCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMTAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzEzLTMyMQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICAvLyAgIHsKICAgIC8vICAgICBuYW1lOiB2YWx1ZS5uYW1lLAogICAgLy8gICAgIGlkOiB2YWx1ZS5pZCwKICAgIC8vICAgICBhc3NldDogdmFsdWUuYXNzZXQsCiAgICAvLyAgIH0sCiAgICAvLyAgICdib3hNYXBTdHJ1Y3QgdmFsdWUgbWlzbWF0Y2gnLAogICAgLy8gKQogICAgPT0KICAgIGJ6IHNldEJveE1hcFN0cnVjdF9ib29sX2ZhbHNlQDQKICAgIGludGNfMCAvLyAxCgpzZXRCb3hNYXBTdHJ1Y3RfYm9vbF9tZXJnZUA1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTMtMzIxCiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSwKICAgIC8vICAgewogICAgLy8gICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAvLyAgICAgaWQ6IHZhbHVlLmlkLAogICAgLy8gICAgIGFzc2V0OiB2YWx1ZS5hc3NldCwKICAgIC8vICAgfSwKICAgIC8vICAgJ2JveE1hcFN0cnVjdCB2YWx1ZSBtaXNtYXRjaCcsCiAgICAvLyApCiAgICBhc3NlcnQgLy8gYm94TWFwU3RydWN0IHZhbHVlIG1pc21hdGNoCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gcmV0dXJuIHRydWUKICAgIGludGNfMCAvLyAxCiAgICBzd2FwCiAgICByZXRzdWIKCnNldEJveE1hcFN0cnVjdF9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzEgLy8gMAogICAgYiBzZXRCb3hNYXBTdHJ1Y3RfYm9vbF9tZXJnZUA1CgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5ib3hNYXBTdHJ1Y3RMZW5ndGgoa2V5OiB1aW50NjQpIC0+IHVpbnQ2NDoKYm94TWFwU3RydWN0TGVuZ3RoOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzAKICAgIC8vIHB1YmxpYyBib3hNYXBTdHJ1Y3RMZW5ndGgoa2V5OiB1aW50NjQpOiBib29sZWFuIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzcKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdCA9IEJveE1hcDx1aW50NjQsIFVzZXJTdHJ1Y3Q+KHsga2V5UHJlZml4OiAndXNlcnMnIH0pCiAgICBieXRlYyA2IC8vICJ1c2VycyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzcKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzMxLTMzNQogICAgLy8gY29uc3QgdmFsdWUgPSBuZXcgVXNlclN0cnVjdCh7CiAgICAvLyAgIG5hbWU6IG5ldyBhcmM0LlN0cigndGVzdE5hbWUnKSwKICAgIC8vICAgaWQ6IG5ldyBhcmM0LlVpbnRONjQoNzApLAogICAgLy8gICBhc3NldDogbmV3IGFyYzQuVWludE42NCgxMjM0KSwKICAgIC8vIH0pCiAgICBwdXNoYnl0ZXMgMHgwMDEyMDAwMDAwMDAwMDAwMDA0NjAwMDAwMDAwMDAwMDA0ZDIwMDA4NzQ2NTczNzQ0ZTYxNmQ2NQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzcKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzM5CiAgICAvLyBhc3NlcnQodGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZS5ieXRlcy5sZW5ndGggPT09IHZhbHVlLmJ5dGVzLmxlbmd0aCwgJ2JveE1hcFN0cnVjdCBieXRlcyBsZW5ndGggbWlzbWF0Y2gnKQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgbGVuCiAgICBwdXNoaW50IDI4IC8vIDI4CiAgICA9PQogICAgYXNzZXJ0IC8vIGJveE1hcFN0cnVjdCBieXRlcyBsZW5ndGggbWlzbWF0Y2gKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzQwCiAgICAvLyBhc3NlcnQodGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS5sZW5ndGggPT09IHZhbHVlLmJ5dGVzLmxlbmd0aCwgJ2JveE1hcFN0cnVjdCBsZW5ndGggbWlzbWF0Y2gnKQogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHB1c2hpbnQgMjggLy8gMjgKICAgID09CiAgICBhc3NlcnQgLy8gYm94TWFwU3RydWN0IGxlbmd0aCBtaXNtYXRjaAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNDIKICAgIC8vIHJldHVybiB0cnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5hcmM0Qm94KGtleTogYnl0ZXMpIC0+IGJ5dGVzOgphcmM0Qm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNTIKICAgIC8vIHB1YmxpYyBhcmM0Qm94KGtleTogc3RyaW5nKTogU3RhdGljSW50cyB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzU1LTM2MAogICAgLy8gc3RhdGljSW50Qm94LnZhbHVlID0gbmV3IGFyYzQuU3RhdGljQXJyYXk8YXJjNC5VaW50TjgsIDQ+KAogICAgLy8gICBuZXcgYXJjNC5VaW50TjgoMCksCiAgICAvLyAgIG5ldyBhcmM0LlVpbnROOCgxKSwKICAgIC8vICAgbmV3IGFyYzQuVWludE44KDIpLAogICAgLy8gICBuZXcgYXJjNC5VaW50TjgoMyksCiAgICAvLyApCiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweDAwMDEwMjAzCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM2MgogICAgLy8gYXNzZXJ0KHN0YXRpY0ludEJveC52YWx1ZVswXS5uYXRpdmUgPT09IDApCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Ynl0ZQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM2MwogICAgLy8gYXNzZXJ0KHN0YXRpY0ludEJveC52YWx1ZVsxXS5uYXRpdmUgPT09IDEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpbnRjXzAgLy8gMQogICAgZ2V0Ynl0ZQogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzY0CiAgICAvLyBhc3NlcnQoc3RhdGljSW50Qm94LnZhbHVlWzJdLm5hdGl2ZSA9PT0gMikKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBnZXRieXRlCiAgICBwdXNoaW50IDIgLy8gMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNjUKICAgIC8vIGFzc2VydChzdGF0aWNJbnRCb3gudmFsdWVbM10ubmF0aXZlID09PSAzKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcHVzaGludCAzIC8vIDMKICAgIGdldGJ5dGUKICAgIHB1c2hpbnQgMyAvLyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM2NwogICAgLy8gcmV0dXJuIHN0YXRpY0ludEJveC52YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { @@ -228,60 +228,6 @@ }, "desc": "Retrieves the value of the boxInt box" }, - { - "name": "setBox", - "args": [ - { - "type": "uint64", - "name": "valueInt", - "desc": "The uint64 value to set in the boxInt box" - } - ], - "readonly": false, - "returns": { - "type": "void" - }, - "desc": "Sets the value of the boxInt box" - }, - { - "name": "setBoxString", - "args": [ - { - "type": "string", - "name": "value", - "desc": "The string value to set in the boxString box" - } - ], - "readonly": false, - "returns": { - "type": "void" - }, - "desc": "Sets the value of the boxString box" - }, - { - "name": "setBoxDynamicBytes", - "args": [ - { - "type": "byte[]", - "name": "value", - "desc": "The dynamic bytes value to set in the boxDynamicBytes box" - } - ], - "readonly": false, - "returns": { - "type": "void" - }, - "desc": "Sets the value of the boxDynamicBytes box" - }, - { - "name": "deleteBox", - "args": [], - "readonly": false, - "returns": { - "type": "void" - }, - "desc": "Deletes the value of the boxInt box" - }, { "name": "maybeBox", "args": [], @@ -325,116 +271,119 @@ "desc": "Retrieves the value stored in the boxMap box with a default value if the key does not exist" }, { - "name": "setBoxMap", + "name": "maybeBoxMap", "args": [ { "type": "uint64", "name": "key", - "desc": "The key to set the value for" - }, - { - "type": "string", - "name": "value", - "desc": "The value to set in the boxMap box" + "desc": "The key to check in the boxMap" } ], - "readonly": false, + "readonly": true, "returns": { - "type": "void" + "type": "(string,bool)", + "desc": "A tuple containing the value and a boolean indicating if the box exists" }, - "desc": "Sets the value of the boxMap box" + "desc": "Retrieves the value stored in the boxMap box and checks if it exists" }, { - "name": "deleteBoxMap", - "args": [ - { - "type": "uint64", - "name": "key", - "desc": "The key to delete the value from" - } - ], + "name": "keyPrefixBoxMap", + "args": [], + "readonly": true, + "returns": { + "type": "byte[]", + "desc": "The key prefix of the boxMap box" + }, + "desc": "Retrieves the key prefix of the boxMap box" + }, + { + "name": "getBoxRef", + "args": [], "readonly": false, "returns": { - "type": "void" + "type": "address", + "desc": "The value stored in the boxRef box" }, - "desc": "Deletes the value of the boxMap box" + "desc": "Retrieves the value stored in the boxRef box" }, { - "name": "maybeBoxMap", + "name": "boxMapExists", "args": [ { "type": "uint64", "name": "key", - "desc": "The key to check in the boxMap" + "desc": "The key to check for" } ], "readonly": true, "returns": { - "type": "(string,bool)", - "desc": "A tuple containing the value and a boolean indicating if the box exists" + "type": "bool", + "desc": "true if the box exists, false otherwise" }, - "desc": "Retrieves the value stored in the boxMap box and checks if it exists" + "desc": "Checks if the boxMap box exists" }, { - "name": "boxMapLength", + "name": "maybeBoxRef", "args": [ { - "type": "uint64", - "name": "key", - "desc": "The key to get the length for" + "type": "string", + "name": "key" } ], "readonly": true, "returns": { - "type": "uint64", - "desc": "The length of the boxMap box" + "type": "(byte[],bool)", + "desc": "A tuple containing the value and a boolean indicating if the box exists" }, - "desc": "Retrieves the length of the boxMap box" + "desc": "Retrieves the value stored in the boxRef box and checks if it exists" }, { - "name": "boxMapExists", + "name": "setBox", "args": [ { "type": "uint64", - "name": "key", - "desc": "The key to check for" + "name": "valueInt", + "desc": "The uint64 value to set in the boxInt box" } ], - "readonly": true, + "readonly": false, "returns": { - "type": "bool", - "desc": "true if the box exists, false otherwise" + "type": "void" }, - "desc": "Checks if the boxMap box exists" + "desc": "Sets the value of the boxInt box" }, { - "name": "keyPrefixBoxMap", - "args": [], - "readonly": true, + "name": "setBoxString", + "args": [ + { + "type": "string", + "name": "value", + "desc": "The string value to set in the boxString box" + } + ], + "readonly": false, "returns": { - "type": "byte[]", - "desc": "The key prefix of the boxMap box" + "type": "void" }, - "desc": "Retrieves the key prefix of the boxMap box" + "desc": "Sets the value of the boxString box" }, { - "name": "getBoxMapStruct", + "name": "setBoxDynamicBytes", "args": [ { - "type": "uint64", - "name": "key", - "desc": "The key to retrieve the value from" + "type": "byte[]", + "name": "value", + "desc": "The dynamic bytes value to set in the boxDynamicBytes box" } ], - "readonly": true, + "readonly": false, "returns": { - "type": "(string,uint64,uint64)", - "desc": "The value stored in the boxMapStruct box" + "type": "void" }, - "desc": "Retrieves the value stored in the boxMapStruct box" + "desc": "Sets the value of the boxDynamicBytes box" }, { - "name": "setBoxMapStruct", + "name": "setBoxMap", "args": [ { "type": "uint64", @@ -442,73 +391,87 @@ "desc": "The key to set the value for" }, { - "type": "(string,uint64,uint64)", + "type": "string", "name": "value", - "desc": "The value to set in the boxMapStruct box" + "desc": "The value to set in the boxMap box" } ], "readonly": false, "returns": { - "type": "bool" + "type": "void" }, - "desc": "Sets the value of the boxMapStruct box" + "desc": "Sets the value of the boxMap box" }, { - "name": "boxMapStructLength", + "name": "setBoxRef", "args": [ { - "type": "uint64", + "type": "string", "name": "key", - "desc": "The key to get the length for" + "desc": "The key to use for the box ref" } ], "readonly": false, "returns": { - "type": "bool", - "desc": "The length of the boxMapStruct box" + "type": "void" }, - "desc": "Retrieves the length of the boxMapStruct box" + "desc": "Creates a box ref with the given key and sets its value to the sender's address" }, { - "name": "boxMapStructExists", + "name": "boxMapLength", "args": [ { "type": "uint64", "name": "key", - "desc": "The key to check for" + "desc": "The key to get the length for" } ], "readonly": true, "returns": { - "type": "bool", - "desc": "true if the box exists, false otherwise" + "type": "uint64", + "desc": "The length of the boxMap box" }, - "desc": "Checks if the boxMapStruct box exists" + "desc": "Retrieves the length of the boxMap box" }, { - "name": "getBoxRef", + "name": "lengthBoxRef", + "args": [ + { + "type": "string", + "name": "key", + "desc": "The key to get the length for" + } + ], + "readonly": false, + "returns": { + "type": "uint64", + "desc": "The length of the boxRef box" + }, + "desc": "Retrieves the length of the boxRef box" + }, + { + "name": "deleteBox", "args": [], "readonly": false, "returns": { - "type": "address", - "desc": "The value stored in the boxRef box" + "type": "void" }, - "desc": "Retrieves the value stored in the boxRef box" + "desc": "Deletes the value of the boxInt box" }, { - "name": "setBoxRef", + "name": "deleteBoxMap", "args": [ { - "type": "string", + "type": "uint64", "name": "key", - "desc": "The key to use for the box ref" + "desc": "The key to delete the value from" } ], "readonly": false, "returns": { "type": "void" }, - "desc": "Creates a box ref with the given key and sets its value to the sender's address" + "desc": "Deletes the value of the boxMap box" }, { "name": "deleteBoxRef", @@ -526,50 +489,87 @@ "desc": "Deletes the value of the boxRef box" }, { - "name": "maybeBoxRef", + "name": "extractBoxRef", "args": [ { "type": "string", - "name": "key" + "name": "key", + "desc": "The key to extract from" + } + ], + "readonly": false, + "returns": { + "type": "void" + }, + "desc": "Extracts a value from the boxRef box" + }, + { + "name": "getBoxMapStruct", + "args": [ + { + "type": "uint64", + "name": "key", + "desc": "The key to retrieve the value from" } ], "readonly": true, "returns": { - "type": "(byte[],bool)", - "desc": "A tuple containing the value and a boolean indicating if the box exists" + "type": "(string,uint64,uint64)", + "desc": "The value stored in the boxMapStruct box" }, - "desc": "Retrieves the value stored in the boxRef box and checks if it exists" + "desc": "Retrieves the value stored in the boxMapStruct box" }, { - "name": "lengthBoxRef", + "name": "boxMapStructExists", "args": [ { - "type": "string", + "type": "uint64", "name": "key", - "desc": "The key to get the length for" + "desc": "The key to check for" + } + ], + "readonly": true, + "returns": { + "type": "bool", + "desc": "true if the box exists, false otherwise" + }, + "desc": "Checks if the boxMapStruct box exists" + }, + { + "name": "setBoxMapStruct", + "args": [ + { + "type": "uint64", + "name": "key", + "desc": "The key to set the value for" + }, + { + "type": "(string,uint64,uint64)", + "name": "value", + "desc": "The value to set in the boxMapStruct box" } ], "readonly": false, "returns": { - "type": "uint64", - "desc": "The length of the boxRef box" + "type": "bool" }, - "desc": "Retrieves the length of the boxRef box" + "desc": "Sets the value of the boxMapStruct box" }, { - "name": "extractBoxRef", + "name": "boxMapStructLength", "args": [ { - "type": "string", + "type": "uint64", "name": "key", - "desc": "The key to extract from" + "desc": "The key to get the length for" } ], "readonly": false, "returns": { - "type": "void" + "type": "bool", + "desc": "The length of the boxMapStruct box" }, - "desc": "Extracts a value from the boxRef box" + "desc": "Retrieves the length of the boxMapStruct box" }, { "name": "arc4Box", diff --git a/projects/typescript-examples/contracts/artifacts/contracts/BoxStorage/BoxStorage.arc56.json b/projects/typescript-examples/contracts/artifacts/contracts/BoxStorage/BoxStorage.arc56.json index 84f6da6..f35ca75 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/BoxStorage/BoxStorage.arc56.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/BoxStorage/BoxStorage.arc56.json @@ -53,16 +53,11 @@ "recommendations": {} }, { - "name": "setBox", - "args": [ - { - "type": "uint64", - "name": "valueInt", - "desc": "The uint64 value to set in the boxInt box" - } - ], + "name": "maybeBox", + "args": [], "returns": { - "type": "void" + "type": "(uint64,bool)", + "desc": "A tuple containing the value and a boolean indicating if the box exists" }, "actions": { "create": [], @@ -70,22 +65,23 @@ "NoOp" ] }, - "readonly": false, - "desc": "Sets the value of the boxInt box", + "readonly": true, + "desc": "Retrieves the value stored in the boxInt box and checks if it exists", "events": [], "recommendations": {} }, { - "name": "setBoxString", + "name": "getBoxMap", "args": [ { - "type": "string", - "name": "value", - "desc": "The string value to set in the boxString box" + "type": "uint64", + "name": "key", + "desc": "The key of the boxMap to retrieve the value from" } ], "returns": { - "type": "void" + "type": "string", + "desc": "The value stored in the boxMap box" }, "actions": { "create": [], @@ -93,22 +89,23 @@ "NoOp" ] }, - "readonly": false, - "desc": "Sets the value of the boxString box", + "readonly": true, + "desc": "Retrieves the value stored in the boxMap box", "events": [], "recommendations": {} }, { - "name": "setBoxDynamicBytes", + "name": "getBoxMapWithDefault", "args": [ { - "type": "byte[]", - "name": "value", - "desc": "The dynamic bytes value to set in the boxDynamicBytes box" + "type": "uint64", + "name": "key", + "desc": "The key of the boxMap to retrieve the value from" } ], "returns": { - "type": "void" + "type": "string", + "desc": "The value stored in the boxMap box" }, "actions": { "create": [], @@ -116,16 +113,23 @@ "NoOp" ] }, - "readonly": false, - "desc": "Sets the value of the boxDynamicBytes box", + "readonly": true, + "desc": "Retrieves the value stored in the boxMap box with a default value if the key does not exist", "events": [], "recommendations": {} }, { - "name": "deleteBox", - "args": [], + "name": "maybeBoxMap", + "args": [ + { + "type": "uint64", + "name": "key", + "desc": "The key to check in the boxMap" + } + ], "returns": { - "type": "void" + "type": "(string,bool)", + "desc": "A tuple containing the value and a boolean indicating if the box exists" }, "actions": { "create": [], @@ -133,17 +137,17 @@ "NoOp" ] }, - "readonly": false, - "desc": "Deletes the value of the boxInt box", + "readonly": true, + "desc": "Retrieves the value stored in the boxMap box and checks if it exists", "events": [], "recommendations": {} }, { - "name": "maybeBox", + "name": "keyPrefixBoxMap", "args": [], "returns": { - "type": "(uint64,bool)", - "desc": "A tuple containing the value and a boolean indicating if the box exists" + "type": "byte[]", + "desc": "The key prefix of the boxMap box" }, "actions": { "create": [], @@ -152,22 +156,16 @@ ] }, "readonly": true, - "desc": "Retrieves the value stored in the boxInt box and checks if it exists", + "desc": "Retrieves the key prefix of the boxMap box", "events": [], "recommendations": {} }, { - "name": "getBoxMap", - "args": [ - { - "type": "uint64", - "name": "key", - "desc": "The key of the boxMap to retrieve the value from" - } - ], + "name": "getBoxRef", + "args": [], "returns": { - "type": "string", - "desc": "The value stored in the boxMap box" + "type": "address", + "desc": "The value stored in the boxRef box" }, "actions": { "create": [], @@ -175,23 +173,23 @@ "NoOp" ] }, - "readonly": true, - "desc": "Retrieves the value stored in the boxMap box", + "readonly": false, + "desc": "Retrieves the value stored in the boxRef box", "events": [], "recommendations": {} }, { - "name": "getBoxMapWithDefault", + "name": "boxMapExists", "args": [ { "type": "uint64", "name": "key", - "desc": "The key of the boxMap to retrieve the value from" + "desc": "The key to check for" } ], "returns": { - "type": "string", - "desc": "The value stored in the boxMap box" + "type": "bool", + "desc": "true if the box exists, false otherwise" }, "actions": { "create": [], @@ -200,26 +198,21 @@ ] }, "readonly": true, - "desc": "Retrieves the value stored in the boxMap box with a default value if the key does not exist", + "desc": "Checks if the boxMap box exists", "events": [], "recommendations": {} }, { - "name": "setBoxMap", + "name": "maybeBoxRef", "args": [ - { - "type": "uint64", - "name": "key", - "desc": "The key to set the value for" - }, { "type": "string", - "name": "value", - "desc": "The value to set in the boxMap box" + "name": "key" } ], "returns": { - "type": "void" + "type": "(byte[],bool)", + "desc": "A tuple containing the value and a boolean indicating if the box exists" }, "actions": { "create": [], @@ -227,18 +220,18 @@ "NoOp" ] }, - "readonly": false, - "desc": "Sets the value of the boxMap box", + "readonly": true, + "desc": "Retrieves the value stored in the boxRef box and checks if it exists", "events": [], "recommendations": {} }, { - "name": "deleteBoxMap", + "name": "setBox", "args": [ { "type": "uint64", - "name": "key", - "desc": "The key to delete the value from" + "name": "valueInt", + "desc": "The uint64 value to set in the boxInt box" } ], "returns": { @@ -251,22 +244,21 @@ ] }, "readonly": false, - "desc": "Deletes the value of the boxMap box", + "desc": "Sets the value of the boxInt box", "events": [], "recommendations": {} }, { - "name": "maybeBoxMap", + "name": "setBoxString", "args": [ { - "type": "uint64", - "name": "key", - "desc": "The key to check in the boxMap" + "type": "string", + "name": "value", + "desc": "The string value to set in the boxString box" } ], "returns": { - "type": "(string,bool)", - "desc": "A tuple containing the value and a boolean indicating if the box exists" + "type": "void" }, "actions": { "create": [], @@ -274,23 +266,22 @@ "NoOp" ] }, - "readonly": true, - "desc": "Retrieves the value stored in the boxMap box and checks if it exists", + "readonly": false, + "desc": "Sets the value of the boxString box", "events": [], "recommendations": {} }, { - "name": "boxMapLength", + "name": "setBoxDynamicBytes", "args": [ { - "type": "uint64", - "name": "key", - "desc": "The key to get the length for" + "type": "byte[]", + "name": "value", + "desc": "The dynamic bytes value to set in the boxDynamicBytes box" } ], "returns": { - "type": "uint64", - "desc": "The length of the boxMap box" + "type": "void" }, "actions": { "create": [], @@ -298,23 +289,27 @@ "NoOp" ] }, - "readonly": true, - "desc": "Retrieves the length of the boxMap box", + "readonly": false, + "desc": "Sets the value of the boxDynamicBytes box", "events": [], "recommendations": {} }, { - "name": "boxMapExists", + "name": "setBoxMap", "args": [ { "type": "uint64", "name": "key", - "desc": "The key to check for" + "desc": "The key to set the value for" + }, + { + "type": "string", + "name": "value", + "desc": "The value to set in the boxMap box" } ], "returns": { - "type": "bool", - "desc": "true if the box exists, false otherwise" + "type": "void" }, "actions": { "create": [], @@ -322,17 +317,22 @@ "NoOp" ] }, - "readonly": true, - "desc": "Checks if the boxMap box exists", + "readonly": false, + "desc": "Sets the value of the boxMap box", "events": [], "recommendations": {} }, { - "name": "keyPrefixBoxMap", - "args": [], + "name": "setBoxRef", + "args": [ + { + "type": "string", + "name": "key", + "desc": "The key to use for the box ref" + } + ], "returns": { - "type": "byte[]", - "desc": "The key prefix of the boxMap box" + "type": "void" }, "actions": { "create": [], @@ -340,24 +340,23 @@ "NoOp" ] }, - "readonly": true, - "desc": "Retrieves the key prefix of the boxMap box", + "readonly": false, + "desc": "Creates a box ref with the given key and sets its value to the sender's address", "events": [], "recommendations": {} }, { - "name": "getBoxMapStruct", + "name": "boxMapLength", "args": [ { "type": "uint64", "name": "key", - "desc": "The key to retrieve the value from" + "desc": "The key to get the length for" } ], "returns": { - "type": "(string,uint64,uint64)", - "struct": "UserStruct", - "desc": "The value stored in the boxMapStruct box" + "type": "uint64", + "desc": "The length of the boxMap box" }, "actions": { "create": [], @@ -366,27 +365,22 @@ ] }, "readonly": true, - "desc": "Retrieves the value stored in the boxMapStruct box", + "desc": "Retrieves the length of the boxMap box", "events": [], "recommendations": {} }, { - "name": "setBoxMapStruct", + "name": "lengthBoxRef", "args": [ { - "type": "uint64", + "type": "string", "name": "key", - "desc": "The key to set the value for" - }, - { - "type": "(string,uint64,uint64)", - "struct": "UserStruct", - "name": "value", - "desc": "The value to set in the boxMapStruct box" + "desc": "The key to get the length for" } ], "returns": { - "type": "bool" + "type": "uint64", + "desc": "The length of the boxRef box" }, "actions": { "create": [], @@ -395,22 +389,15 @@ ] }, "readonly": false, - "desc": "Sets the value of the boxMapStruct box", + "desc": "Retrieves the length of the boxRef box", "events": [], "recommendations": {} }, { - "name": "boxMapStructLength", - "args": [ - { - "type": "uint64", - "name": "key", - "desc": "The key to get the length for" - } - ], + "name": "deleteBox", + "args": [], "returns": { - "type": "bool", - "desc": "The length of the boxMapStruct box" + "type": "void" }, "actions": { "create": [], @@ -419,22 +406,21 @@ ] }, "readonly": false, - "desc": "Retrieves the length of the boxMapStruct box", + "desc": "Deletes the value of the boxInt box", "events": [], "recommendations": {} }, { - "name": "boxMapStructExists", + "name": "deleteBoxMap", "args": [ { "type": "uint64", "name": "key", - "desc": "The key to check for" + "desc": "The key to delete the value from" } ], "returns": { - "type": "bool", - "desc": "true if the box exists, false otherwise" + "type": "void" }, "actions": { "create": [], @@ -442,17 +428,22 @@ "NoOp" ] }, - "readonly": true, - "desc": "Checks if the boxMapStruct box exists", + "readonly": false, + "desc": "Deletes the value of the boxMap box", "events": [], "recommendations": {} }, { - "name": "getBoxRef", - "args": [], + "name": "deleteBoxRef", + "args": [ + { + "type": "string", + "name": "key", + "desc": "The key to delete the value from" + } + ], "returns": { - "type": "address", - "desc": "The value stored in the boxRef box" + "type": "void" }, "actions": { "create": [], @@ -461,17 +452,17 @@ ] }, "readonly": false, - "desc": "Retrieves the value stored in the boxRef box", + "desc": "Deletes the value of the boxRef box", "events": [], "recommendations": {} }, { - "name": "setBoxRef", + "name": "extractBoxRef", "args": [ { "type": "string", "name": "key", - "desc": "The key to use for the box ref" + "desc": "The key to extract from" } ], "returns": { @@ -484,21 +475,23 @@ ] }, "readonly": false, - "desc": "Creates a box ref with the given key and sets its value to the sender's address", + "desc": "Extracts a value from the boxRef box", "events": [], "recommendations": {} }, { - "name": "deleteBoxRef", + "name": "getBoxMapStruct", "args": [ { - "type": "string", + "type": "uint64", "name": "key", - "desc": "The key to delete the value from" + "desc": "The key to retrieve the value from" } ], "returns": { - "type": "void" + "type": "(string,uint64,uint64)", + "struct": "UserStruct", + "desc": "The value stored in the boxMapStruct box" }, "actions": { "create": [], @@ -506,22 +499,23 @@ "NoOp" ] }, - "readonly": false, - "desc": "Deletes the value of the boxRef box", + "readonly": true, + "desc": "Retrieves the value stored in the boxMapStruct box", "events": [], "recommendations": {} }, { - "name": "maybeBoxRef", + "name": "boxMapStructExists", "args": [ { - "type": "string", - "name": "key" + "type": "uint64", + "name": "key", + "desc": "The key to check for" } ], "returns": { - "type": "(byte[],bool)", - "desc": "A tuple containing the value and a boolean indicating if the box exists" + "type": "bool", + "desc": "true if the box exists, false otherwise" }, "actions": { "create": [], @@ -530,22 +524,27 @@ ] }, "readonly": true, - "desc": "Retrieves the value stored in the boxRef box and checks if it exists", + "desc": "Checks if the boxMapStruct box exists", "events": [], "recommendations": {} }, { - "name": "lengthBoxRef", + "name": "setBoxMapStruct", "args": [ { - "type": "string", + "type": "uint64", "name": "key", - "desc": "The key to get the length for" + "desc": "The key to set the value for" + }, + { + "type": "(string,uint64,uint64)", + "struct": "UserStruct", + "name": "value", + "desc": "The value to set in the boxMapStruct box" } ], "returns": { - "type": "uint64", - "desc": "The length of the boxRef box" + "type": "bool" }, "actions": { "create": [], @@ -554,21 +553,22 @@ ] }, "readonly": false, - "desc": "Retrieves the length of the boxRef box", + "desc": "Sets the value of the boxMapStruct box", "events": [], "recommendations": {} }, { - "name": "extractBoxRef", + "name": "boxMapStructLength", "args": [ { - "type": "string", + "type": "uint64", "name": "key", - "desc": "The key to extract from" + "desc": "The key to get the length for" } ], "returns": { - "type": "void" + "type": "bool", + "desc": "The length of the boxMapStruct box" }, "actions": { "create": [], @@ -577,7 +577,7 @@ ] }, "readonly": false, - "desc": "Extracts a value from the boxRef box", + "desc": "Retrieves the length of the boxMapStruct box", "events": [], "recommendations": {} }, @@ -683,15 +683,15 @@ "pc": [ 867, 874, - 983, - 1089, - 1116, - 1137, - 1164, - 1180, - 1249, - 1256, - 1367, + 892, + 1082, + 1096, + 1257, + 1292, + 1319, + 1335, + 1404, + 1411, 1433, 1441, 1450, @@ -702,16 +702,16 @@ }, { "pc": [ - 1414 + 1242 ], "errorMessage": "First part should match app address" }, { "pc": [ - 1165, - 1170, - 1181, - 1186 + 1320, + 1325, + 1336, + 1341 ], "errorMessage": "Index access is out of bounds" }, @@ -719,28 +719,28 @@ "pc": [ 274, 296, - 314, - 337, - 380, - 398, - 416, - 432, - 457, - 482, - 510, - 530, - 554, - 579, - 600, - 641, - 657, - 679, - 707, - 735, - 759, - 771, - 786, - 804, + 321, + 349, + 374, + 394, + 412, + 430, + 446, + 458, + 481, + 502, + 520, + 542, + 557, + 575, + 591, + 634, + 659, + 675, + 699, + 740, + 768, + 796, 820, 837 ], @@ -748,44 +748,44 @@ }, { "pc": [ - 1416 + 1244 ], "errorMessage": "Second part should match sender bytes" }, { "pc": [ - 1343 + 1191 ], "errorMessage": "assert target is match for conditions" }, { "pc": [ - 1254 + 1409 ], "errorMessage": "boxMapStruct bytes length mismatch" }, { "pc": [ - 1260 + 1415 ], "errorMessage": "boxMapStruct length mismatch" }, { "pc": [ - 1194 + 1349 ], "errorMessage": "boxMapStruct value mismatch" }, { "pc": [ - 1363, - 1386 + 1092, + 1214 ], "errorMessage": "boxRef creation failed" }, { "pc": [ - 1301 + 972 ], "errorMessage": "boxRef value mismatch" }, @@ -799,28 +799,28 @@ "pc": [ 277, 299, - 317, - 340, - 383, - 401, - 419, - 435, - 460, - 485, - 513, - 533, - 557, - 582, - 603, - 644, - 660, - 682, - 710, - 738, - 762, - 774, - 789, - 807, + 324, + 352, + 377, + 397, + 415, + 433, + 449, + 461, + 484, + 505, + 523, + 545, + 560, + 578, + 594, + 637, + 662, + 678, + 702, + 743, + 771, + 799, 823, 840 ], @@ -835,11 +835,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDMyIDQyCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgMHgwMCAiYm94TWFwIiAiYm94SW50IiAiYm94U3RyaW5nIiAiYm94RHluYW1pY0J5dGVzIiAidXNlcnMiICI0MiIgImJveFJlZiIgMHgwMDAzCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDMxCiAgICBwdXNoYnl0ZXNzIDB4Yjc0OTEzNDQgMHg0OWNmNDEwNSAweGZhMTU2MmY3IDB4YzQ5N2JjNmYgMHhmNGY5Y2JhZCAweDkxMDFhN2RlIDB4NmFiM2U5YmMgMHgyNmNhNjQ4YSAweDI4Y2M3MTM5IDB4OWUxMWZkN2EgMHhhNDU1MmViNSAweDY0NGEzOTk0IDB4ZjUzNDE4YzQgMHhkODI5ZDJhMyAweGIxZjVhOWI2IDB4NTNjMjg4MjAgMHhkNWRkOTIyYyAweDU5NWI4N2JiIDB4ZjE4MzIwN2EgMHgwM2U4Yzc3ZSAweDVlNmNlYWMwIDB4MzhhY2Y1M2UgMHg4YzIyYmZkNSAweDM5ZTliMjI2IDB4ODYwMGUwZWIgMHg1NDdmMGE3NCAvLyBtZXRob2QgImdldEJveCgpdWludDY0IiwgbWV0aG9kICJ2YWx1ZUJveCgpdWludDY0IiwgbWV0aG9kICJzZXRCb3godWludDY0KXZvaWQiLCBtZXRob2QgInNldEJveFN0cmluZyhzdHJpbmcpdm9pZCIsIG1ldGhvZCAic2V0Qm94RHluYW1pY0J5dGVzKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJkZWxldGVCb3goKXZvaWQiLCBtZXRob2QgIm1heWJlQm94KCkodWludDY0LGJvb2wpIiwgbWV0aG9kICJnZXRCb3hNYXAodWludDY0KXN0cmluZyIsIG1ldGhvZCAiZ2V0Qm94TWFwV2l0aERlZmF1bHQodWludDY0KXN0cmluZyIsIG1ldGhvZCAic2V0Qm94TWFwKHVpbnQ2NCxzdHJpbmcpdm9pZCIsIG1ldGhvZCAiZGVsZXRlQm94TWFwKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJtYXliZUJveE1hcCh1aW50NjQpKHN0cmluZyxib29sKSIsIG1ldGhvZCAiYm94TWFwTGVuZ3RoKHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgImJveE1hcEV4aXN0cyh1aW50NjQpYm9vbCIsIG1ldGhvZCAia2V5UHJlZml4Qm94TWFwKClieXRlW10iLCBtZXRob2QgImdldEJveE1hcFN0cnVjdCh1aW50NjQpKHN0cmluZyx1aW50NjQsdWludDY0KSIsIG1ldGhvZCAic2V0Qm94TWFwU3RydWN0KHVpbnQ2NCwoc3RyaW5nLHVpbnQ2NCx1aW50NjQpKWJvb2wiLCBtZXRob2QgImJveE1hcFN0cnVjdExlbmd0aCh1aW50NjQpYm9vbCIsIG1ldGhvZCAiYm94TWFwU3RydWN0RXhpc3RzKHVpbnQ2NClib29sIiwgbWV0aG9kICJnZXRCb3hSZWYoKWFkZHJlc3MiLCBtZXRob2QgInNldEJveFJlZihzdHJpbmcpdm9pZCIsIG1ldGhvZCAiZGVsZXRlQm94UmVmKHN0cmluZyl2b2lkIiwgbWV0aG9kICJtYXliZUJveFJlZihzdHJpbmcpKGJ5dGVbXSxib29sKSIsIG1ldGhvZCAibGVuZ3RoQm94UmVmKHN0cmluZyl1aW50NjQiLCBtZXRob2QgImV4dHJhY3RCb3hSZWYoc3RyaW5nKXZvaWQiLCBtZXRob2QgImFyYzRCb3goc3RyaW5nKXVpbnQ4WzRdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9nZXRCb3hfcm91dGVAMyBtYWluX3ZhbHVlQm94X3JvdXRlQDQgbWFpbl9zZXRCb3hfcm91dGVANSBtYWluX3NldEJveFN0cmluZ19yb3V0ZUA2IG1haW5fc2V0Qm94RHluYW1pY0J5dGVzX3JvdXRlQDcgbWFpbl9kZWxldGVCb3hfcm91dGVAOCBtYWluX21heWJlQm94X3JvdXRlQDkgbWFpbl9nZXRCb3hNYXBfcm91dGVAMTAgbWFpbl9nZXRCb3hNYXBXaXRoRGVmYXVsdF9yb3V0ZUAxMSBtYWluX3NldEJveE1hcF9yb3V0ZUAxMiBtYWluX2RlbGV0ZUJveE1hcF9yb3V0ZUAxMyBtYWluX21heWJlQm94TWFwX3JvdXRlQDE0IG1haW5fYm94TWFwTGVuZ3RoX3JvdXRlQDE1IG1haW5fYm94TWFwRXhpc3RzX3JvdXRlQDE2IG1haW5fa2V5UHJlZml4Qm94TWFwX3JvdXRlQDE3IG1haW5fZ2V0Qm94TWFwU3RydWN0X3JvdXRlQDE4IG1haW5fc2V0Qm94TWFwU3RydWN0X3JvdXRlQDE5IG1haW5fYm94TWFwU3RydWN0TGVuZ3RoX3JvdXRlQDIwIG1haW5fYm94TWFwU3RydWN0RXhpc3RzX3JvdXRlQDIxIG1haW5fZ2V0Qm94UmVmX3JvdXRlQDIyIG1haW5fc2V0Qm94UmVmX3JvdXRlQDIzIG1haW5fZGVsZXRlQm94UmVmX3JvdXRlQDI0IG1haW5fbWF5YmVCb3hSZWZfcm91dGVAMjUgbWFpbl9sZW5ndGhCb3hSZWZfcm91dGVAMjYgbWFpbl9leHRyYWN0Qm94UmVmX3JvdXRlQDI3IG1haW5fYXJjNEJveF9yb3V0ZUAyOAoKbWFpbl9hZnRlcl9pZl9lbHNlQDM1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fYXJjNEJveF9yb3V0ZUAyODoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mzk2CiAgICAvLyBwdWJsaWMgYXJjNEJveChrZXk6IHN0cmluZyk6IFN0YXRpY0ludHMgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mzk2CiAgICAvLyBwdWJsaWMgYXJjNEJveChrZXk6IHN0cmluZyk6IFN0YXRpY0ludHMgewogICAgY2FsbHN1YiBhcmM0Qm94CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2V4dHJhY3RCb3hSZWZfcm91dGVAMjc6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gcHVibGljIGV4dHJhY3RCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gcHVibGljIGV4dHJhY3RCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIGNhbGxzdWIgZXh0cmFjdEJveFJlZgogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9sZW5ndGhCb3hSZWZfcm91dGVAMjY6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM1NwogICAgLy8gcHVibGljIGxlbmd0aEJveFJlZihrZXk6IHN0cmluZyk6IHVpbnQ2NCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNTcKICAgIC8vIHB1YmxpYyBsZW5ndGhCb3hSZWYoa2V5OiBzdHJpbmcpOiB1aW50NjQgewogICAgY2FsbHN1YiBsZW5ndGhCb3hSZWYKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWF5YmVCb3hSZWZfcm91dGVAMjU6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM0MwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNDMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBtYXliZUJveFJlZgogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgYnl0ZWMgOSAvLyAweDAwMDMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2RlbGV0ZUJveFJlZl9yb3V0ZUAyNDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzMxCiAgICAvLyBwdWJsaWMgZGVsZXRlQm94UmVmKGtleTogc3RyaW5nKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzEKICAgIC8vIHB1YmxpYyBkZWxldGVCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIGNhbGxzdWIgZGVsZXRlQm94UmVmCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3NldEJveFJlZl9yb3V0ZUAyMzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBwdWJsaWMgc2V0Qm94UmVmKGtleTogc3RyaW5nKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTgKICAgIC8vIHB1YmxpYyBzZXRCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIGNhbGxzdWIgc2V0Qm94UmVmCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveFJlZl9yb3V0ZUAyMjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzAzCiAgICAvLyBwdWJsaWMgZ2V0Qm94UmVmKCk6IGFyYzQuQWRkcmVzcyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qm94UmVmCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JveE1hcFN0cnVjdEV4aXN0c19yb3V0ZUAyMToKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjkxCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjkxCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgYm94TWFwU3RydWN0RXhpc3RzCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hNYXBTdHJ1Y3RMZW5ndGhfcm91dGVAMjA6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI2OAogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdExlbmd0aChrZXk6IHVpbnQ2NCk6IGJvb2xlYW4gewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIHB1YmxpYyBib3hNYXBTdHJ1Y3RMZW5ndGgoa2V5OiB1aW50NjQpOiBib29sZWFuIHsKICAgIGNhbGxzdWIgYm94TWFwU3RydWN0TGVuZ3RoCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRCb3hNYXBTdHJ1Y3Rfcm91dGVAMTk6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0NgogICAgLy8gcHVibGljIHNldEJveE1hcFN0cnVjdChrZXk6IHVpbnQ2NCwgdmFsdWU6IFVzZXJTdHJ1Y3QpOiBib29sZWFuIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQ2CiAgICAvLyBwdWJsaWMgc2V0Qm94TWFwU3RydWN0KGtleTogdWludDY0LCB2YWx1ZTogVXNlclN0cnVjdCk6IGJvb2xlYW4gewogICAgY2FsbHN1YiBzZXRCb3hNYXBTdHJ1Y3QKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveE1hcFN0cnVjdF9yb3V0ZUAxODoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjM0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjM0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0Qm94TWFwU3RydWN0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2tleVByZWZpeEJveE1hcF9yb3V0ZUAxNzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjIxCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUwMDA2NjI2Zjc4NGQ2MTcwCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94TWFwRXhpc3RzX3JvdXRlQDE2OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBib3hNYXBFeGlzdHMKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JveE1hcExlbmd0aF9yb3V0ZUAxNToKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTk0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTk0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgYm94TWFwTGVuZ3RoCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21heWJlQm94TWFwX3JvdXRlQDE0OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBtYXliZUJveE1hcAogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgYnl0ZWMgOSAvLyAweDAwMDMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2RlbGV0ZUJveE1hcF9yb3V0ZUAxMzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTcwCiAgICAvLyBwdWJsaWMgZGVsZXRlQm94TWFwKGtleTogdWludDY0KTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3MAogICAgLy8gcHVibGljIGRlbGV0ZUJveE1hcChrZXk6IHVpbnQ2NCk6IHZvaWQgewogICAgY2FsbHN1YiBkZWxldGVCb3hNYXAKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0Qm94TWFwX3JvdXRlQDEyOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNjAKICAgIC8vIHB1YmxpYyBzZXRCb3hNYXAoa2V5OiB1aW50NjQsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2MAogICAgLy8gcHVibGljIHNldEJveE1hcChrZXk6IHVpbnQ2NCwgdmFsdWU6IHN0cmluZyk6IHZvaWQgewogICAgY2FsbHN1YiBzZXRCb3hNYXAKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0Qm94TWFwV2l0aERlZmF1bHRfcm91dGVAMTE6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE0OAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE0OAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGdldEJveE1hcFdpdGhEZWZhdWx0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRCb3hNYXBfcm91dGVAMTA6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEzNgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEzNgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGdldEJveE1hcAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWF5YmVCb3hfcm91dGVAOToKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTIyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZUJveAogICAgc3dhcAogICAgaXRvYgogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZWxldGVCb3hfcm91dGVAODoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTA2CiAgICAvLyBwdWJsaWMgZGVsZXRlQm94KCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZUJveAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRCb3hEeW5hbWljQnl0ZXNfcm91dGVANzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTcKICAgIC8vIHB1YmxpYyBzZXRCb3hEeW5hbWljQnl0ZXModmFsdWU6IGFyYzQuRHluYW1pY0J5dGVzKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjk3CiAgICAvLyBwdWJsaWMgc2V0Qm94RHluYW1pY0J5dGVzKHZhbHVlOiBhcmM0LkR5bmFtaWNCeXRlcyk6IHZvaWQgewogICAgY2FsbHN1YiBzZXRCb3hEeW5hbWljQnl0ZXMKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0Qm94U3RyaW5nX3JvdXRlQDY6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyBwdWJsaWMgc2V0Qm94U3RyaW5nKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyBwdWJsaWMgc2V0Qm94U3RyaW5nKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsKICAgIGNhbGxzdWIgc2V0Qm94U3RyaW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3NldEJveF9yb3V0ZUA1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo3NwogICAgLy8gcHVibGljIHNldEJveCh2YWx1ZUludDogdWludDY0KTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjc3CiAgICAvLyBwdWJsaWMgc2V0Qm94KHZhbHVlSW50OiB1aW50NjQpOiB2b2lkIHsKICAgIGNhbGxzdWIgc2V0Qm94CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZhbHVlQm94X3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjY2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB2YWx1ZUJveAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRCb3hfcm91dGVAMzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldEJveAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMzE6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAzNQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmdldEJveCgpIC0+IHVpbnQ2NDoKZ2V0Qm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcHVibGljIGJveEludCA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94SW50JyB9KQogICAgYnl0ZWNfMyAvLyAiYm94SW50IgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo1OAogICAgLy8gcmV0dXJuIHRoaXMuYm94SW50LnZhbHVlCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS52YWx1ZUJveCgpIC0+IHVpbnQ2NDoKdmFsdWVCb3g6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyBwdWJsaWMgYm94SW50ID0gQm94PHVpbnQ2ND4oeyBrZXk6ICdib3hJbnQnIH0pCiAgICBieXRlY18zIC8vICJib3hJbnQiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyByZXR1cm4gdGhpcy5ib3hJbnQudmFsdWUKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLnNldEJveCh2YWx1ZUludDogdWludDY0KSAtPiB2b2lkOgpzZXRCb3g6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjc3CiAgICAvLyBwdWJsaWMgc2V0Qm94KHZhbHVlSW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo3OAogICAgLy8gdGhpcy5ib3hJbnQudmFsdWUgPSB2YWx1ZUludAogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyBwdWJsaWMgYm94SW50ID0gQm94PHVpbnQ2ND4oeyBrZXk6ICdib3hJbnQnIH0pCiAgICBieXRlY18zIC8vICJib3hJbnQiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjc4CiAgICAvLyB0aGlzLmJveEludC52YWx1ZSA9IHZhbHVlSW50CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLnNldEJveFN0cmluZyh2YWx1ZTogYnl0ZXMpIC0+IHZvaWQ6CnNldEJveFN0cmluZzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIHB1YmxpYyBzZXRCb3hTdHJpbmcodmFsdWU6IHN0cmluZyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBwdWJsaWMgYm94U3RyaW5nID0gQm94PHN0cmluZz4oeyBrZXk6ICdib3hTdHJpbmcnIH0pCiAgICBieXRlYyA0IC8vICJib3hTdHJpbmciCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg4CiAgICAvLyB0aGlzLmJveFN0cmluZy52YWx1ZSA9IHZhbHVlCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHB1YmxpYyBib3hTdHJpbmcgPSBCb3g8c3RyaW5nPih7IGtleTogJ2JveFN0cmluZycgfSkKICAgIGJ5dGVjIDQgLy8gImJveFN0cmluZyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIHRoaXMuYm94U3RyaW5nLnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5zZXRCb3hEeW5hbWljQnl0ZXModmFsdWU6IGJ5dGVzKSAtPiB2b2lkOgpzZXRCb3hEeW5hbWljQnl0ZXM6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjk3CiAgICAvLyBwdWJsaWMgc2V0Qm94RHluYW1pY0J5dGVzKHZhbHVlOiBhcmM0LkR5bmFtaWNCeXRlcyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBwdWJsaWMgYm94RHluYW1pY0J5dGVzID0gQm94PGFyYzQuRHluYW1pY0J5dGVzPih7IGtleTogJ2JveER5bmFtaWNCeXRlcycgfSkKICAgIGJ5dGVjIDUgLy8gImJveER5bmFtaWNCeXRlcyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTgKICAgIC8vIHRoaXMuYm94RHluYW1pY0J5dGVzLnZhbHVlID0gdmFsdWUKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcHVibGljIGJveER5bmFtaWNCeXRlcyA9IEJveDxhcmM0LkR5bmFtaWNCeXRlcz4oeyBrZXk6ICdib3hEeW5hbWljQnl0ZXMnIH0pCiAgICBieXRlYyA1IC8vICJib3hEeW5hbWljQnl0ZXMiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjk4CiAgICAvLyB0aGlzLmJveER5bmFtaWNCeXRlcy52YWx1ZSA9IHZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZGVsZXRlQm94KCkgLT4gdm9pZDoKZGVsZXRlQm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcHVibGljIGJveEludCA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94SW50JyB9KQogICAgYnl0ZWNfMyAvLyAiYm94SW50IgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIHRoaXMuYm94SW50LmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHB1YmxpYyBib3hEeW5hbWljQnl0ZXMgPSBCb3g8YXJjNC5EeW5hbWljQnl0ZXM+KHsga2V5OiAnYm94RHluYW1pY0J5dGVzJyB9KQogICAgYnl0ZWMgNSAvLyAiYm94RHluYW1pY0J5dGVzIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDgKICAgIC8vIHRoaXMuYm94RHluYW1pY0J5dGVzLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHB1YmxpYyBib3hTdHJpbmcgPSBCb3g8c3RyaW5nPih7IGtleTogJ2JveFN0cmluZycgfSkKICAgIGJ5dGVjIDQgLy8gImJveFN0cmluZyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTA5CiAgICAvLyB0aGlzLmJveFN0cmluZy5kZWxldGUoKQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyBwdWJsaWMgYm94SW50ID0gQm94PHVpbnQ2ND4oeyBrZXk6ICdib3hJbnQnIH0pCiAgICBieXRlY18zIC8vICJib3hJbnQiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gYXNzZXJ0KHRoaXMuYm94SW50LmdldCh7IGRlZmF1bHQ6IFVpbnQ2NCg0MikgfSkgPT09IDQyKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18zIC8vIDQyCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgaW50Y18zIC8vIDQyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBwdWJsaWMgYm94RHluYW1pY0J5dGVzID0gQm94PGFyYzQuRHluYW1pY0J5dGVzPih7IGtleTogJ2JveER5bmFtaWNCeXRlcycgfSkKICAgIGJ5dGVjIDUgLy8gImJveER5bmFtaWNCeXRlcyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTEyCiAgICAvLyBhc3NlcnQodGhpcy5ib3hEeW5hbWljQnl0ZXMuZ2V0KHsgZGVmYXVsdDogbmV3IGFyYzQuRHluYW1pY0J5dGVzKCc0MicpIH0pLm5hdGl2ZSA9PT0gQnl0ZXMoJzQyJykpCiAgICBib3hfZ2V0CiAgICBwdXNoYnl0ZXMgMHgwMDAyMzQzMgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICBleHRyYWN0IDIgMAogICAgYnl0ZWMgNyAvLyAiNDIiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBwdWJsaWMgYm94U3RyaW5nID0gQm94PHN0cmluZz4oeyBrZXk6ICdib3hTdHJpbmcnIH0pCiAgICBieXRlYyA0IC8vICJib3hTdHJpbmciCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjExMwogICAgLy8gYXNzZXJ0KHRoaXMuYm94U3RyaW5nLmdldCh7IGRlZmF1bHQ6ICc0MicgfSkgPT09ICc0MicpCiAgICBib3hfZ2V0CiAgICBieXRlYyA3IC8vICI0MiIKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgYnl0ZWMgNyAvLyAiNDIiCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLm1heWJlQm94KCkgLT4gdWludDY0LCB1aW50NjQ6Cm1heWJlQm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcHVibGljIGJveEludCA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94SW50JyB9KQogICAgYnl0ZWNfMyAvLyAiYm94SW50IgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMjQKICAgIC8vIGNvbnN0IFtib3hJbnRWYWx1ZSwgYm94SW50RXhpc3RzXSA9IHRoaXMuYm94SW50Lm1heWJlKCkKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTI1CiAgICAvLyByZXR1cm4gW2JveEludFZhbHVlLCBib3hJbnRFeGlzdHNdCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmdldEJveE1hcChrZXk6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldEJveE1hcDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTM2LTEzNwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0Qm94TWFwKGtleTogdWludDY0KTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMzgKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLnZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHB1YmxpYyBib3hNYXAgPSBCb3hNYXA8dWludDY0LCBzdHJpbmc+KHsga2V5UHJlZml4OiAnYm94TWFwJyB9KQogICAgYnl0ZWNfMiAvLyAiYm94TWFwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEzOAogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwKGtleSkudmFsdWUKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmdldEJveE1hcFdpdGhEZWZhdWx0KGtleTogdWludDY0KSAtPiBieXRlczoKZ2V0Qm94TWFwV2l0aERlZmF1bHQ6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE0OC0xNDkKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldEJveE1hcFdpdGhEZWZhdWx0KGtleTogdWludDY0KTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLmdldCh7IGRlZmF1bHQ6ICdkZWZhdWx0JyB9KQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBwdWJsaWMgYm94TWFwID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2JveE1hcCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveE1hcCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLmdldCh7IGRlZmF1bHQ6ICdkZWZhdWx0JyB9KQogICAgYm94X2dldAogICAgcHVzaGJ5dGVzICJkZWZhdWx0IgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLnNldEJveE1hcChrZXk6IHVpbnQ2NCwgdmFsdWU6IGJ5dGVzKSAtPiB2b2lkOgpzZXRCb3hNYXA6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2MAogICAgLy8gcHVibGljIHNldEJveE1hcChrZXk6IHVpbnQ2NCwgdmFsdWU6IHN0cmluZyk6IHZvaWQgewogICAgcHJvdG8gMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gdGhpcy5ib3hNYXAoa2V5KS52YWx1ZSA9IHZhbHVlCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHB1YmxpYyBib3hNYXAgPSBCb3hNYXA8dWludDY0LCBzdHJpbmc+KHsga2V5UHJlZml4OiAnYm94TWFwJyB9KQogICAgYnl0ZWNfMiAvLyAiYm94TWFwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gdGhpcy5ib3hNYXAoa2V5KS52YWx1ZSA9IHZhbHVlCiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmRlbGV0ZUJveE1hcChrZXk6IHVpbnQ2NCkgLT4gdm9pZDoKZGVsZXRlQm94TWFwOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNzAKICAgIC8vIHB1YmxpYyBkZWxldGVCb3hNYXAoa2V5OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNzEKICAgIC8vIHRoaXMuYm94TWFwKGtleSkuZGVsZXRlKCkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NgogICAgLy8gcHVibGljIGJveE1hcCA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdib3hNYXAnIH0pCiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTcxCiAgICAvLyB0aGlzLmJveE1hcChrZXkpLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UubWF5YmVCb3hNYXAoa2V5OiB1aW50NjQpIC0+IGJ5dGVzLCB1aW50NjQ6Cm1heWJlQm94TWFwOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODEtMTgyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBtYXliZUJveE1hcChrZXk6IHVpbnQ2NCk6IFtzdHJpbmcsIGJvb2xlYW5dIHsKICAgIHByb3RvIDEgMgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IHRoaXMuYm94TWFwKGtleSkubWF5YmUoKQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBwdWJsaWMgYm94TWFwID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2JveE1hcCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveE1hcCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IHRoaXMuYm94TWFwKGtleSkubWF5YmUoKQogICAgYm94X2dldAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTg0CiAgICAvLyByZXR1cm4gW2V4aXN0cyA/IHZhbHVlIDogJycsIGV4aXN0c10KICAgIGJ6IG1heWJlQm94TWFwX3Rlcm5hcnlfZmFsc2VAMgogICAgZnJhbWVfZGlnIDEKCm1heWJlQm94TWFwX3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTg0CiAgICAvLyByZXR1cm4gW2V4aXN0cyA/IHZhbHVlIDogJycsIGV4aXN0c10KICAgIGZyYW1lX2RpZyAwCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgcmV0c3ViCgptYXliZUJveE1hcF90ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE4NAogICAgLy8gcmV0dXJuIFtleGlzdHMgPyB2YWx1ZSA6ICcnLCBleGlzdHNdCiAgICBwdXNoYnl0ZXMgIiIKICAgIGIgbWF5YmVCb3hNYXBfdGVybmFyeV9tZXJnZUAzCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5ib3hNYXBMZW5ndGgoa2V5OiB1aW50NjQpIC0+IHVpbnQ2NDoKYm94TWFwTGVuZ3RoOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxOTQtMTk1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBib3hNYXBMZW5ndGgoa2V5OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE5NgogICAgLy8gaWYgKCF0aGlzLmJveE1hcChrZXkpLmV4aXN0cykgewogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBwdWJsaWMgYm94TWFwID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2JveE1hcCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveE1hcCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE5NgogICAgLy8gaWYgKCF0aGlzLmJveE1hcChrZXkpLmV4aXN0cykgewogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBibnogYm94TWFwTGVuZ3RoX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxOTcKICAgIC8vIHJldHVybiBVaW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmJveE1hcExlbmd0aF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIwMAogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwKGtleSkubGVuZ3RoCiAgICBmcmFtZV9kaWcgMAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuYm94TWFwRXhpc3RzKGtleTogdWludDY0KSAtPiB1aW50NjQ6CmJveE1hcEV4aXN0czoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjEwLTIxMQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgYm94TWFwRXhpc3RzKGtleTogdWludDY0KTogYm9vbGVhbiB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjEyCiAgICAvLyByZXR1cm4gdGhpcy5ib3hNYXAoa2V5KS5leGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NgogICAgLy8gcHVibGljIGJveE1hcCA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdib3hNYXAnIH0pCiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjEyCiAgICAvLyByZXR1cm4gdGhpcy5ib3hNYXAoa2V5KS5leGlzdHMKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5nZXRCb3hNYXBTdHJ1Y3Qoa2V5OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRCb3hNYXBTdHJ1Y3Q6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIzNC0yMzUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldEJveE1hcFN0cnVjdChrZXk6IHVpbnQ2NCk6IFVzZXJTdHJ1Y3QgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIzNgogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdCA9IEJveE1hcDx1aW50NjQsIFVzZXJTdHJ1Y3Q+KHsga2V5UHJlZml4OiAndXNlcnMnIH0pCiAgICBieXRlYyA2IC8vICJ1c2VycyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMzYKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcFN0cnVjdChrZXkpLnZhbHVlCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5zZXRCb3hNYXBTdHJ1Y3Qoa2V5OiB1aW50NjQsIHZhbHVlOiBieXRlcykgLT4gdWludDY0OgpzZXRCb3hNYXBTdHJ1Y3Q6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0NgogICAgLy8gcHVibGljIHNldEJveE1hcFN0cnVjdChrZXk6IHVpbnQ2NCwgdmFsdWU6IFVzZXJTdHJ1Y3QpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDgKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdCA9IEJveE1hcDx1aW50NjQsIFVzZXJTdHJ1Y3Q+KHsga2V5UHJlZml4OiAndXNlcnMnIH0pCiAgICBieXRlYyA2IC8vICJ1c2VycyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwbiAyCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0OAogICAgLy8gdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSA9IHZhbHVlLmNvcHkoKQogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNTAKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDktMjU3CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSwKICAgIC8vICAgewogICAgLy8gICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAvLyAgICAgaWQ6IHZhbHVlLmlkLAogICAgLy8gICAgIGFzc2V0OiB2YWx1ZS5hc3NldCwKICAgIC8vICAgfSwKICAgIC8vICAgJ2JveE1hcFN0cnVjdCB2YWx1ZSBtaXNtYXRjaCcsCiAgICAvLyApCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGxlbgogICAgc3Vic3RyaW5nMwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNTIKICAgIC8vIG5hbWU6IHZhbHVlLm5hbWUsCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMQogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDktMjU3CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSwKICAgIC8vICAgewogICAgLy8gICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAvLyAgICAgaWQ6IHZhbHVlLmlkLAogICAgLy8gICAgIGFzc2V0OiB2YWx1ZS5hc3NldCwKICAgIC8vICAgfSwKICAgIC8vICAgJ2JveE1hcFN0cnVjdCB2YWx1ZSBtaXNtYXRjaCcsCiAgICAvLyApCiAgICA9PQogICAgYnogc2V0Qm94TWFwU3RydWN0X2Jvb2xfZmFsc2VANAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNTAKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICBmcmFtZV9kaWcgMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQ5LTI1NwogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICAvLyAgIHsKICAgIC8vICAgICBuYW1lOiB2YWx1ZS5uYW1lLAogICAgLy8gICAgIGlkOiB2YWx1ZS5pZCwKICAgIC8vICAgICBhc3NldDogdmFsdWUuYXNzZXQsCiAgICAvLyAgIH0sCiAgICAvLyAgICdib3hNYXBTdHJ1Y3QgdmFsdWUgbWlzbWF0Y2gnLAogICAgLy8gKQogICAgZXh0cmFjdCAyIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1MwogICAgLy8gaWQ6IHZhbHVlLmlkLAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQ5LTI1NwogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICAvLyAgIHsKICAgIC8vICAgICBuYW1lOiB2YWx1ZS5uYW1lLAogICAgLy8gICAgIGlkOiB2YWx1ZS5pZCwKICAgIC8vICAgICBhc3NldDogdmFsdWUuYXNzZXQsCiAgICAvLyAgIH0sCiAgICAvLyAgICdib3hNYXBTdHJ1Y3QgdmFsdWUgbWlzbWF0Y2gnLAogICAgLy8gKQogICAgPT0KICAgIGJ6IHNldEJveE1hcFN0cnVjdF9ib29sX2ZhbHNlQDQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjUwCiAgICAvLyB0aGlzLmJveE1hcFN0cnVjdChrZXkpLnZhbHVlLAogICAgZnJhbWVfZGlnIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0OS0yNTcKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICB0aGlzLmJveE1hcFN0cnVjdChrZXkpLnZhbHVlLAogICAgLy8gICB7CiAgICAvLyAgICAgbmFtZTogdmFsdWUubmFtZSwKICAgIC8vICAgICBpZDogdmFsdWUuaWQsCiAgICAvLyAgICAgYXNzZXQ6IHZhbHVlLmFzc2V0LAogICAgLy8gICB9LAogICAgLy8gICAnYm94TWFwU3RydWN0IHZhbHVlIG1pc21hdGNoJywKICAgIC8vICkKICAgIGV4dHJhY3QgMTAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjU0CiAgICAvLyBhc3NldDogdmFsdWUuYXNzZXQsCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMTAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQ5LTI1NwogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICAvLyAgIHsKICAgIC8vICAgICBuYW1lOiB2YWx1ZS5uYW1lLAogICAgLy8gICAgIGlkOiB2YWx1ZS5pZCwKICAgIC8vICAgICBhc3NldDogdmFsdWUuYXNzZXQsCiAgICAvLyAgIH0sCiAgICAvLyAgICdib3hNYXBTdHJ1Y3QgdmFsdWUgbWlzbWF0Y2gnLAogICAgLy8gKQogICAgPT0KICAgIGJ6IHNldEJveE1hcFN0cnVjdF9ib29sX2ZhbHNlQDQKICAgIGludGNfMCAvLyAxCgpzZXRCb3hNYXBTdHJ1Y3RfYm9vbF9tZXJnZUA1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDktMjU3CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSwKICAgIC8vICAgewogICAgLy8gICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAvLyAgICAgaWQ6IHZhbHVlLmlkLAogICAgLy8gICAgIGFzc2V0OiB2YWx1ZS5hc3NldCwKICAgIC8vICAgfSwKICAgIC8vICAgJ2JveE1hcFN0cnVjdCB2YWx1ZSBtaXNtYXRjaCcsCiAgICAvLyApCiAgICBhc3NlcnQgLy8gYm94TWFwU3RydWN0IHZhbHVlIG1pc21hdGNoCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1OAogICAgLy8gcmV0dXJuIHRydWUKICAgIGludGNfMCAvLyAxCiAgICBzd2FwCiAgICByZXRzdWIKCnNldEJveE1hcFN0cnVjdF9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzEgLy8gMAogICAgYiBzZXRCb3hNYXBTdHJ1Y3RfYm9vbF9tZXJnZUA1CgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5ib3hNYXBTdHJ1Y3RMZW5ndGgoa2V5OiB1aW50NjQpIC0+IHVpbnQ2NDoKYm94TWFwU3RydWN0TGVuZ3RoOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIHB1YmxpYyBib3hNYXBTdHJ1Y3RMZW5ndGgoa2V5OiB1aW50NjQpOiBib29sZWFuIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdCA9IEJveE1hcDx1aW50NjQsIFVzZXJTdHJ1Y3Q+KHsga2V5UHJlZml4OiAndXNlcnMnIH0pCiAgICBieXRlYyA2IC8vICJ1c2VycyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjY5LTI3MwogICAgLy8gY29uc3QgdmFsdWUgPSBuZXcgVXNlclN0cnVjdCh7CiAgICAvLyAgIG5hbWU6IG5ldyBhcmM0LlN0cigndGVzdE5hbWUnKSwKICAgIC8vICAgaWQ6IG5ldyBhcmM0LlVpbnRONjQoNzApLAogICAgLy8gICBhc3NldDogbmV3IGFyYzQuVWludE42NCgxMjM0KSwKICAgIC8vIH0pCiAgICBwdXNoYnl0ZXMgMHgwMDEyMDAwMDAwMDAwMDAwMDA0NjAwMDAwMDAwMDAwMDA0ZDIwMDA4NzQ2NTczNzQ0ZTYxNmQ2NQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mjc4CiAgICAvLyBhc3NlcnQodGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZS5ieXRlcy5sZW5ndGggPT09IHZhbHVlLmJ5dGVzLmxlbmd0aCwgJ2JveE1hcFN0cnVjdCBieXRlcyBsZW5ndGggbWlzbWF0Y2gnKQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgbGVuCiAgICBwdXNoaW50IDI4IC8vIDI4CiAgICA9PQogICAgYXNzZXJ0IC8vIGJveE1hcFN0cnVjdCBieXRlcyBsZW5ndGggbWlzbWF0Y2gKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mjc5CiAgICAvLyBhc3NlcnQodGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS5sZW5ndGggPT09IHZhbHVlLmJ5dGVzLmxlbmd0aCwgJ2JveE1hcFN0cnVjdCBsZW5ndGggbWlzbWF0Y2gnKQogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHB1c2hpbnQgMjggLy8gMjgKICAgID09CiAgICBhc3NlcnQgLy8gYm94TWFwU3RydWN0IGxlbmd0aCBtaXNtYXRjaAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyODEKICAgIC8vIHJldHVybiB0cnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5ib3hNYXBTdHJ1Y3RFeGlzdHMoa2V5OiB1aW50NjQpIC0+IHVpbnQ2NDoKYm94TWFwU3RydWN0RXhpc3RzOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyOTEtMjkyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBib3hNYXBTdHJ1Y3RFeGlzdHMoa2V5OiB1aW50NjQpOiBib29sZWFuIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyOTMKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcFN0cnVjdChrZXkpLmV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyBwdWJsaWMgYm94TWFwU3RydWN0ID0gQm94TWFwPHVpbnQ2NCwgVXNlclN0cnVjdD4oeyBrZXlQcmVmaXg6ICd1c2VycycgfSkKICAgIGJ5dGVjIDYgLy8gInVzZXJzIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI5MwogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwU3RydWN0KGtleSkuZXhpc3RzCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZ2V0Qm94UmVmKCkgLT4gYnl0ZXM6CmdldEJveFJlZjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIHB1YmxpYyBib3hSZWYgPSBCb3hSZWYoeyBrZXk6ICdib3hSZWYnIH0pCiAgICBieXRlYyA4IC8vICJib3hSZWYiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gdGhpcy5ib3hSZWYuY3JlYXRlKHsgc2l6ZTogMzIgfSkKICAgIGludGNfMiAvLyAzMgogICAgYm94X2NyZWF0ZQogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMwNQogICAgLy8gY29uc3Qgc2VuZGVyQnl0ZXMgPSBUeG4uc2VuZGVyLmJ5dGVzCiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBwdWJsaWMgYm94UmVmID0gQm94UmVmKHsga2V5OiAnYm94UmVmJyB9KQogICAgYnl0ZWMgOCAvLyAiYm94UmVmIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMDYKICAgIC8vIHRoaXMuYm94UmVmLnB1dChzZW5kZXJCeXRlcykKICAgIGRpZyAxCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBwdWJsaWMgYm94UmVmID0gQm94UmVmKHsga2V5OiAnYm94UmVmJyB9KQogICAgYnl0ZWMgOCAvLyAiYm94UmVmIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMDcKICAgIC8vIGNvbnN0IHZhbHVlID0gdGhpcy5ib3hSZWYuZ2V0KHsgZGVmYXVsdDogc2VuZGVyQnl0ZXMgfSkKICAgIGJveF9nZXQKICAgIGRpZyAyCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzA4CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHNlbmRlckJ5dGVzLCAnYm94UmVmIHZhbHVlIG1pc21hdGNoJykKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGJveFJlZiB2YWx1ZSBtaXNtYXRjaAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMDkKICAgIC8vIHJldHVybiBuZXcgYXJjNC5BZGRyZXNzKHZhbHVlKQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5zZXRCb3hSZWYoa2V5OiBieXRlcykgLT4gdm9pZDoKc2V0Qm94UmVmOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTgKICAgIC8vIHB1YmxpYyBzZXRCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMjAKICAgIC8vIGJveFJlZi5jcmVhdGUoeyBzaXplOiAzMiB9KQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMjIKICAgIC8vIGJveFJlZi5wdXQoc2VuZGVyQnl0ZXMpCiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzIxCiAgICAvLyBjb25zdCBzZW5kZXJCeXRlcyA9IFR4bi5zZW5kZXIuYnl0ZXMKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzIyCiAgICAvLyBib3hSZWYucHV0KHNlbmRlckJ5dGVzKQogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5kZWxldGVCb3hSZWYoa2V5OiBieXRlcykgLT4gdm9pZDoKZGVsZXRlQm94UmVmOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzEKICAgIC8vIHB1YmxpYyBkZWxldGVCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzMKICAgIC8vIGJveFJlZi5kZWxldGUoKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzM0CiAgICAvLyBhc3NlcnRNYXRjaChib3hSZWYubWF5YmUoKSwgW0J5dGVzKCcnKSwgZmFsc2VdKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIHB1c2hieXRlcyAiIgogICAgPT0KICAgIGJ6IGRlbGV0ZUJveFJlZl9ib29sX2ZhbHNlQDQKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgYnVyeSAxCiAgICBibnogZGVsZXRlQm94UmVmX2Jvb2xfZmFsc2VANAogICAgaW50Y18wIC8vIDEKCmRlbGV0ZUJveFJlZl9ib29sX21lcmdlQDU6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMzNAogICAgLy8gYXNzZXJ0TWF0Y2goYm94UmVmLm1heWJlKCksIFtCeXRlcygnJyksIGZhbHNlXSkKICAgIGFzc2VydCAvLyBhc3NlcnQgdGFyZ2V0IGlzIG1hdGNoIGZvciBjb25kaXRpb25zCiAgICByZXRzdWIKCmRlbGV0ZUJveFJlZl9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzEgLy8gMAogICAgYiBkZWxldGVCb3hSZWZfYm9vbF9tZXJnZUA1CgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5tYXliZUJveFJlZihrZXk6IGJ5dGVzKSAtPiBieXRlcywgdWludDY0OgptYXliZUJveFJlZjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzQzLTM0NAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgbWF5YmVCb3hSZWYoa2V5OiBzdHJpbmcpOiBbYnl0ZXMsIGJvb2xlYW5dIHsKICAgIHByb3RvIDEgMgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNDYKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IGJveFJlZi5tYXliZSgpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzQ3CiAgICAvLyByZXR1cm4gW3ZhbHVlLCBleGlzdHNdCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmxlbmd0aEJveFJlZihrZXk6IGJ5dGVzKSAtPiB1aW50NjQ6Cmxlbmd0aEJveFJlZjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzU3CiAgICAvLyBwdWJsaWMgbGVuZ3RoQm94UmVmKGtleTogc3RyaW5nKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNTkKICAgIC8vIGFzc2VydChib3hSZWYuY3JlYXRlKHsgc2l6ZTogMzIgfSksICdib3hSZWYgY3JlYXRpb24gZmFpbGVkJykKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQgLy8gYm94UmVmIGNyZWF0aW9uIGZhaWxlZAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNjAKICAgIC8vIHJldHVybiBib3hSZWYubGVuZ3RoCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmV4dHJhY3RCb3hSZWYoa2V5OiBieXRlcykgLT4gdm9pZDoKZXh0cmFjdEJveFJlZjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBwdWJsaWMgZXh0cmFjdEJveFJlZihrZXk6IHN0cmluZyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM3MAogICAgLy8gY29uc3Qgc2VuZGVyQnl0ZXMgPSBUeG4uc2VuZGVyLmJ5dGVzCiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM3MQogICAgLy8gY29uc3QgYXBwQWRkcmVzcyA9IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLmJ5dGVzCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNzMKICAgIC8vIGNvbnN0IHRvdGFsU2l6ZSA9IFVpbnQ2NChhcHBBZGRyZXNzLmxlbmd0aCArIHNlbmRlckJ5dGVzLmxlbmd0aCkKICAgIGR1cAogICAgbGVuCiAgICBkaWcgMgogICAgbGVuCiAgICArCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM3NgogICAgLy8gYXNzZXJ0KGJveFJlZi5jcmVhdGUoeyBzaXplOiB0b3RhbFNpemUgfSksICdib3hSZWYgY3JlYXRpb24gZmFpbGVkJykKICAgIGZyYW1lX2RpZyAtMQogICAgc3dhcAogICAgYm94X2NyZWF0ZQogICAgYXNzZXJ0IC8vIGJveFJlZiBjcmVhdGlvbiBmYWlsZWQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mzc4CiAgICAvLyBib3hSZWYucmVwbGFjZSgwLCBzZW5kZXJCeXRlcykKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIGRpZyAzCiAgICBib3hfcmVwbGFjZQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNzkKICAgIC8vIGJveFJlZi5zcGxpY2UoMCwgMCwgYXBwQWRkcmVzcykKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIGR1cAogICAgZGlnIDMKICAgIGJveF9zcGxpY2UKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzgxCiAgICAvLyBjb25zdCBwYXJ0MSA9IGJveFJlZi5leHRyYWN0KDAsIDMyKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgaW50Y18yIC8vIDMyCiAgICBib3hfZXh0cmFjdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozODIKICAgIC8vIGNvbnN0IHBhcnQyID0gYm94UmVmLmV4dHJhY3QoMzIsIDMyKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMzIKICAgIGR1cAogICAgYm94X2V4dHJhY3QKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mzg0CiAgICAvLyBhc3NlcnQocGFydDEuZXF1YWxzKGFwcEFkZHJlc3MpLCAnRmlyc3QgcGFydCBzaG91bGQgbWF0Y2ggYXBwIGFkZHJlc3MnKQogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIEZpcnN0IHBhcnQgc2hvdWxkIG1hdGNoIGFwcCBhZGRyZXNzCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM4NQogICAgLy8gYXNzZXJ0KHBhcnQyLmVxdWFscyhzZW5kZXJCeXRlcyksICdTZWNvbmQgcGFydCBzaG91bGQgbWF0Y2ggc2VuZGVyIGJ5dGVzJykKICAgID09CiAgICBhc3NlcnQgLy8gU2Vjb25kIHBhcnQgc2hvdWxkIG1hdGNoIHNlbmRlciBieXRlcwogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5hcmM0Qm94KGtleTogYnl0ZXMpIC0+IGJ5dGVzOgphcmM0Qm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOTYKICAgIC8vIHB1YmxpYyBhcmM0Qm94KGtleTogc3RyaW5nKTogU3RhdGljSW50cyB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Mzk5LTQwNAogICAgLy8gc3RhdGljSW50Qm94LnZhbHVlID0gbmV3IGFyYzQuU3RhdGljQXJyYXk8YXJjNC5VaW50TjgsIDQ+KAogICAgLy8gICBuZXcgYXJjNC5VaW50TjgoMCksCiAgICAvLyAgIG5ldyBhcmM0LlVpbnROOCgxKSwKICAgIC8vICAgbmV3IGFyYzQuVWludE44KDIpLAogICAgLy8gICBuZXcgYXJjNC5VaW50TjgoMyksCiAgICAvLyApCiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweDAwMDEwMjAzCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQwNgogICAgLy8gYXNzZXJ0KHN0YXRpY0ludEJveC52YWx1ZVswXS5uYXRpdmUgPT09IDApCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Ynl0ZQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQwNwogICAgLy8gYXNzZXJ0KHN0YXRpY0ludEJveC52YWx1ZVsxXS5uYXRpdmUgPT09IDEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpbnRjXzAgLy8gMQogICAgZ2V0Ynl0ZQogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDA4CiAgICAvLyBhc3NlcnQoc3RhdGljSW50Qm94LnZhbHVlWzJdLm5hdGl2ZSA9PT0gMikKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBnZXRieXRlCiAgICBwdXNoaW50IDIgLy8gMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MDkKICAgIC8vIGFzc2VydChzdGF0aWNJbnRCb3gudmFsdWVbM10ubmF0aXZlID09PSAzKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcHVzaGludCAzIC8vIDMKICAgIGdldGJ5dGUKICAgIHB1c2hpbnQgMyAvLyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQxMQogICAgLy8gcmV0dXJuIHN0YXRpY0ludEJveC52YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDMyIDQyCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgMHgwMCAiYm94TWFwIiAiYm94SW50IiAiYm94U3RyaW5nIiAiYm94RHluYW1pY0J5dGVzIiAidXNlcnMiICJib3hSZWYiICI0MiIgMHgwMDAzCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDMxCiAgICBwdXNoYnl0ZXNzIDB4Yjc0OTEzNDQgMHg0OWNmNDEwNSAweDZhYjNlOWJjIDB4MjZjYTY0OGEgMHgyOGNjNzEzOSAweDY0NGEzOTk0IDB4YjFmNWE5YjYgMHgwM2U4Yzc3ZSAweGQ4MjlkMmEzIDB4OGMyMmJmZDUgMHhmYTE1NjJmNyAweGM0OTdiYzZmIDB4ZjRmOWNiYWQgMHg5ZTExZmQ3YSAweDVlNmNlYWMwIDB4ZjUzNDE4YzQgMHgzOWU5YjIyNiAweDkxMDFhN2RlIDB4YTQ1NTJlYjUgMHgzOGFjZjUzZSAweDg2MDBlMGViIDB4NTNjMjg4MjAgMHhmMTgzMjA3YSAweGQ1ZGQ5MjJjIDB4NTk1Yjg3YmIgMHg1NDdmMGE3NCAvLyBtZXRob2QgImdldEJveCgpdWludDY0IiwgbWV0aG9kICJ2YWx1ZUJveCgpdWludDY0IiwgbWV0aG9kICJtYXliZUJveCgpKHVpbnQ2NCxib29sKSIsIG1ldGhvZCAiZ2V0Qm94TWFwKHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImdldEJveE1hcFdpdGhEZWZhdWx0KHVpbnQ2NClzdHJpbmciLCBtZXRob2QgIm1heWJlQm94TWFwKHVpbnQ2NCkoc3RyaW5nLGJvb2wpIiwgbWV0aG9kICJrZXlQcmVmaXhCb3hNYXAoKWJ5dGVbXSIsIG1ldGhvZCAiZ2V0Qm94UmVmKClhZGRyZXNzIiwgbWV0aG9kICJib3hNYXBFeGlzdHModWludDY0KWJvb2wiLCBtZXRob2QgIm1heWJlQm94UmVmKHN0cmluZykoYnl0ZVtdLGJvb2wpIiwgbWV0aG9kICJzZXRCb3godWludDY0KXZvaWQiLCBtZXRob2QgInNldEJveFN0cmluZyhzdHJpbmcpdm9pZCIsIG1ldGhvZCAic2V0Qm94RHluYW1pY0J5dGVzKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJzZXRCb3hNYXAodWludDY0LHN0cmluZyl2b2lkIiwgbWV0aG9kICJzZXRCb3hSZWYoc3RyaW5nKXZvaWQiLCBtZXRob2QgImJveE1hcExlbmd0aCh1aW50NjQpdWludDY0IiwgbWV0aG9kICJsZW5ndGhCb3hSZWYoc3RyaW5nKXVpbnQ2NCIsIG1ldGhvZCAiZGVsZXRlQm94KCl2b2lkIiwgbWV0aG9kICJkZWxldGVCb3hNYXAodWludDY0KXZvaWQiLCBtZXRob2QgImRlbGV0ZUJveFJlZihzdHJpbmcpdm9pZCIsIG1ldGhvZCAiZXh0cmFjdEJveFJlZihzdHJpbmcpdm9pZCIsIG1ldGhvZCAiZ2V0Qm94TWFwU3RydWN0KHVpbnQ2NCkoc3RyaW5nLHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJib3hNYXBTdHJ1Y3RFeGlzdHModWludDY0KWJvb2wiLCBtZXRob2QgInNldEJveE1hcFN0cnVjdCh1aW50NjQsKHN0cmluZyx1aW50NjQsdWludDY0KSlib29sIiwgbWV0aG9kICJib3hNYXBTdHJ1Y3RMZW5ndGgodWludDY0KWJvb2wiLCBtZXRob2QgImFyYzRCb3goc3RyaW5nKXVpbnQ4WzRdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9nZXRCb3hfcm91dGVAMyBtYWluX3ZhbHVlQm94X3JvdXRlQDQgbWFpbl9tYXliZUJveF9yb3V0ZUA1IG1haW5fZ2V0Qm94TWFwX3JvdXRlQDYgbWFpbl9nZXRCb3hNYXBXaXRoRGVmYXVsdF9yb3V0ZUA3IG1haW5fbWF5YmVCb3hNYXBfcm91dGVAOCBtYWluX2tleVByZWZpeEJveE1hcF9yb3V0ZUA5IG1haW5fZ2V0Qm94UmVmX3JvdXRlQDEwIG1haW5fYm94TWFwRXhpc3RzX3JvdXRlQDExIG1haW5fbWF5YmVCb3hSZWZfcm91dGVAMTIgbWFpbl9zZXRCb3hfcm91dGVAMTMgbWFpbl9zZXRCb3hTdHJpbmdfcm91dGVAMTQgbWFpbl9zZXRCb3hEeW5hbWljQnl0ZXNfcm91dGVAMTUgbWFpbl9zZXRCb3hNYXBfcm91dGVAMTYgbWFpbl9zZXRCb3hSZWZfcm91dGVAMTcgbWFpbl9ib3hNYXBMZW5ndGhfcm91dGVAMTggbWFpbl9sZW5ndGhCb3hSZWZfcm91dGVAMTkgbWFpbl9kZWxldGVCb3hfcm91dGVAMjAgbWFpbl9kZWxldGVCb3hNYXBfcm91dGVAMjEgbWFpbl9kZWxldGVCb3hSZWZfcm91dGVAMjIgbWFpbl9leHRyYWN0Qm94UmVmX3JvdXRlQDIzIG1haW5fZ2V0Qm94TWFwU3RydWN0X3JvdXRlQDI0IG1haW5fYm94TWFwU3RydWN0RXhpc3RzX3JvdXRlQDI1IG1haW5fc2V0Qm94TWFwU3RydWN0X3JvdXRlQDI2IG1haW5fYm94TWFwU3RydWN0TGVuZ3RoX3JvdXRlQDI3IG1haW5fYXJjNEJveF9yb3V0ZUAyOAoKbWFpbl9hZnRlcl9pZl9lbHNlQDM1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fYXJjNEJveF9yb3V0ZUAyODoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzUyCiAgICAvLyBwdWJsaWMgYXJjNEJveChrZXk6IHN0cmluZyk6IFN0YXRpY0ludHMgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzUyCiAgICAvLyBwdWJsaWMgYXJjNEJveChrZXk6IHN0cmluZyk6IFN0YXRpY0ludHMgewogICAgY2FsbHN1YiBhcmM0Qm94CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JveE1hcFN0cnVjdExlbmd0aF9yb3V0ZUAyNzoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzMwCiAgICAvLyBwdWJsaWMgYm94TWFwU3RydWN0TGVuZ3RoKGtleTogdWludDY0KTogYm9vbGVhbiB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMzMAogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdExlbmd0aChrZXk6IHVpbnQ2NCk6IGJvb2xlYW4gewogICAgY2FsbHN1YiBib3hNYXBTdHJ1Y3RMZW5ndGgKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3NldEJveE1hcFN0cnVjdF9yb3V0ZUAyNjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzEwCiAgICAvLyBwdWJsaWMgc2V0Qm94TWFwU3RydWN0KGtleTogdWludDY0LCB2YWx1ZTogVXNlclN0cnVjdCk6IGJvb2xlYW4gewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTAKICAgIC8vIHB1YmxpYyBzZXRCb3hNYXBTdHJ1Y3Qoa2V5OiB1aW50NjQsIHZhbHVlOiBVc2VyU3RydWN0KTogYm9vbGVhbiB7CiAgICBjYWxsc3ViIHNldEJveE1hcFN0cnVjdAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94TWFwU3RydWN0RXhpc3RzX3JvdXRlQDI1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMDAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMDAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBib3hNYXBTdHJ1Y3RFeGlzdHMKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveE1hcFN0cnVjdF9yb3V0ZUAyNDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0Qm94TWFwU3RydWN0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2V4dHJhY3RCb3hSZWZfcm91dGVAMjM6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI2NAogICAgLy8gcHVibGljIGV4dHJhY3RCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI2NAogICAgLy8gcHVibGljIGV4dHJhY3RCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIGNhbGxzdWIgZXh0cmFjdEJveFJlZgogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZWxldGVCb3hSZWZfcm91dGVAMjI6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gcHVibGljIGRlbGV0ZUJveFJlZihrZXk6IHN0cmluZyk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjUyCiAgICAvLyBwdWJsaWMgZGVsZXRlQm94UmVmKGtleTogc3RyaW5nKTogdm9pZCB7CiAgICBjYWxsc3ViIGRlbGV0ZUJveFJlZgogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZWxldGVCb3hNYXBfcm91dGVAMjE6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0NAogICAgLy8gcHVibGljIGRlbGV0ZUJveE1hcChrZXk6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDQKICAgIC8vIHB1YmxpYyBkZWxldGVCb3hNYXAoa2V5OiB1aW50NjQpOiB2b2lkIHsKICAgIGNhbGxzdWIgZGVsZXRlQm94TWFwCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2RlbGV0ZUJveF9yb3V0ZUAyMDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjMwCiAgICAvLyBwdWJsaWMgZGVsZXRlQm94KCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZUJveAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9sZW5ndGhCb3hSZWZfcm91dGVAMTk6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIxOQogICAgLy8gcHVibGljIGxlbmd0aEJveFJlZihrZXk6IHN0cmluZyk6IHVpbnQ2NCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIHB1YmxpYyBsZW5ndGhCb3hSZWYoa2V5OiBzdHJpbmcpOiB1aW50NjQgewogICAgY2FsbHN1YiBsZW5ndGhCb3hSZWYKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94TWFwTGVuZ3RoX3JvdXRlQDE4OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMDUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMDUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBib3hNYXBMZW5ndGgKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0Qm94UmVmX3JvdXRlQDE3OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIHB1YmxpYyBzZXRCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE5MQogICAgLy8gcHVibGljIHNldEJveFJlZihrZXk6IHN0cmluZyk6IHZvaWQgewogICAgY2FsbHN1YiBzZXRCb3hSZWYKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0Qm94TWFwX3JvdXRlQDE2OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHB1YmxpYyBzZXRCb3hNYXAoa2V5OiB1aW50NjQsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE4MwogICAgLy8gcHVibGljIHNldEJveE1hcChrZXk6IHVpbnQ2NCwgdmFsdWU6IHN0cmluZyk6IHZvaWQgewogICAgY2FsbHN1YiBzZXRCb3hNYXAKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0Qm94RHluYW1pY0J5dGVzX3JvdXRlQDE1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNzQKICAgIC8vIHB1YmxpYyBzZXRCb3hEeW5hbWljQnl0ZXModmFsdWU6IGFyYzQuRHluYW1pY0J5dGVzKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3NAogICAgLy8gcHVibGljIHNldEJveER5bmFtaWNCeXRlcyh2YWx1ZTogYXJjNC5EeW5hbWljQnl0ZXMpOiB2b2lkIHsKICAgIGNhbGxzdWIgc2V0Qm94RHluYW1pY0J5dGVzCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3NldEJveFN0cmluZ19yb3V0ZUAxNDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBwdWJsaWMgc2V0Qm94U3RyaW5nKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2NgogICAgLy8gcHVibGljIHNldEJveFN0cmluZyh2YWx1ZTogc3RyaW5nKTogdm9pZCB7CiAgICBjYWxsc3ViIHNldEJveFN0cmluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRCb3hfcm91dGVAMTM6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE1OAogICAgLy8gcHVibGljIHNldEJveCh2YWx1ZUludDogdWludDY0KTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJveFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE1OAogICAgLy8gcHVibGljIHNldEJveCh2YWx1ZUludDogdWludDY0KTogdm9pZCB7CiAgICBjYWxsc3ViIHNldEJveAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tYXliZUJveFJlZl9yb3V0ZUAxMjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTQ1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE0NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIG1heWJlQm94UmVmCiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBieXRlYyA5IC8vIDB4MDAwMwogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94TWFwRXhpc3RzX3JvdXRlQDExOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMzYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMzYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBib3hNYXBFeGlzdHMKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveFJlZl9yb3V0ZUAxMDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTIyCiAgICAvLyBwdWJsaWMgZ2V0Qm94UmVmKCk6IGFyYzQuQWRkcmVzcyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qm94UmVmCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2tleVByZWZpeEJveE1hcF9yb3V0ZUA5OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDY2MjZmNzg0ZDYxNzAKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tYXliZUJveE1hcF9yb3V0ZUA4OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBtYXliZUJveE1hcAogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgYnl0ZWMgOSAvLyAweDAwMDMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveE1hcFdpdGhEZWZhdWx0X3JvdXRlQDc6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjkzCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXRCb3hNYXBXaXRoRGVmYXVsdAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0Qm94TWFwX3JvdXRlQDY6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXRCb3hNYXAKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21heWJlQm94X3JvdXRlQDU6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjcyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZUJveAogICAgc3dhcAogICAgaXRvYgogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92YWx1ZUJveF9yb3V0ZUA0OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdmFsdWVCb3gKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0Qm94X3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRCb3gKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDMxOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94U3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5nZXRCb3goKSAtPiB1aW50NjQ6CmdldEJveDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIHB1YmxpYyBib3hJbnQgPSBCb3g8dWludDY0Pih7IGtleTogJ2JveEludCcgfSkKICAgIGJ5dGVjXzMgLy8gImJveEludCIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIHJldHVybiB0aGlzLmJveEludC52YWx1ZQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UudmFsdWVCb3goKSAtPiB1aW50NjQ6CnZhbHVlQm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcHVibGljIGJveEludCA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94SW50JyB9KQogICAgYnl0ZWNfMyAvLyAiYm94SW50IgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo2NQogICAgLy8gcmV0dXJuIHRoaXMuYm94SW50LnZhbHVlCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5tYXliZUJveCgpIC0+IHVpbnQ2NCwgdWludDY0OgptYXliZUJveDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIHB1YmxpYyBib3hJbnQgPSBCb3g8dWludDY0Pih7IGtleTogJ2JveEludCcgfSkKICAgIGJ5dGVjXzMgLy8gImJveEludCIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NzQKICAgIC8vIGNvbnN0IFtib3hJbnRWYWx1ZSwgYm94SW50RXhpc3RzXSA9IHRoaXMuYm94SW50Lm1heWJlKCkKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NzUKICAgIC8vIHJldHVybiBbYm94SW50VmFsdWUsIGJveEludEV4aXN0c10KICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZ2V0Qm94TWFwKGtleTogdWludDY0KSAtPiBieXRlczoKZ2V0Qm94TWFwOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4My04NAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0Qm94TWFwKGtleTogdWludDY0KTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4NQogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwKGtleSkudmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NgogICAgLy8gcHVibGljIGJveE1hcCA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdib3hNYXAnIH0pCiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLnZhbHVlCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5nZXRCb3hNYXBXaXRoRGVmYXVsdChrZXk6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldEJveE1hcFdpdGhEZWZhdWx0OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo5My05NAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0Qm94TWFwV2l0aERlZmF1bHQoa2V5OiB1aW50NjQpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjk1CiAgICAvLyByZXR1cm4gdGhpcy5ib3hNYXAoa2V5KS5nZXQoeyBkZWZhdWx0OiAnZGVmYXVsdCcgfSkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NgogICAgLy8gcHVibGljIGJveE1hcCA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdib3hNYXAnIH0pCiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTUKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLmdldCh7IGRlZmF1bHQ6ICdkZWZhdWx0JyB9KQogICAgYm94X2dldAogICAgcHVzaGJ5dGVzICJkZWZhdWx0IgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLm1heWJlQm94TWFwKGtleTogdWludDY0KSAtPiBieXRlcywgdWludDY0OgptYXliZUJveE1hcDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTAzLTEwNAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgbWF5YmVCb3hNYXAoa2V5OiB1aW50NjQpOiBbc3RyaW5nLCBib29sZWFuXSB7CiAgICBwcm90byAxIDIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTA1CiAgICAvLyBjb25zdCBbdmFsdWUsIGV4aXN0c10gPSB0aGlzLmJveE1hcChrZXkpLm1heWJlKCkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NgogICAgLy8gcHVibGljIGJveE1hcCA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdib3hNYXAnIH0pCiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTA1CiAgICAvLyBjb25zdCBbdmFsdWUsIGV4aXN0c10gPSB0aGlzLmJveE1hcChrZXkpLm1heWJlKCkKICAgIGJveF9nZXQKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEwNgogICAgLy8gcmV0dXJuIFtleGlzdHMgPyB2YWx1ZSA6ICcnLCBleGlzdHNdCiAgICBieiBtYXliZUJveE1hcF90ZXJuYXJ5X2ZhbHNlQDIKICAgIGZyYW1lX2RpZyAxCgptYXliZUJveE1hcF90ZXJuYXJ5X21lcmdlQDM6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEwNgogICAgLy8gcmV0dXJuIFtleGlzdHMgPyB2YWx1ZSA6ICcnLCBleGlzdHNdCiAgICBmcmFtZV9kaWcgMAogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDMKICAgIHJldHN1YgoKbWF5YmVCb3hNYXBfdGVybmFyeV9mYWxzZUAyOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIHJldHVybiBbZXhpc3RzID8gdmFsdWUgOiAnJywgZXhpc3RzXQogICAgcHVzaGJ5dGVzICIiCiAgICBiIG1heWJlQm94TWFwX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZ2V0Qm94UmVmKCkgLT4gYnl0ZXM6CmdldEJveFJlZjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIHB1YmxpYyBib3hSZWYgPSBCb3hSZWYoeyBrZXk6ICdib3hSZWYnIH0pCiAgICBieXRlYyA3IC8vICJib3hSZWYiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEyMwogICAgLy8gdGhpcy5ib3hSZWYuY3JlYXRlKHsgc2l6ZTogMzIgfSkKICAgIGludGNfMiAvLyAzMgogICAgYm94X2NyZWF0ZQogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEyNAogICAgLy8gY29uc3Qgc2VuZGVyQnl0ZXMgPSBUeG4uc2VuZGVyLmJ5dGVzCiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBwdWJsaWMgYm94UmVmID0gQm94UmVmKHsga2V5OiAnYm94UmVmJyB9KQogICAgYnl0ZWMgNyAvLyAiYm94UmVmIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMjUKICAgIC8vIHRoaXMuYm94UmVmLnB1dChzZW5kZXJCeXRlcykKICAgIGRpZyAxCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBwdWJsaWMgYm94UmVmID0gQm94UmVmKHsga2V5OiAnYm94UmVmJyB9KQogICAgYnl0ZWMgNyAvLyAiYm94UmVmIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMjYKICAgIC8vIGNvbnN0IHZhbHVlID0gdGhpcy5ib3hSZWYuZ2V0KHsgZGVmYXVsdDogc2VuZGVyQnl0ZXMgfSkKICAgIGJveF9nZXQKICAgIGRpZyAyCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTI3CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHNlbmRlckJ5dGVzLCAnYm94UmVmIHZhbHVlIG1pc21hdGNoJykKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGJveFJlZiB2YWx1ZSBtaXNtYXRjaAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIHJldHVybiBuZXcgYXJjNC5BZGRyZXNzKHZhbHVlKQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5ib3hNYXBFeGlzdHMoa2V5OiB1aW50NjQpIC0+IHVpbnQ2NDoKYm94TWFwRXhpc3RzOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMzYtMTM3CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBib3hNYXBFeGlzdHMoa2V5OiB1aW50NjQpOiBib29sZWFuIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMzgKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLmV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBwdWJsaWMgYm94TWFwID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2JveE1hcCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveE1hcCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMzgKICAgIC8vIHJldHVybiB0aGlzLmJveE1hcChrZXkpLmV4aXN0cwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLm1heWJlQm94UmVmKGtleTogYnl0ZXMpIC0+IGJ5dGVzLCB1aW50NjQ6Cm1heWJlQm94UmVmOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNDUtMTQ2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBtYXliZUJveFJlZihrZXk6IHN0cmluZyk6IFtieXRlcywgYm9vbGVhbl0gewogICAgcHJvdG8gMSAyCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE0OAogICAgLy8gY29uc3QgW3ZhbHVlLCBleGlzdHNdID0gYm94UmVmLm1heWJlKCkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIHJldHVybiBbdmFsdWUsIGV4aXN0c10KICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2Uuc2V0Qm94KHZhbHVlSW50OiB1aW50NjQpIC0+IHZvaWQ6CnNldEJveDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTU4CiAgICAvLyBwdWJsaWMgc2V0Qm94KHZhbHVlSW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNTkKICAgIC8vIHRoaXMuYm94SW50LnZhbHVlID0gdmFsdWVJbnQKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcHVibGljIGJveEludCA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94SW50JyB9KQogICAgYnl0ZWNfMyAvLyAiYm94SW50IgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNTkKICAgIC8vIHRoaXMuYm94SW50LnZhbHVlID0gdmFsdWVJbnQKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2Uuc2V0Qm94U3RyaW5nKHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0Qm94U3RyaW5nOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNjYKICAgIC8vIHB1YmxpYyBzZXRCb3hTdHJpbmcodmFsdWU6IHN0cmluZyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBwdWJsaWMgYm94U3RyaW5nID0gQm94PHN0cmluZz4oeyBrZXk6ICdib3hTdHJpbmcnIH0pCiAgICBieXRlYyA0IC8vICJib3hTdHJpbmciCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2NwogICAgLy8gdGhpcy5ib3hTdHJpbmcudmFsdWUgPSB2YWx1ZQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBwdWJsaWMgYm94U3RyaW5nID0gQm94PHN0cmluZz4oeyBrZXk6ICdib3hTdHJpbmcnIH0pCiAgICBieXRlYyA0IC8vICJib3hTdHJpbmciCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE2NwogICAgLy8gdGhpcy5ib3hTdHJpbmcudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLnNldEJveER5bmFtaWNCeXRlcyh2YWx1ZTogYnl0ZXMpIC0+IHZvaWQ6CnNldEJveER5bmFtaWNCeXRlczoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTc0CiAgICAvLyBwdWJsaWMgc2V0Qm94RHluYW1pY0J5dGVzKHZhbHVlOiBhcmM0LkR5bmFtaWNCeXRlcyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBwdWJsaWMgYm94RHluYW1pY0J5dGVzID0gQm94PGFyYzQuRHluYW1pY0J5dGVzPih7IGtleTogJ2JveER5bmFtaWNCeXRlcycgfSkKICAgIGJ5dGVjIDUgLy8gImJveER5bmFtaWNCeXRlcyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTc1CiAgICAvLyB0aGlzLmJveER5bmFtaWNCeXRlcy52YWx1ZSA9IHZhbHVlCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHB1YmxpYyBib3hEeW5hbWljQnl0ZXMgPSBCb3g8YXJjNC5EeW5hbWljQnl0ZXM+KHsga2V5OiAnYm94RHluYW1pY0J5dGVzJyB9KQogICAgYnl0ZWMgNSAvLyAiYm94RHluYW1pY0J5dGVzIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNzUKICAgIC8vIHRoaXMuYm94RHluYW1pY0J5dGVzLnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5zZXRCb3hNYXAoa2V5OiB1aW50NjQsIHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0Qm94TWFwOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHB1YmxpYyBzZXRCb3hNYXAoa2V5OiB1aW50NjQsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsKICAgIHByb3RvIDIgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODQKICAgIC8vIHRoaXMuYm94TWFwKGtleSkudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0yCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBwdWJsaWMgYm94TWFwID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2JveE1hcCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveE1hcCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxODQKICAgIC8vIHRoaXMuYm94TWFwKGtleSkudmFsdWUgPSB2YWx1ZQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5zZXRCb3hSZWYoa2V5OiBieXRlcykgLT4gdm9pZDoKc2V0Qm94UmVmOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIHB1YmxpYyBzZXRCb3hSZWYoa2V5OiBzdHJpbmcpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxOTMKICAgIC8vIGJveFJlZi5jcmVhdGUoeyBzaXplOiAzMiB9KQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxOTUKICAgIC8vIGJveFJlZi5wdXQoc2VuZGVyQnl0ZXMpCiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTk0CiAgICAvLyBjb25zdCBzZW5kZXJCeXRlcyA9IFR4bi5zZW5kZXIuYnl0ZXMKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTk1CiAgICAvLyBib3hSZWYucHV0KHNlbmRlckJ5dGVzKQogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5ib3hNYXBMZW5ndGgoa2V5OiB1aW50NjQpIC0+IHVpbnQ2NDoKYm94TWFwTGVuZ3RoOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMDUtMjA2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBib3hNYXBMZW5ndGgoa2V5OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gaWYgKCF0aGlzLmJveE1hcChrZXkpLmV4aXN0cykgewogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBwdWJsaWMgYm94TWFwID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2JveE1hcCcgfSkKICAgIGJ5dGVjXzIgLy8gImJveE1hcCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gaWYgKCF0aGlzLmJveE1hcChrZXkpLmV4aXN0cykgewogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBibnogYm94TWFwTGVuZ3RoX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMDgKICAgIC8vIHJldHVybiBVaW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmJveE1hcExlbmd0aF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIxMQogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwKGtleSkubGVuZ3RoCiAgICBmcmFtZV9kaWcgMAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UubGVuZ3RoQm94UmVmKGtleTogYnl0ZXMpIC0+IHVpbnQ2NDoKbGVuZ3RoQm94UmVmOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIHB1YmxpYyBsZW5ndGhCb3hSZWYoa2V5OiBzdHJpbmcpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIyMQogICAgLy8gYXNzZXJ0KGJveFJlZi5jcmVhdGUoeyBzaXplOiAzMiB9KSwgJ2JveFJlZiBjcmVhdGlvbiBmYWlsZWQnKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9jcmVhdGUKICAgIGFzc2VydCAvLyBib3hSZWYgY3JlYXRpb24gZmFpbGVkCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIyMgogICAgLy8gcmV0dXJuIGJveFJlZi5sZW5ndGgKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZGVsZXRlQm94KCkgLT4gdm9pZDoKZGVsZXRlQm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcHVibGljIGJveEludCA9IEJveDx1aW50NjQ+KHsga2V5OiAnYm94SW50JyB9KQogICAgYnl0ZWNfMyAvLyAiYm94SW50IgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMzEKICAgIC8vIHRoaXMuYm94SW50LmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHB1YmxpYyBib3hEeW5hbWljQnl0ZXMgPSBCb3g8YXJjNC5EeW5hbWljQnl0ZXM+KHsga2V5OiAnYm94RHluYW1pY0J5dGVzJyB9KQogICAgYnl0ZWMgNSAvLyAiYm94RHluYW1pY0J5dGVzIgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMzIKICAgIC8vIHRoaXMuYm94RHluYW1pY0J5dGVzLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHB1YmxpYyBib3hTdHJpbmcgPSBCb3g8c3RyaW5nPih7IGtleTogJ2JveFN0cmluZycgfSkKICAgIGJ5dGVjIDQgLy8gImJveFN0cmluZyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjMzCiAgICAvLyB0aGlzLmJveFN0cmluZy5kZWxldGUoKQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyBwdWJsaWMgYm94SW50ID0gQm94PHVpbnQ2ND4oeyBrZXk6ICdib3hJbnQnIH0pCiAgICBieXRlY18zIC8vICJib3hJbnQiCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIzNQogICAgLy8gYXNzZXJ0KHRoaXMuYm94SW50LmdldCh7IGRlZmF1bHQ6IFVpbnQ2NCg0MikgfSkgPT09IDQyKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18zIC8vIDQyCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgaW50Y18zIC8vIDQyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBwdWJsaWMgYm94RHluYW1pY0J5dGVzID0gQm94PGFyYzQuRHluYW1pY0J5dGVzPih7IGtleTogJ2JveER5bmFtaWNCeXRlcycgfSkKICAgIGJ5dGVjIDUgLy8gImJveER5bmFtaWNCeXRlcyIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjM2CiAgICAvLyBhc3NlcnQodGhpcy5ib3hEeW5hbWljQnl0ZXMuZ2V0KHsgZGVmYXVsdDogbmV3IGFyYzQuRHluYW1pY0J5dGVzKCc0MicpIH0pLm5hdGl2ZSA9PT0gQnl0ZXMoJzQyJykpCiAgICBib3hfZ2V0CiAgICBwdXNoYnl0ZXMgMHgwMDAyMzQzMgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICBleHRyYWN0IDIgMAogICAgYnl0ZWMgOCAvLyAiNDIiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBwdWJsaWMgYm94U3RyaW5nID0gQm94PHN0cmluZz4oeyBrZXk6ICdib3hTdHJpbmcnIH0pCiAgICBieXRlYyA0IC8vICJib3hTdHJpbmciCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIzNwogICAgLy8gYXNzZXJ0KHRoaXMuYm94U3RyaW5nLmdldCh7IGRlZmF1bHQ6ICc0MicgfSkgPT09ICc0MicpCiAgICBib3hfZ2V0CiAgICBieXRlYyA4IC8vICI0MiIKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgYnl0ZWMgOCAvLyAiNDIiCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmRlbGV0ZUJveE1hcChrZXk6IHVpbnQ2NCkgLT4gdm9pZDoKZGVsZXRlQm94TWFwOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDQKICAgIC8vIHB1YmxpYyBkZWxldGVCb3hNYXAoa2V5OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNDUKICAgIC8vIHRoaXMuYm94TWFwKGtleSkuZGVsZXRlKCkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NgogICAgLy8gcHVibGljIGJveE1hcCA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdib3hNYXAnIH0pCiAgICBieXRlY18yIC8vICJib3hNYXAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQ1CiAgICAvLyB0aGlzLmJveE1hcChrZXkpLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZGVsZXRlQm94UmVmKGtleTogYnl0ZXMpIC0+IHZvaWQ6CmRlbGV0ZUJveFJlZjoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjUyCiAgICAvLyBwdWJsaWMgZGVsZXRlQm94UmVmKGtleTogc3RyaW5nKTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjU0CiAgICAvLyBib3hSZWYuZGVsZXRlKCkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1NQogICAgLy8gYXNzZXJ0TWF0Y2goYm94UmVmLm1heWJlKCksIFtCeXRlcygnJyksIGZhbHNlXSkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgcG9wCiAgICBwdXNoYnl0ZXMgIiIKICAgID09CiAgICBieiBkZWxldGVCb3hSZWZfYm9vbF9mYWxzZUA0CiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGJ1cnkgMQogICAgYm56IGRlbGV0ZUJveFJlZl9ib29sX2ZhbHNlQDQKICAgIGludGNfMCAvLyAxCgpkZWxldGVCb3hSZWZfYm9vbF9tZXJnZUA1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIGFzc2VydE1hdGNoKGJveFJlZi5tYXliZSgpLCBbQnl0ZXMoJycpLCBmYWxzZV0pCiAgICBhc3NlcnQgLy8gYXNzZXJ0IHRhcmdldCBpcyBtYXRjaCBmb3IgY29uZGl0aW9ucwogICAgcmV0c3ViCgpkZWxldGVCb3hSZWZfYm9vbF9mYWxzZUA0OgogICAgaW50Y18xIC8vIDAKICAgIGIgZGVsZXRlQm94UmVmX2Jvb2xfbWVyZ2VANQoKCi8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OkJveFN0b3JhZ2UuZXh0cmFjdEJveFJlZihrZXk6IGJ5dGVzKSAtPiB2b2lkOgpleHRyYWN0Qm94UmVmOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHB1YmxpYyBleHRyYWN0Qm94UmVmKGtleTogc3RyaW5nKTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjY1CiAgICAvLyBjb25zdCBzZW5kZXJCeXRlcyA9IFR4bi5zZW5kZXIuYnl0ZXMKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjY2CiAgICAvLyBjb25zdCBhcHBBZGRyZXNzID0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MuYnl0ZXMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI2OAogICAgLy8gY29uc3QgdG90YWxTaXplID0gVWludDY0KGFwcEFkZHJlc3MubGVuZ3RoICsgc2VuZGVyQnl0ZXMubGVuZ3RoKQogICAgZHVwCiAgICBsZW4KICAgIGRpZyAyCiAgICBsZW4KICAgICsKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjcxCiAgICAvLyBhc3NlcnQoYm94UmVmLmNyZWF0ZSh7IHNpemU6IHRvdGFsU2l6ZSB9KSwgJ2JveFJlZiBjcmVhdGlvbiBmYWlsZWQnKQogICAgZnJhbWVfZGlnIC0xCiAgICBzd2FwCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQgLy8gYm94UmVmIGNyZWF0aW9uIGZhaWxlZAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIGJveFJlZi5yZXBsYWNlKDAsIHNlbmRlckJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgZGlnIDMKICAgIGJveF9yZXBsYWNlCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gYm94UmVmLnNwbGljZSgwLCAwLCBhcHBBZGRyZXNzKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgZHVwCiAgICBkaWcgMwogICAgYm94X3NwbGljZQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIGNvbnN0IHBhcnQxID0gYm94UmVmLmV4dHJhY3QoMCwgMzIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9leHRyYWN0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI3NwogICAgLy8gY29uc3QgcGFydDIgPSBib3hSZWYuZXh0cmFjdCgzMiwgMzIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMiAvLyAzMgogICAgZHVwCiAgICBib3hfZXh0cmFjdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNzkKICAgIC8vIGFzc2VydChwYXJ0MS5lcXVhbHMoYXBwQWRkcmVzcyksICdGaXJzdCBwYXJ0IHNob3VsZCBtYXRjaCBhcHAgYWRkcmVzcycpCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gRmlyc3QgcGFydCBzaG91bGQgbWF0Y2ggYXBwIGFkZHJlc3MKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjgwCiAgICAvLyBhc3NlcnQocGFydDIuZXF1YWxzKHNlbmRlckJ5dGVzKSwgJ1NlY29uZCBwYXJ0IHNob3VsZCBtYXRjaCBzZW5kZXIgYnl0ZXMnKQogICAgPT0KICAgIGFzc2VydCAvLyBTZWNvbmQgcGFydCBzaG91bGQgbWF0Y2ggc2VuZGVyIGJ5dGVzCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmdldEJveE1hcFN0cnVjdChrZXk6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldEJveE1hcFN0cnVjdDoKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjkwLTI5MQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0Qm94TWFwU3RydWN0KGtleTogdWludDY0KTogVXNlclN0cnVjdCB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjkyCiAgICAvLyByZXR1cm4gdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyBwdWJsaWMgYm94TWFwU3RydWN0ID0gQm94TWFwPHVpbnQ2NCwgVXNlclN0cnVjdD4oeyBrZXlQcmVmaXg6ICd1c2VycycgfSkKICAgIGJ5dGVjIDYgLy8gInVzZXJzIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI5MgogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpCb3hTdG9yYWdlLmJveE1hcFN0cnVjdEV4aXN0cyhrZXk6IHVpbnQ2NCkgLT4gdWludDY0Ogpib3hNYXBTdHJ1Y3RFeGlzdHM6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMwMC0zMDEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdEV4aXN0cyhrZXk6IHVpbnQ2NCk6IGJvb2xlYW4gewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMwMgogICAgLy8gcmV0dXJuIHRoaXMuYm94TWFwU3RydWN0KGtleSkuZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHB1YmxpYyBib3hNYXBTdHJ1Y3QgPSBCb3hNYXA8dWludDY0LCBVc2VyU3RydWN0Pih7IGtleVByZWZpeDogJ3VzZXJzJyB9KQogICAgYnl0ZWMgNiAvLyAidXNlcnMiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzAyCiAgICAvLyByZXR1cm4gdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS5leGlzdHMKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5zZXRCb3hNYXBTdHJ1Y3Qoa2V5OiB1aW50NjQsIHZhbHVlOiBieXRlcykgLT4gdWludDY0OgpzZXRCb3hNYXBTdHJ1Y3Q6CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMxMAogICAgLy8gcHVibGljIHNldEJveE1hcFN0cnVjdChrZXk6IHVpbnQ2NCwgdmFsdWU6IFVzZXJTdHJ1Y3QpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdCA9IEJveE1hcDx1aW50NjQsIFVzZXJTdHJ1Y3Q+KHsga2V5UHJlZml4OiAndXNlcnMnIH0pCiAgICBieXRlYyA2IC8vICJ1c2VycyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwbiAyCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMxMgogICAgLy8gdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSA9IHZhbHVlLmNvcHkoKQogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTQKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTMtMzIxCiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSwKICAgIC8vICAgewogICAgLy8gICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAvLyAgICAgaWQ6IHZhbHVlLmlkLAogICAgLy8gICAgIGFzc2V0OiB2YWx1ZS5hc3NldCwKICAgIC8vICAgfSwKICAgIC8vICAgJ2JveE1hcFN0cnVjdCB2YWx1ZSBtaXNtYXRjaCcsCiAgICAvLyApCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGxlbgogICAgc3Vic3RyaW5nMwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTYKICAgIC8vIG5hbWU6IHZhbHVlLm5hbWUsCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMQogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTMtMzIxCiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSwKICAgIC8vICAgewogICAgLy8gICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAvLyAgICAgaWQ6IHZhbHVlLmlkLAogICAgLy8gICAgIGFzc2V0OiB2YWx1ZS5hc3NldCwKICAgIC8vICAgfSwKICAgIC8vICAgJ2JveE1hcFN0cnVjdCB2YWx1ZSBtaXNtYXRjaCcsCiAgICAvLyApCiAgICA9PQogICAgYnogc2V0Qm94TWFwU3RydWN0X2Jvb2xfZmFsc2VANAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTQKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICBmcmFtZV9kaWcgMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzEzLTMyMQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICAvLyAgIHsKICAgIC8vICAgICBuYW1lOiB2YWx1ZS5uYW1lLAogICAgLy8gICAgIGlkOiB2YWx1ZS5pZCwKICAgIC8vICAgICBhc3NldDogdmFsdWUuYXNzZXQsCiAgICAvLyAgIH0sCiAgICAvLyAgICdib3hNYXBTdHJ1Y3QgdmFsdWUgbWlzbWF0Y2gnLAogICAgLy8gKQogICAgZXh0cmFjdCAyIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMxNwogICAgLy8gaWQ6IHZhbHVlLmlkLAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzEzLTMyMQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICAvLyAgIHsKICAgIC8vICAgICBuYW1lOiB2YWx1ZS5uYW1lLAogICAgLy8gICAgIGlkOiB2YWx1ZS5pZCwKICAgIC8vICAgICBhc3NldDogdmFsdWUuYXNzZXQsCiAgICAvLyAgIH0sCiAgICAvLyAgICdib3hNYXBTdHJ1Y3QgdmFsdWUgbWlzbWF0Y2gnLAogICAgLy8gKQogICAgPT0KICAgIGJ6IHNldEJveE1hcFN0cnVjdF9ib29sX2ZhbHNlQDQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLmJveE1hcFN0cnVjdChrZXkpLnZhbHVlLAogICAgZnJhbWVfZGlnIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMxMy0zMjEKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICB0aGlzLmJveE1hcFN0cnVjdChrZXkpLnZhbHVlLAogICAgLy8gICB7CiAgICAvLyAgICAgbmFtZTogdmFsdWUubmFtZSwKICAgIC8vICAgICBpZDogdmFsdWUuaWQsCiAgICAvLyAgICAgYXNzZXQ6IHZhbHVlLmFzc2V0LAogICAgLy8gICB9LAogICAgLy8gICAnYm94TWFwU3RydWN0IHZhbHVlIG1pc21hdGNoJywKICAgIC8vICkKICAgIGV4dHJhY3QgMTAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBhc3NldDogdmFsdWUuYXNzZXQsCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMTAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzEzLTMyMQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUsCiAgICAvLyAgIHsKICAgIC8vICAgICBuYW1lOiB2YWx1ZS5uYW1lLAogICAgLy8gICAgIGlkOiB2YWx1ZS5pZCwKICAgIC8vICAgICBhc3NldDogdmFsdWUuYXNzZXQsCiAgICAvLyAgIH0sCiAgICAvLyAgICdib3hNYXBTdHJ1Y3QgdmFsdWUgbWlzbWF0Y2gnLAogICAgLy8gKQogICAgPT0KICAgIGJ6IHNldEJveE1hcFN0cnVjdF9ib29sX2ZhbHNlQDQKICAgIGludGNfMCAvLyAxCgpzZXRCb3hNYXBTdHJ1Y3RfYm9vbF9tZXJnZUA1OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMTMtMzIxCiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgdGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZSwKICAgIC8vICAgewogICAgLy8gICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAvLyAgICAgaWQ6IHZhbHVlLmlkLAogICAgLy8gICAgIGFzc2V0OiB2YWx1ZS5hc3NldCwKICAgIC8vICAgfSwKICAgIC8vICAgJ2JveE1hcFN0cnVjdCB2YWx1ZSBtaXNtYXRjaCcsCiAgICAvLyApCiAgICBhc3NlcnQgLy8gYm94TWFwU3RydWN0IHZhbHVlIG1pc21hdGNoCiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gcmV0dXJuIHRydWUKICAgIGludGNfMCAvLyAxCiAgICBzd2FwCiAgICByZXRzdWIKCnNldEJveE1hcFN0cnVjdF9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzEgLy8gMAogICAgYiBzZXRCb3hNYXBTdHJ1Y3RfYm9vbF9tZXJnZUA1CgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5ib3hNYXBTdHJ1Y3RMZW5ndGgoa2V5OiB1aW50NjQpIC0+IHVpbnQ2NDoKYm94TWFwU3RydWN0TGVuZ3RoOgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzAKICAgIC8vIHB1YmxpYyBib3hNYXBTdHJ1Y3RMZW5ndGgoa2V5OiB1aW50NjQpOiBib29sZWFuIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzcKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gcHVibGljIGJveE1hcFN0cnVjdCA9IEJveE1hcDx1aW50NjQsIFVzZXJTdHJ1Y3Q+KHsga2V5UHJlZml4OiAndXNlcnMnIH0pCiAgICBieXRlYyA2IC8vICJ1c2VycyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzcKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzMxLTMzNQogICAgLy8gY29uc3QgdmFsdWUgPSBuZXcgVXNlclN0cnVjdCh7CiAgICAvLyAgIG5hbWU6IG5ldyBhcmM0LlN0cigndGVzdE5hbWUnKSwKICAgIC8vICAgaWQ6IG5ldyBhcmM0LlVpbnRONjQoNzApLAogICAgLy8gICBhc3NldDogbmV3IGFyYzQuVWludE42NCgxMjM0KSwKICAgIC8vIH0pCiAgICBwdXNoYnl0ZXMgMHgwMDEyMDAwMDAwMDAwMDAwMDA0NjAwMDAwMDAwMDAwMDA0ZDIwMDA4NzQ2NTczNzQ0ZTYxNmQ2NQogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMzcKICAgIC8vIHRoaXMuYm94TWFwU3RydWN0KGtleSkudmFsdWUgPSB2YWx1ZS5jb3B5KCkKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzM5CiAgICAvLyBhc3NlcnQodGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS52YWx1ZS5ieXRlcy5sZW5ndGggPT09IHZhbHVlLmJ5dGVzLmxlbmd0aCwgJ2JveE1hcFN0cnVjdCBieXRlcyBsZW5ndGggbWlzbWF0Y2gnKQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgbGVuCiAgICBwdXNoaW50IDI4IC8vIDI4CiAgICA9PQogICAgYXNzZXJ0IC8vIGJveE1hcFN0cnVjdCBieXRlcyBsZW5ndGggbWlzbWF0Y2gKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzQwCiAgICAvLyBhc3NlcnQodGhpcy5ib3hNYXBTdHJ1Y3Qoa2V5KS5sZW5ndGggPT09IHZhbHVlLmJ5dGVzLmxlbmd0aCwgJ2JveE1hcFN0cnVjdCBsZW5ndGggbWlzbWF0Y2gnKQogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHB1c2hpbnQgMjggLy8gMjgKICAgID09CiAgICBhc3NlcnQgLy8gYm94TWFwU3RydWN0IGxlbmd0aCBtaXNtYXRjaAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNDIKICAgIC8vIHJldHVybiB0cnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6Qm94U3RvcmFnZS5hcmM0Qm94KGtleTogYnl0ZXMpIC0+IGJ5dGVzOgphcmM0Qm94OgogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNTIKICAgIC8vIHB1YmxpYyBhcmM0Qm94KGtleTogc3RyaW5nKTogU3RhdGljSW50cyB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzU1LTM2MAogICAgLy8gc3RhdGljSW50Qm94LnZhbHVlID0gbmV3IGFyYzQuU3RhdGljQXJyYXk8YXJjNC5VaW50TjgsIDQ+KAogICAgLy8gICBuZXcgYXJjNC5VaW50TjgoMCksCiAgICAvLyAgIG5ldyBhcmM0LlVpbnROOCgxKSwKICAgIC8vICAgbmV3IGFyYzQuVWludE44KDIpLAogICAgLy8gICBuZXcgYXJjNC5VaW50TjgoMyksCiAgICAvLyApCiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweDAwMDEwMjAzCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM2MgogICAgLy8gYXNzZXJ0KHN0YXRpY0ludEJveC52YWx1ZVswXS5uYXRpdmUgPT09IDApCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Ynl0ZQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM2MwogICAgLy8gYXNzZXJ0KHN0YXRpY0ludEJveC52YWx1ZVsxXS5uYXRpdmUgPT09IDEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpbnRjXzAgLy8gMQogICAgZ2V0Ynl0ZQogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9Cb3hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzY0CiAgICAvLyBhc3NlcnQoc3RhdGljSW50Qm94LnZhbHVlWzJdLm5hdGl2ZSA9PT0gMikKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBnZXRieXRlCiAgICBwdXNoaW50IDIgLy8gMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL0JveFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNjUKICAgIC8vIGFzc2VydChzdGF0aWNJbnRCb3gudmFsdWVbM10ubmF0aXZlID09PSAzKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcHVzaGludCAzIC8vIDMKICAgIGdldGJ5dGUKICAgIHB1c2hpbnQgMyAvLyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvQm94U3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM2NwogICAgLy8gcmV0dXJuIHN0YXRpY0ludEJveC52YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CiAEAQAgKiYKBBUffHUBAAZib3hNYXAGYm94SW50CWJveFN0cmluZw9ib3hEeW5hbWljQnl0ZXMFdXNlcnMCNDIGYm94UmVmAgADMRtBAwOCGgS3SRNEBEnPQQUE+hVi9wTEl7xvBPT5y60EkQGn3gRqs+m8BCbKZIoEKMxxOQSeEf16BKRVLrUEZEo5lAT1NBjEBNgp0qMEsfWptgRTwoggBNXdkiwEWVuHuwTxgyB6BAPox34EXmzqwAQ4rPU+BIwiv9UEOemyJgSGAODrBFR/CnQ2GgCOGgI1AiQCFAICAfMB5wHPAbMBlwGBAXEBSAEzARoBAgDuANIAuQCgAJAAfgBsAEEAKgAYAAIjQzEZFEQxGEQ2GgFXAgCIBGsoTFCwIkMxGRREMRhENhoBVwIAiAQkIkMxGRREMRhENhoBVwIAiAQFFihMULAiQzEZFEQxGEQ2GgFXAgCIA+dLARUWVwYCTwJQKSNPA1QnCUxQTFAoTFCwIkMxGRREMRhENhoBVwIAiAOcIkMxGRREMRhENhoBVwIAiAN8IkMxGRREMRhEiANWKExQsCJDMRkURDEYRDYaAReIAzQpI08CVChMULAiQzEZFEQxGEQ2GgEXiALeKSNPAlQoTFCwIkMxGRREMRhENhoBFzYaAogCbikjTwJUKExQsCJDMRkURDEYRDYaAReIAkgoTFCwIkMxGRREMRhEgAwVH3x1AAZib3hNYXCwIkMxGRREMRhENhoBF4gCDykjTwJUKExQsCJDMRkURDEYRDYaAReIAd0WKExQsCJDMRkURDEYRDYaAReIAalLARUWVwYCTwJQKSNPA1QnCUxQTFAoTFCwIkMxGRREMRhENhoBF4gBdCJDMRkURDEYRDYaARc2GgJXAgCIAU4iQzEZFEQxGEQ2GgEXiAEnSRUWVwYCTFAoTFCwIkMxGRREMRhENhoBF4gA/0kVFlcGAkxQKExQsCJDMRkURDEYRIgA4UwWKSNPA1RQKExQsCJDMRkURDEYRIgAkiJDMRkURDEYRDYaAYgAdiJDMRkURDEYRDYaAVcCAIgAVyJDMRkURDEYRDYaAReIAD0iQzEZFEQxGESIACoWKExQsCJDMRkURDEYRIgAEhYoTFCwIkMxGUD9tTEYFEQiQyu+TBdMRIkrvkwXTESJigEAi/8WK0y/iYoBACcEvEgnBIv/v4mKAQAnBbxIJwWL/7+JK7xIJwW8SCcEvEgrvkwXJUxPAk0lEkQnBb6ABAACNDJOAk1XAgAnBxJEJwS+JwdOAk0nBxJEiSu+TBdMiYoBAYv/FipMUL5EiYoBAYv/FipMUL6AB2RlZmF1bHROAk2JigIAi/4WKkxQSbxIi/+/iYoBAIv/FipMULxIiYoBAov/FipMUL5JTwJMQQAJiwGLAE8DTwOJgABC//SKAQGL/xYqTFBJvUUBQAADI0yJiwC9REyJigEBi/8WKkxQvUUBiYoBAYv/FicGTFC+RImKAgGL/hYnBkxQRwK8SEmL/7++REkjWUsBFVKL/yNZi/8Vi/9OAlISQQAliwC+RFcCCIv/VwIIEkEAFYsAvkRXCgiL/1cKCBJBAAUiRCJMiSNC//iKAQGL/xYnBkxQSbxISYAcABIAAAAAAAAARgAAAAAAAATSAAh0ZXN0TmFtZb9JvkQVgRwSRL1EgRwSRCKJigEBi/8WJwZMUL1FAYknCCS5SDEAJwhLAb8nCL5LAk4CTUlPAhJEiYoBAIv/JLlIi/8xAL+JigEAi/+8SIv/vkiAABJBAAuL/75FAUAAAyJEiSNC//qKAQKL/76JigEBi/8kuUSL/71EiYoBADEAMgpJFUsCFQiL/0y5RIv/I0sDu4v/I0lLA9KL/yMkuov/JEm6TE8CEkQSRImKAQGL/4AEAAECA7+L/75EI1UURIv/vkQiVSISRIv/vkSBAlWBAhJEi/++RIEDVYEDEkSL/75EiQ==", + "approval": "CiAEAQAgKiYKBBUffHUBAAZib3hNYXAGYm94SW50CWJveFN0cmluZw9ib3hEeW5hbWljQnl0ZXMFdXNlcnMGYm94UmVmAjQyAgADMRtBAwOCGgS3SRNEBEnPQQUEarPpvAQmymSKBCjMcTkEZEo5lASx9am2BAPox34E2CnSowSMIr/VBPoVYvcExJe8bwT0+cutBJ4R/XoEXmzqwAT1NBjEBDnpsiYEkQGn3gSkVS61BDis9T4EhgDg6wRTwoggBPGDIHoE1d2SLARZW4e7BFR/CnQ2GgCOGgI1AiQCDAHwAdQBqwGTAYMBagE/AS8BHQEOAPgA5gDRALoArgCeAIwAegBmAE0AMQAYAAIjQzEZFEQxGEQ2GgFXAgCIBGsoTFCwIkMxGRREMRhENhoBF4gEGikjTwJUKExQsCJDMRkURDEYRDYaARc2GgKIA6opI08CVChMULAiQzEZFEQxGEQ2GgEXiAODKSNPAlQoTFCwIkMxGRREMRhENhoBF4gDXShMULAiQzEZFEQxGEQ2GgFXAgCIAxYiQzEZFEQxGEQ2GgFXAgCIAuQiQzEZFEQxGEQ2GgEXiALIIkMxGRREMRhEiAKFIkMxGRREMRhENhoBVwIAiAJmFihMULAiQzEZFEQxGEQ2GgEXiAI4FihMULAiQzEZFEQxGEQ2GgFXAgCIAhMiQzEZFEQxGEQ2GgEXNhoCVwIAiAHtIkMxGRREMRhENhoBiAHRIkMxGRREMRhENhoBVwIAiAGyIkMxGRREMRhENhoBF4gBmCJDMRkURDEYRDYaAVcCAIgBf0sBFRZXBgJPAlApI08DVCcJTFBMUChMULAiQzEZFEQxGEQ2GgEXiAFJKSNPAlQoTFCwIkMxGRREMRhEiAEaKExQsCJDMRkURDEYRIAMFR98dQAGYm94TWFwsCJDMRkURDEYRDYaAReIAM9LARUWVwYCTwJQKSNPA1QnCUxQTFAoTFCwIkMxGRREMRhENhoBF4gAj0kVFlcGAkxQKExQsCJDMRkURDEYRDYaAReIAGdJFRZXBgJMUChMULAiQzEZFEQxGESIAElMFikjTwNUUChMULAiQzEZFEQxGESIACoWKExQsCJDMRkURDEYRIgAEhYoTFCwIkMxGUD9tTEYFEQiQyu+TBdMRIkrvkwXTESJK75MF0yJigEBi/8WKkxQvkSJigEBi/8WKkxQvoAHZGVmYXVsdE4CTYmKAQKL/xYqTFC+SU8CTEEACYsBiwBPA08DiYAAQv/0JwckuUgxACcHSwG/Jwe+SwJOAk1JTwISRImKAQGL/xYqTFC9RQGJigECi/++iYoBAIv/FitMv4mKAQAnBLxIJwSL/7+JigEAJwW8SCcFi/+/iYoCAIv+FipMUEm8SIv/v4mKAQCL/yS5SIv/MQC/iYoBAYv/FipMUEm9RQFAAAMjTImLAL1ETImKAQGL/yS5RIv/vUSJK7xIJwW8SCcEvEgrvkwXJUxPAk0lEkQnBb6ABAACNDJOAk1XAgAnCBJEJwS+JwhOAk0nCBJEiYoBAIv/FipMULxIiYoBAIv/vEiL/75IgAASQQALi/++RQFAAAMiRIkjQv/6igEAMQAyCkkVSwIVCIv/TLlEi/8jSwO7i/8jSUsD0ov/IyS6i/8kSbpMTwISRBJEiYoBAYv/FicGTFC+RImKAQGL/xYnBkxQvUUBiYoCAYv+FicGTFBHArxISYv/v75ESSNZSwEVUov/I1mL/xWL/04CUhJBACWLAL5EVwIIi/9XAggSQQAViwC+RFcKCIv/VwoIEkEABSJEIkyJI0L/+IoBAYv/FicGTFBJvEhJgBwAEgAAAAAAAABGAAAAAAAABNIACHRlc3ROYW1lv0m+RBWBHBJEvUSBHBJEIomKAQGL/4AEAAECA7+L/75EI1UURIv/vkQiVSISRIv/vkSBAlWBAhJEi/++RIEDVYEDEkSL/75EiQ==", "clear": "CoEBQw==" }, "compilerInfo": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/GlobalStorage/GlobalStorage.approval.puya.map b/projects/typescript-examples/contracts/artifacts/contracts/GlobalStorage/GlobalStorage.approval.puya.map index 093b9c7..14efff3 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/GlobalStorage/GlobalStorage.approval.puya.map +++ b/projects/typescript-examples/contracts/artifacts/contracts/GlobalStorage/GlobalStorage.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "/Users/gabe.algo/Code/devportal-code-examples/projects/typescript-examples/contracts/GlobalStorage/contract.algo.ts" ], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBS;;AAAuD;;AAA9D;AAEO;;AAAuD;;;;;;;;AAA9D;AACO;AAAmD;;;;;;;;AAA1D;AACO;AAAyC;AAAhD;AAHO;AAYkC;AAAvC;AARK;AAS0B;;AAA/B;AAjBJ;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;AAAA;;AAkFE;;AAAA;AAAA;AAAA;;AAAA;AAlFF;;;AAAA;;;AAAA;;;AAAA;;;AAkFE;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAjBA;;AAAA;AAAA;AAAA;;AAAA;AAjEF;;;AAAA;;;AAAA;;;;AAAA;AAAA;;;AAAA;AAAA;;AAiEE;;;AAAA;;AAjBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AArBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AA3BF;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAQS;AAAA;AAAA;AAAA;AALA;AAAA;;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAwBL;;AAAA;AA3BK;AAAA;AA6CoC;AAAA;;AA7CpC;AAAA;AAAA;AAAA;AAgDL;;AAAA;AAEA;AAAA;AAWF;;;AA3DO;AA4DL;;AAAA;AA3DK;AA4DL;;AAAA;AA3DK;AA4DL;;AAAA;AA9DK;AAAA;AAAA;AAAA;AAgEE;;AAAA;AAAP;AA/DK;AAAA;AAAA;AAAA;AAgEE;;AAAA;AAAP;AA/DK;AAAA;AAAA;AAAA;AAgEE;;AAAA;AAAP;;AAUF;;;AAGE;;AAAA;;AAAA;AAEO;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAP;AAEO;AAAA;;AAAA;AAAA;AAAP", + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBS;;AAAuD;;AAA9D;AAEO;;AAAuD;;;;;;;;AAA9D;AACO;AAAmD;;;;;;;;AAA1D;AACO;AAAyC;AAAhD;AAHO;AAYkC;AAAvC;AARK;AAS0B;;AAA/B;AAjBJ;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;AAAA;;AA6FG;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAXD;;AAAA;AAAA;AAAA;;AAAA;AAlFF;;;AAAA;;;AAAA;;;AAAA;;;AAkFE;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAjBA;;AAAA;AAAA;AAAA;;AAAA;AAjEF;;;AAAA;;;AAAA;;;;AAAA;AAAA;;;AAAA;AAAA;;AAiEE;;;AAAA;;AAjBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AArBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AA3BF;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAQS;AAAA;AAAA;AAAA;AALA;AAAA;;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAwBL;;AAAA;AA3BK;AAAA;AA6CoC;AAAA;;AA7CpC;AAAA;AAAA;AAAA;AAgDL;;AAAA;AAEA;AAAA;AAWF;;;AA3DO;AA4DL;;AAAA;AA3DK;AA4DL;;AAAA;AA3DK;AA4DL;;AAAA;AA9DK;AAAA;AAAA;AAAA;AAgEE;;AAAA;AAAP;AA/DK;AAAA;AAAA;AAAA;AAgEE;;AAAA;AAAP;AA/DK;AAAA;AAAA;AAAA;AAgEE;;AAAA;AAAP;;AAUF;;;AAGE;;AAAA;;AAAA;AAEO;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAP;AAEO;AAAA;;AAAA;AAAA;AAAP;AAtFK;;AA4FL;AACO;AAAP", "op_pc_offset": 0, "pc_events": { "1": { @@ -14,9 +14,9 @@ "op": "intcblock 0 1" }, "5": { - "op": "bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" \"globalBytes\"" + "op": "bytecblock \"globalString\" \"globalBool\" \"globalIntNoDefault\" \"globalAccount\" 0x151f7c75 \"globalInt\" 0x00 \"globalBytes\"" }, - "91": { + "93": { "op": "txn ApplicationID", "defined_out": [ "reinterpret_bool%0#0" @@ -25,11 +25,11 @@ "reinterpret_bool%0#0" ] }, - "93": { + "95": { "op": "bnz main_after_if_else@2", "stack_out": [] }, - "96": { + "98": { "op": "bytec 5 // \"globalInt\"", "defined_out": [ "\"globalInt\"" @@ -38,7 +38,7 @@ "\"globalInt\"" ] }, - "98": { + "100": { "op": "pushint 50 // 50", "defined_out": [ "\"globalInt\"", @@ -49,12 +49,12 @@ "50" ] }, - "100": { + "102": { "op": "app_global_put", "stack_out": [] }, - "101": { - "op": "bytec 6 // \"globalBytes\"", + "103": { + "op": "bytec 7 // \"globalBytes\"", "defined_out": [ "\"globalBytes\"" ], @@ -62,7 +62,7 @@ "\"globalBytes\"" ] }, - "103": { + "105": { "op": "pushbytes \"Silvio\"", "defined_out": [ "\"Silvio\"", @@ -73,11 +73,11 @@ "\"Silvio\"" ] }, - "111": { + "113": { "op": "app_global_put", "stack_out": [] }, - "112": { + "114": { "op": "bytec_0 // \"globalString\"", "defined_out": [ "\"globalString\"" @@ -86,7 +86,7 @@ "\"globalString\"" ] }, - "113": { + "115": { "op": "pushbytes \"Micali\"", "defined_out": [ "\"Micali\"", @@ -97,11 +97,11 @@ "\"Micali\"" ] }, - "121": { + "123": { "op": "app_global_put", "stack_out": [] }, - "122": { + "124": { "op": "bytec_1 // \"globalBool\"", "defined_out": [ "\"globalBool\"" @@ -110,7 +110,7 @@ "\"globalBool\"" ] }, - "123": { + "125": { "op": "intc_1 // 1", "defined_out": [ "\"globalBool\"", @@ -121,11 +121,11 @@ "1" ] }, - "124": { + "126": { "op": "app_global_put", "stack_out": [] }, - "125": { + "127": { "op": "bytec_2 // \"globalIntNoDefault\"", "defined_out": [ "\"globalIntNoDefault\"" @@ -134,7 +134,7 @@ "\"globalIntNoDefault\"" ] }, - "126": { + "128": { "op": "intc_0 // 0", "defined_out": [ "\"globalIntNoDefault\"", @@ -145,11 +145,11 @@ "0" ] }, - "127": { + "129": { "op": "app_global_put", "stack_out": [] }, - "128": { + "130": { "op": "bytec_3 // \"globalAccount\"", "defined_out": [ "\"globalAccount\"" @@ -158,7 +158,7 @@ "\"globalAccount\"" ] }, - "129": { + "131": { "op": "txn Sender", "defined_out": [ "\"globalAccount\"", @@ -169,11 +169,11 @@ "new_state_value%0#0" ] }, - "131": { + "133": { "op": "app_global_put", "stack_out": [] }, - "132": { + "134": { "block": "main_after_if_else@2", "stack_in": [], "op": "txn NumAppArgs", @@ -184,13 +184,14 @@ "tmp%0#1" ] }, - "134": { - "op": "bz main_bare_routing@11", + "136": { + "op": "bz main_bare_routing@12", "stack_out": [] }, - "137": { - "op": "pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 // method \"readGlobalState()(uint64,uint64,byte[],string,bool,address)\", method \"hasGlobalState()(uint64,bool)\", method \"writeGlobalState(string,bool,account)void\", method \"writeDynamicGlobalState(string,string)string\"", + "139": { + "op": "pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00 // method \"readGlobalState()(uint64,uint64,byte[],string,bool,address)\", method \"hasGlobalState()(uint64,bool)\", method \"writeGlobalState(string,bool,account)void\", method \"writeDynamicGlobalState(string,string)string\", method \"deleteGlobalState()bool\"", "defined_out": [ + "Method(deleteGlobalState()bool)", "Method(hasGlobalState()(uint64,bool))", "Method(readGlobalState()(uint64,uint64,byte[],string,bool,address))", "Method(writeDynamicGlobalState(string,string)string)", @@ -200,12 +201,14 @@ "Method(readGlobalState()(uint64,uint64,byte[],string,bool,address))", "Method(hasGlobalState()(uint64,bool))", "Method(writeGlobalState(string,bool,account)void)", - "Method(writeDynamicGlobalState(string,string)string)" + "Method(writeDynamicGlobalState(string,string)string)", + "Method(deleteGlobalState()bool)" ] }, - "159": { + "166": { "op": "txna ApplicationArgs 0", "defined_out": [ + "Method(deleteGlobalState()bool)", "Method(hasGlobalState()(uint64,bool))", "Method(readGlobalState()(uint64,uint64,byte[],string,bool,address))", "Method(writeDynamicGlobalState(string,string)string)", @@ -217,17 +220,152 @@ "Method(hasGlobalState()(uint64,bool))", "Method(writeGlobalState(string,bool,account)void)", "Method(writeDynamicGlobalState(string,string)string)", + "Method(deleteGlobalState()bool)", "tmp%2#0" ] }, - "162": { - "op": "match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8", + "169": { + "op": "match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9", + "stack_out": [] + }, + "181": { + "block": "main_after_if_else@16", + "stack_in": [], + "op": "intc_0 // 0", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "182": { + "op": "return", "stack_out": [] }, - "172": { - "block": "main_after_if_else@15", + "183": { + "block": "main_deleteGlobalState_route@9", "stack_in": [], + "op": "txn OnCompletion", + "defined_out": [ + "tmp%31#0" + ], + "stack_out": [ + "tmp%31#0" + ] + }, + "185": { + "op": "!", + "defined_out": [ + "tmp%32#0" + ], + "stack_out": [ + "tmp%32#0" + ] + }, + "186": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", + "stack_out": [] + }, + "187": { + "op": "txn ApplicationID", + "defined_out": [ + "tmp%33#0" + ], + "stack_out": [ + "tmp%33#0" + ] + }, + "189": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", + "stack_out": [] + }, + "190": { + "callsub": "contracts/GlobalStorage/contract.algo.ts::GlobalStorage.deleteGlobalState", + "op": "callsub deleteGlobalState", + "defined_out": [ + "to_encode%1#0" + ], + "stack_out": [ + "to_encode%1#0" + ] + }, + "193": { + "op": "bytec 6 // 0x00", + "defined_out": [ + "0x00", + "to_encode%1#0" + ], + "stack_out": [ + "to_encode%1#0", + "0x00" + ] + }, + "195": { "op": "intc_0 // 0", + "defined_out": [ + "0", + "0x00", + "to_encode%1#0" + ], + "stack_out": [ + "to_encode%1#0", + "0x00", + "0" + ] + }, + "196": { + "op": "uncover 2", + "stack_out": [ + "0x00", + "0", + "to_encode%1#0" + ] + }, + "198": { + "op": "setbit", + "defined_out": [ + "encoded_bool%2#0" + ], + "stack_out": [ + "encoded_bool%2#0" + ] + }, + "199": { + "op": "bytec 4 // 0x151f7c75", + "defined_out": [ + "0x151f7c75", + "encoded_bool%2#0" + ], + "stack_out": [ + "encoded_bool%2#0", + "0x151f7c75" + ] + }, + "201": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "encoded_bool%2#0" + ] + }, + "202": { + "op": "concat", + "defined_out": [ + "tmp%35#0" + ], + "stack_out": [ + "tmp%35#0" + ] + }, + "203": { + "op": "log", + "stack_out": [] + }, + "204": { + "op": "intc_1 // 1", "defined_out": [ "tmp%0#0" ], @@ -235,11 +373,11 @@ "tmp%0#0" ] }, - "173": { + "205": { "op": "return", "stack_out": [] }, - "174": { + "206": { "block": "main_writeDynamicGlobalState_route@8", "stack_in": [], "op": "txn OnCompletion", @@ -250,7 +388,7 @@ "tmp%22#0" ] }, - "176": { + "208": { "op": "!", "defined_out": [ "tmp%23#0" @@ -259,12 +397,12 @@ "tmp%23#0" ] }, - "177": { + "209": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "178": { + "210": { "op": "txn ApplicationID", "defined_out": [ "tmp%24#0" @@ -273,12 +411,12 @@ "tmp%24#0" ] }, - "180": { + "212": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "181": { + "213": { "op": "txna ApplicationArgs 1", "defined_out": [ "tmp%26#0" @@ -287,7 +425,7 @@ "tmp%26#0" ] }, - "184": { + "216": { "op": "extract 2 0", "defined_out": [ "tmp%27#0" @@ -296,7 +434,7 @@ "tmp%27#0" ] }, - "187": { + "219": { "op": "txna ApplicationArgs 2", "defined_out": [ "tmp%27#0", @@ -307,7 +445,7 @@ "tmp%28#0" ] }, - "190": { + "222": { "op": "extract 2 0", "defined_out": [ "tmp%27#0", @@ -318,7 +456,7 @@ "tmp%29#0" ] }, - "193": { + "225": { "callsub": "contracts/GlobalStorage/contract.algo.ts::GlobalStorage.writeDynamicGlobalState", "op": "callsub writeDynamicGlobalState", "defined_out": [ @@ -328,7 +466,7 @@ "to_encode%0#0" ] }, - "196": { + "228": { "op": "dup", "defined_out": [ "to_encode%0#0", @@ -339,7 +477,7 @@ "to_encode%0#0 (copy)" ] }, - "197": { + "229": { "op": "len", "defined_out": [ "length%2#0", @@ -350,7 +488,7 @@ "length%2#0" ] }, - "198": { + "230": { "op": "itob", "defined_out": [ "as_bytes%4#0", @@ -361,7 +499,7 @@ "as_bytes%4#0" ] }, - "199": { + "231": { "op": "extract 6 2", "defined_out": [ "length_uint16%2#0", @@ -372,14 +510,14 @@ "length_uint16%2#0" ] }, - "202": { + "234": { "op": "swap", "stack_out": [ "length_uint16%2#0", "to_encode%0#0" ] }, - "203": { + "235": { "op": "concat", "defined_out": [ "encoded_value%2#0" @@ -388,7 +526,7 @@ "encoded_value%2#0" ] }, - "204": { + "236": { "op": "bytec 4 // 0x151f7c75", "defined_out": [ "0x151f7c75", @@ -399,14 +537,14 @@ "0x151f7c75" ] }, - "206": { + "238": { "op": "swap", "stack_out": [ "0x151f7c75", "encoded_value%2#0" ] }, - "207": { + "239": { "op": "concat", "defined_out": [ "tmp%30#0" @@ -415,11 +553,11 @@ "tmp%30#0" ] }, - "208": { + "240": { "op": "log", "stack_out": [] }, - "209": { + "241": { "op": "intc_1 // 1", "defined_out": [ "tmp%0#0" @@ -428,11 +566,11 @@ "tmp%0#0" ] }, - "210": { + "242": { "op": "return", "stack_out": [] }, - "211": { + "243": { "block": "main_writeGlobalState_route@7", "stack_in": [], "op": "txn OnCompletion", @@ -443,7 +581,7 @@ "tmp%13#0" ] }, - "213": { + "245": { "op": "!", "defined_out": [ "tmp%14#0" @@ -452,12 +590,12 @@ "tmp%14#0" ] }, - "214": { + "246": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "215": { + "247": { "op": "txn ApplicationID", "defined_out": [ "tmp%15#0" @@ -466,12 +604,12 @@ "tmp%15#0" ] }, - "217": { + "249": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "218": { + "250": { "op": "txna ApplicationArgs 1", "defined_out": [ "tmp%17#0" @@ -480,7 +618,7 @@ "tmp%17#0" ] }, - "221": { + "253": { "op": "extract 2 0", "defined_out": [ "tmp%18#0" @@ -489,7 +627,7 @@ "tmp%18#0" ] }, - "224": { + "256": { "op": "txna ApplicationArgs 2", "defined_out": [ "reinterpret_bytes[1]%0#0", @@ -500,7 +638,7 @@ "reinterpret_bytes[1]%0#0" ] }, - "227": { + "259": { "op": "intc_0 // 0", "defined_out": [ "0", @@ -513,7 +651,7 @@ "0" ] }, - "228": { + "260": { "op": "getbit", "defined_out": [ "tmp%18#0", @@ -524,7 +662,7 @@ "tmp%19#0" ] }, - "229": { + "261": { "op": "txna ApplicationArgs 3", "defined_out": [ "reinterpret_bytes[1]%1#0", @@ -537,7 +675,7 @@ "reinterpret_bytes[1]%1#0" ] }, - "232": { + "264": { "op": "btoi", "defined_out": [ "tmp%18#0", @@ -550,7 +688,7 @@ "tmp%20#0" ] }, - "233": { + "265": { "op": "txnas Accounts", "defined_out": [ "tmp%18#0", @@ -563,12 +701,12 @@ "tmp%21#0" ] }, - "235": { + "267": { "callsub": "contracts/GlobalStorage/contract.algo.ts::GlobalStorage.writeGlobalState", "op": "callsub writeGlobalState", "stack_out": [] }, - "238": { + "270": { "op": "intc_1 // 1", "defined_out": [ "tmp%0#0" @@ -577,11 +715,11 @@ "tmp%0#0" ] }, - "239": { + "271": { "op": "return", "stack_out": [] }, - "240": { + "272": { "block": "main_hasGlobalState_route@6", "stack_in": [], "op": "txn OnCompletion", @@ -592,7 +730,7 @@ "tmp%8#0" ] }, - "242": { + "274": { "op": "!", "defined_out": [ "tmp%9#0" @@ -601,12 +739,12 @@ "tmp%9#0" ] }, - "243": { + "275": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "244": { + "276": { "op": "txn ApplicationID", "defined_out": [ "tmp%10#0" @@ -615,12 +753,12 @@ "tmp%10#0" ] }, - "246": { + "278": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "247": { + "279": { "callsub": "contracts/GlobalStorage/contract.algo.ts::GlobalStorage.hasGlobalState", "op": "callsub hasGlobalState", "defined_out": [ @@ -632,14 +770,14 @@ "elements_to_encode%7#0" ] }, - "250": { + "282": { "op": "swap", "stack_out": [ "elements_to_encode%7#0", "elements_to_encode%6#0" ] }, - "251": { + "283": { "op": "itob", "defined_out": [ "elements_to_encode%7#0", @@ -650,8 +788,8 @@ "val_as_bytes%2#0" ] }, - "252": { - "op": "pushbytes 0x00", + "284": { + "op": "bytec 6 // 0x00", "defined_out": [ "0x00", "elements_to_encode%7#0", @@ -663,7 +801,7 @@ "0x00" ] }, - "255": { + "286": { "op": "intc_0 // 0", "defined_out": [ "0", @@ -678,7 +816,7 @@ "0" ] }, - "256": { + "287": { "op": "uncover 3", "stack_out": [ "val_as_bytes%2#0", @@ -687,7 +825,7 @@ "elements_to_encode%7#0" ] }, - "258": { + "289": { "op": "setbit", "defined_out": [ "encoded_bool%1#0", @@ -698,7 +836,7 @@ "encoded_bool%1#0" ] }, - "259": { + "290": { "op": "concat", "defined_out": [ "encoded_tuple_buffer%11#0" @@ -707,7 +845,7 @@ "encoded_tuple_buffer%11#0" ] }, - "260": { + "291": { "op": "bytec 4 // 0x151f7c75", "defined_out": [ "0x151f7c75", @@ -718,14 +856,14 @@ "0x151f7c75" ] }, - "262": { + "293": { "op": "swap", "stack_out": [ "0x151f7c75", "encoded_tuple_buffer%11#0" ] }, - "263": { + "294": { "op": "concat", "defined_out": [ "tmp%12#0" @@ -734,11 +872,11 @@ "tmp%12#0" ] }, - "264": { + "295": { "op": "log", "stack_out": [] }, - "265": { + "296": { "op": "intc_1 // 1", "defined_out": [ "tmp%0#0" @@ -747,11 +885,11 @@ "tmp%0#0" ] }, - "266": { + "297": { "op": "return", "stack_out": [] }, - "267": { + "298": { "block": "main_readGlobalState_route@5", "stack_in": [], "op": "txn OnCompletion", @@ -762,7 +900,7 @@ "tmp%3#0" ] }, - "269": { + "300": { "op": "!", "defined_out": [ "tmp%4#0" @@ -771,12 +909,12 @@ "tmp%4#0" ] }, - "270": { + "301": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "271": { + "302": { "op": "txn ApplicationID", "defined_out": [ "tmp%5#0" @@ -785,12 +923,12 @@ "tmp%5#0" ] }, - "273": { + "304": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "274": { + "305": { "callsub": "contracts/GlobalStorage/contract.algo.ts::GlobalStorage.readGlobalState", "op": "callsub readGlobalState", "defined_out": [ @@ -810,7 +948,7 @@ "elements_to_encode%5#0" ] }, - "277": { + "308": { "op": "uncover 5", "stack_out": [ "elements_to_encode%1#0", @@ -821,7 +959,7 @@ "elements_to_encode%0#0" ] }, - "279": { + "310": { "op": "itob", "defined_out": [ "elements_to_encode%1#0", @@ -840,7 +978,7 @@ "val_as_bytes%0#0" ] }, - "280": { + "311": { "op": "uncover 5", "stack_out": [ "elements_to_encode%2#0", @@ -851,7 +989,7 @@ "elements_to_encode%1#0" ] }, - "282": { + "313": { "op": "itob", "defined_out": [ "elements_to_encode%2#0", @@ -870,7 +1008,7 @@ "val_as_bytes%1#0" ] }, - "283": { + "314": { "op": "dig 5", "defined_out": [ "elements_to_encode%2#0", @@ -891,7 +1029,7 @@ "elements_to_encode%2#0 (copy)" ] }, - "285": { + "316": { "op": "len", "defined_out": [ "elements_to_encode%2#0", @@ -912,7 +1050,7 @@ "length%0#0" ] }, - "286": { + "317": { "op": "itob", "defined_out": [ "as_bytes%0#0", @@ -933,7 +1071,7 @@ "as_bytes%0#0" ] }, - "287": { + "318": { "op": "extract 6 2", "defined_out": [ "elements_to_encode%2#0", @@ -954,7 +1092,7 @@ "length_uint16%0#0" ] }, - "290": { + "321": { "op": "uncover 6", "stack_out": [ "elements_to_encode%3#0", @@ -966,7 +1104,7 @@ "elements_to_encode%2#0" ] }, - "292": { + "323": { "op": "concat", "defined_out": [ "elements_to_encode%3#0", @@ -985,7 +1123,7 @@ "encoded_value%0#0" ] }, - "293": { + "324": { "op": "dig 5", "defined_out": [ "elements_to_encode%3#0", @@ -1006,7 +1144,7 @@ "elements_to_encode%3#0 (copy)" ] }, - "295": { + "326": { "op": "len", "defined_out": [ "elements_to_encode%3#0", @@ -1027,7 +1165,7 @@ "length%1#0" ] }, - "296": { + "327": { "op": "itob", "defined_out": [ "as_bytes%1#0", @@ -1048,7 +1186,7 @@ "as_bytes%1#0" ] }, - "297": { + "328": { "op": "extract 6 2", "defined_out": [ "elements_to_encode%3#0", @@ -1069,7 +1207,7 @@ "length_uint16%1#0" ] }, - "300": { + "331": { "op": "uncover 6", "stack_out": [ "elements_to_encode%4#0", @@ -1081,7 +1219,7 @@ "elements_to_encode%3#0" ] }, - "302": { + "333": { "op": "concat", "defined_out": [ "elements_to_encode%4#0", @@ -1100,8 +1238,8 @@ "encoded_value%1#0" ] }, - "303": { - "op": "pushbytes 0x00", + "334": { + "op": "bytec 6 // 0x00", "defined_out": [ "0x00", "elements_to_encode%4#0", @@ -1121,7 +1259,7 @@ "0x00" ] }, - "306": { + "336": { "op": "intc_0 // 0", "defined_out": [ "0", @@ -1144,7 +1282,7 @@ "0" ] }, - "307": { + "337": { "op": "uncover 7", "stack_out": [ "elements_to_encode%5#0", @@ -1157,7 +1295,7 @@ "elements_to_encode%4#0" ] }, - "309": { + "339": { "op": "setbit", "defined_out": [ "elements_to_encode%5#0", @@ -1176,7 +1314,7 @@ "encoded_bool%0#0" ] }, - "310": { + "340": { "op": "uncover 4", "stack_out": [ "elements_to_encode%5#0", @@ -1187,7 +1325,7 @@ "val_as_bytes%0#0" ] }, - "312": { + "342": { "op": "uncover 4", "stack_out": [ "elements_to_encode%5#0", @@ -1198,7 +1336,7 @@ "val_as_bytes%1#0" ] }, - "314": { + "344": { "op": "concat", "defined_out": [ "elements_to_encode%5#0", @@ -1215,7 +1353,7 @@ "encoded_tuple_buffer%2#0" ] }, - "315": { + "345": { "op": "pushbytes 0x0035", "defined_out": [ "0x0035", @@ -1234,7 +1372,7 @@ "0x0035" ] }, - "319": { + "349": { "op": "concat", "defined_out": [ "elements_to_encode%5#0", @@ -1251,7 +1389,7 @@ "encoded_tuple_buffer%3#0" ] }, - "320": { + "350": { "op": "dig 3", "defined_out": [ "elements_to_encode%5#0", @@ -1270,7 +1408,7 @@ "encoded_value%0#0 (copy)" ] }, - "322": { + "352": { "op": "len", "defined_out": [ "data_length%0#0", @@ -1289,7 +1427,7 @@ "data_length%0#0" ] }, - "323": { + "353": { "op": "pushint 53 // 53", "defined_out": [ "53", @@ -1310,7 +1448,7 @@ "53" ] }, - "325": { + "355": { "op": "+", "defined_out": [ "current_tail_offset%1#0", @@ -1329,7 +1467,7 @@ "current_tail_offset%1#0" ] }, - "326": { + "356": { "op": "itob", "defined_out": [ "as_bytes%3#0", @@ -1348,7 +1486,7 @@ "as_bytes%3#0" ] }, - "327": { + "357": { "op": "extract 6 2", "defined_out": [ "elements_to_encode%5#0", @@ -1367,7 +1505,7 @@ "offset_as_uint16%1#0" ] }, - "330": { + "360": { "op": "concat", "defined_out": [ "elements_to_encode%5#0", @@ -1384,7 +1522,7 @@ "encoded_tuple_buffer%4#0" ] }, - "331": { + "361": { "op": "swap", "stack_out": [ "elements_to_encode%5#0", @@ -1394,7 +1532,7 @@ "encoded_bool%0#0" ] }, - "332": { + "362": { "op": "concat", "defined_out": [ "elements_to_encode%5#0", @@ -1409,7 +1547,7 @@ "encoded_tuple_buffer%5#0" ] }, - "333": { + "363": { "op": "uncover 3", "stack_out": [ "encoded_value%0#0", @@ -1418,7 +1556,7 @@ "elements_to_encode%5#0" ] }, - "335": { + "365": { "op": "concat", "defined_out": [ "encoded_tuple_buffer%6#0", @@ -1431,7 +1569,7 @@ "encoded_tuple_buffer%6#0" ] }, - "336": { + "366": { "op": "uncover 2", "stack_out": [ "encoded_value%1#0", @@ -1439,7 +1577,7 @@ "encoded_value%0#0" ] }, - "338": { + "368": { "op": "concat", "defined_out": [ "encoded_tuple_buffer%7#0", @@ -1450,14 +1588,14 @@ "encoded_tuple_buffer%7#0" ] }, - "339": { + "369": { "op": "swap", "stack_out": [ "encoded_tuple_buffer%7#0", "encoded_value%1#0" ] }, - "340": { + "370": { "op": "concat", "defined_out": [ "encoded_tuple_buffer%8#0" @@ -1466,7 +1604,7 @@ "encoded_tuple_buffer%8#0" ] }, - "341": { + "371": { "op": "bytec 4 // 0x151f7c75", "defined_out": [ "0x151f7c75", @@ -1477,14 +1615,14 @@ "0x151f7c75" ] }, - "343": { + "373": { "op": "swap", "stack_out": [ "0x151f7c75", "encoded_tuple_buffer%8#0" ] }, - "344": { + "374": { "op": "concat", "defined_out": [ "tmp%7#0" @@ -1493,11 +1631,11 @@ "tmp%7#0" ] }, - "345": { + "375": { "op": "log", "stack_out": [] }, - "346": { + "376": { "op": "intc_1 // 1", "defined_out": [ "tmp%0#0" @@ -1506,49 +1644,49 @@ "tmp%0#0" ] }, - "347": { + "377": { "op": "return", "stack_out": [] }, - "348": { - "block": "main_bare_routing@11", + "378": { + "block": "main_bare_routing@12", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%31#0" + "tmp%36#0" ], "stack_out": [ - "tmp%31#0" + "tmp%36#0" ] }, - "350": { - "op": "bnz main_after_if_else@15", + "380": { + "op": "bnz main_after_if_else@16", "stack_out": [] }, - "353": { + "383": { "op": "txn ApplicationID", "defined_out": [ - "tmp%32#0" + "tmp%37#0" ], "stack_out": [ - "tmp%32#0" + "tmp%37#0" ] }, - "355": { + "385": { "op": "!", "defined_out": [ - "tmp%33#0" + "tmp%38#0" ], "stack_out": [ - "tmp%33#0" + "tmp%38#0" ] }, - "356": { + "386": { "error": "can only call when creating", "op": "assert // can only call when creating", "stack_out": [] }, - "357": { + "387": { "op": "intc_1 // 1", "defined_out": [ "tmp%0#0" @@ -1557,11 +1695,11 @@ "tmp%0#0" ] }, - "358": { + "388": { "op": "return", "stack_out": [] }, - "359": { + "389": { "subroutine": "contracts/GlobalStorage/contract.algo.ts::GlobalStorage.readGlobalState", "params": {}, "block": "readGlobalState", @@ -1574,7 +1712,7 @@ "0" ] }, - "360": { + "390": { "op": "bytec_3 // \"globalAccount\"", "defined_out": [ "\"globalAccount\"", @@ -1585,7 +1723,7 @@ "\"globalAccount\"" ] }, - "361": { + "391": { "op": "app_global_get_ex", "defined_out": [ "accountAddress#0", @@ -1596,21 +1734,21 @@ "maybe_exists%0#0" ] }, - "362": { + "392": { "error": "check GlobalState exists", "op": "assert // check GlobalState exists", "stack_out": [ "accountAddress#0" ] }, - "363": { + "393": { "op": "intc_0 // 0", "stack_out": [ "accountAddress#0", "0" ] }, - "364": { + "394": { "op": "bytec 5 // \"globalInt\"", "defined_out": [ "\"globalInt\"", @@ -1623,7 +1761,7 @@ "\"globalInt\"" ] }, - "366": { + "396": { "op": "app_global_get_ex", "defined_out": [ "accountAddress#0", @@ -1636,7 +1774,7 @@ "maybe_exists%1#0" ] }, - "367": { + "397": { "error": "check GlobalState exists", "op": "assert // check GlobalState exists", "stack_out": [ @@ -1644,7 +1782,7 @@ "maybe_value%1#0" ] }, - "368": { + "398": { "op": "intc_0 // 0", "stack_out": [ "accountAddress#0", @@ -1652,7 +1790,7 @@ "0" ] }, - "369": { + "399": { "op": "bytec_2 // \"globalIntNoDefault\"", "defined_out": [ "\"globalIntNoDefault\"", @@ -1667,7 +1805,7 @@ "\"globalIntNoDefault\"" ] }, - "370": { + "400": { "op": "app_global_get_ex", "defined_out": [ "accountAddress#0", @@ -1682,7 +1820,7 @@ "maybe_exists%2#0" ] }, - "371": { + "401": { "error": "check GlobalState exists", "op": "assert // check GlobalState exists", "stack_out": [ @@ -1691,7 +1829,7 @@ "maybe_value%2#0" ] }, - "372": { + "402": { "op": "intc_0 // 0", "stack_out": [ "accountAddress#0", @@ -1700,8 +1838,8 @@ "0" ] }, - "373": { - "op": "bytec 6 // \"globalBytes\"", + "403": { + "op": "bytec 7 // \"globalBytes\"", "defined_out": [ "\"globalBytes\"", "0", @@ -1717,7 +1855,7 @@ "\"globalBytes\"" ] }, - "375": { + "405": { "op": "app_global_get_ex", "defined_out": [ "accountAddress#0", @@ -1734,7 +1872,7 @@ "maybe_exists%3#0" ] }, - "376": { + "406": { "error": "check GlobalState exists", "op": "assert // check GlobalState exists", "stack_out": [ @@ -1744,7 +1882,7 @@ "maybe_value%3#0" ] }, - "377": { + "407": { "op": "intc_0 // 0", "stack_out": [ "accountAddress#0", @@ -1754,7 +1892,7 @@ "0" ] }, - "378": { + "408": { "op": "bytec_0 // \"globalString\"", "defined_out": [ "\"globalString\"", @@ -1773,7 +1911,7 @@ "\"globalString\"" ] }, - "379": { + "409": { "op": "app_global_get_ex", "defined_out": [ "accountAddress#0", @@ -1792,7 +1930,7 @@ "maybe_exists%4#0" ] }, - "380": { + "410": { "error": "check GlobalState exists", "op": "assert // check GlobalState exists", "stack_out": [ @@ -1803,7 +1941,7 @@ "maybe_value%4#0" ] }, - "381": { + "411": { "op": "intc_0 // 0", "stack_out": [ "accountAddress#0", @@ -1814,7 +1952,7 @@ "0" ] }, - "382": { + "412": { "op": "bytec_1 // \"globalBool\"", "defined_out": [ "\"globalBool\"", @@ -1835,7 +1973,7 @@ "\"globalBool\"" ] }, - "383": { + "413": { "op": "app_global_get_ex", "defined_out": [ "accountAddress#0", @@ -1856,7 +1994,7 @@ "maybe_exists%5#0" ] }, - "384": { + "414": { "error": "check GlobalState exists", "op": "assert // check GlobalState exists", "stack_out": [ @@ -1868,7 +2006,7 @@ "maybe_value%5#0" ] }, - "385": { + "415": { "op": "uncover 5", "stack_out": [ "maybe_value%1#0", @@ -1879,11 +2017,11 @@ "accountAddress#0" ] }, - "387": { + "417": { "retsub": true, "op": "retsub" }, - "388": { + "418": { "subroutine": "contracts/GlobalStorage/contract.algo.ts::GlobalStorage.hasGlobalState", "params": {}, "block": "hasGlobalState", @@ -1896,7 +2034,7 @@ "0" ] }, - "389": { + "419": { "op": "bytec_2 // \"globalIntNoDefault\"", "defined_out": [ "\"globalIntNoDefault\"", @@ -1907,7 +2045,7 @@ "\"globalIntNoDefault\"" ] }, - "390": { + "420": { "op": "app_global_get_ex", "defined_out": [ "hasValue#0", @@ -1918,20 +2056,20 @@ "hasValue#0" ] }, - "391": { + "421": { "op": "bury 1", "stack_out": [ "hasValue#0" ] }, - "393": { + "423": { "op": "intc_0 // 0", "stack_out": [ "hasValue#0", "0" ] }, - "394": { + "424": { "op": "bytec_2 // \"globalIntNoDefault\"", "stack_out": [ "hasValue#0", @@ -1939,7 +2077,7 @@ "\"globalIntNoDefault\"" ] }, - "395": { + "425": { "op": "app_global_get_ex", "defined_out": [ "hasValue#0", @@ -1952,7 +2090,7 @@ "maybe_exists%1#0" ] }, - "396": { + "426": { "error": "check GlobalState exists", "op": "assert // check GlobalState exists", "stack_out": [ @@ -1960,7 +2098,7 @@ "value#0" ] }, - "397": { + "427": { "op": "dig 1", "defined_out": [ "hasValue#0", @@ -1973,7 +2111,7 @@ "hasValue#0 (copy)" ] }, - "399": { + "429": { "error": "Global state not set.", "op": "assert // Global state not set.", "stack_out": [ @@ -1981,18 +2119,18 @@ "value#0" ] }, - "400": { + "430": { "op": "swap", "stack_out": [ "value#0", "hasValue#0" ] }, - "401": { + "431": { "retsub": true, "op": "retsub" }, - "402": { + "432": { "subroutine": "contracts/GlobalStorage/contract.algo.ts::GlobalStorage.writeGlobalState", "params": { "valueString#0": "bytes", @@ -2003,7 +2141,7 @@ "stack_in": [], "op": "proto 3 0" }, - "405": { + "435": { "op": "bytec_0 // \"globalString\"", "defined_out": [ "\"globalString\"" @@ -2012,7 +2150,7 @@ "\"globalString\"" ] }, - "406": { + "436": { "op": "frame_dig -3", "defined_out": [ "\"globalString\"", @@ -2023,11 +2161,11 @@ "valueString#0 (copy)" ] }, - "408": { + "438": { "op": "app_global_put", "stack_out": [] }, - "409": { + "439": { "op": "bytec_1 // \"globalBool\"", "defined_out": [ "\"globalBool\"" @@ -2036,7 +2174,7 @@ "\"globalBool\"" ] }, - "410": { + "440": { "op": "frame_dig -2", "defined_out": [ "\"globalBool\"", @@ -2047,11 +2185,11 @@ "valueBool#0 (copy)" ] }, - "412": { + "442": { "op": "app_global_put", "stack_out": [] }, - "413": { + "443": { "op": "bytec_3 // \"globalAccount\"", "defined_out": [ "\"globalAccount\"" @@ -2060,7 +2198,7 @@ "\"globalAccount\"" ] }, - "414": { + "444": { "op": "frame_dig -1", "defined_out": [ "\"globalAccount\"", @@ -2071,11 +2209,11 @@ "valueAccount#0 (copy)" ] }, - "416": { + "446": { "op": "app_global_put", "stack_out": [] }, - "417": { + "447": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -2084,14 +2222,14 @@ "0" ] }, - "418": { + "448": { "op": "bytec_0 // \"globalString\"", "stack_out": [ "0", "\"globalString\"" ] }, - "419": { + "449": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%0#0", @@ -2102,21 +2240,21 @@ "maybe_exists%0#0" ] }, - "420": { + "450": { "error": "check GlobalState exists", "op": "assert // check GlobalState exists", "stack_out": [ "maybe_value%0#0" ] }, - "421": { + "451": { "op": "frame_dig -3", "stack_out": [ "maybe_value%0#0", "valueString#0 (copy)" ] }, - "423": { + "453": { "op": "==", "defined_out": [ "tmp%0#0" @@ -2125,24 +2263,24 @@ "tmp%0#0" ] }, - "424": { + "454": { "op": "assert", "stack_out": [] }, - "425": { + "455": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "426": { + "456": { "op": "bytec_1 // \"globalBool\"", "stack_out": [ "0", "\"globalBool\"" ] }, - "427": { + "457": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%1#0", @@ -2153,21 +2291,21 @@ "maybe_exists%1#0" ] }, - "428": { + "458": { "error": "check GlobalState exists", "op": "assert // check GlobalState exists", "stack_out": [ "maybe_value%1#0" ] }, - "429": { + "459": { "op": "frame_dig -2", "stack_out": [ "maybe_value%1#0", "valueBool#0 (copy)" ] }, - "431": { + "461": { "op": "==", "defined_out": [ "tmp%1#0" @@ -2176,24 +2314,24 @@ "tmp%1#0" ] }, - "432": { + "462": { "op": "assert", "stack_out": [] }, - "433": { + "463": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "434": { + "464": { "op": "bytec_3 // \"globalAccount\"", "stack_out": [ "0", "\"globalAccount\"" ] }, - "435": { + "465": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%2#0", @@ -2204,21 +2342,21 @@ "maybe_exists%2#0" ] }, - "436": { + "466": { "error": "check GlobalState exists", "op": "assert // check GlobalState exists", "stack_out": [ "maybe_value%2#0" ] }, - "437": { + "467": { "op": "frame_dig -1", "stack_out": [ "maybe_value%2#0", "valueAccount#0 (copy)" ] }, - "439": { + "469": { "op": "==", "defined_out": [ "tmp%2#0" @@ -2227,15 +2365,15 @@ "tmp%2#0" ] }, - "440": { + "470": { "op": "assert", "stack_out": [] }, - "441": { + "471": { "retsub": true, "op": "retsub" }, - "442": { + "472": { "subroutine": "contracts/GlobalStorage/contract.algo.ts::GlobalStorage.writeDynamicGlobalState", "params": { "key#0": "bytes", @@ -2245,7 +2383,7 @@ "stack_in": [], "op": "proto 2 1" }, - "445": { + "475": { "op": "frame_dig -2", "defined_out": [ "key#0 (copy)" @@ -2254,7 +2392,7 @@ "key#0 (copy)" ] }, - "447": { + "477": { "op": "frame_dig -1", "defined_out": [ "key#0 (copy)", @@ -2265,11 +2403,11 @@ "value#0 (copy)" ] }, - "449": { + "479": { "op": "app_global_put", "stack_out": [] }, - "450": { + "480": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -2278,14 +2416,14 @@ "0" ] }, - "451": { + "481": { "op": "frame_dig -2", "stack_out": [ "0", "key#0 (copy)" ] }, - "453": { + "483": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%0#0", @@ -2296,21 +2434,21 @@ "maybe_exists%0#0" ] }, - "454": { + "484": { "error": "check GlobalState exists", "op": "assert // check GlobalState exists", "stack_out": [ "maybe_value%0#0" ] }, - "455": { + "485": { "op": "frame_dig -1", "stack_out": [ "maybe_value%0#0", "value#0 (copy)" ] }, - "457": { + "487": { "op": "==", "defined_out": [ "tmp%0#0" @@ -2319,24 +2457,24 @@ "tmp%0#0" ] }, - "458": { + "488": { "op": "assert", "stack_out": [] }, - "459": { + "489": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "460": { + "490": { "op": "frame_dig -2", "stack_out": [ "0", "key#0 (copy)" ] }, - "462": { + "492": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%1#0", @@ -2347,14 +2485,44 @@ "maybe_exists%1#0" ] }, - "463": { + "493": { "error": "check GlobalState exists", "op": "assert // check GlobalState exists", "stack_out": [ "maybe_value%1#0" ] }, - "464": { + "494": { + "retsub": true, + "op": "retsub" + }, + "495": { + "subroutine": "contracts/GlobalStorage/contract.algo.ts::GlobalStorage.deleteGlobalState", + "params": {}, + "block": "deleteGlobalState", + "stack_in": [], + "op": "bytec 5 // \"globalInt\"", + "defined_out": [ + "\"globalInt\"" + ], + "stack_out": [ + "\"globalInt\"" + ] + }, + "497": { + "op": "app_global_del", + "stack_out": [] + }, + "498": { + "op": "intc_1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "499": { "retsub": true, "op": "retsub" } diff --git a/projects/typescript-examples/contracts/artifacts/contracts/GlobalStorage/GlobalStorage.approval.teal b/projects/typescript-examples/contracts/artifacts/contracts/GlobalStorage/GlobalStorage.approval.teal index 4590711..e9cd3bf 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/GlobalStorage/GlobalStorage.approval.teal +++ b/projects/typescript-examples/contracts/artifacts/contracts/GlobalStorage/GlobalStorage.approval.teal @@ -4,7 +4,7 @@ // @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: main: intcblock 0 1 - bytecblock "globalString" "globalBool" "globalIntNoDefault" "globalAccount" 0x151f7c75 "globalInt" "globalBytes" + bytecblock "globalString" "globalBool" "globalIntNoDefault" "globalAccount" 0x151f7c75 "globalInt" 0x00 "globalBytes" txn ApplicationID bnz main_after_if_else@2 // contracts/GlobalStorage/contract.algo.ts:20 @@ -14,7 +14,7 @@ main: app_global_put // contracts/GlobalStorage/contract.algo.ts:22 // public globalBytes = GlobalState({ initialValue: Bytes('Silvio') }) // Bytes with default value - bytec 6 // "globalBytes" + bytec 7 // "globalBytes" pushbytes "Silvio" app_global_put // contracts/GlobalStorage/contract.algo.ts:23 @@ -47,18 +47,38 @@ main_after_if_else@2: // @contract({ stateTotals: { globalBytes: 4, globalUints: 3 } }) // export default class GlobalStorage extends Contract { txn NumAppArgs - bz main_bare_routing@11 - pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 // method "readGlobalState()(uint64,uint64,byte[],string,bool,address)", method "hasGlobalState()(uint64,bool)", method "writeGlobalState(string,bool,account)void", method "writeDynamicGlobalState(string,string)string" + bz main_bare_routing@12 + pushbytess 0xd38f6072 0x47b45cd1 0xf7a04ede 0x4a4c6bf6 0x3c7b1f00 // method "readGlobalState()(uint64,uint64,byte[],string,bool,address)", method "hasGlobalState()(uint64,bool)", method "writeGlobalState(string,bool,account)void", method "writeDynamicGlobalState(string,string)string", method "deleteGlobalState()bool" txna ApplicationArgs 0 - match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 + match main_readGlobalState_route@5 main_hasGlobalState_route@6 main_writeGlobalState_route@7 main_writeDynamicGlobalState_route@8 main_deleteGlobalState_route@9 -main_after_if_else@15: +main_after_if_else@16: // contracts/GlobalStorage/contract.algo.ts:17-18 // @contract({ stateTotals: { globalBytes: 4, globalUints: 3 } }) // export default class GlobalStorage extends Contract { intc_0 // 0 return +main_deleteGlobalState_route@9: + // contracts/GlobalStorage/contract.algo.ts:110 + // @arc4.abimethod() + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + callsub deleteGlobalState + bytec 6 // 0x00 + intc_0 // 0 + uncover 2 + setbit + bytec 4 // 0x151f7c75 + swap + concat + log + intc_1 // 1 + return + main_writeDynamicGlobalState_route@8: // contracts/GlobalStorage/contract.algo.ts:99 // public writeDynamicGlobalState(key: string, value: string): string { @@ -126,7 +146,7 @@ main_hasGlobalState_route@6: callsub hasGlobalState swap itob - pushbytes 0x00 + bytec 6 // 0x00 intc_0 // 0 uncover 3 setbit @@ -163,7 +183,7 @@ main_readGlobalState_route@5: extract 6 2 uncover 6 concat - pushbytes 0x00 + bytec 6 // 0x00 intc_0 // 0 uncover 7 setbit @@ -194,12 +214,12 @@ main_readGlobalState_route@5: intc_1 // 1 return -main_bare_routing@11: +main_bare_routing@12: // contracts/GlobalStorage/contract.algo.ts:17-18 // @contract({ stateTotals: { globalBytes: 4, globalUints: 3 } }) // export default class GlobalStorage extends Contract { txn OnCompletion - bnz main_after_if_else@15 + bnz main_after_if_else@16 txn ApplicationID ! assert // can only call when creating @@ -230,7 +250,7 @@ readGlobalState: // contracts/GlobalStorage/contract.algo.ts:22 // public globalBytes = GlobalState({ initialValue: Bytes('Silvio') }) // Bytes with default value intc_0 // 0 - bytec 6 // "globalBytes" + bytec 7 // "globalBytes" app_global_get_ex assert // check GlobalState exists // contracts/GlobalStorage/contract.algo.ts:23 @@ -372,3 +392,17 @@ writeDynamicGlobalState: app_global_get_ex assert // check GlobalState exists retsub + + +// contracts/GlobalStorage/contract.algo.ts::GlobalStorage.deleteGlobalState() -> uint64: +deleteGlobalState: + // contracts/GlobalStorage/contract.algo.ts:20 + // public globalInt = GlobalState({ initialValue: Uint64(50) }) // UInt64 with default value + bytec 5 // "globalInt" + // contracts/GlobalStorage/contract.algo.ts:112 + // this.globalInt.delete() + app_global_del + // contracts/GlobalStorage/contract.algo.ts:113 + // return true + intc_1 // 1 + retsub diff --git a/projects/typescript-examples/contracts/artifacts/contracts/GlobalStorage/GlobalStorage.arc32.json b/projects/typescript-examples/contracts/artifacts/contracts/GlobalStorage/GlobalStorage.arc32.json index d6bfccf..f482f53 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/GlobalStorage/GlobalStorage.arc32.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/GlobalStorage/GlobalStorage.arc32.json @@ -19,10 +19,15 @@ "call_config": { "no_op": "CALL" } + }, + "deleteGlobalState()bool": { + "call_config": { + "no_op": "CALL" + } } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJnbG9iYWxTdHJpbmciICJnbG9iYWxCb29sIiAiZ2xvYmFsSW50Tm9EZWZhdWx0IiAiZ2xvYmFsQWNjb3VudCIgMHgxNTFmN2M3NSAiZ2xvYmFsSW50IiAiZ2xvYmFsQnl0ZXMiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBwdWJsaWMgZ2xvYmFsSW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDUwKSB9KSAvLyBVSW50NjQgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBieXRlYyA1IC8vICJnbG9iYWxJbnQiCiAgICBwdXNoaW50IDUwIC8vIDUwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gcHVibGljIGdsb2JhbEJ5dGVzID0gR2xvYmFsU3RhdGU8Ynl0ZXM+KHsgaW5pdGlhbFZhbHVlOiBCeXRlcygnU2lsdmlvJykgfSkgLy8gQnl0ZXMgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBieXRlYyA2IC8vICJnbG9iYWxCeXRlcyIKICAgIHB1c2hieXRlcyAiU2lsdmlvIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHB1YmxpYyBnbG9iYWxTdHJpbmcgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsgaW5pdGlhbFZhbHVlOiAnTWljYWxpJyB9KSAvLyBCeXRlcyB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjXzAgLy8gImdsb2JhbFN0cmluZyIKICAgIHB1c2hieXRlcyAiTWljYWxpIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIHB1YmxpYyBnbG9iYWxCb29sID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IHRydWUgfSkgLy8gQm9vbCB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjXzEgLy8gImdsb2JhbEJvb2wiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjEKICAgIC8vIHB1YmxpYyBnbG9iYWxJbnROb0RlZmF1bHQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gVUludDY0IHdpdGggbm8gZGVmYXVsdCB2YWx1ZQogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsSW50Tm9EZWZhdWx0IgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMwogICAgLy8gdGhpcy5nbG9iYWxJbnROb0RlZmF1bHQudmFsdWUgPSBVaW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gcHVibGljIGdsb2JhbEFjY291bnQgPSBHbG9iYWxTdGF0ZTxBY2NvdW50PigpIC8vIEFkZHJlc3Mgd2l0aCBubyBkZWZhdWx0IHZhbHVlCiAgICBieXRlY18zIC8vICJnbG9iYWxBY2NvdW50IgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNAogICAgLy8gdGhpcy5nbG9iYWxBY2NvdW50LnZhbHVlID0gVHhuLnNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNy0xOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsQnl0ZXM6IDQsIGdsb2JhbFVpbnRzOiAzIH0gfSkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEdsb2JhbFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTEKICAgIHB1c2hieXRlc3MgMHhkMzhmNjA3MiAweDQ3YjQ1Y2QxIDB4ZjdhMDRlZGUgMHg0YTRjNmJmNiAvLyBtZXRob2QgInJlYWRHbG9iYWxTdGF0ZSgpKHVpbnQ2NCx1aW50NjQsYnl0ZVtdLHN0cmluZyxib29sLGFkZHJlc3MpIiwgbWV0aG9kICJoYXNHbG9iYWxTdGF0ZSgpKHVpbnQ2NCxib29sKSIsIG1ldGhvZCAid3JpdGVHbG9iYWxTdGF0ZShzdHJpbmcsYm9vbCxhY2NvdW50KXZvaWQiLCBtZXRob2QgIndyaXRlRHluYW1pY0dsb2JhbFN0YXRlKHN0cmluZyxzdHJpbmcpc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9yZWFkR2xvYmFsU3RhdGVfcm91dGVANSBtYWluX2hhc0dsb2JhbFN0YXRlX3JvdXRlQDYgbWFpbl93cml0ZUdsb2JhbFN0YXRlX3JvdXRlQDcgbWFpbl93cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZV9yb3V0ZUA4CgptYWluX2FmdGVyX2lmX2Vsc2VAMTU6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3LTE4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxCeXRlczogNCwgZ2xvYmFsVWludHM6IDMgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xvYmFsU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fd3JpdGVEeW5hbWljR2xvYmFsU3RhdGVfcm91dGVAODoKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIHB1YmxpYyB3cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTctMTgKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbEJ5dGVzOiA0LCBnbG9iYWxVaW50czogMyB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBHbG9iYWxTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyBwdWJsaWMgd3JpdGVEeW5hbWljR2xvYmFsU3RhdGUoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgewogICAgY2FsbHN1YiB3cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fd3JpdGVHbG9iYWxTdGF0ZV9yb3V0ZUA3OgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gcHVibGljIHdyaXRlR2xvYmFsU3RhdGUodmFsdWVTdHJpbmc6IHN0cmluZywgdmFsdWVCb29sOiBib29sZWFuLCB2YWx1ZUFjY291bnQ6IEFjY291bnQpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNy0xOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsQnl0ZXM6IDQsIGdsb2JhbFVpbnRzOiAzIH0gfSkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEdsb2JhbFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIHB1YmxpYyB3cml0ZUdsb2JhbFN0YXRlKHZhbHVlU3RyaW5nOiBzdHJpbmcsIHZhbHVlQm9vbDogYm9vbGVhbiwgdmFsdWVBY2NvdW50OiBBY2NvdW50KTogdm9pZCB7CiAgICBjYWxsc3ViIHdyaXRlR2xvYmFsU3RhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5faGFzR2xvYmFsU3RhdGVfcm91dGVANjoKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIHB1YmxpYyBoYXNHbG9iYWxTdGF0ZSgpOiBbdWludDY0LCBib29sZWFuXSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgaGFzR2xvYmFsU3RhdGUKICAgIHN3YXAKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZWFkR2xvYmFsU3RhdGVfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHB1YmxpYyByZWFkR2xvYmFsU3RhdGUoKTogW3VpbnQ2NCwgdWludDY0LCBieXRlcywgc3RyaW5nLCBib29sZWFuLCBhcmM0LkFkZHJlc3NdIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiByZWFkR2xvYmFsU3RhdGUKICAgIHVuY292ZXIgNQogICAgaXRvYgogICAgdW5jb3ZlciA1CiAgICBpdG9iCiAgICBkaWcgNQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciA2CiAgICBjb25jYXQKICAgIGRpZyA1CiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDYKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDcKICAgIHNldGJpdAogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDAzNQogICAgY29uY2F0CiAgICBkaWcgMwogICAgbGVuCiAgICBwdXNoaW50IDUzIC8vIDUzCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxMToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTctMTgKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbEJ5dGVzOiA0LCBnbG9iYWxVaW50czogMyB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBHbG9iYWxTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxNQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdG9yYWdlLnJlYWRHbG9iYWxTdGF0ZSgpIC0+IHVpbnQ2NCwgdWludDY0LCBieXRlcywgYnl0ZXMsIHVpbnQ2NCwgYnl0ZXM6CnJlYWRHbG9iYWxTdGF0ZToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyBnbG9iYWxBY2NvdW50ID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKSAvLyBBZGRyZXNzIHdpdGggbm8gZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImdsb2JhbEFjY291bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcHVibGljIGdsb2JhbEludCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg1MCkgfSkgLy8gVUludDY0IHdpdGggZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImdsb2JhbEludCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIxCiAgICAvLyBwdWJsaWMgZ2xvYmFsSW50Tm9EZWZhdWx0ID0gR2xvYmFsU3RhdGU8dWludDY0PigpIC8vIFVJbnQ2NCB3aXRoIG5vIGRlZmF1bHQgdmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJnbG9iYWxJbnROb0RlZmF1bHQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gcHVibGljIGdsb2JhbEJ5dGVzID0gR2xvYmFsU3RhdGU8Ynl0ZXM+KHsgaW5pdGlhbFZhbHVlOiBCeXRlcygnU2lsdmlvJykgfSkgLy8gQnl0ZXMgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAiZ2xvYmFsQnl0ZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMwogICAgLy8gcHVibGljIGdsb2JhbFN0cmluZyA9IEdsb2JhbFN0YXRlPHN0cmluZz4oeyBpbml0aWFsVmFsdWU6ICdNaWNhbGknIH0pIC8vIEJ5dGVzIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImdsb2JhbFN0cmluZyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBwdWJsaWMgZ2xvYmFsQm9vbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pIC8vIEJvb2wgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiZ2xvYmFsQm9vbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ4LTU1CiAgICAvLyByZXR1cm4gWwogICAgLy8gICB0aGlzLmdsb2JhbEludC52YWx1ZSwKICAgIC8vICAgdGhpcy5nbG9iYWxJbnROb0RlZmF1bHQudmFsdWUsCiAgICAvLyAgIHRoaXMuZ2xvYmFsQnl0ZXMudmFsdWUsCiAgICAvLyAgIHRoaXMuZ2xvYmFsU3RyaW5nLnZhbHVlLAogICAgLy8gICB0aGlzLmdsb2JhbEJvb2wudmFsdWUsCiAgICAvLyAgIGFjY291bnRBZGRyZXNzLAogICAgLy8gXQogICAgdW5jb3ZlciA1CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdG9yYWdlLmhhc0dsb2JhbFN0YXRlKCkgLT4gdWludDY0LCB1aW50NjQ6Cmhhc0dsb2JhbFN0YXRlOgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gcHVibGljIGdsb2JhbEludE5vRGVmYXVsdCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBVSW50NjQgd2l0aCBubyBkZWZhdWx0IHZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsSW50Tm9EZWZhdWx0IgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo2NgogICAgLy8gY29uc3QgaGFzVmFsdWUgPSB0aGlzLmdsb2JhbEludE5vRGVmYXVsdC5oYXNWYWx1ZQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gcHVibGljIGdsb2JhbEludE5vRGVmYXVsdCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBVSW50NjQgd2l0aCBubyBkZWZhdWx0IHZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsSW50Tm9EZWZhdWx0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIGFzc2VydChoYXNWYWx1ZSwgJ0dsb2JhbCBzdGF0ZSBub3Qgc2V0LicpCiAgICBkaWcgMQogICAgYXNzZXJ0IC8vIEdsb2JhbCBzdGF0ZSBub3Qgc2V0LgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo3MQogICAgLy8gcmV0dXJuIFt2YWx1ZSwgaGFzVmFsdWVdCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdG9yYWdlLndyaXRlR2xvYmFsU3RhdGUodmFsdWVTdHJpbmc6IGJ5dGVzLCB2YWx1ZUJvb2w6IHVpbnQ2NCwgdmFsdWVBY2NvdW50OiBieXRlcykgLT4gdm9pZDoKd3JpdGVHbG9iYWxTdGF0ZToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIHB1YmxpYyB3cml0ZUdsb2JhbFN0YXRlKHZhbHVlU3RyaW5nOiBzdHJpbmcsIHZhbHVlQm9vbDogYm9vbGVhbiwgdmFsdWVBY2NvdW50OiBBY2NvdW50KTogdm9pZCB7CiAgICBwcm90byAzIDAKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHB1YmxpYyBnbG9iYWxTdHJpbmcgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsgaW5pdGlhbFZhbHVlOiAnTWljYWxpJyB9KSAvLyBCeXRlcyB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjXzAgLy8gImdsb2JhbFN0cmluZyIKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODMKICAgIC8vIHRoaXMuZ2xvYmFsU3RyaW5nLnZhbHVlID0gdmFsdWVTdHJpbmcKICAgIGZyYW1lX2RpZyAtMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIHB1YmxpYyBnbG9iYWxCb29sID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IHRydWUgfSkgLy8gQm9vbCB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjXzEgLy8gImdsb2JhbEJvb2wiCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyB0aGlzLmdsb2JhbEJvb2wudmFsdWUgPSB2YWx1ZUJvb2wKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyBnbG9iYWxBY2NvdW50ID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKSAvLyBBZGRyZXNzIHdpdGggbm8gZGVmYXVsdCB2YWx1ZQogICAgYnl0ZWNfMyAvLyAiZ2xvYmFsQWNjb3VudCIKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIHRoaXMuZ2xvYmFsQWNjb3VudC52YWx1ZSA9IHZhbHVlQWNjb3VudAogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMwogICAgLy8gcHVibGljIGdsb2JhbFN0cmluZyA9IEdsb2JhbFN0YXRlPHN0cmluZz4oeyBpbml0aWFsVmFsdWU6ICdNaWNhbGknIH0pIC8vIEJ5dGVzIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImdsb2JhbFN0cmluZyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyBhc3NlcnQodGhpcy5nbG9iYWxTdHJpbmcudmFsdWUgPT09IHZhbHVlU3RyaW5nKQogICAgZnJhbWVfZGlnIC0zCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBwdWJsaWMgZ2xvYmFsQm9vbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pIC8vIEJvb2wgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiZ2xvYmFsQm9vbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg4CiAgICAvLyBhc3NlcnQodGhpcy5nbG9iYWxCb29sLnZhbHVlID09PSB2YWx1ZUJvb2wpCiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyBnbG9iYWxBY2NvdW50ID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKSAvLyBBZGRyZXNzIHdpdGggbm8gZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImdsb2JhbEFjY291bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4OQogICAgLy8gYXNzZXJ0KHRoaXMuZ2xvYmFsQWNjb3VudC52YWx1ZSA9PT0gdmFsdWVBY2NvdW50KQogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdG9yYWdlLndyaXRlRHluYW1pY0dsb2JhbFN0YXRlKGtleTogYnl0ZXMsIHZhbHVlOiBieXRlcykgLT4gYnl0ZXM6CndyaXRlRHluYW1pY0dsb2JhbFN0YXRlOgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo5OQogICAgLy8gcHVibGljIHdyaXRlRHluYW1pY0dsb2JhbFN0YXRlKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDIKICAgIC8vIGdsb2JhbER5bmFtaWNBY2Nlc3MudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEwNAogICAgLy8gYXNzZXJ0KGdsb2JhbER5bmFtaWNBY2Nlc3MudmFsdWUgPT09IHZhbHVlKQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIHJldHVybiBnbG9iYWxEeW5hbWljQWNjZXNzLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfZGlnIC0yCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJnbG9iYWxTdHJpbmciICJnbG9iYWxCb29sIiAiZ2xvYmFsSW50Tm9EZWZhdWx0IiAiZ2xvYmFsQWNjb3VudCIgMHgxNTFmN2M3NSAiZ2xvYmFsSW50IiAweDAwICJnbG9iYWxCeXRlcyIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHB1YmxpYyBnbG9iYWxJbnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoNTApIH0pIC8vIFVJbnQ2NCB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjIDUgLy8gImdsb2JhbEludCIKICAgIHB1c2hpbnQgNTAgLy8gNTAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBwdWJsaWMgZ2xvYmFsQnl0ZXMgPSBHbG9iYWxTdGF0ZTxieXRlcz4oeyBpbml0aWFsVmFsdWU6IEJ5dGVzKCdTaWx2aW8nKSB9KSAvLyBCeXRlcyB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjIDcgLy8gImdsb2JhbEJ5dGVzIgogICAgcHVzaGJ5dGVzICJTaWx2aW8iCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMwogICAgLy8gcHVibGljIGdsb2JhbFN0cmluZyA9IEdsb2JhbFN0YXRlPHN0cmluZz4oeyBpbml0aWFsVmFsdWU6ICdNaWNhbGknIH0pIC8vIEJ5dGVzIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgYnl0ZWNfMCAvLyAiZ2xvYmFsU3RyaW5nIgogICAgcHVzaGJ5dGVzICJNaWNhbGkiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gcHVibGljIGdsb2JhbEJvb2wgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KSAvLyBCb29sIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgYnl0ZWNfMSAvLyAiZ2xvYmFsQm9vbCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gcHVibGljIGdsb2JhbEludE5vRGVmYXVsdCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBVSW50NjQgd2l0aCBubyBkZWZhdWx0IHZhbHVlCiAgICBieXRlY18yIC8vICJnbG9iYWxJbnROb0RlZmF1bHQiCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyB0aGlzLmdsb2JhbEludE5vRGVmYXVsdC52YWx1ZSA9IFVpbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMgZ2xvYmFsQWNjb3VudCA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCkgLy8gQWRkcmVzcyB3aXRoIG5vIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjXzMgLy8gImdsb2JhbEFjY291bnQiCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM0CiAgICAvLyB0aGlzLmdsb2JhbEFjY291bnQudmFsdWUgPSBUeG4uc2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3LTE4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxCeXRlczogNCwgZ2xvYmFsVWludHM6IDMgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xvYmFsU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxMgogICAgcHVzaGJ5dGVzcyAweGQzOGY2MDcyIDB4NDdiNDVjZDEgMHhmN2EwNGVkZSAweDRhNGM2YmY2IDB4M2M3YjFmMDAgLy8gbWV0aG9kICJyZWFkR2xvYmFsU3RhdGUoKSh1aW50NjQsdWludDY0LGJ5dGVbXSxzdHJpbmcsYm9vbCxhZGRyZXNzKSIsIG1ldGhvZCAiaGFzR2xvYmFsU3RhdGUoKSh1aW50NjQsYm9vbCkiLCBtZXRob2QgIndyaXRlR2xvYmFsU3RhdGUoc3RyaW5nLGJvb2wsYWNjb3VudCl2b2lkIiwgbWV0aG9kICJ3cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZShzdHJpbmcsc3RyaW5nKXN0cmluZyIsIG1ldGhvZCAiZGVsZXRlR2xvYmFsU3RhdGUoKWJvb2wiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX3JlYWRHbG9iYWxTdGF0ZV9yb3V0ZUA1IG1haW5faGFzR2xvYmFsU3RhdGVfcm91dGVANiBtYWluX3dyaXRlR2xvYmFsU3RhdGVfcm91dGVANyBtYWluX3dyaXRlRHluYW1pY0dsb2JhbFN0YXRlX3JvdXRlQDggbWFpbl9kZWxldGVHbG9iYWxTdGF0ZV9yb3V0ZUA5CgptYWluX2FmdGVyX2lmX2Vsc2VAMTY6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3LTE4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxCeXRlczogNCwgZ2xvYmFsVWludHM6IDMgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xvYmFsU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fZGVsZXRlR2xvYmFsU3RhdGVfcm91dGVAOToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZUdsb2JhbFN0YXRlCiAgICBieXRlYyA2IC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl93cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZV9yb3V0ZUA4OgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo5OQogICAgLy8gcHVibGljIHdyaXRlRHluYW1pY0dsb2JhbFN0YXRlKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNy0xOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsQnl0ZXM6IDQsIGdsb2JhbFVpbnRzOiAzIH0gfSkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEdsb2JhbFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIHB1YmxpYyB3cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBjYWxsc3ViIHdyaXRlRHluYW1pY0dsb2JhbFN0YXRlCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl93cml0ZUdsb2JhbFN0YXRlX3JvdXRlQDc6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjgyCiAgICAvLyBwdWJsaWMgd3JpdGVHbG9iYWxTdGF0ZSh2YWx1ZVN0cmluZzogc3RyaW5nLCB2YWx1ZUJvb2w6IGJvb2xlYW4sIHZhbHVlQWNjb3VudDogQWNjb3VudCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3LTE4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxCeXRlczogNCwgZ2xvYmFsVWludHM6IDMgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xvYmFsU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gcHVibGljIHdyaXRlR2xvYmFsU3RhdGUodmFsdWVTdHJpbmc6IHN0cmluZywgdmFsdWVCb29sOiBib29sZWFuLCB2YWx1ZUFjY291bnQ6IEFjY291bnQpOiB2b2lkIHsKICAgIGNhbGxzdWIgd3JpdGVHbG9iYWxTdGF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9oYXNHbG9iYWxTdGF0ZV9yb3V0ZUA2OgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo2NQogICAgLy8gcHVibGljIGhhc0dsb2JhbFN0YXRlKCk6IFt1aW50NjQsIGJvb2xlYW5dIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBoYXNHbG9iYWxTdGF0ZQogICAgc3dhcAogICAgaXRvYgogICAgYnl0ZWMgNiAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZWFkR2xvYmFsU3RhdGVfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHB1YmxpYyByZWFkR2xvYmFsU3RhdGUoKTogW3VpbnQ2NCwgdWludDY0LCBieXRlcywgc3RyaW5nLCBib29sZWFuLCBhcmM0LkFkZHJlc3NdIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiByZWFkR2xvYmFsU3RhdGUKICAgIHVuY292ZXIgNQogICAgaXRvYgogICAgdW5jb3ZlciA1CiAgICBpdG9iCiAgICBkaWcgNQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciA2CiAgICBjb25jYXQKICAgIGRpZyA1CiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDYKICAgIGNvbmNhdAogICAgYnl0ZWMgNiAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciA3CiAgICBzZXRiaXQKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwMzUKICAgIGNvbmNhdAogICAgZGlnIDMKICAgIGxlbgogICAgcHVzaGludCA1MyAvLyA1MwogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMTI6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3LTE4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxCeXRlczogNCwgZ2xvYmFsVWludHM6IDMgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xvYmFsU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTYKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RvcmFnZS5yZWFkR2xvYmFsU3RhdGUoKSAtPiB1aW50NjQsIHVpbnQ2NCwgYnl0ZXMsIGJ5dGVzLCB1aW50NjQsIGJ5dGVzOgpyZWFkR2xvYmFsU3RhdGU6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMgZ2xvYmFsQWNjb3VudCA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCkgLy8gQWRkcmVzcyB3aXRoIG5vIGRlZmF1bHQgdmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJnbG9iYWxBY2NvdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHB1YmxpYyBnbG9iYWxJbnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoNTApIH0pIC8vIFVJbnQ2NCB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJnbG9iYWxJbnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gcHVibGljIGdsb2JhbEludE5vRGVmYXVsdCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBVSW50NjQgd2l0aCBubyBkZWZhdWx0IHZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsSW50Tm9EZWZhdWx0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIHB1YmxpYyBnbG9iYWxCeXRlcyA9IEdsb2JhbFN0YXRlPGJ5dGVzPih7IGluaXRpYWxWYWx1ZTogQnl0ZXMoJ1NpbHZpbycpIH0pIC8vIEJ5dGVzIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gImdsb2JhbEJ5dGVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHB1YmxpYyBnbG9iYWxTdHJpbmcgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsgaW5pdGlhbFZhbHVlOiAnTWljYWxpJyB9KSAvLyBCeXRlcyB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJnbG9iYWxTdHJpbmciCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gcHVibGljIGdsb2JhbEJvb2wgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KSAvLyBCb29sIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbEJvb2wiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0OC01NQogICAgLy8gcmV0dXJuIFsKICAgIC8vICAgdGhpcy5nbG9iYWxJbnQudmFsdWUsCiAgICAvLyAgIHRoaXMuZ2xvYmFsSW50Tm9EZWZhdWx0LnZhbHVlLAogICAgLy8gICB0aGlzLmdsb2JhbEJ5dGVzLnZhbHVlLAogICAgLy8gICB0aGlzLmdsb2JhbFN0cmluZy52YWx1ZSwKICAgIC8vICAgdGhpcy5nbG9iYWxCb29sLnZhbHVlLAogICAgLy8gICBhY2NvdW50QWRkcmVzcywKICAgIC8vIF0KICAgIHVuY292ZXIgNQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RvcmFnZS5oYXNHbG9iYWxTdGF0ZSgpIC0+IHVpbnQ2NCwgdWludDY0OgpoYXNHbG9iYWxTdGF0ZToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjEKICAgIC8vIHB1YmxpYyBnbG9iYWxJbnROb0RlZmF1bHQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gVUludDY0IHdpdGggbm8gZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImdsb2JhbEludE5vRGVmYXVsdCIKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIGNvbnN0IGhhc1ZhbHVlID0gdGhpcy5nbG9iYWxJbnROb0RlZmF1bHQuaGFzVmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjEKICAgIC8vIHB1YmxpYyBnbG9iYWxJbnROb0RlZmF1bHQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gVUludDY0IHdpdGggbm8gZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImdsb2JhbEludE5vRGVmYXVsdCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBhc3NlcnQoaGFzVmFsdWUsICdHbG9iYWwgc3RhdGUgbm90IHNldC4nKQogICAgZGlnIDEKICAgIGFzc2VydCAvLyBHbG9iYWwgc3RhdGUgbm90IHNldC4KICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NzEKICAgIC8vIHJldHVybiBbdmFsdWUsIGhhc1ZhbHVlXQogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RvcmFnZS53cml0ZUdsb2JhbFN0YXRlKHZhbHVlU3RyaW5nOiBieXRlcywgdmFsdWVCb29sOiB1aW50NjQsIHZhbHVlQWNjb3VudDogYnl0ZXMpIC0+IHZvaWQ6CndyaXRlR2xvYmFsU3RhdGU6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjgyCiAgICAvLyBwdWJsaWMgd3JpdGVHbG9iYWxTdGF0ZSh2YWx1ZVN0cmluZzogc3RyaW5nLCB2YWx1ZUJvb2w6IGJvb2xlYW4sIHZhbHVlQWNjb3VudDogQWNjb3VudCk6IHZvaWQgewogICAgcHJvdG8gMyAwCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIzCiAgICAvLyBwdWJsaWMgZ2xvYmFsU3RyaW5nID0gR2xvYmFsU3RhdGU8c3RyaW5nPih7IGluaXRpYWxWYWx1ZTogJ01pY2FsaScgfSkgLy8gQnl0ZXMgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBieXRlY18wIC8vICJnbG9iYWxTdHJpbmciCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyB0aGlzLmdsb2JhbFN0cmluZy52YWx1ZSA9IHZhbHVlU3RyaW5nCiAgICBmcmFtZV9kaWcgLTMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBwdWJsaWMgZ2xvYmFsQm9vbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pIC8vIEJvb2wgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBieXRlY18xIC8vICJnbG9iYWxCb29sIgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4NAogICAgLy8gdGhpcy5nbG9iYWxCb29sLnZhbHVlID0gdmFsdWVCb29sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMgZ2xvYmFsQWNjb3VudCA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCkgLy8gQWRkcmVzcyB3aXRoIG5vIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjXzMgLy8gImdsb2JhbEFjY291bnQiCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg1CiAgICAvLyB0aGlzLmdsb2JhbEFjY291bnQudmFsdWUgPSB2YWx1ZUFjY291bnQKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHB1YmxpYyBnbG9iYWxTdHJpbmcgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsgaW5pdGlhbFZhbHVlOiAnTWljYWxpJyB9KSAvLyBCeXRlcyB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJnbG9iYWxTdHJpbmciCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4NwogICAgLy8gYXNzZXJ0KHRoaXMuZ2xvYmFsU3RyaW5nLnZhbHVlID09PSB2YWx1ZVN0cmluZykKICAgIGZyYW1lX2RpZyAtMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gcHVibGljIGdsb2JhbEJvb2wgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KSAvLyBCb29sIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbEJvb2wiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4OAogICAgLy8gYXNzZXJ0KHRoaXMuZ2xvYmFsQm9vbC52YWx1ZSA9PT0gdmFsdWVCb29sKQogICAgZnJhbWVfZGlnIC0yCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMgZ2xvYmFsQWNjb3VudCA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCkgLy8gQWRkcmVzcyB3aXRoIG5vIGRlZmF1bHQgdmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJnbG9iYWxBY2NvdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODkKICAgIC8vIGFzc2VydCh0aGlzLmdsb2JhbEFjY291bnQudmFsdWUgPT09IHZhbHVlQWNjb3VudCkKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RvcmFnZS53cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZShrZXk6IGJ5dGVzLCB2YWx1ZTogYnl0ZXMpIC0+IGJ5dGVzOgp3cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIHB1YmxpYyB3cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBwcm90byAyIDEKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTAyCiAgICAvLyBnbG9iYWxEeW5hbWljQWNjZXNzLnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDQKICAgIC8vIGFzc2VydChnbG9iYWxEeW5hbWljQWNjZXNzLnZhbHVlID09PSB2YWx1ZSkKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9kaWcgLTIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTA2CiAgICAvLyByZXR1cm4gZ2xvYmFsRHluYW1pY0FjY2Vzcy52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0b3JhZ2UuZGVsZXRlR2xvYmFsU3RhdGUoKSAtPiB1aW50NjQ6CmRlbGV0ZUdsb2JhbFN0YXRlOgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcHVibGljIGdsb2JhbEludCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg1MCkgfSkgLy8gVUludDY0IHdpdGggZGVmYXVsdCB2YWx1ZQogICAgYnl0ZWMgNSAvLyAiZ2xvYmFsSW50IgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMTIKICAgIC8vIHRoaXMuZ2xvYmFsSW50LmRlbGV0ZSgpCiAgICBhcHBfZ2xvYmFsX2RlbAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMTMKICAgIC8vIHJldHVybiB0cnVlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { @@ -138,6 +143,14 @@ "desc": "The stored string value, confirming successful storage" }, "desc": "Writes a value to global state using a dynamic key and returns the stored value" + }, + { + "name": "deleteGlobalState", + "args": [], + "readonly": false, + "returns": { + "type": "bool" + } } ], "networks": {} diff --git a/projects/typescript-examples/contracts/artifacts/contracts/GlobalStorage/GlobalStorage.arc56.json b/projects/typescript-examples/contracts/artifacts/contracts/GlobalStorage/GlobalStorage.arc56.json index 695e9b1..132d2af 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/GlobalStorage/GlobalStorage.arc56.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/GlobalStorage/GlobalStorage.arc56.json @@ -98,6 +98,22 @@ "desc": "Writes a value to global state using a dynamic key and returns the stored value", "events": [], "recommendations": {} + }, + { + "name": "deleteGlobalState", + "args": [], + "returns": { + "type": "bool" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} } ], "arcs": [ @@ -170,48 +186,50 @@ "sourceInfo": [ { "pc": [ - 399 + 429 ], "errorMessage": "Global state not set." }, { "pc": [ - 177, - 214, - 243, - 270 + 186, + 209, + 246, + 275, + 301 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 356 + 386 ], "errorMessage": "can only call when creating" }, { "pc": [ - 180, - 217, - 246, - 273 + 189, + 212, + 249, + 278, + 304 ], "errorMessage": "can only call when not creating" }, { "pc": [ - 362, - 367, - 371, - 376, - 380, - 384, - 396, - 420, - 428, - 436, - 454, - 463 + 392, + 397, + 401, + 406, + 410, + 414, + 426, + 450, + 458, + 466, + 484, + 493 ], "errorMessage": "check GlobalState exists" } @@ -224,11 +242,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJnbG9iYWxTdHJpbmciICJnbG9iYWxCb29sIiAiZ2xvYmFsSW50Tm9EZWZhdWx0IiAiZ2xvYmFsQWNjb3VudCIgMHgxNTFmN2M3NSAiZ2xvYmFsSW50IiAiZ2xvYmFsQnl0ZXMiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBwdWJsaWMgZ2xvYmFsSW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDUwKSB9KSAvLyBVSW50NjQgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBieXRlYyA1IC8vICJnbG9iYWxJbnQiCiAgICBwdXNoaW50IDUwIC8vIDUwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gcHVibGljIGdsb2JhbEJ5dGVzID0gR2xvYmFsU3RhdGU8Ynl0ZXM+KHsgaW5pdGlhbFZhbHVlOiBCeXRlcygnU2lsdmlvJykgfSkgLy8gQnl0ZXMgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBieXRlYyA2IC8vICJnbG9iYWxCeXRlcyIKICAgIHB1c2hieXRlcyAiU2lsdmlvIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHB1YmxpYyBnbG9iYWxTdHJpbmcgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsgaW5pdGlhbFZhbHVlOiAnTWljYWxpJyB9KSAvLyBCeXRlcyB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjXzAgLy8gImdsb2JhbFN0cmluZyIKICAgIHB1c2hieXRlcyAiTWljYWxpIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIHB1YmxpYyBnbG9iYWxCb29sID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IHRydWUgfSkgLy8gQm9vbCB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjXzEgLy8gImdsb2JhbEJvb2wiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjEKICAgIC8vIHB1YmxpYyBnbG9iYWxJbnROb0RlZmF1bHQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gVUludDY0IHdpdGggbm8gZGVmYXVsdCB2YWx1ZQogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsSW50Tm9EZWZhdWx0IgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozMwogICAgLy8gdGhpcy5nbG9iYWxJbnROb0RlZmF1bHQudmFsdWUgPSBVaW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gcHVibGljIGdsb2JhbEFjY291bnQgPSBHbG9iYWxTdGF0ZTxBY2NvdW50PigpIC8vIEFkZHJlc3Mgd2l0aCBubyBkZWZhdWx0IHZhbHVlCiAgICBieXRlY18zIC8vICJnbG9iYWxBY2NvdW50IgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNAogICAgLy8gdGhpcy5nbG9iYWxBY2NvdW50LnZhbHVlID0gVHhuLnNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNy0xOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsQnl0ZXM6IDQsIGdsb2JhbFVpbnRzOiAzIH0gfSkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEdsb2JhbFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTEKICAgIHB1c2hieXRlc3MgMHhkMzhmNjA3MiAweDQ3YjQ1Y2QxIDB4ZjdhMDRlZGUgMHg0YTRjNmJmNiAvLyBtZXRob2QgInJlYWRHbG9iYWxTdGF0ZSgpKHVpbnQ2NCx1aW50NjQsYnl0ZVtdLHN0cmluZyxib29sLGFkZHJlc3MpIiwgbWV0aG9kICJoYXNHbG9iYWxTdGF0ZSgpKHVpbnQ2NCxib29sKSIsIG1ldGhvZCAid3JpdGVHbG9iYWxTdGF0ZShzdHJpbmcsYm9vbCxhY2NvdW50KXZvaWQiLCBtZXRob2QgIndyaXRlRHluYW1pY0dsb2JhbFN0YXRlKHN0cmluZyxzdHJpbmcpc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9yZWFkR2xvYmFsU3RhdGVfcm91dGVANSBtYWluX2hhc0dsb2JhbFN0YXRlX3JvdXRlQDYgbWFpbl93cml0ZUdsb2JhbFN0YXRlX3JvdXRlQDcgbWFpbl93cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZV9yb3V0ZUA4CgptYWluX2FmdGVyX2lmX2Vsc2VAMTU6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3LTE4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxCeXRlczogNCwgZ2xvYmFsVWludHM6IDMgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xvYmFsU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fd3JpdGVEeW5hbWljR2xvYmFsU3RhdGVfcm91dGVAODoKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIHB1YmxpYyB3cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTctMTgKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbEJ5dGVzOiA0LCBnbG9iYWxVaW50czogMyB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBHbG9iYWxTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyBwdWJsaWMgd3JpdGVEeW5hbWljR2xvYmFsU3RhdGUoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgewogICAgY2FsbHN1YiB3cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fd3JpdGVHbG9iYWxTdGF0ZV9yb3V0ZUA3OgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gcHVibGljIHdyaXRlR2xvYmFsU3RhdGUodmFsdWVTdHJpbmc6IHN0cmluZywgdmFsdWVCb29sOiBib29sZWFuLCB2YWx1ZUFjY291bnQ6IEFjY291bnQpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNy0xOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsQnl0ZXM6IDQsIGdsb2JhbFVpbnRzOiAzIH0gfSkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEdsb2JhbFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIHB1YmxpYyB3cml0ZUdsb2JhbFN0YXRlKHZhbHVlU3RyaW5nOiBzdHJpbmcsIHZhbHVlQm9vbDogYm9vbGVhbiwgdmFsdWVBY2NvdW50OiBBY2NvdW50KTogdm9pZCB7CiAgICBjYWxsc3ViIHdyaXRlR2xvYmFsU3RhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5faGFzR2xvYmFsU3RhdGVfcm91dGVANjoKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIHB1YmxpYyBoYXNHbG9iYWxTdGF0ZSgpOiBbdWludDY0LCBib29sZWFuXSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgaGFzR2xvYmFsU3RhdGUKICAgIHN3YXAKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZWFkR2xvYmFsU3RhdGVfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHB1YmxpYyByZWFkR2xvYmFsU3RhdGUoKTogW3VpbnQ2NCwgdWludDY0LCBieXRlcywgc3RyaW5nLCBib29sZWFuLCBhcmM0LkFkZHJlc3NdIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiByZWFkR2xvYmFsU3RhdGUKICAgIHVuY292ZXIgNQogICAgaXRvYgogICAgdW5jb3ZlciA1CiAgICBpdG9iCiAgICBkaWcgNQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciA2CiAgICBjb25jYXQKICAgIGRpZyA1CiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDYKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDcKICAgIHNldGJpdAogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDAzNQogICAgY29uY2F0CiAgICBkaWcgMwogICAgbGVuCiAgICBwdXNoaW50IDUzIC8vIDUzCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxMToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTctMTgKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbEJ5dGVzOiA0LCBnbG9iYWxVaW50czogMyB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBHbG9iYWxTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxNQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdG9yYWdlLnJlYWRHbG9iYWxTdGF0ZSgpIC0+IHVpbnQ2NCwgdWludDY0LCBieXRlcywgYnl0ZXMsIHVpbnQ2NCwgYnl0ZXM6CnJlYWRHbG9iYWxTdGF0ZToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyBnbG9iYWxBY2NvdW50ID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKSAvLyBBZGRyZXNzIHdpdGggbm8gZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImdsb2JhbEFjY291bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcHVibGljIGdsb2JhbEludCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg1MCkgfSkgLy8gVUludDY0IHdpdGggZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImdsb2JhbEludCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIxCiAgICAvLyBwdWJsaWMgZ2xvYmFsSW50Tm9EZWZhdWx0ID0gR2xvYmFsU3RhdGU8dWludDY0PigpIC8vIFVJbnQ2NCB3aXRoIG5vIGRlZmF1bHQgdmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJnbG9iYWxJbnROb0RlZmF1bHQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gcHVibGljIGdsb2JhbEJ5dGVzID0gR2xvYmFsU3RhdGU8Ynl0ZXM+KHsgaW5pdGlhbFZhbHVlOiBCeXRlcygnU2lsdmlvJykgfSkgLy8gQnl0ZXMgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAiZ2xvYmFsQnl0ZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMwogICAgLy8gcHVibGljIGdsb2JhbFN0cmluZyA9IEdsb2JhbFN0YXRlPHN0cmluZz4oeyBpbml0aWFsVmFsdWU6ICdNaWNhbGknIH0pIC8vIEJ5dGVzIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImdsb2JhbFN0cmluZyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBwdWJsaWMgZ2xvYmFsQm9vbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pIC8vIEJvb2wgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiZ2xvYmFsQm9vbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ4LTU1CiAgICAvLyByZXR1cm4gWwogICAgLy8gICB0aGlzLmdsb2JhbEludC52YWx1ZSwKICAgIC8vICAgdGhpcy5nbG9iYWxJbnROb0RlZmF1bHQudmFsdWUsCiAgICAvLyAgIHRoaXMuZ2xvYmFsQnl0ZXMudmFsdWUsCiAgICAvLyAgIHRoaXMuZ2xvYmFsU3RyaW5nLnZhbHVlLAogICAgLy8gICB0aGlzLmdsb2JhbEJvb2wudmFsdWUsCiAgICAvLyAgIGFjY291bnRBZGRyZXNzLAogICAgLy8gXQogICAgdW5jb3ZlciA1CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdG9yYWdlLmhhc0dsb2JhbFN0YXRlKCkgLT4gdWludDY0LCB1aW50NjQ6Cmhhc0dsb2JhbFN0YXRlOgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gcHVibGljIGdsb2JhbEludE5vRGVmYXVsdCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBVSW50NjQgd2l0aCBubyBkZWZhdWx0IHZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsSW50Tm9EZWZhdWx0IgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo2NgogICAgLy8gY29uc3QgaGFzVmFsdWUgPSB0aGlzLmdsb2JhbEludE5vRGVmYXVsdC5oYXNWYWx1ZQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gcHVibGljIGdsb2JhbEludE5vRGVmYXVsdCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBVSW50NjQgd2l0aCBubyBkZWZhdWx0IHZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsSW50Tm9EZWZhdWx0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIGFzc2VydChoYXNWYWx1ZSwgJ0dsb2JhbCBzdGF0ZSBub3Qgc2V0LicpCiAgICBkaWcgMQogICAgYXNzZXJ0IC8vIEdsb2JhbCBzdGF0ZSBub3Qgc2V0LgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo3MQogICAgLy8gcmV0dXJuIFt2YWx1ZSwgaGFzVmFsdWVdCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdG9yYWdlLndyaXRlR2xvYmFsU3RhdGUodmFsdWVTdHJpbmc6IGJ5dGVzLCB2YWx1ZUJvb2w6IHVpbnQ2NCwgdmFsdWVBY2NvdW50OiBieXRlcykgLT4gdm9pZDoKd3JpdGVHbG9iYWxTdGF0ZToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIHB1YmxpYyB3cml0ZUdsb2JhbFN0YXRlKHZhbHVlU3RyaW5nOiBzdHJpbmcsIHZhbHVlQm9vbDogYm9vbGVhbiwgdmFsdWVBY2NvdW50OiBBY2NvdW50KTogdm9pZCB7CiAgICBwcm90byAzIDAKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHB1YmxpYyBnbG9iYWxTdHJpbmcgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsgaW5pdGlhbFZhbHVlOiAnTWljYWxpJyB9KSAvLyBCeXRlcyB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjXzAgLy8gImdsb2JhbFN0cmluZyIKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODMKICAgIC8vIHRoaXMuZ2xvYmFsU3RyaW5nLnZhbHVlID0gdmFsdWVTdHJpbmcKICAgIGZyYW1lX2RpZyAtMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIHB1YmxpYyBnbG9iYWxCb29sID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IHRydWUgfSkgLy8gQm9vbCB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjXzEgLy8gImdsb2JhbEJvb2wiCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyB0aGlzLmdsb2JhbEJvb2wudmFsdWUgPSB2YWx1ZUJvb2wKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyBnbG9iYWxBY2NvdW50ID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKSAvLyBBZGRyZXNzIHdpdGggbm8gZGVmYXVsdCB2YWx1ZQogICAgYnl0ZWNfMyAvLyAiZ2xvYmFsQWNjb3VudCIKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIHRoaXMuZ2xvYmFsQWNjb3VudC52YWx1ZSA9IHZhbHVlQWNjb3VudAogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMwogICAgLy8gcHVibGljIGdsb2JhbFN0cmluZyA9IEdsb2JhbFN0YXRlPHN0cmluZz4oeyBpbml0aWFsVmFsdWU6ICdNaWNhbGknIH0pIC8vIEJ5dGVzIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImdsb2JhbFN0cmluZyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyBhc3NlcnQodGhpcy5nbG9iYWxTdHJpbmcudmFsdWUgPT09IHZhbHVlU3RyaW5nKQogICAgZnJhbWVfZGlnIC0zCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBwdWJsaWMgZ2xvYmFsQm9vbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pIC8vIEJvb2wgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiZ2xvYmFsQm9vbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg4CiAgICAvLyBhc3NlcnQodGhpcy5nbG9iYWxCb29sLnZhbHVlID09PSB2YWx1ZUJvb2wpCiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyBnbG9iYWxBY2NvdW50ID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKSAvLyBBZGRyZXNzIHdpdGggbm8gZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImdsb2JhbEFjY291bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4OQogICAgLy8gYXNzZXJ0KHRoaXMuZ2xvYmFsQWNjb3VudC52YWx1ZSA9PT0gdmFsdWVBY2NvdW50KQogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdG9yYWdlLndyaXRlRHluYW1pY0dsb2JhbFN0YXRlKGtleTogYnl0ZXMsIHZhbHVlOiBieXRlcykgLT4gYnl0ZXM6CndyaXRlRHluYW1pY0dsb2JhbFN0YXRlOgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo5OQogICAgLy8gcHVibGljIHdyaXRlRHluYW1pY0dsb2JhbFN0YXRlKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDIKICAgIC8vIGdsb2JhbER5bmFtaWNBY2Nlc3MudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjEwNAogICAgLy8gYXNzZXJ0KGdsb2JhbER5bmFtaWNBY2Nlc3MudmFsdWUgPT09IHZhbHVlKQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIHJldHVybiBnbG9iYWxEeW5hbWljQWNjZXNzLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfZGlnIC0yCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJnbG9iYWxTdHJpbmciICJnbG9iYWxCb29sIiAiZ2xvYmFsSW50Tm9EZWZhdWx0IiAiZ2xvYmFsQWNjb3VudCIgMHgxNTFmN2M3NSAiZ2xvYmFsSW50IiAweDAwICJnbG9iYWxCeXRlcyIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHB1YmxpYyBnbG9iYWxJbnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoNTApIH0pIC8vIFVJbnQ2NCB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjIDUgLy8gImdsb2JhbEludCIKICAgIHB1c2hpbnQgNTAgLy8gNTAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBwdWJsaWMgZ2xvYmFsQnl0ZXMgPSBHbG9iYWxTdGF0ZTxieXRlcz4oeyBpbml0aWFsVmFsdWU6IEJ5dGVzKCdTaWx2aW8nKSB9KSAvLyBCeXRlcyB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjIDcgLy8gImdsb2JhbEJ5dGVzIgogICAgcHVzaGJ5dGVzICJTaWx2aW8iCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMwogICAgLy8gcHVibGljIGdsb2JhbFN0cmluZyA9IEdsb2JhbFN0YXRlPHN0cmluZz4oeyBpbml0aWFsVmFsdWU6ICdNaWNhbGknIH0pIC8vIEJ5dGVzIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgYnl0ZWNfMCAvLyAiZ2xvYmFsU3RyaW5nIgogICAgcHVzaGJ5dGVzICJNaWNhbGkiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gcHVibGljIGdsb2JhbEJvb2wgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KSAvLyBCb29sIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgYnl0ZWNfMSAvLyAiZ2xvYmFsQm9vbCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gcHVibGljIGdsb2JhbEludE5vRGVmYXVsdCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBVSW50NjQgd2l0aCBubyBkZWZhdWx0IHZhbHVlCiAgICBieXRlY18yIC8vICJnbG9iYWxJbnROb0RlZmF1bHQiCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyB0aGlzLmdsb2JhbEludE5vRGVmYXVsdC52YWx1ZSA9IFVpbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMgZ2xvYmFsQWNjb3VudCA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCkgLy8gQWRkcmVzcyB3aXRoIG5vIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjXzMgLy8gImdsb2JhbEFjY291bnQiCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM0CiAgICAvLyB0aGlzLmdsb2JhbEFjY291bnQudmFsdWUgPSBUeG4uc2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3LTE4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxCeXRlczogNCwgZ2xvYmFsVWludHM6IDMgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xvYmFsU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxMgogICAgcHVzaGJ5dGVzcyAweGQzOGY2MDcyIDB4NDdiNDVjZDEgMHhmN2EwNGVkZSAweDRhNGM2YmY2IDB4M2M3YjFmMDAgLy8gbWV0aG9kICJyZWFkR2xvYmFsU3RhdGUoKSh1aW50NjQsdWludDY0LGJ5dGVbXSxzdHJpbmcsYm9vbCxhZGRyZXNzKSIsIG1ldGhvZCAiaGFzR2xvYmFsU3RhdGUoKSh1aW50NjQsYm9vbCkiLCBtZXRob2QgIndyaXRlR2xvYmFsU3RhdGUoc3RyaW5nLGJvb2wsYWNjb3VudCl2b2lkIiwgbWV0aG9kICJ3cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZShzdHJpbmcsc3RyaW5nKXN0cmluZyIsIG1ldGhvZCAiZGVsZXRlR2xvYmFsU3RhdGUoKWJvb2wiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX3JlYWRHbG9iYWxTdGF0ZV9yb3V0ZUA1IG1haW5faGFzR2xvYmFsU3RhdGVfcm91dGVANiBtYWluX3dyaXRlR2xvYmFsU3RhdGVfcm91dGVANyBtYWluX3dyaXRlRHluYW1pY0dsb2JhbFN0YXRlX3JvdXRlQDggbWFpbl9kZWxldGVHbG9iYWxTdGF0ZV9yb3V0ZUA5CgptYWluX2FmdGVyX2lmX2Vsc2VAMTY6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3LTE4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxCeXRlczogNCwgZ2xvYmFsVWludHM6IDMgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xvYmFsU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fZGVsZXRlR2xvYmFsU3RhdGVfcm91dGVAOToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZUdsb2JhbFN0YXRlCiAgICBieXRlYyA2IC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl93cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZV9yb3V0ZUA4OgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo5OQogICAgLy8gcHVibGljIHdyaXRlRHluYW1pY0dsb2JhbFN0YXRlKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxNy0xOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsQnl0ZXM6IDQsIGdsb2JhbFVpbnRzOiAzIH0gfSkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEdsb2JhbFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIHB1YmxpYyB3cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBjYWxsc3ViIHdyaXRlRHluYW1pY0dsb2JhbFN0YXRlCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl93cml0ZUdsb2JhbFN0YXRlX3JvdXRlQDc6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjgyCiAgICAvLyBwdWJsaWMgd3JpdGVHbG9iYWxTdGF0ZSh2YWx1ZVN0cmluZzogc3RyaW5nLCB2YWx1ZUJvb2w6IGJvb2xlYW4sIHZhbHVlQWNjb3VudDogQWNjb3VudCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3LTE4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxCeXRlczogNCwgZ2xvYmFsVWludHM6IDMgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xvYmFsU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gcHVibGljIHdyaXRlR2xvYmFsU3RhdGUodmFsdWVTdHJpbmc6IHN0cmluZywgdmFsdWVCb29sOiBib29sZWFuLCB2YWx1ZUFjY291bnQ6IEFjY291bnQpOiB2b2lkIHsKICAgIGNhbGxzdWIgd3JpdGVHbG9iYWxTdGF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9oYXNHbG9iYWxTdGF0ZV9yb3V0ZUA2OgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo2NQogICAgLy8gcHVibGljIGhhc0dsb2JhbFN0YXRlKCk6IFt1aW50NjQsIGJvb2xlYW5dIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBoYXNHbG9iYWxTdGF0ZQogICAgc3dhcAogICAgaXRvYgogICAgYnl0ZWMgNiAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZWFkR2xvYmFsU3RhdGVfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHB1YmxpYyByZWFkR2xvYmFsU3RhdGUoKTogW3VpbnQ2NCwgdWludDY0LCBieXRlcywgc3RyaW5nLCBib29sZWFuLCBhcmM0LkFkZHJlc3NdIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiByZWFkR2xvYmFsU3RhdGUKICAgIHVuY292ZXIgNQogICAgaXRvYgogICAgdW5jb3ZlciA1CiAgICBpdG9iCiAgICBkaWcgNQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciA2CiAgICBjb25jYXQKICAgIGRpZyA1CiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDYKICAgIGNvbmNhdAogICAgYnl0ZWMgNiAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciA3CiAgICBzZXRiaXQKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwMzUKICAgIGNvbmNhdAogICAgZGlnIDMKICAgIGxlbgogICAgcHVzaGludCA1MyAvLyA1MwogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMTI6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjE3LTE4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxCeXRlczogNCwgZ2xvYmFsVWludHM6IDMgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xvYmFsU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTYKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RvcmFnZS5yZWFkR2xvYmFsU3RhdGUoKSAtPiB1aW50NjQsIHVpbnQ2NCwgYnl0ZXMsIGJ5dGVzLCB1aW50NjQsIGJ5dGVzOgpyZWFkR2xvYmFsU3RhdGU6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMgZ2xvYmFsQWNjb3VudCA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCkgLy8gQWRkcmVzcyB3aXRoIG5vIGRlZmF1bHQgdmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJnbG9iYWxBY2NvdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHB1YmxpYyBnbG9iYWxJbnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoNTApIH0pIC8vIFVJbnQ2NCB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJnbG9iYWxJbnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gcHVibGljIGdsb2JhbEludE5vRGVmYXVsdCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBVSW50NjQgd2l0aCBubyBkZWZhdWx0IHZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsSW50Tm9EZWZhdWx0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIHB1YmxpYyBnbG9iYWxCeXRlcyA9IEdsb2JhbFN0YXRlPGJ5dGVzPih7IGluaXRpYWxWYWx1ZTogQnl0ZXMoJ1NpbHZpbycpIH0pIC8vIEJ5dGVzIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gImdsb2JhbEJ5dGVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHB1YmxpYyBnbG9iYWxTdHJpbmcgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsgaW5pdGlhbFZhbHVlOiAnTWljYWxpJyB9KSAvLyBCeXRlcyB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJnbG9iYWxTdHJpbmciCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gcHVibGljIGdsb2JhbEJvb2wgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KSAvLyBCb29sIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbEJvb2wiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo0OC01NQogICAgLy8gcmV0dXJuIFsKICAgIC8vICAgdGhpcy5nbG9iYWxJbnQudmFsdWUsCiAgICAvLyAgIHRoaXMuZ2xvYmFsSW50Tm9EZWZhdWx0LnZhbHVlLAogICAgLy8gICB0aGlzLmdsb2JhbEJ5dGVzLnZhbHVlLAogICAgLy8gICB0aGlzLmdsb2JhbFN0cmluZy52YWx1ZSwKICAgIC8vICAgdGhpcy5nbG9iYWxCb29sLnZhbHVlLAogICAgLy8gICBhY2NvdW50QWRkcmVzcywKICAgIC8vIF0KICAgIHVuY292ZXIgNQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RvcmFnZS5oYXNHbG9iYWxTdGF0ZSgpIC0+IHVpbnQ2NCwgdWludDY0OgpoYXNHbG9iYWxTdGF0ZToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjEKICAgIC8vIHB1YmxpYyBnbG9iYWxJbnROb0RlZmF1bHQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gVUludDY0IHdpdGggbm8gZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImdsb2JhbEludE5vRGVmYXVsdCIKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIGNvbnN0IGhhc1ZhbHVlID0gdGhpcy5nbG9iYWxJbnROb0RlZmF1bHQuaGFzVmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjEKICAgIC8vIHB1YmxpYyBnbG9iYWxJbnROb0RlZmF1bHQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gVUludDY0IHdpdGggbm8gZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImdsb2JhbEludE5vRGVmYXVsdCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBhc3NlcnQoaGFzVmFsdWUsICdHbG9iYWwgc3RhdGUgbm90IHNldC4nKQogICAgZGlnIDEKICAgIGFzc2VydCAvLyBHbG9iYWwgc3RhdGUgbm90IHNldC4KICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NzEKICAgIC8vIHJldHVybiBbdmFsdWUsIGhhc1ZhbHVlXQogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RvcmFnZS53cml0ZUdsb2JhbFN0YXRlKHZhbHVlU3RyaW5nOiBieXRlcywgdmFsdWVCb29sOiB1aW50NjQsIHZhbHVlQWNjb3VudDogYnl0ZXMpIC0+IHZvaWQ6CndyaXRlR2xvYmFsU3RhdGU6CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjgyCiAgICAvLyBwdWJsaWMgd3JpdGVHbG9iYWxTdGF0ZSh2YWx1ZVN0cmluZzogc3RyaW5nLCB2YWx1ZUJvb2w6IGJvb2xlYW4sIHZhbHVlQWNjb3VudDogQWNjb3VudCk6IHZvaWQgewogICAgcHJvdG8gMyAwCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjIzCiAgICAvLyBwdWJsaWMgZ2xvYmFsU3RyaW5nID0gR2xvYmFsU3RhdGU8c3RyaW5nPih7IGluaXRpYWxWYWx1ZTogJ01pY2FsaScgfSkgLy8gQnl0ZXMgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBieXRlY18wIC8vICJnbG9iYWxTdHJpbmciCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyB0aGlzLmdsb2JhbFN0cmluZy52YWx1ZSA9IHZhbHVlU3RyaW5nCiAgICBmcmFtZV9kaWcgLTMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBwdWJsaWMgZ2xvYmFsQm9vbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pIC8vIEJvb2wgd2l0aCBkZWZhdWx0IHZhbHVlCiAgICBieXRlY18xIC8vICJnbG9iYWxCb29sIgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4NAogICAgLy8gdGhpcy5nbG9iYWxCb29sLnZhbHVlID0gdmFsdWVCb29sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMgZ2xvYmFsQWNjb3VudCA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCkgLy8gQWRkcmVzcyB3aXRoIG5vIGRlZmF1bHQgdmFsdWUKICAgIGJ5dGVjXzMgLy8gImdsb2JhbEFjY291bnQiCiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg1CiAgICAvLyB0aGlzLmdsb2JhbEFjY291bnQudmFsdWUgPSB2YWx1ZUFjY291bnQKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHB1YmxpYyBnbG9iYWxTdHJpbmcgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsgaW5pdGlhbFZhbHVlOiAnTWljYWxpJyB9KSAvLyBCeXRlcyB3aXRoIGRlZmF1bHQgdmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJnbG9iYWxTdHJpbmciCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4NwogICAgLy8gYXNzZXJ0KHRoaXMuZ2xvYmFsU3RyaW5nLnZhbHVlID09PSB2YWx1ZVN0cmluZykKICAgIGZyYW1lX2RpZyAtMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gcHVibGljIGdsb2JhbEJvb2wgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KSAvLyBCb29sIHdpdGggZGVmYXVsdCB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbEJvb2wiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4OAogICAgLy8gYXNzZXJ0KHRoaXMuZ2xvYmFsQm9vbC52YWx1ZSA9PT0gdmFsdWVCb29sKQogICAgZnJhbWVfZGlnIC0yCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvR2xvYmFsU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMgZ2xvYmFsQWNjb3VudCA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCkgLy8gQWRkcmVzcyB3aXRoIG5vIGRlZmF1bHQgdmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJnbG9iYWxBY2NvdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODkKICAgIC8vIGFzc2VydCh0aGlzLmdsb2JhbEFjY291bnQudmFsdWUgPT09IHZhbHVlQWNjb3VudCkKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RvcmFnZS53cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZShrZXk6IGJ5dGVzLCB2YWx1ZTogYnl0ZXMpIC0+IGJ5dGVzOgp3cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZToKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIHB1YmxpYyB3cml0ZUR5bmFtaWNHbG9iYWxTdGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBwcm90byAyIDEKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTAyCiAgICAvLyBnbG9iYWxEeW5hbWljQWNjZXNzLnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMDQKICAgIC8vIGFzc2VydChnbG9iYWxEeW5hbWljQWNjZXNzLnZhbHVlID09PSB2YWx1ZSkKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9kaWcgLTIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MTA2CiAgICAvLyByZXR1cm4gZ2xvYmFsRHluYW1pY0FjY2Vzcy52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9HbG9iYWxTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0b3JhZ2UuZGVsZXRlR2xvYmFsU3RhdGUoKSAtPiB1aW50NjQ6CmRlbGV0ZUdsb2JhbFN0YXRlOgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcHVibGljIGdsb2JhbEludCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg1MCkgfSkgLy8gVUludDY0IHdpdGggZGVmYXVsdCB2YWx1ZQogICAgYnl0ZWMgNSAvLyAiZ2xvYmFsSW50IgogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMTIKICAgIC8vIHRoaXMuZ2xvYmFsSW50LmRlbGV0ZSgpCiAgICBhcHBfZ2xvYmFsX2RlbAogICAgLy8gY29udHJhY3RzL0dsb2JhbFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoxMTMKICAgIC8vIHJldHVybiB0cnVlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CiACAAEmBwxnbG9iYWxTdHJpbmcKZ2xvYmFsQm9vbBJnbG9iYWxJbnROb0RlZmF1bHQNZ2xvYmFsQWNjb3VudAQVH3x1CWdsb2JhbEludAtnbG9iYWxCeXRlczEYQAAkJwWBMmcnBoAGU2lsdmlvZyiABk1pY2FsaWcpI2cqImcrMQBnMRtBANOCBATTj2ByBEe0XNEE96BO3gRKTGv2NhoAjgQAXwBEACcAAiJDMRkURDEYRDYaAVcCADYaAlcCAIgA9kkVFlcGAkxQJwRMULAjQzEZFEQxGEQ2GgFXAgA2GgIiUzYaAxfAHIgApCNDMRkURDEYRIgAikwWgAEAIk8DVFAnBExQsCNDMRkURDEYRIgAUk8FFk8FFksFFRZXBgJPBlBLBRUWVwYCTwZQgAEAIk8HVE8ETwRQgAIANVBLAxWBNQgWVwYCUExQTwNQTwJQTFAnBExQsCNDMRlA/0sxGBREI0MiK2VEIicFZUQiKmVEIicGZUQiKGVEIillRE8FiSIqZUUBIiplREsBREyJigMAKIv9ZymL/mcri/9nIihlRIv9EkQiKWVEi/4SRCIrZUSL/xJEiYoCAYv+i/9nIov+ZUSL/xJEIov+ZUSJ", + "approval": "CiACAAEmCAxnbG9iYWxTdHJpbmcKZ2xvYmFsQm9vbBJnbG9iYWxJbnROb0RlZmF1bHQNZ2xvYmFsQWNjb3VudAQVH3x1CWdsb2JhbEludAEAC2dsb2JhbEJ5dGVzMRhAACQnBYEyZycHgAZTaWx2aW9nKIAGTWljYWxpZykjZyoiZysxAGcxG0EA74IFBNOPYHIER7Rc0QT3oE7eBEpMa/YEPHsfADYaAI4FAHUAWwA+ABkAAiJDMRkURDEYRIgBLicGIk8CVCcETFCwI0MxGRREMRhENhoBVwIANhoCVwIAiAD0SRUWVwYCTFAnBExQsCNDMRkURDEYRDYaAVcCADYaAiJTNhoDF8AciACiI0MxGRREMRhEiACITBYnBiJPA1RQJwRMULAjQzEZFEQxGESIAFFPBRZPBRZLBRUWVwYCTwZQSwUVFlcGAk8GUCcGIk8HVE8ETwRQgAIANVBLAxWBNQgWVwYCUExQTwNQTwJQTFAnBExQsCNDMRlA/zYxGBREI0MiK2VEIicFZUQiKmVEIicHZUQiKGVEIillRE8FiSIqZUUBIiplREsBREyJigMAKIv9ZymL/mcri/9nIihlRIv9EkQiKWVEi/4SRCIrZUSL/xJEiYoCAYv+i/9nIov+ZUSL/xJEIov+ZUSJJwVpI4k=", "clear": "CoEBQw==" }, "compilerInfo": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/InnerTransactions/InnerTransactions.approval.puya.map b/projects/typescript-examples/contracts/artifacts/contracts/InnerTransactions/InnerTransactions.approval.puya.map index 7f05880..1d4b004 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/InnerTransactions/InnerTransactions.approval.puya.map +++ b/projects/typescript-examples/contracts/artifacts/contracts/InnerTransactions/InnerTransactions.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "/Users/gabe.algo/Code/devportal-code-examples/projects/typescript-examples/contracts/InnerTransactions/contract.algo.ts" ], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAkBA;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAsTG;;AAAA;AAAA;AAAA;;AAAA;AAtTH;;;AAAA;AAAA;;AAsTG;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAlBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;;;;;;AAAA;AAAA;;AArBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAxCA;;AAAA;AAAA;AAAA;;AAAA;AAvOH;;;AAAA;AAAA;;AAuOG;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAjBA;;AAAA;AAAA;AAAA;;AAAA;AAtNH;;;AAAA;AAAA;;AAsNG;;;AAAA;;AA5BA;;AAAA;AAAA;AAAA;;AAAA;AA1LH;;;AAAA;AAAA;;AA0LG;;;AAAA;;AA1BA;;AAAA;AAAA;AAAA;;AAAA;AAhKH;;;AAAA;AAAA;;AAAA;;;AAAA;AAAA;;AAAA;;;AAAA;AAgKG;;;AAAA;;AAzBA;;AAAA;AAAA;AAAA;;AAAA;AAvIH;;;AAAA;AAAA;;AAAA;;;AAAA;AAAA;;AAuIG;;;AAAA;;AA3BA;;AAAA;AAAA;AAAA;;AAAA;AA5GH;;;AAAA;AAAA;;AAAA;;;AAAA;AAAA;;AAAA;;;AAAA;AA4GG;;;AAAA;;AA5BA;;AAAA;AAAA;AAAA;;AAAA;AAhFH;;;AAAA;AAAA;;AAgFG;;;AAAA;;AA1BA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AArBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AA3BA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AANH;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAQmB;AAGG;;;;AADN;;;;;AAFG;;;AAIN;;;AAJM;;;AAQf;AAmBmB;AAKJ;;;;;;;;;;;;;;;;;;AADD;;;;;;AADA;;;;AADH;;;;;;;;;AAFQ;;;AAAA;;;AAAA;;;AASnB;AAYmB;AAOC;;AACA;;;;;;;;;;AAFX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AADM;;;;;;;;;;;;;AADD;;;;;;AADA;;;;AADH;;;;AAFQ;;;AAWV;;;AAXU;;;AAenB;AASF;;;AAEE;AAE0B;;AAET;;;;;;;;;AAJjB;;;AAKS;;;AALT;;AA0BF;;;AAEE;;;;;;;;;;;;;AAAA;;;AAKS;;;AALT;;AAyBF;;;AAEE;AAIY;;;;;;;;;;;AAJZ;;;;AAKS;;;AALT;;AAuBF;;;AAEE;AAE0B;;;;;;;;;;;;;;;;AAF1B;;;AAMS;;;AANT;;AAwBF;;;AAEE;AAGoB;;AACA;AACJ;;AACE;;;;;;;;;;;;;AANlB;;;AAOS;;;AAPT;;AA0BF;;;AAEE;;;;;AAAA;;;AAGS;;;AAHT;;AAeF;;;AAGiB;AAGG;;;;AADN;;;;;AAFG;;;AAIN;;;AAJM;;;AASI;AAGL;;;AAAsD;;;;;;;;;;AAAsB;;;;;;;AAHvE;;;;AAIV;;;AAJU;;;AASM;AAAA;;;AAA4C;AAA5C;AAAA;AAAA;;;AACzB;AAsBe;AAGc;;;;;;;;;;;;;;;;;;;;;;;AADF;;;;;;;;;;;;;;;;;;;;AAFZ;;;;AAIN;;;AAJM;;;AAQf;AA2BF;;;AAGkB;AAGF;;;AAAsD;;;;;;;;;;AAAsB;;;;;;;AAH1E;;;;AAAA;;;AAAA;;;AAQT;AAAA;;;AAAyC;AAAzC;AAAA;AAAA;;;AAAP", + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAkBA;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAmSG;;AAAA;AAAA;AAAA;;AAAA;AAnSH;;;AAAA;AAAA;;AAmSG;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAlBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;;;;;;AAAA;AAAA;;AArBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAxCA;;AAAA;AAAA;AAAA;;AAAA;AApNH;;;AAAA;AAAA;;AAoNG;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAjBA;;AAAA;AAAA;AAAA;;AAAA;AAnMH;;;AAAA;AAAA;;AAmMG;;;AAAA;;AAvBA;;AAAA;AAAA;AAAA;;AAAA;AA5KH;;;AAAA;AAAA;;AA4KG;;;AAAA;;AAvBA;;AAAA;AAAA;AAAA;;AAAA;AArJH;;;AAAA;AAAA;;AAAA;;;AAAA;AAAA;;AAAA;;;AAAA;AAqJG;;;AAAA;;AAvBA;;AAAA;AAAA;AAAA;;AAAA;AA9HH;;;AAAA;AAAA;;AAAA;;;AAAA;AAAA;;AA8HG;;;AAAA;;AAtBA;;AAAA;AAAA;AAAA;;AAAA;AAxGH;;;AAAA;AAAA;;AAAA;;;AAAA;AAAA;;AAAA;;;AAAA;AAwGG;;;AAAA;;AAvBA;;AAAA;AAAA;AAAA;;AAAA;AAjFH;;;AAAA;AAAA;;AAiFG;;;AAAA;;AA7BA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAvBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAnBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAVH;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAYmB;AAGG;;;;AADN;;;;;AAFG;;;AAIN;;;AAJM;;;AAQf;AAWmB;AAKJ;;;;;;;;;;;;;;;;;;AADD;;;;;;AADA;;;;AADH;;;;;;;;;AAFQ;;;AAAA;;;AAAA;;;AASnB;AAcmB;AAOC;;AACA;;;;;;;;;;AAFX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AADM;;;;;;;;;;;;;AADD;;;;;;AADA;;;;AADH;;;;AAFQ;;;AAWV;;;AAXU;;;AAenB;AAYF;;;AAEE;AAE0B;;AAET;;;;;;;;;AAJjB;;;AAKS;;;AALT;;AAqBF;;;AAEE;;;;;;;;;;;;;AAAA;;;AAKS;;;AALT;;AAoBF;;;AAEE;AAIY;;;;;;;;;;;AAJZ;;;;AAKS;;;AALT;;AAqBF;;;AAEE;AAE0B;;;;;;;;;;;;;;;;AAF1B;;;AAMS;;;AANT;;AAqBF;;;AAEE;AAGoB;;AACA;AACJ;;AACE;;;;;;;;;;;;;AANlB;;;AAOS;;;AAPT;;AAqBF;;;AAEE;;;;;AAAA;;;AAGS;;;AAHT;;AAeF;;;AAGiB;AAGG;;;;AADN;;;;;AAFG;;;AAIN;;;AAJM;;;AASI;AAGL;;;AAAsD;;;;;;;;;;AAAsB;;;;;;;AAHvE;;;;AAIV;;;AAJU;;;AASM;AAAA;;;AAA4C;AAA5C;AAAA;AAAA;;;AACzB;AAsBe;AAGc;;;;;;;;;;;;;;;;;;;;;;;AADF;;;;;;;;;;;;;;;;;;;;AAFZ;;;;AAIN;;;AAJM;;;AAQf;AA2BF;;;AAGkB;AAGF;;;AAAsD;;;;;;;;;;AAAsB;;;;;;;AAH1E;;;;AAAA;;;AAAA;;;AAQT;AAAA;;;AAAyC;AAAzC;AAAA;AAAA;;;AAAP", "op_pc_offset": 0, "pc_events": { "1": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/InnerTransactions/InnerTransactions.approval.teal b/projects/typescript-examples/contracts/artifacts/contracts/InnerTransactions/InnerTransactions.approval.teal index 70a8184..a0957a7 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/InnerTransactions/InnerTransactions.approval.teal +++ b/projects/typescript-examples/contracts/artifacts/contracts/InnerTransactions/InnerTransactions.approval.teal @@ -20,7 +20,7 @@ main_after_if_else@22: return main_noopAppCall_route@15: - // contracts/InnerTransactions/contract.algo.ts:329 + // contracts/InnerTransactions/contract.algo.ts:310 // @abimethod() txn OnCompletion ! @@ -32,7 +32,7 @@ main_noopAppCall_route@15: txna ApplicationArgs 1 btoi txnas Applications - // contracts/InnerTransactions/contract.algo.ts:329 + // contracts/InnerTransactions/contract.algo.ts:310 // @abimethod() callsub noopAppCall dup @@ -49,7 +49,7 @@ main_noopAppCall_route@15: return main_arc4DeployApp_route@14: - // contracts/InnerTransactions/contract.algo.ts:311 + // contracts/InnerTransactions/contract.algo.ts:292 // @abimethod() txn OnCompletion ! @@ -62,7 +62,7 @@ main_arc4DeployApp_route@14: return main_deployApp_route@13: - // contracts/InnerTransactions/contract.algo.ts:290 + // contracts/InnerTransactions/contract.algo.ts:271 // @abimethod() txn OnCompletion ! @@ -79,7 +79,7 @@ main_deployApp_route@13: return main_multiInnerTxns_route@12: - // contracts/InnerTransactions/contract.algo.ts:250 + // contracts/InnerTransactions/contract.algo.ts:231 // @abimethod() txn OnCompletion ! @@ -91,7 +91,7 @@ main_multiInnerTxns_route@12: txna ApplicationArgs 1 btoi txnas Applications - // contracts/InnerTransactions/contract.algo.ts:250 + // contracts/InnerTransactions/contract.algo.ts:231 // @abimethod() callsub multiInnerTxns swap @@ -115,7 +115,7 @@ main_multiInnerTxns_route@12: return main_assetDelete_route@11: - // contracts/InnerTransactions/contract.algo.ts:233 + // contracts/InnerTransactions/contract.algo.ts:214 // @abimethod() txn OnCompletion ! @@ -127,14 +127,14 @@ main_assetDelete_route@11: txna ApplicationArgs 1 btoi txnas Assets - // contracts/InnerTransactions/contract.algo.ts:233 + // contracts/InnerTransactions/contract.algo.ts:214 // @abimethod() callsub assetDelete intc_0 // 1 return main_assetConfig_route@10: - // contracts/InnerTransactions/contract.algo.ts:205 + // contracts/InnerTransactions/contract.algo.ts:191 // @abimethod() txn OnCompletion ! @@ -146,14 +146,14 @@ main_assetConfig_route@10: txna ApplicationArgs 1 btoi txnas Assets - // contracts/InnerTransactions/contract.algo.ts:205 + // contracts/InnerTransactions/contract.algo.ts:191 // @abimethod() callsub assetConfig intc_0 // 1 return main_assetRevoke_route@9: - // contracts/InnerTransactions/contract.algo.ts:179 + // contracts/InnerTransactions/contract.algo.ts:168 // @abimethod() txn OnCompletion ! @@ -170,14 +170,14 @@ main_assetRevoke_route@9: txnas Accounts txna ApplicationArgs 3 btoi - // contracts/InnerTransactions/contract.algo.ts:179 + // contracts/InnerTransactions/contract.algo.ts:168 // @abimethod() callsub assetRevoke intc_0 // 1 return main_assetFreeze_route@8: - // contracts/InnerTransactions/contract.algo.ts:154 + // contracts/InnerTransactions/contract.algo.ts:145 // @abimethod() txn OnCompletion ! @@ -192,14 +192,14 @@ main_assetFreeze_route@8: txna ApplicationArgs 2 btoi txnas Assets - // contracts/InnerTransactions/contract.algo.ts:154 + // contracts/InnerTransactions/contract.algo.ts:145 // @abimethod() callsub assetFreeze intc_0 // 1 return main_assetTransfer_route@7: - // contracts/InnerTransactions/contract.algo.ts:127 + // contracts/InnerTransactions/contract.algo.ts:123 // @abimethod() txn OnCompletion ! @@ -216,14 +216,14 @@ main_assetTransfer_route@7: txnas Accounts txna ApplicationArgs 3 btoi - // contracts/InnerTransactions/contract.algo.ts:127 + // contracts/InnerTransactions/contract.algo.ts:123 // @abimethod() callsub assetTransfer intc_0 // 1 return main_assetOptIn_route@6: - // contracts/InnerTransactions/contract.algo.ts:99 + // contracts/InnerTransactions/contract.algo.ts:100 // @abimethod() txn OnCompletion ! @@ -235,14 +235,14 @@ main_assetOptIn_route@6: txna ApplicationArgs 1 btoi txnas Assets - // contracts/InnerTransactions/contract.algo.ts:99 + // contracts/InnerTransactions/contract.algo.ts:100 // @abimethod() callsub assetOptIn intc_0 // 1 return main_nonFungibleAssetCreate_route@5: - // contracts/InnerTransactions/contract.algo.ts:73 + // contracts/InnerTransactions/contract.algo.ts:71 // @abimethod() txn OnCompletion ! @@ -259,7 +259,7 @@ main_nonFungibleAssetCreate_route@5: return main_fungibleAssetCreate_route@4: - // contracts/InnerTransactions/contract.algo.ts:52 + // contracts/InnerTransactions/contract.algo.ts:48 // @abimethod() txn OnCompletion ! @@ -276,7 +276,7 @@ main_fungibleAssetCreate_route@4: return main_payment_route@3: - // contracts/InnerTransactions/contract.algo.ts:25 + // contracts/InnerTransactions/contract.algo.ts:29 // @abimethod() txn OnCompletion ! @@ -306,7 +306,7 @@ main_bare_routing@18: // contracts/InnerTransactions/contract.algo.ts::InnerTransactions.payment() -> uint64: payment: - // contracts/InnerTransactions/contract.algo.ts:27-33 + // contracts/InnerTransactions/contract.algo.ts:31-37 // const result = itxn // .payment({ // amount: 5000, @@ -315,15 +315,15 @@ payment: // }) // .submit() itxn_begin - // contracts/InnerTransactions/contract.algo.ts:30 + // contracts/InnerTransactions/contract.algo.ts:34 // receiver: Txn.sender, txn Sender itxn_field Receiver - // contracts/InnerTransactions/contract.algo.ts:29 + // contracts/InnerTransactions/contract.algo.ts:33 // amount: 5000, pushint 5000 // 5000 itxn_field Amount - // contracts/InnerTransactions/contract.algo.ts:27-32 + // contracts/InnerTransactions/contract.algo.ts:31-36 // const result = itxn // .payment({ // amount: 5000, @@ -332,11 +332,11 @@ payment: // }) intc_0 // 1 itxn_field TypeEnum - // contracts/InnerTransactions/contract.algo.ts:31 + // contracts/InnerTransactions/contract.algo.ts:35 // fee: 0, intc_1 // 0 itxn_field Fee - // contracts/InnerTransactions/contract.algo.ts:27-33 + // contracts/InnerTransactions/contract.algo.ts:31-37 // const result = itxn // .payment({ // amount: 5000, @@ -346,14 +346,14 @@ payment: // .submit() itxn_submit itxn Amount - // contracts/InnerTransactions/contract.algo.ts:35 + // contracts/InnerTransactions/contract.algo.ts:39 // return result.amount retsub // contracts/InnerTransactions/contract.algo.ts::InnerTransactions.fungibleAssetCreate() -> uint64: fungibleAssetCreate: - // contracts/InnerTransactions/contract.algo.ts:54-61 + // contracts/InnerTransactions/contract.algo.ts:50-57 // const itxnResult = itxn // .assetConfig({ // total: 100_000_000_000, @@ -363,23 +363,23 @@ fungibleAssetCreate: // }) // .submit() itxn_begin - // contracts/InnerTransactions/contract.algo.ts:59 + // contracts/InnerTransactions/contract.algo.ts:55 // assetName: 'Royalty Points', pushbytes "Royalty Points" itxn_field ConfigAssetName - // contracts/InnerTransactions/contract.algo.ts:58 + // contracts/InnerTransactions/contract.algo.ts:54 // unitName: 'RP', pushbytes "RP" itxn_field ConfigAssetUnitName - // contracts/InnerTransactions/contract.algo.ts:57 + // contracts/InnerTransactions/contract.algo.ts:53 // decimals: 2, pushint 2 // 2 itxn_field ConfigAssetDecimals - // contracts/InnerTransactions/contract.algo.ts:56 + // contracts/InnerTransactions/contract.algo.ts:52 // total: 100_000_000_000, pushint 100000000000 // 100000000000 itxn_field ConfigAssetTotal - // contracts/InnerTransactions/contract.algo.ts:54-60 + // contracts/InnerTransactions/contract.algo.ts:50-56 // const itxnResult = itxn // .assetConfig({ // total: 100_000_000_000, @@ -391,7 +391,7 @@ fungibleAssetCreate: itxn_field TypeEnum intc_1 // 0 itxn_field Fee - // contracts/InnerTransactions/contract.algo.ts:54-61 + // contracts/InnerTransactions/contract.algo.ts:50-57 // const itxnResult = itxn // .assetConfig({ // total: 100_000_000_000, @@ -402,14 +402,14 @@ fungibleAssetCreate: // .submit() itxn_submit itxn CreatedAssetID - // contracts/InnerTransactions/contract.algo.ts:63 + // contracts/InnerTransactions/contract.algo.ts:59 // return itxnResult.createdAsset.id retsub // contracts/InnerTransactions/contract.algo.ts::InnerTransactions.nonFungibleAssetCreate() -> uint64: nonFungibleAssetCreate: - // contracts/InnerTransactions/contract.algo.ts:75-88 + // contracts/InnerTransactions/contract.algo.ts:73-86 // const itxnResult = itxn // .assetConfig({ // total: 100, @@ -425,10 +425,10 @@ nonFungibleAssetCreate: // }) // .submit() itxn_begin - // contracts/InnerTransactions/contract.algo.ts:82 + // contracts/InnerTransactions/contract.algo.ts:80 // manager: Global.currentApplicationAddress, global CurrentApplicationAddress - // contracts/InnerTransactions/contract.algo.ts:83-85 + // contracts/InnerTransactions/contract.algo.ts:81-83 // reserve: Global.currentApplicationAddress, // freeze: Global.currentApplicationAddress, // clawback: Global.currentApplicationAddress, @@ -437,27 +437,27 @@ nonFungibleAssetCreate: itxn_field ConfigAssetFreeze itxn_field ConfigAssetReserve itxn_field ConfigAssetManager - // contracts/InnerTransactions/contract.algo.ts:81 + // contracts/InnerTransactions/contract.algo.ts:79 // url: 'https://link_to_ipfs/Mona_Lisa', pushbytes "https://link_to_ipfs/Mona_Lisa" itxn_field ConfigAssetURL - // contracts/InnerTransactions/contract.algo.ts:80 + // contracts/InnerTransactions/contract.algo.ts:78 // assetName: 'Mona Lisa', pushbytes "Mona Lisa" itxn_field ConfigAssetName - // contracts/InnerTransactions/contract.algo.ts:79 + // contracts/InnerTransactions/contract.algo.ts:77 // unitName: 'ML', pushbytes "ML" itxn_field ConfigAssetUnitName - // contracts/InnerTransactions/contract.algo.ts:78 + // contracts/InnerTransactions/contract.algo.ts:76 // decimals: 2, pushint 2 // 2 itxn_field ConfigAssetDecimals - // contracts/InnerTransactions/contract.algo.ts:77 + // contracts/InnerTransactions/contract.algo.ts:75 // total: 100, pushint 100 // 100 itxn_field ConfigAssetTotal - // contracts/InnerTransactions/contract.algo.ts:75-87 + // contracts/InnerTransactions/contract.algo.ts:73-85 // const itxnResult = itxn // .assetConfig({ // total: 100, @@ -473,11 +473,11 @@ nonFungibleAssetCreate: // }) intc_2 // 3 itxn_field TypeEnum - // contracts/InnerTransactions/contract.algo.ts:86 + // contracts/InnerTransactions/contract.algo.ts:84 // fee: 0, intc_1 // 0 itxn_field Fee - // contracts/InnerTransactions/contract.algo.ts:75-88 + // contracts/InnerTransactions/contract.algo.ts:73-86 // const itxnResult = itxn // .assetConfig({ // total: 100, @@ -494,18 +494,18 @@ nonFungibleAssetCreate: // .submit() itxn_submit itxn CreatedAssetID - // contracts/InnerTransactions/contract.algo.ts:90 + // contracts/InnerTransactions/contract.algo.ts:88 // return itxnResult.createdAsset.id retsub // contracts/InnerTransactions/contract.algo.ts::InnerTransactions.assetOptIn(asset: uint64) -> void: assetOptIn: - // contracts/InnerTransactions/contract.algo.ts:99-100 + // contracts/InnerTransactions/contract.algo.ts:100-101 // @abimethod() // public assetOptIn(asset: Asset): void { proto 1 0 - // contracts/InnerTransactions/contract.algo.ts:101-108 + // contracts/InnerTransactions/contract.algo.ts:102-109 // itxn // .assetTransfer({ // assetReceiver: Global.currentApplicationAddress, @@ -515,17 +515,17 @@ assetOptIn: // }) // .submit() itxn_begin - // contracts/InnerTransactions/contract.algo.ts:103 + // contracts/InnerTransactions/contract.algo.ts:104 // assetReceiver: Global.currentApplicationAddress, global CurrentApplicationAddress - // contracts/InnerTransactions/contract.algo.ts:105 + // contracts/InnerTransactions/contract.algo.ts:106 // assetAmount: 0, intc_1 // 0 itxn_field AssetAmount frame_dig -1 itxn_field XferAsset itxn_field AssetReceiver - // contracts/InnerTransactions/contract.algo.ts:101-107 + // contracts/InnerTransactions/contract.algo.ts:102-108 // itxn // .assetTransfer({ // assetReceiver: Global.currentApplicationAddress, @@ -535,11 +535,11 @@ assetOptIn: // }) intc_3 // 4 itxn_field TypeEnum - // contracts/InnerTransactions/contract.algo.ts:106 + // contracts/InnerTransactions/contract.algo.ts:107 // fee: 0, intc_1 // 0 itxn_field Fee - // contracts/InnerTransactions/contract.algo.ts:101-108 + // contracts/InnerTransactions/contract.algo.ts:102-109 // itxn // .assetTransfer({ // assetReceiver: Global.currentApplicationAddress, @@ -554,11 +554,11 @@ assetOptIn: // contracts/InnerTransactions/contract.algo.ts::InnerTransactions.assetTransfer(asset: uint64, receiver: bytes, amount: uint64) -> void: assetTransfer: - // contracts/InnerTransactions/contract.algo.ts:127-128 + // contracts/InnerTransactions/contract.algo.ts:123-124 // @abimethod() // public assetTransfer(asset: Asset, receiver: Account, amount: uint64): void { proto 3 0 - // contracts/InnerTransactions/contract.algo.ts:129-136 + // contracts/InnerTransactions/contract.algo.ts:125-132 // itxn // .assetTransfer({ // assetReceiver: receiver, @@ -574,7 +574,7 @@ assetTransfer: itxn_field XferAsset frame_dig -2 itxn_field AssetReceiver - // contracts/InnerTransactions/contract.algo.ts:129-135 + // contracts/InnerTransactions/contract.algo.ts:125-131 // itxn // .assetTransfer({ // assetReceiver: receiver, @@ -584,11 +584,11 @@ assetTransfer: // }) intc_3 // 4 itxn_field TypeEnum - // contracts/InnerTransactions/contract.algo.ts:134 + // contracts/InnerTransactions/contract.algo.ts:130 // fee: 0, intc_1 // 0 itxn_field Fee - // contracts/InnerTransactions/contract.algo.ts:129-136 + // contracts/InnerTransactions/contract.algo.ts:125-132 // itxn // .assetTransfer({ // assetReceiver: receiver, @@ -603,11 +603,11 @@ assetTransfer: // contracts/InnerTransactions/contract.algo.ts::InnerTransactions.assetFreeze(acctToBeFrozen: bytes, asset: uint64) -> void: assetFreeze: - // contracts/InnerTransactions/contract.algo.ts:154-155 + // contracts/InnerTransactions/contract.algo.ts:145-146 // @abimethod() // public assetFreeze(acctToBeFrozen: Account, asset: Asset): void { proto 2 0 - // contracts/InnerTransactions/contract.algo.ts:156-163 + // contracts/InnerTransactions/contract.algo.ts:147-154 // itxn // .assetFreeze({ // freezeAccount: acctToBeFrozen, // account to be frozen @@ -617,7 +617,7 @@ assetFreeze: // }) // .submit() itxn_begin - // contracts/InnerTransactions/contract.algo.ts:160 + // contracts/InnerTransactions/contract.algo.ts:151 // frozen: true, intc_0 // 1 itxn_field FreezeAssetFrozen @@ -625,7 +625,7 @@ assetFreeze: itxn_field FreezeAsset frame_dig -2 itxn_field FreezeAssetAccount - // contracts/InnerTransactions/contract.algo.ts:156-162 + // contracts/InnerTransactions/contract.algo.ts:147-153 // itxn // .assetFreeze({ // freezeAccount: acctToBeFrozen, // account to be frozen @@ -635,11 +635,11 @@ assetFreeze: // }) pushint 5 // 5 itxn_field TypeEnum - // contracts/InnerTransactions/contract.algo.ts:161 + // contracts/InnerTransactions/contract.algo.ts:152 // fee: 0, intc_1 // 0 itxn_field Fee - // contracts/InnerTransactions/contract.algo.ts:156-163 + // contracts/InnerTransactions/contract.algo.ts:147-154 // itxn // .assetFreeze({ // freezeAccount: acctToBeFrozen, // account to be frozen @@ -654,11 +654,11 @@ assetFreeze: // contracts/InnerTransactions/contract.algo.ts::InnerTransactions.assetRevoke(asset: uint64, accountToBeRevoked: bytes, amount: uint64) -> void: assetRevoke: - // contracts/InnerTransactions/contract.algo.ts:179-180 + // contracts/InnerTransactions/contract.algo.ts:168-169 // @abimethod() // public assetRevoke(asset: Asset, accountToBeRevoked: Account, amount: uint64): void { proto 3 0 - // contracts/InnerTransactions/contract.algo.ts:181-189 + // contracts/InnerTransactions/contract.algo.ts:170-178 // itxn // .assetTransfer({ // assetReceiver: Global.currentApplicationAddress, @@ -669,7 +669,7 @@ assetRevoke: // }) // .submit() itxn_begin - // contracts/InnerTransactions/contract.algo.ts:183 + // contracts/InnerTransactions/contract.algo.ts:172 // assetReceiver: Global.currentApplicationAddress, global CurrentApplicationAddress frame_dig -1 @@ -679,7 +679,7 @@ assetRevoke: frame_dig -3 itxn_field XferAsset itxn_field AssetReceiver - // contracts/InnerTransactions/contract.algo.ts:181-188 + // contracts/InnerTransactions/contract.algo.ts:170-177 // itxn // .assetTransfer({ // assetReceiver: Global.currentApplicationAddress, @@ -690,11 +690,11 @@ assetRevoke: // }) intc_3 // 4 itxn_field TypeEnum - // contracts/InnerTransactions/contract.algo.ts:187 + // contracts/InnerTransactions/contract.algo.ts:176 // fee: 0, intc_1 // 0 itxn_field Fee - // contracts/InnerTransactions/contract.algo.ts:181-189 + // contracts/InnerTransactions/contract.algo.ts:170-178 // itxn // .assetTransfer({ // assetReceiver: Global.currentApplicationAddress, @@ -710,11 +710,11 @@ assetRevoke: // contracts/InnerTransactions/contract.algo.ts::InnerTransactions.assetConfig(asset: uint64) -> void: assetConfig: - // contracts/InnerTransactions/contract.algo.ts:205-206 + // contracts/InnerTransactions/contract.algo.ts:191-192 // @abimethod() // public assetConfig(asset: Asset): void { proto 1 0 - // contracts/InnerTransactions/contract.algo.ts:207-216 + // contracts/InnerTransactions/contract.algo.ts:193-202 // itxn // .assetConfig({ // configAsset: asset, @@ -726,16 +726,16 @@ assetConfig: // }) // .submit() itxn_begin - // contracts/InnerTransactions/contract.algo.ts:210 + // contracts/InnerTransactions/contract.algo.ts:196 // manager: Global.currentApplicationAddress, global CurrentApplicationAddress - // contracts/InnerTransactions/contract.algo.ts:211 + // contracts/InnerTransactions/contract.algo.ts:197 // reserve: Global.currentApplicationAddress, dup - // contracts/InnerTransactions/contract.algo.ts:212 + // contracts/InnerTransactions/contract.algo.ts:198 // freeze: Txn.sender, txn Sender - // contracts/InnerTransactions/contract.algo.ts:213 + // contracts/InnerTransactions/contract.algo.ts:199 // clawback: Txn.sender, dup itxn_field ConfigAssetClawback @@ -744,7 +744,7 @@ assetConfig: itxn_field ConfigAssetManager frame_dig -1 itxn_field ConfigAsset - // contracts/InnerTransactions/contract.algo.ts:207-215 + // contracts/InnerTransactions/contract.algo.ts:193-201 // itxn // .assetConfig({ // configAsset: asset, @@ -756,11 +756,11 @@ assetConfig: // }) intc_2 // 3 itxn_field TypeEnum - // contracts/InnerTransactions/contract.algo.ts:214 + // contracts/InnerTransactions/contract.algo.ts:200 // fee: 0, intc_1 // 0 itxn_field Fee - // contracts/InnerTransactions/contract.algo.ts:207-216 + // contracts/InnerTransactions/contract.algo.ts:193-202 // itxn // .assetConfig({ // configAsset: asset, @@ -777,11 +777,11 @@ assetConfig: // contracts/InnerTransactions/contract.algo.ts::InnerTransactions.assetDelete(asset: uint64) -> void: assetDelete: - // contracts/InnerTransactions/contract.algo.ts:233-234 + // contracts/InnerTransactions/contract.algo.ts:214-215 // @abimethod() // public assetDelete(asset: Asset): void { proto 1 0 - // contracts/InnerTransactions/contract.algo.ts:235-240 + // contracts/InnerTransactions/contract.algo.ts:216-221 // itxn // .assetConfig({ // configAsset: asset, @@ -791,7 +791,7 @@ assetDelete: itxn_begin frame_dig -1 itxn_field ConfigAsset - // contracts/InnerTransactions/contract.algo.ts:235-239 + // contracts/InnerTransactions/contract.algo.ts:216-220 // itxn // .assetConfig({ // configAsset: asset, @@ -799,11 +799,11 @@ assetDelete: // }) intc_2 // 3 itxn_field TypeEnum - // contracts/InnerTransactions/contract.algo.ts:238 + // contracts/InnerTransactions/contract.algo.ts:219 // fee: 0, intc_1 // 0 itxn_field Fee - // contracts/InnerTransactions/contract.algo.ts:235-240 + // contracts/InnerTransactions/contract.algo.ts:216-221 // itxn // .assetConfig({ // configAsset: asset, @@ -816,11 +816,11 @@ assetDelete: // contracts/InnerTransactions/contract.algo.ts::InnerTransactions.multiInnerTxns(appId: uint64) -> uint64, bytes: multiInnerTxns: - // contracts/InnerTransactions/contract.algo.ts:250-251 + // contracts/InnerTransactions/contract.algo.ts:231-232 // @abimethod() // public multiInnerTxns(appId: Application): [uint64, string] { proto 1 2 - // contracts/InnerTransactions/contract.algo.ts:253-259 + // contracts/InnerTransactions/contract.algo.ts:234-240 // const payTxn = itxn // .payment({ // amount: 5000, @@ -829,15 +829,15 @@ multiInnerTxns: // }) // .submit() itxn_begin - // contracts/InnerTransactions/contract.algo.ts:256 + // contracts/InnerTransactions/contract.algo.ts:237 // receiver: Txn.sender, txn Sender itxn_field Receiver - // contracts/InnerTransactions/contract.algo.ts:255 + // contracts/InnerTransactions/contract.algo.ts:236 // amount: 5000, pushint 5000 // 5000 itxn_field Amount - // contracts/InnerTransactions/contract.algo.ts:253-258 + // contracts/InnerTransactions/contract.algo.ts:234-239 // const payTxn = itxn // .payment({ // amount: 5000, @@ -846,11 +846,11 @@ multiInnerTxns: // }) intc_0 // 1 itxn_field TypeEnum - // contracts/InnerTransactions/contract.algo.ts:257 + // contracts/InnerTransactions/contract.algo.ts:238 // fee: 0, intc_1 // 0 itxn_field Fee - // contracts/InnerTransactions/contract.algo.ts:253-259 + // contracts/InnerTransactions/contract.algo.ts:234-240 // const payTxn = itxn // .payment({ // amount: 5000, @@ -860,7 +860,7 @@ multiInnerTxns: // .submit() itxn_submit itxn Amount - // contracts/InnerTransactions/contract.algo.ts:262-268 + // contracts/InnerTransactions/contract.algo.ts:243-249 // const appCallTxn = itxn // .applicationCall({ // appId: appId.id, @@ -869,7 +869,7 @@ multiInnerTxns: // }) // .submit() itxn_begin - // contracts/InnerTransactions/contract.algo.ts:265 + // contracts/InnerTransactions/contract.algo.ts:246 // appArgs: [arc4.methodSelector('sayHello(string,string)string'), new arc4.Str('Jane'), new arc4.Str('Doe')], bytec_1 // method "sayHello(string,string)string" itxn_field ApplicationArgs @@ -879,7 +879,7 @@ multiInnerTxns: itxn_field ApplicationArgs frame_dig -1 itxn_field ApplicationID - // contracts/InnerTransactions/contract.algo.ts:262-267 + // contracts/InnerTransactions/contract.algo.ts:243-248 // const appCallTxn = itxn // .applicationCall({ // appId: appId.id, @@ -888,11 +888,11 @@ multiInnerTxns: // }) pushint 6 // 6 itxn_field TypeEnum - // contracts/InnerTransactions/contract.algo.ts:266 + // contracts/InnerTransactions/contract.algo.ts:247 // fee: 0, intc_1 // 0 itxn_field Fee - // contracts/InnerTransactions/contract.algo.ts:262-268 + // contracts/InnerTransactions/contract.algo.ts:243-249 // const appCallTxn = itxn // .applicationCall({ // appId: appId.id, @@ -902,7 +902,7 @@ multiInnerTxns: // .submit() itxn_submit itxn LastLog - // contracts/InnerTransactions/contract.algo.ts:271 + // contracts/InnerTransactions/contract.algo.ts:252 // const helloWorldResult = arc4.decodeArc4(appCallTxn.lastLog, 'log') dup extract 0 4 @@ -910,14 +910,14 @@ multiInnerTxns: == assert // Bytes has valid prefix extract 6 0 - // contracts/InnerTransactions/contract.algo.ts:272 + // contracts/InnerTransactions/contract.algo.ts:253 // return [payTxn.amount, helloWorldResult] retsub // contracts/InnerTransactions/contract.algo.ts::InnerTransactions.deployApp() -> uint64: deployApp: - // contracts/InnerTransactions/contract.algo.ts:294-300 + // contracts/InnerTransactions/contract.algo.ts:275-281 // const appTxn = itxn // .applicationCall({ // approvalProgram: Bytes('approval_program'), @@ -926,15 +926,15 @@ deployApp: // }) // .submit() itxn_begin - // contracts/InnerTransactions/contract.algo.ts:297 + // contracts/InnerTransactions/contract.algo.ts:278 // clearStateProgram: Bytes('clear_state_program'), pushbytes "clear_state_program" itxn_field ClearStateProgramPages - // contracts/InnerTransactions/contract.algo.ts:296 + // contracts/InnerTransactions/contract.algo.ts:277 // approvalProgram: Bytes('approval_program'), pushbytes "approval_program" itxn_field ApprovalProgramPages - // contracts/InnerTransactions/contract.algo.ts:294-299 + // contracts/InnerTransactions/contract.algo.ts:275-280 // const appTxn = itxn // .applicationCall({ // approvalProgram: Bytes('approval_program'), @@ -943,11 +943,11 @@ deployApp: // }) pushint 6 // 6 itxn_field TypeEnum - // contracts/InnerTransactions/contract.algo.ts:298 + // contracts/InnerTransactions/contract.algo.ts:279 // fee: 0, intc_1 // 0 itxn_field Fee - // contracts/InnerTransactions/contract.algo.ts:294-300 + // contracts/InnerTransactions/contract.algo.ts:275-281 // const appTxn = itxn // .applicationCall({ // approvalProgram: Bytes('approval_program'), @@ -957,18 +957,18 @@ deployApp: // .submit() itxn_submit itxn CreatedApplicationID - // contracts/InnerTransactions/contract.algo.ts:302 + // contracts/InnerTransactions/contract.algo.ts:283 // return appTxn.createdApp.id retsub // contracts/InnerTransactions/contract.algo.ts::InnerTransactions.noopAppCall(appId: uint64) -> bytes: noopAppCall: - // contracts/InnerTransactions/contract.algo.ts:329-330 + // contracts/InnerTransactions/contract.algo.ts:310-311 // @abimethod() // public noopAppCall(appId: Application): string { proto 1 1 - // contracts/InnerTransactions/contract.algo.ts:332-337 + // contracts/InnerTransactions/contract.algo.ts:313-318 // const callTxn = itxn // .applicationCall({ // appId: appId.id, @@ -976,7 +976,7 @@ noopAppCall: // }) // .submit() itxn_begin - // contracts/InnerTransactions/contract.algo.ts:335 + // contracts/InnerTransactions/contract.algo.ts:316 // appArgs: [arc4.methodSelector('sayHello(string,string)string'), new arc4.Str('John'), new arc4.Str('Doe')], bytec_1 // method "sayHello(string,string)string" itxn_field ApplicationArgs @@ -986,7 +986,7 @@ noopAppCall: itxn_field ApplicationArgs frame_dig -1 itxn_field ApplicationID - // contracts/InnerTransactions/contract.algo.ts:332-336 + // contracts/InnerTransactions/contract.algo.ts:313-317 // const callTxn = itxn // .applicationCall({ // appId: appId.id, @@ -996,7 +996,7 @@ noopAppCall: itxn_field TypeEnum intc_1 // 0 itxn_field Fee - // contracts/InnerTransactions/contract.algo.ts:332-337 + // contracts/InnerTransactions/contract.algo.ts:313-318 // const callTxn = itxn // .applicationCall({ // appId: appId.id, @@ -1005,7 +1005,7 @@ noopAppCall: // .submit() itxn_submit itxn LastLog - // contracts/InnerTransactions/contract.algo.ts:340 + // contracts/InnerTransactions/contract.algo.ts:321 // return arc4.decodeArc4(callTxn.lastLog, 'log') dup extract 0 4 diff --git a/projects/typescript-examples/contracts/artifacts/contracts/InnerTransactions/InnerTransactions.arc32.json b/projects/typescript-examples/contracts/artifacts/contracts/InnerTransactions/InnerTransactions.arc32.json index f0807d5..26d464d 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/InnerTransactions/InnerTransactions.arc32.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/InnerTransactions/InnerTransactions.arc32.json @@ -67,7 +67,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDMgNAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4M2FhZDZkODYgMHgwMDAzNDQ2ZjY1CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTgKICAgIHB1c2hieXRlc3MgMHgyMzk1MDAyNyAweDAyMDdmNzdkIDB4ZDIyNDkyODQgMHg2NmEwNjNiZiAweDEyNTYzNzY3IDB4Y2ZiMTJkYjEgMHg3YjU4ZTIzNiAweGQwODY0ZmY0IDB4NTM1MWQ3YmUgMHg1NzI3ZWNhZSAweGRhMjBhODdlIDB4MzhlY2MwMTQgMHg5YWVlYzE1OSAvLyBtZXRob2QgInBheW1lbnQoKXVpbnQ2NCIsIG1ldGhvZCAiZnVuZ2libGVBc3NldENyZWF0ZSgpdWludDY0IiwgbWV0aG9kICJub25GdW5naWJsZUFzc2V0Q3JlYXRlKCl1aW50NjQiLCBtZXRob2QgImFzc2V0T3B0SW4oYXNzZXQpdm9pZCIsIG1ldGhvZCAiYXNzZXRUcmFuc2Zlcihhc3NldCxhY2NvdW50LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJhc3NldEZyZWV6ZShhY2NvdW50LGFzc2V0KXZvaWQiLCBtZXRob2QgImFzc2V0UmV2b2tlKGFzc2V0LGFjY291bnQsdWludDY0KXZvaWQiLCBtZXRob2QgImFzc2V0Q29uZmlnKGFzc2V0KXZvaWQiLCBtZXRob2QgImFzc2V0RGVsZXRlKGFzc2V0KXZvaWQiLCBtZXRob2QgIm11bHRpSW5uZXJUeG5zKGFwcGxpY2F0aW9uKSh1aW50NjQsc3RyaW5nKSIsIG1ldGhvZCAiZGVwbG95QXBwKCl1aW50NjQiLCBtZXRob2QgImFyYzREZXBsb3lBcHAoKXVpbnQ2NCIsIG1ldGhvZCAibm9vcEFwcENhbGwoYXBwbGljYXRpb24pc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9wYXltZW50X3JvdXRlQDMgbWFpbl9mdW5naWJsZUFzc2V0Q3JlYXRlX3JvdXRlQDQgbWFpbl9ub25GdW5naWJsZUFzc2V0Q3JlYXRlX3JvdXRlQDUgbWFpbl9hc3NldE9wdEluX3JvdXRlQDYgbWFpbl9hc3NldFRyYW5zZmVyX3JvdXRlQDcgbWFpbl9hc3NldEZyZWV6ZV9yb3V0ZUA4IG1haW5fYXNzZXRSZXZva2Vfcm91dGVAOSBtYWluX2Fzc2V0Q29uZmlnX3JvdXRlQDEwIG1haW5fYXNzZXREZWxldGVfcm91dGVAMTEgbWFpbl9tdWx0aUlubmVyVHhuc19yb3V0ZUAxMiBtYWluX2RlcGxveUFwcF9yb3V0ZUAxMyBtYWluX2FyYzREZXBsb3lBcHBfcm91dGVAMTQgbWFpbl9ub29wQXBwQ2FsbF9yb3V0ZUAxNQoKbWFpbl9hZnRlcl9pZl9lbHNlQDIyOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9ub29wQXBwQ2FsbF9yb3V0ZUAxNToKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjMyOQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzI5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgbm9vcEFwcENhbGwKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzREZXBsb3lBcHBfcm91dGVAMTQ6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozMTEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDA0ZDIKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZXBsb3lBcHBfcm91dGVAMTM6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyOTAKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlcGxveUFwcAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tdWx0aUlubmVyVHhuc19yb3V0ZUAxMjoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjUwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgbXVsdGlJbm5lclR4bnMKICAgIHN3YXAKICAgIGl0b2IKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgcHVzaGJ5dGVzIDB4MDAwYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXREZWxldGVfcm91dGVAMTE6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMzMKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIzMwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFzc2V0RGVsZXRlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0Q29uZmlnX3JvdXRlQDEwOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjA1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMDUKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBhc3NldENvbmZpZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hc3NldFJldm9rZV9yb3V0ZUA5OgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYXNzZXRSZXZva2UKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRGcmVlemVfcm91dGVAODoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE1NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE1NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFzc2V0RnJlZXplCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0VHJhbnNmZXJfcm91dGVANzoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFzc2V0VHJhbnNmZXIKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRPcHRJbl9yb3V0ZUA2OgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYXNzZXRPcHRJbgogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ub25GdW5naWJsZUFzc2V0Q3JlYXRlX3JvdXRlQDU6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbm9uRnVuZ2libGVBc3NldENyZWF0ZQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9mdW5naWJsZUFzc2V0Q3JlYXRlX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZnVuZ2libGVBc3NldENyZWF0ZQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9wYXltZW50X3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgcGF5bWVudAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMTg6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIyCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjpJbm5lclRyYW5zYWN0aW9ucy5wYXltZW50KCkgLT4gdWludDY0OgpwYXltZW50OgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjctMzMKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIGFtb3VudDogNTAwMCwKICAgIHB1c2hpbnQgNTAwMCAvLyA1MDAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjctMzIKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzEKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjctMzMKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQW1vdW50CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozNQogICAgLy8gcmV0dXJuIHJlc3VsdC5hbW91bnQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjpJbm5lclRyYW5zYWN0aW9ucy5mdW5naWJsZUFzc2V0Q3JlYXRlKCkgLT4gdWludDY0OgpmdW5naWJsZUFzc2V0Q3JlYXRlOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NTQtNjEKICAgIC8vIGNvbnN0IGl0eG5SZXN1bHQgPSBpdHhuCiAgICAvLyAgIC5hc3NldENvbmZpZyh7CiAgICAvLyAgICAgdG90YWw6IDEwMF8wMDBfMDAwXzAwMCwKICAgIC8vICAgICBkZWNpbWFsczogMiwKICAgIC8vICAgICB1bml0TmFtZTogJ1JQJywKICAgIC8vICAgICBhc3NldE5hbWU6ICdSb3lhbHR5IFBvaW50cycsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NTkKICAgIC8vIGFzc2V0TmFtZTogJ1JveWFsdHkgUG9pbnRzJywKICAgIHB1c2hieXRlcyAiUm95YWx0eSBQb2ludHMiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TmFtZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIHVuaXROYW1lOiAnUlAnLAogICAgcHVzaGJ5dGVzICJSUCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGRlY2ltYWxzOiAyLAogICAgcHVzaGludCAyIC8vIDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHRvdGFsOiAxMDBfMDAwXzAwMF8wMDAsCiAgICBwdXNoaW50IDEwMDAwMDAwMDAwMCAvLyAxMDAwMDAwMDAwMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NTQtNjAKICAgIC8vIGNvbnN0IGl0eG5SZXN1bHQgPSBpdHhuCiAgICAvLyAgIC5hc3NldENvbmZpZyh7CiAgICAvLyAgICAgdG90YWw6IDEwMF8wMDBfMDAwXzAwMCwKICAgIC8vICAgICBkZWNpbWFsczogMiwKICAgIC8vICAgICB1bml0TmFtZTogJ1JQJywKICAgIC8vICAgICBhc3NldE5hbWU6ICdSb3lhbHR5IFBvaW50cycsCiAgICAvLyAgIH0pCiAgICBpbnRjXzIgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1NC02MQogICAgLy8gY29uc3QgaXR4blJlc3VsdCA9IGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICB0b3RhbDogMTAwXzAwMF8wMDBfMDAwLAogICAgLy8gICAgIGRlY2ltYWxzOiAyLAogICAgLy8gICAgIHVuaXROYW1lOiAnUlAnLAogICAgLy8gICAgIGFzc2V0TmFtZTogJ1JveWFsdHkgUG9pbnRzJywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NjMKICAgIC8vIHJldHVybiBpdHhuUmVzdWx0LmNyZWF0ZWRBc3NldC5pZAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLm5vbkZ1bmdpYmxlQXNzZXRDcmVhdGUoKSAtPiB1aW50NjQ6Cm5vbkZ1bmdpYmxlQXNzZXRDcmVhdGU6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3NS04OAogICAgLy8gY29uc3QgaXR4blJlc3VsdCA9IGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICB0b3RhbDogMTAwLAogICAgLy8gICAgIGRlY2ltYWxzOiAyLAogICAgLy8gICAgIHVuaXROYW1lOiAnTUwnLAogICAgLy8gICAgIGFzc2V0TmFtZTogJ01vbmEgTGlzYScsCiAgICAvLyAgICAgdXJsOiAnaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhJywKICAgIC8vICAgICBtYW5hZ2VyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmcmVlemU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGNsYXdiYWNrOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjgzLTg1CiAgICAvLyByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vIGZyZWV6ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyBjbGF3YmFjazogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBkdXBuIDMKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawogICAgaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo4MQogICAgLy8gdXJsOiAnaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhJywKICAgIHB1c2hieXRlcyAiaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVSTAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6ODAKICAgIC8vIGFzc2V0TmFtZTogJ01vbmEgTGlzYScsCiAgICBwdXNoYnl0ZXMgIk1vbmEgTGlzYSIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3OQogICAgLy8gdW5pdE5hbWU6ICdNTCcsCiAgICBwdXNoYnl0ZXMgIk1MIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3OAogICAgLy8gZGVjaW1hbHM6IDIsCiAgICBwdXNoaW50IDIgLy8gMgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3NwogICAgLy8gdG90YWw6IDEwMCwKICAgIHB1c2hpbnQgMTAwIC8vIDEwMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3NS04NwogICAgLy8gY29uc3QgaXR4blJlc3VsdCA9IGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICB0b3RhbDogMTAwLAogICAgLy8gICAgIGRlY2ltYWxzOiAyLAogICAgLy8gICAgIHVuaXROYW1lOiAnTUwnLAogICAgLy8gICAgIGFzc2V0TmFtZTogJ01vbmEgTGlzYScsCiAgICAvLyAgICAgdXJsOiAnaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhJywKICAgIC8vICAgICBtYW5hZ2VyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmcmVlemU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGNsYXdiYWNrOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzIgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6ODYKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NzUtODgKICAgIC8vIGNvbnN0IGl0eG5SZXN1bHQgPSBpdHhuCiAgICAvLyAgIC5hc3NldENvbmZpZyh7CiAgICAvLyAgICAgdG90YWw6IDEwMCwKICAgIC8vICAgICBkZWNpbWFsczogMiwKICAgIC8vICAgICB1bml0TmFtZTogJ01MJywKICAgIC8vICAgICBhc3NldE5hbWU6ICdNb25hIExpc2EnLAogICAgLy8gICAgIHVybDogJ2h0dHBzOi8vbGlua190b19pcGZzL01vbmFfTGlzYScsCiAgICAvLyAgICAgbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgZnJlZXplOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBjbGF3YmFjazogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBc3NldElECiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo5MAogICAgLy8gcmV0dXJuIGl0eG5SZXN1bHQuY3JlYXRlZEFzc2V0LmlkCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRPcHRJbihhc3NldDogdWludDY0KSAtPiB2b2lkOgphc3NldE9wdEluOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OTktMTAwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldE9wdEluKGFzc2V0OiBBc3NldCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDEtMTA4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEwNQogICAgLy8gYXNzZXRBbW91bnQ6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDEtMTA3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTAxLTEwOAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjpJbm5lclRyYW5zYWN0aW9ucy5hc3NldFRyYW5zZmVyKGFzc2V0OiB1aW50NjQsIHJlY2VpdmVyOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0VHJhbnNmZXI6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMjctMTI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldFRyYW5zZmVyKGFzc2V0OiBBc3NldCwgcmVjZWl2ZXI6IEFjY291bnQsIGFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAzIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEyOS0xMzYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTI5LTEzNQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMzQKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTI5LTEzNgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmFzc2V0RnJlZXplKGFjY3RUb0JlRnJvemVuOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRGcmVlemU6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNTQtMTU1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldEZyZWV6ZShhY2N0VG9CZUZyb3plbjogQWNjb3VudCwgYXNzZXQ6IEFzc2V0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE1Ni0xNjMKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0RnJlZXplKHsKICAgIC8vICAgICBmcmVlemVBY2NvdW50OiBhY2N0VG9CZUZyb3plbiwgLy8gYWNjb3VudCB0byBiZSBmcm96ZW4KICAgIC8vICAgICBmcmVlemVBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZnJvemVuOiB0cnVlLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNjAKICAgIC8vIGZyb3plbjogdHJ1ZSwKICAgIGludGNfMCAvLyAxCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0RnJvemVuCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldEFjY291bnQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE1Ni0xNjIKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0RnJlZXplKHsKICAgIC8vICAgICBmcmVlemVBY2NvdW50OiBhY2N0VG9CZUZyb3plbiwgLy8gYWNjb3VudCB0byBiZSBmcm96ZW4KICAgIC8vICAgICBmcmVlemVBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZnJvemVuOiB0cnVlLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNSAvLyA1CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNjEKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTU2LTE2MwogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRGcmVlemUoewogICAgLy8gICAgIGZyZWV6ZUFjY291bnQ6IGFjY3RUb0JlRnJvemVuLCAvLyBhY2NvdW50IHRvIGJlIGZyb3plbgogICAgLy8gICAgIGZyZWV6ZUFzc2V0OiBhc3NldCwKICAgIC8vICAgICBmcm96ZW46IHRydWUsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRSZXZva2UoYXNzZXQ6IHVpbnQ2NCwgYWNjb3VudFRvQmVSZXZva2VkOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0UmV2b2tlOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTc5LTE4MAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYXNzZXRSZXZva2UoYXNzZXQ6IEFzc2V0LCBhY2NvdW50VG9CZVJldm9rZWQ6IEFjY291bnQsIGFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAzIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE4MS0xODkKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgICAgYXNzZXRTZW5kZXI6IGFjY291bnRUb0JlUmV2b2tlZCwgLy8gQXNzZXRTZW5kZXIgaXMgb25seSB1c2VkIGluIHRoZSBjYXNlIG9mIGNsYXdiYWNrCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFNlbmRlcgogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxODEtMTg4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0U2VuZGVyOiBhY2NvdW50VG9CZVJldm9rZWQsIC8vIEFzc2V0U2VuZGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgY2FzZSBvZiBjbGF3YmFjawogICAgLy8gICAgIGFzc2V0QW1vdW50OiBhbW91bnQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gZmVlOiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxODEtMTg5CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0U2VuZGVyOiBhY2NvdW50VG9CZVJldm9rZWQsIC8vIEFzc2V0U2VuZGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgY2FzZSBvZiBjbGF3YmFjawogICAgLy8gICAgIGFzc2V0QW1vdW50OiBhbW91bnQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRDb25maWcoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRDb25maWc6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMDUtMjA2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldENvbmZpZyhhc3NldDogQXNzZXQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjA3LTIxNgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIGNvbmZpZ0Fzc2V0OiBhc3NldCwKICAgIC8vICAgICBtYW5hZ2VyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmcmVlemU6IFR4bi5zZW5kZXIsCiAgICAvLyAgICAgY2xhd2JhY2s6IFR4bi5zZW5kZXIsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIxMAogICAgLy8gbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjExCiAgICAvLyByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGR1cAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjEyCiAgICAvLyBmcmVlemU6IFR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIGNsYXdiYWNrOiBUeG4uc2VuZGVyLAogICAgZHVwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMDctMjE1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldENvbmZpZyh7CiAgICAvLyAgICAgY29uZmlnQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZTogVHhuLnNlbmRlciwKICAgIC8vICAgICBjbGF3YmFjazogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzIgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyBmZWU6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIwNy0yMTYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICBjb25maWdBc3NldDogYXNzZXQsCiAgICAvLyAgICAgbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgZnJlZXplOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGNsYXdiYWNrOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmFzc2V0RGVsZXRlKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0RGVsZXRlOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjMzLTIzNAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYXNzZXREZWxldGUoYXNzZXQ6IEFzc2V0KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIzNS0yNDAKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICBjb25maWdBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjM1LTIzOQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIGNvbmZpZ0Fzc2V0OiBhc3NldCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzIgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjM4CiAgICAvLyBmZWU6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIzNS0yNDAKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICBjb25maWdBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMubXVsdGlJbm5lclR4bnMoYXBwSWQ6IHVpbnQ2NCkgLT4gdWludDY0LCBieXRlczoKbXVsdGlJbm5lclR4bnM6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNTAtMjUxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBtdWx0aUlubmVyVHhucyhhcHBJZDogQXBwbGljYXRpb24pOiBbdWludDY0LCBzdHJpbmddIHsKICAgIHByb3RvIDEgMgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjUzLTI1OQogICAgLy8gY29uc3QgcGF5VHhuID0gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgYW1vdW50OiA1MDAwLAogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNTYKICAgIC8vIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBhbW91bnQ6IDUwMDAsCiAgICBwdXNoaW50IDUwMDAgLy8gNTAwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI1My0yNTgKICAgIC8vIGNvbnN0IHBheVR4biA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjU3CiAgICAvLyBmZWU6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI1My0yNTkKICAgIC8vIGNvbnN0IHBheVR4biA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQW1vdW50CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNjItMjY4CiAgICAvLyBjb25zdCBhcHBDYWxsVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogYXBwSWQuaWQsCiAgICAvLyAgICAgYXBwQXJnczogW2FyYzQubWV0aG9kU2VsZWN0b3IoJ3NheUhlbGxvKHN0cmluZyxzdHJpbmcpc3RyaW5nJyksIG5ldyBhcmM0LlN0cignSmFuZScpLCBuZXcgYXJjNC5TdHIoJ0RvZScpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjY1CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKYW5lJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgYnl0ZWNfMSAvLyBtZXRob2QgInNheUhlbGxvKHN0cmluZyxzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHB1c2hieXRlcyAweDAwMDQ0YTYxNmU2NQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjXzIgLy8gMHgwMDAzNDQ2ZjY1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI2Mi0yNjcKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHBJZC5pZCwKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKYW5lJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNiAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNjYKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjYyLTI2OAogICAgLy8gY29uc3QgYXBwQ2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcElkLmlkLAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdzYXlIZWxsbyhzdHJpbmcsc3RyaW5nKXN0cmluZycpLCBuZXcgYXJjNC5TdHIoJ0phbmUnKSwgbmV3IGFyYzQuU3RyKCdEb2UnKV0sCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI3MQogICAgLy8gY29uc3QgaGVsbG9Xb3JsZFJlc3VsdCA9IGFyYzQuZGVjb2RlQXJjNDxzdHJpbmc+KGFwcENhbGxUeG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZXh0cmFjdCA2IDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI3MgogICAgLy8gcmV0dXJuIFtwYXlUeG4uYW1vdW50LCBoZWxsb1dvcmxkUmVzdWx0XQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmRlcGxveUFwcCgpIC0+IHVpbnQ2NDoKZGVwbG95QXBwOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6Mjk0LTMwMAogICAgLy8gY29uc3QgYXBwVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IEJ5dGVzKCdhcHByb3ZhbF9wcm9ncmFtJyksCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IEJ5dGVzKCdjbGVhcl9zdGF0ZV9wcm9ncmFtJyksCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI5NwogICAgLy8gY2xlYXJTdGF0ZVByb2dyYW06IEJ5dGVzKCdjbGVhcl9zdGF0ZV9wcm9ncmFtJyksCiAgICBwdXNoYnl0ZXMgImNsZWFyX3N0YXRlX3Byb2dyYW0iCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI5NgogICAgLy8gYXBwcm92YWxQcm9ncmFtOiBCeXRlcygnYXBwcm92YWxfcHJvZ3JhbScpLAogICAgcHVzaGJ5dGVzICJhcHByb3ZhbF9wcm9ncmFtIgogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6Mjk0LTI5OQogICAgLy8gY29uc3QgYXBwVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IEJ5dGVzKCdhcHByb3ZhbF9wcm9ncmFtJyksCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IEJ5dGVzKCdjbGVhcl9zdGF0ZV9wcm9ncmFtJyksCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgcHVzaGludCA2IC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI5OAogICAgLy8gZmVlOiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyOTQtMzAwCiAgICAvLyBjb25zdCBhcHBUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogQnl0ZXMoJ2FwcHJvdmFsX3Byb2dyYW0nKSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogQnl0ZXMoJ2NsZWFyX3N0YXRlX3Byb2dyYW0nKSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjMwMgogICAgLy8gcmV0dXJuIGFwcFR4bi5jcmVhdGVkQXBwLmlkCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMubm9vcEFwcENhbGwoYXBwSWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cm5vb3BBcHBDYWxsOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzI5LTMzMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgbm9vcEFwcENhbGwoYXBwSWQ6IEFwcGxpY2F0aW9uKTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzMyLTMzNwogICAgLy8gY29uc3QgY2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcElkLmlkLAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdzYXlIZWxsbyhzdHJpbmcsc3RyaW5nKXN0cmluZycpLCBuZXcgYXJjNC5TdHIoJ0pvaG4nKSwgbmV3IGFyYzQuU3RyKCdEb2UnKV0sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzM1CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKb2huJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgYnl0ZWNfMSAvLyBtZXRob2QgInNheUhlbGxvKHN0cmluZyxzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHB1c2hieXRlcyAweDAwMDQ0YTZmNjg2ZQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjXzIgLy8gMHgwMDAzNDQ2ZjY1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjMzMi0zMzYKICAgIC8vIGNvbnN0IGNhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHBJZC5pZCwKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKb2huJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgLy8gICB9KQogICAgcHVzaGludCA2IC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzMyLTMzNwogICAgLy8gY29uc3QgY2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcElkLmlkLAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdzYXlIZWxsbyhzdHJpbmcsc3RyaW5nKXN0cmluZycpLCBuZXcgYXJjNC5TdHIoJ0pvaG4nKSwgbmV3IGFyYzQuU3RyKCdEb2UnKV0sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzQwCiAgICAvLyByZXR1cm4gYXJjNC5kZWNvZGVBcmM0PHN0cmluZz4oY2FsbFR4bi5sYXN0TG9nLCAnbG9nJykKICAgIGR1cAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBleHRyYWN0IDYgMAogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDMgNAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4M2FhZDZkODYgMHgwMDAzNDQ2ZjY1CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTgKICAgIHB1c2hieXRlc3MgMHgyMzk1MDAyNyAweDAyMDdmNzdkIDB4ZDIyNDkyODQgMHg2NmEwNjNiZiAweDEyNTYzNzY3IDB4Y2ZiMTJkYjEgMHg3YjU4ZTIzNiAweGQwODY0ZmY0IDB4NTM1MWQ3YmUgMHg1NzI3ZWNhZSAweGRhMjBhODdlIDB4MzhlY2MwMTQgMHg5YWVlYzE1OSAvLyBtZXRob2QgInBheW1lbnQoKXVpbnQ2NCIsIG1ldGhvZCAiZnVuZ2libGVBc3NldENyZWF0ZSgpdWludDY0IiwgbWV0aG9kICJub25GdW5naWJsZUFzc2V0Q3JlYXRlKCl1aW50NjQiLCBtZXRob2QgImFzc2V0T3B0SW4oYXNzZXQpdm9pZCIsIG1ldGhvZCAiYXNzZXRUcmFuc2Zlcihhc3NldCxhY2NvdW50LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJhc3NldEZyZWV6ZShhY2NvdW50LGFzc2V0KXZvaWQiLCBtZXRob2QgImFzc2V0UmV2b2tlKGFzc2V0LGFjY291bnQsdWludDY0KXZvaWQiLCBtZXRob2QgImFzc2V0Q29uZmlnKGFzc2V0KXZvaWQiLCBtZXRob2QgImFzc2V0RGVsZXRlKGFzc2V0KXZvaWQiLCBtZXRob2QgIm11bHRpSW5uZXJUeG5zKGFwcGxpY2F0aW9uKSh1aW50NjQsc3RyaW5nKSIsIG1ldGhvZCAiZGVwbG95QXBwKCl1aW50NjQiLCBtZXRob2QgImFyYzREZXBsb3lBcHAoKXVpbnQ2NCIsIG1ldGhvZCAibm9vcEFwcENhbGwoYXBwbGljYXRpb24pc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9wYXltZW50X3JvdXRlQDMgbWFpbl9mdW5naWJsZUFzc2V0Q3JlYXRlX3JvdXRlQDQgbWFpbl9ub25GdW5naWJsZUFzc2V0Q3JlYXRlX3JvdXRlQDUgbWFpbl9hc3NldE9wdEluX3JvdXRlQDYgbWFpbl9hc3NldFRyYW5zZmVyX3JvdXRlQDcgbWFpbl9hc3NldEZyZWV6ZV9yb3V0ZUA4IG1haW5fYXNzZXRSZXZva2Vfcm91dGVAOSBtYWluX2Fzc2V0Q29uZmlnX3JvdXRlQDEwIG1haW5fYXNzZXREZWxldGVfcm91dGVAMTEgbWFpbl9tdWx0aUlubmVyVHhuc19yb3V0ZUAxMiBtYWluX2RlcGxveUFwcF9yb3V0ZUAxMyBtYWluX2FyYzREZXBsb3lBcHBfcm91dGVAMTQgbWFpbl9ub29wQXBwQ2FsbF9yb3V0ZUAxNQoKbWFpbl9hZnRlcl9pZl9lbHNlQDIyOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9ub29wQXBwQ2FsbF9yb3V0ZUAxNToKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjMxMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzEwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgbm9vcEFwcENhbGwKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzREZXBsb3lBcHBfcm91dGVAMTQ6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyOTIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDA0ZDIKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZXBsb3lBcHBfcm91dGVAMTM6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNzEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlcGxveUFwcAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tdWx0aUlubmVyVHhuc19yb3V0ZUAxMjoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIzMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjMxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgbXVsdGlJbm5lclR4bnMKICAgIHN3YXAKICAgIGl0b2IKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgcHVzaGJ5dGVzIDB4MDAwYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXREZWxldGVfcm91dGVAMTE6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIxNAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFzc2V0RGVsZXRlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0Q29uZmlnX3JvdXRlQDEwOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBhc3NldENvbmZpZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hc3NldFJldm9rZV9yb3V0ZUA5OgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTY4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTY4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYXNzZXRSZXZva2UKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRGcmVlemVfcm91dGVAODoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE0NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE0NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFzc2V0RnJlZXplCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0VHJhbnNmZXJfcm91dGVANzoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEyMwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEyMwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFzc2V0VHJhbnNmZXIKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRPcHRJbl9yb3V0ZUA2OgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTAwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBhc3NldE9wdEluCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX25vbkZ1bmdpYmxlQXNzZXRDcmVhdGVfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjcxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBub25GdW5naWJsZUFzc2V0Q3JlYXRlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Z1bmdpYmxlQXNzZXRDcmVhdGVfcm91dGVANDoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBmdW5naWJsZUFzc2V0Q3JlYXRlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3BheW1lbnRfcm91dGVAMzoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBwYXltZW50CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxODoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMjIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLnBheW1lbnQoKSAtPiB1aW50NjQ6CnBheW1lbnQ6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozMS0zNwogICAgLy8gY29uc3QgcmVzdWx0ID0gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgYW1vdW50OiA1MDAwLAogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozNAogICAgLy8gcmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozMwogICAgLy8gYW1vdW50OiA1MDAwLAogICAgcHVzaGludCA1MDAwIC8vIDUwMDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozMS0zNgogICAgLy8gY29uc3QgcmVzdWx0ID0gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgYW1vdW50OiA1MDAwLAogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMCAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozNQogICAgLy8gZmVlOiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozMS0zNwogICAgLy8gY29uc3QgcmVzdWx0ID0gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgYW1vdW50OiA1MDAwLAogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBBbW91bnQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyByZXR1cm4gcmVzdWx0LmFtb3VudAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmZ1bmdpYmxlQXNzZXRDcmVhdGUoKSAtPiB1aW50NjQ6CmZ1bmdpYmxlQXNzZXRDcmVhdGU6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1MC01NwogICAgLy8gY29uc3QgaXR4blJlc3VsdCA9IGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICB0b3RhbDogMTAwXzAwMF8wMDBfMDAwLAogICAgLy8gICAgIGRlY2ltYWxzOiAyLAogICAgLy8gICAgIHVuaXROYW1lOiAnUlAnLAogICAgLy8gICAgIGFzc2V0TmFtZTogJ1JveWFsdHkgUG9pbnRzJywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1NQogICAgLy8gYXNzZXROYW1lOiAnUm95YWx0eSBQb2ludHMnLAogICAgcHVzaGJ5dGVzICJSb3lhbHR5IFBvaW50cyIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1NAogICAgLy8gdW5pdE5hbWU6ICdSUCcsCiAgICBwdXNoYnl0ZXMgIlJQIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gZGVjaW1hbHM6IDIsCiAgICBwdXNoaW50IDIgLy8gMgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1MgogICAgLy8gdG90YWw6IDEwMF8wMDBfMDAwXzAwMCwKICAgIHB1c2hpbnQgMTAwMDAwMDAwMDAwIC8vIDEwMDAwMDAwMDAwMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1MC01NgogICAgLy8gY29uc3QgaXR4blJlc3VsdCA9IGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICB0b3RhbDogMTAwXzAwMF8wMDBfMDAwLAogICAgLy8gICAgIGRlY2ltYWxzOiAyLAogICAgLy8gICAgIHVuaXROYW1lOiAnUlAnLAogICAgLy8gICAgIGFzc2V0TmFtZTogJ1JveWFsdHkgUG9pbnRzJywKICAgIC8vICAgfSkKICAgIGludGNfMiAvLyAzCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjUwLTU3CiAgICAvLyBjb25zdCBpdHhuUmVzdWx0ID0gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIHRvdGFsOiAxMDBfMDAwXzAwMF8wMDAsCiAgICAvLyAgICAgZGVjaW1hbHM6IDIsCiAgICAvLyAgICAgdW5pdE5hbWU6ICdSUCcsCiAgICAvLyAgICAgYXNzZXROYW1lOiAnUm95YWx0eSBQb2ludHMnLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBc3NldElECiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1OQogICAgLy8gcmV0dXJuIGl0eG5SZXN1bHQuY3JlYXRlZEFzc2V0LmlkCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMubm9uRnVuZ2libGVBc3NldENyZWF0ZSgpIC0+IHVpbnQ2NDoKbm9uRnVuZ2libGVBc3NldENyZWF0ZToKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjczLTg2CiAgICAvLyBjb25zdCBpdHhuUmVzdWx0ID0gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIHRvdGFsOiAxMDAsCiAgICAvLyAgICAgZGVjaW1hbHM6IDIsCiAgICAvLyAgICAgdW5pdE5hbWU6ICdNTCcsCiAgICAvLyAgICAgYXNzZXROYW1lOiAnTW9uYSBMaXNhJywKICAgIC8vICAgICB1cmw6ICdodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EnLAogICAgLy8gICAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgY2xhd2JhY2s6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6ODEtODMKICAgIC8vIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gZnJlZXplOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vIGNsYXdiYWNrOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGR1cG4gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjc5CiAgICAvLyB1cmw6ICdodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EnLAogICAgcHVzaGJ5dGVzICJodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3OAogICAgLy8gYXNzZXROYW1lOiAnTW9uYSBMaXNhJywKICAgIHB1c2hieXRlcyAiTW9uYSBMaXNhIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjc3CiAgICAvLyB1bml0TmFtZTogJ01MJywKICAgIHB1c2hieXRlcyAiTUwiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjc2CiAgICAvLyBkZWNpbWFsczogMiwKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyB0b3RhbDogMTAwLAogICAgcHVzaGludCAxMDAgLy8gMTAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjczLTg1CiAgICAvLyBjb25zdCBpdHhuUmVzdWx0ID0gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIHRvdGFsOiAxMDAsCiAgICAvLyAgICAgZGVjaW1hbHM6IDIsCiAgICAvLyAgICAgdW5pdE5hbWU6ICdNTCcsCiAgICAvLyAgICAgYXNzZXROYW1lOiAnTW9uYSBMaXNhJywKICAgIC8vICAgICB1cmw6ICdodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EnLAogICAgLy8gICAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgY2xhd2JhY2s6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMiAvLyAzCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo4NAogICAgLy8gZmVlOiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3My04NgogICAgLy8gY29uc3QgaXR4blJlc3VsdCA9IGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICB0b3RhbDogMTAwLAogICAgLy8gICAgIGRlY2ltYWxzOiAyLAogICAgLy8gICAgIHVuaXROYW1lOiAnTUwnLAogICAgLy8gICAgIGFzc2V0TmFtZTogJ01vbmEgTGlzYScsCiAgICAvLyAgICAgdXJsOiAnaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhJywKICAgIC8vICAgICBtYW5hZ2VyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmcmVlemU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGNsYXdiYWNrOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjg4CiAgICAvLyByZXR1cm4gaXR4blJlc3VsdC5jcmVhdGVkQXNzZXQuaWQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjpJbm5lclRyYW5zYWN0aW9ucy5hc3NldE9wdEluKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0T3B0SW46CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDAtMTAxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldE9wdEluKGFzc2V0OiBBc3NldCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDItMTA5CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDQKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEwNgogICAgLy8gYXNzZXRBbW91bnQ6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDItMTA4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTAyLTEwOQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjpJbm5lclRyYW5zYWN0aW9ucy5hc3NldFRyYW5zZmVyKGFzc2V0OiB1aW50NjQsIHJlY2VpdmVyOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0VHJhbnNmZXI6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMjMtMTI0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldFRyYW5zZmVyKGFzc2V0OiBBc3NldCwgcmVjZWl2ZXI6IEFjY291bnQsIGFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAzIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEyNS0xMzIKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTI1LTEzMQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTI1LTEzMgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmFzc2V0RnJlZXplKGFjY3RUb0JlRnJvemVuOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRGcmVlemU6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNDUtMTQ2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldEZyZWV6ZShhY2N0VG9CZUZyb3plbjogQWNjb3VudCwgYXNzZXQ6IEFzc2V0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE0Ny0xNTQKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0RnJlZXplKHsKICAgIC8vICAgICBmcmVlemVBY2NvdW50OiBhY2N0VG9CZUZyb3plbiwgLy8gYWNjb3VudCB0byBiZSBmcm96ZW4KICAgIC8vICAgICBmcmVlemVBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZnJvemVuOiB0cnVlLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNTEKICAgIC8vIGZyb3plbjogdHJ1ZSwKICAgIGludGNfMCAvLyAxCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0RnJvemVuCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldEFjY291bnQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE0Ny0xNTMKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0RnJlZXplKHsKICAgIC8vICAgICBmcmVlemVBY2NvdW50OiBhY2N0VG9CZUZyb3plbiwgLy8gYWNjb3VudCB0byBiZSBmcm96ZW4KICAgIC8vICAgICBmcmVlemVBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZnJvemVuOiB0cnVlLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNSAvLyA1CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNTIKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTQ3LTE1NAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRGcmVlemUoewogICAgLy8gICAgIGZyZWV6ZUFjY291bnQ6IGFjY3RUb0JlRnJvemVuLCAvLyBhY2NvdW50IHRvIGJlIGZyb3plbgogICAgLy8gICAgIGZyZWV6ZUFzc2V0OiBhc3NldCwKICAgIC8vICAgICBmcm96ZW46IHRydWUsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRSZXZva2UoYXNzZXQ6IHVpbnQ2NCwgYWNjb3VudFRvQmVSZXZva2VkOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0UmV2b2tlOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTY4LTE2OQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYXNzZXRSZXZva2UoYXNzZXQ6IEFzc2V0LCBhY2NvdW50VG9CZVJldm9rZWQ6IEFjY291bnQsIGFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAzIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE3MC0xNzgKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgICAgYXNzZXRTZW5kZXI6IGFjY291bnRUb0JlUmV2b2tlZCwgLy8gQXNzZXRTZW5kZXIgaXMgb25seSB1c2VkIGluIHRoZSBjYXNlIG9mIGNsYXdiYWNrCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTcyCiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFNlbmRlcgogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNzAtMTc3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0U2VuZGVyOiBhY2NvdW50VG9CZVJldm9rZWQsIC8vIEFzc2V0U2VuZGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgY2FzZSBvZiBjbGF3YmFjawogICAgLy8gICAgIGFzc2V0QW1vdW50OiBhbW91bnQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE3NgogICAgLy8gZmVlOiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNzAtMTc4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0U2VuZGVyOiBhY2NvdW50VG9CZVJldm9rZWQsIC8vIEFzc2V0U2VuZGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgY2FzZSBvZiBjbGF3YmFjawogICAgLy8gICAgIGFzc2V0QW1vdW50OiBhbW91bnQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRDb25maWcoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRDb25maWc6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOTEtMTkyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldENvbmZpZyhhc3NldDogQXNzZXQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkzLTIwMgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIGNvbmZpZ0Fzc2V0OiBhc3NldCwKICAgIC8vICAgICBtYW5hZ2VyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmcmVlemU6IFR4bi5zZW5kZXIsCiAgICAvLyAgICAgY2xhd2JhY2s6IFR4bi5zZW5kZXIsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5NgogICAgLy8gbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTk3CiAgICAvLyByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGR1cAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTk4CiAgICAvLyBmcmVlemU6IFR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOTkKICAgIC8vIGNsYXdiYWNrOiBUeG4uc2VuZGVyLAogICAgZHVwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOTMtMjAxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldENvbmZpZyh7CiAgICAvLyAgICAgY29uZmlnQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZTogVHhuLnNlbmRlciwKICAgIC8vICAgICBjbGF3YmFjazogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzIgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjAwCiAgICAvLyBmZWU6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5My0yMDIKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICBjb25maWdBc3NldDogYXNzZXQsCiAgICAvLyAgICAgbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgZnJlZXplOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGNsYXdiYWNrOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmFzc2V0RGVsZXRlKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0RGVsZXRlOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjE0LTIxNQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYXNzZXREZWxldGUoYXNzZXQ6IEFzc2V0KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIxNi0yMjEKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICBjb25maWdBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjE2LTIyMAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIGNvbmZpZ0Fzc2V0OiBhc3NldCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzIgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjE5CiAgICAvLyBmZWU6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIxNi0yMjEKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICBjb25maWdBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMubXVsdGlJbm5lclR4bnMoYXBwSWQ6IHVpbnQ2NCkgLT4gdWludDY0LCBieXRlczoKbXVsdGlJbm5lclR4bnM6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMzEtMjMyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBtdWx0aUlubmVyVHhucyhhcHBJZDogQXBwbGljYXRpb24pOiBbdWludDY0LCBzdHJpbmddIHsKICAgIHByb3RvIDEgMgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjM0LTI0MAogICAgLy8gY29uc3QgcGF5VHhuID0gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgYW1vdW50OiA1MDAwLAogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMzcKICAgIC8vIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjM2CiAgICAvLyBhbW91bnQ6IDUwMDAsCiAgICBwdXNoaW50IDUwMDAgLy8gNTAwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIzNC0yMzkKICAgIC8vIGNvbnN0IHBheVR4biA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjM4CiAgICAvLyBmZWU6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIzNC0yNDAKICAgIC8vIGNvbnN0IHBheVR4biA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQW1vdW50CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNDMtMjQ5CiAgICAvLyBjb25zdCBhcHBDYWxsVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogYXBwSWQuaWQsCiAgICAvLyAgICAgYXBwQXJnczogW2FyYzQubWV0aG9kU2VsZWN0b3IoJ3NheUhlbGxvKHN0cmluZyxzdHJpbmcpc3RyaW5nJyksIG5ldyBhcmM0LlN0cignSmFuZScpLCBuZXcgYXJjNC5TdHIoJ0RvZScpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjQ2CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKYW5lJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgYnl0ZWNfMSAvLyBtZXRob2QgInNheUhlbGxvKHN0cmluZyxzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHB1c2hieXRlcyAweDAwMDQ0YTYxNmU2NQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjXzIgLy8gMHgwMDAzNDQ2ZjY1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI0My0yNDgKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHBJZC5pZCwKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKYW5lJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNiAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNDcKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjQzLTI0OQogICAgLy8gY29uc3QgYXBwQ2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcElkLmlkLAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdzYXlIZWxsbyhzdHJpbmcsc3RyaW5nKXN0cmluZycpLCBuZXcgYXJjNC5TdHIoJ0phbmUnKSwgbmV3IGFyYzQuU3RyKCdEb2UnKV0sCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gY29uc3QgaGVsbG9Xb3JsZFJlc3VsdCA9IGFyYzQuZGVjb2RlQXJjNDxzdHJpbmc+KGFwcENhbGxUeG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZXh0cmFjdCA2IDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI1MwogICAgLy8gcmV0dXJuIFtwYXlUeG4uYW1vdW50LCBoZWxsb1dvcmxkUmVzdWx0XQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmRlcGxveUFwcCgpIC0+IHVpbnQ2NDoKZGVwbG95QXBwOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6Mjc1LTI4MQogICAgLy8gY29uc3QgYXBwVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IEJ5dGVzKCdhcHByb3ZhbF9wcm9ncmFtJyksCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IEJ5dGVzKCdjbGVhcl9zdGF0ZV9wcm9ncmFtJyksCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI3OAogICAgLy8gY2xlYXJTdGF0ZVByb2dyYW06IEJ5dGVzKCdjbGVhcl9zdGF0ZV9wcm9ncmFtJyksCiAgICBwdXNoYnl0ZXMgImNsZWFyX3N0YXRlX3Byb2dyYW0iCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI3NwogICAgLy8gYXBwcm92YWxQcm9ncmFtOiBCeXRlcygnYXBwcm92YWxfcHJvZ3JhbScpLAogICAgcHVzaGJ5dGVzICJhcHByb3ZhbF9wcm9ncmFtIgogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6Mjc1LTI4MAogICAgLy8gY29uc3QgYXBwVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IEJ5dGVzKCdhcHByb3ZhbF9wcm9ncmFtJyksCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IEJ5dGVzKCdjbGVhcl9zdGF0ZV9wcm9ncmFtJyksCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgcHVzaGludCA2IC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI3OQogICAgLy8gZmVlOiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNzUtMjgxCiAgICAvLyBjb25zdCBhcHBUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogQnl0ZXMoJ2FwcHJvdmFsX3Byb2dyYW0nKSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogQnl0ZXMoJ2NsZWFyX3N0YXRlX3Byb2dyYW0nKSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI4MwogICAgLy8gcmV0dXJuIGFwcFR4bi5jcmVhdGVkQXBwLmlkCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMubm9vcEFwcENhbGwoYXBwSWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cm5vb3BBcHBDYWxsOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzEwLTMxMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgbm9vcEFwcENhbGwoYXBwSWQ6IEFwcGxpY2F0aW9uKTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzEzLTMxOAogICAgLy8gY29uc3QgY2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcElkLmlkLAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdzYXlIZWxsbyhzdHJpbmcsc3RyaW5nKXN0cmluZycpLCBuZXcgYXJjNC5TdHIoJ0pvaG4nKSwgbmV3IGFyYzQuU3RyKCdEb2UnKV0sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzE2CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKb2huJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgYnl0ZWNfMSAvLyBtZXRob2QgInNheUhlbGxvKHN0cmluZyxzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHB1c2hieXRlcyAweDAwMDQ0YTZmNjg2ZQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjXzIgLy8gMHgwMDAzNDQ2ZjY1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjMxMy0zMTcKICAgIC8vIGNvbnN0IGNhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHBJZC5pZCwKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKb2huJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgLy8gICB9KQogICAgcHVzaGludCA2IC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzEzLTMxOAogICAgLy8gY29uc3QgY2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcElkLmlkLAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdzYXlIZWxsbyhzdHJpbmcsc3RyaW5nKXN0cmluZycpLCBuZXcgYXJjNC5TdHIoJ0pvaG4nKSwgbmV3IGFyYzQuU3RyKCdEb2UnKV0sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzIxCiAgICAvLyByZXR1cm4gYXJjNC5kZWNvZGVBcmM0PHN0cmluZz4oY2FsbFR4bi5sYXN0TG9nLCAnbG9nJykKICAgIGR1cAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBleHRyYWN0IDYgMAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { @@ -102,7 +102,7 @@ "type": "uint64", "desc": "The amount of the payment" }, - "desc": "Demonstrates a simple payment inner transaction" + "desc": "Demonstrates a simple payment inner transaction.\nThe fee is set to 0 by default. Manually set here for demonstration purposes.\nThe `Sender` for the payment is implied to be Global.currentApplicationAddress.\nIf a different sender is needed, it'd have to be an account that has been\nrekeyed to the application address." }, { "name": "fungibleAssetCreate", @@ -122,7 +122,7 @@ "type": "uint64", "desc": "The ID of the created asset" }, - "desc": "Creates a non-fungible asset (NFT)\nFollowing the ARC3 standard, the total supply must be 1 for a non-fungible asset.\nIf you want to create fractional NFTs, `total` * `decimals` point must be 1.\nex) total=100, decimals=2, 100 * 0.01 = 1" + "desc": "Creates a non-fungible asset (NFT).\nFollowing the ARC3 standard, the total supply must be 1 for a non-fungible asset.\nIf you want to create fractional NFTs, `total` * `decimals` point must be 1.\nex) total=100, decimals=2, 100 * 0.01 = 1\nThe fee is set to 0 by default for inner transactions.\nThe Sender is implied to be Global.currentApplicationAddress." }, { "name": "assetOptIn", @@ -137,7 +137,7 @@ "returns": { "type": "void" }, - "desc": "Opts the application into an asset" + "desc": "Opts the application into an asset.\nA zero amount asset transfer to one's self is a special type of asset transfer\nthat is used to opt-in to an asset.\nTo send an asset transfer, the asset must be an available resource." }, { "name": "assetTransfer", @@ -162,7 +162,7 @@ "returns": { "type": "void" }, - "desc": "Transfers an asset from the application to another account" + "desc": "Transfers an asset from the application to another account.\nFor a smart contract to transfer an asset, the app account must be opted into the asset\nand be holding non zero amount of assets.\nTo send an asset transfer, the asset must be an available resource." }, { "name": "assetFreeze", @@ -182,7 +182,7 @@ "returns": { "type": "void" }, - "desc": "Freezes an asset for a specific account" + "desc": "Freezes an asset for a specific account.\nTo freeze an asset, the asset must be a freezable asset\nby having an account with freeze authority." }, { "name": "assetRevoke", @@ -207,7 +207,7 @@ "returns": { "type": "void" }, - "desc": "Revokes (clawbacks) an asset from an account" + "desc": "Revokes (clawbacks) an asset from an account.\nTo revoke an asset, the asset must be a revocable asset\nby having an account with clawback authority.\nThe Sender is implied to be current_application_address." }, { "name": "assetConfig", @@ -222,7 +222,7 @@ "returns": { "type": "void" }, - "desc": "Reconfigures an existing asset" + "desc": "Reconfigures an existing asset.\nFor a smart contract to transfer an asset, the app account must be opted into the asset\nand be holding non zero amount of assets.\nTo send an asset transfer, the asset must be an available resource.\nRefer the Resource Availability section for more information." }, { "name": "assetDelete", @@ -237,7 +237,7 @@ "returns": { "type": "void" }, - "desc": "Deletes an asset" + "desc": "Deletes an asset.\nTo delete an asset, the asset must be a deleteable asset\nby having an account with delete authority.\nThe Sender is implied to be current_application_address." }, { "name": "multiInnerTxns", diff --git a/projects/typescript-examples/contracts/artifacts/contracts/InnerTransactions/InnerTransactions.arc56.json b/projects/typescript-examples/contracts/artifacts/contracts/InnerTransactions/InnerTransactions.arc56.json index cf62b19..27138c0 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/InnerTransactions/InnerTransactions.arc56.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/InnerTransactions/InnerTransactions.arc56.json @@ -16,7 +16,7 @@ ] }, "readonly": false, - "desc": "Demonstrates a simple payment inner transaction", + "desc": "Demonstrates a simple payment inner transaction.\nThe fee is set to 0 by default. Manually set here for demonstration purposes.\nThe `Sender` for the payment is implied to be Global.currentApplicationAddress.\nIf a different sender is needed, it'd have to be an account that has been\nrekeyed to the application address.", "events": [], "recommendations": {} }, @@ -52,7 +52,7 @@ ] }, "readonly": false, - "desc": "Creates a non-fungible asset (NFT)\nFollowing the ARC3 standard, the total supply must be 1 for a non-fungible asset.\nIf you want to create fractional NFTs, `total` * `decimals` point must be 1.\nex) total=100, decimals=2, 100 * 0.01 = 1", + "desc": "Creates a non-fungible asset (NFT).\nFollowing the ARC3 standard, the total supply must be 1 for a non-fungible asset.\nIf you want to create fractional NFTs, `total` * `decimals` point must be 1.\nex) total=100, decimals=2, 100 * 0.01 = 1\nThe fee is set to 0 by default for inner transactions.\nThe Sender is implied to be Global.currentApplicationAddress.", "events": [], "recommendations": {} }, @@ -75,7 +75,7 @@ ] }, "readonly": false, - "desc": "Opts the application into an asset", + "desc": "Opts the application into an asset.\nA zero amount asset transfer to one's self is a special type of asset transfer\nthat is used to opt-in to an asset.\nTo send an asset transfer, the asset must be an available resource.", "events": [], "recommendations": {} }, @@ -108,7 +108,7 @@ ] }, "readonly": false, - "desc": "Transfers an asset from the application to another account", + "desc": "Transfers an asset from the application to another account.\nFor a smart contract to transfer an asset, the app account must be opted into the asset\nand be holding non zero amount of assets.\nTo send an asset transfer, the asset must be an available resource.", "events": [], "recommendations": {} }, @@ -136,7 +136,7 @@ ] }, "readonly": false, - "desc": "Freezes an asset for a specific account", + "desc": "Freezes an asset for a specific account.\nTo freeze an asset, the asset must be a freezable asset\nby having an account with freeze authority.", "events": [], "recommendations": {} }, @@ -169,7 +169,7 @@ ] }, "readonly": false, - "desc": "Revokes (clawbacks) an asset from an account", + "desc": "Revokes (clawbacks) an asset from an account.\nTo revoke an asset, the asset must be a revocable asset\nby having an account with clawback authority.\nThe Sender is implied to be current_application_address.", "events": [], "recommendations": {} }, @@ -192,7 +192,7 @@ ] }, "readonly": false, - "desc": "Reconfigures an existing asset", + "desc": "Reconfigures an existing asset.\nFor a smart contract to transfer an asset, the app account must be opted into the asset\nand be holding non zero amount of assets.\nTo send an asset transfer, the asset must be an available resource.\nRefer the Resource Availability section for more information.", "events": [], "recommendations": {} }, @@ -215,7 +215,7 @@ ] }, "readonly": false, - "desc": "Deletes an asset", + "desc": "Deletes an asset.\nTo delete an asset, the asset must be a deleteable asset\nby having an account with delete authority.\nThe Sender is implied to be current_application_address.", "events": [], "recommendations": {} }, @@ -399,7 +399,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDMgNAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4M2FhZDZkODYgMHgwMDAzNDQ2ZjY1CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTgKICAgIHB1c2hieXRlc3MgMHgyMzk1MDAyNyAweDAyMDdmNzdkIDB4ZDIyNDkyODQgMHg2NmEwNjNiZiAweDEyNTYzNzY3IDB4Y2ZiMTJkYjEgMHg3YjU4ZTIzNiAweGQwODY0ZmY0IDB4NTM1MWQ3YmUgMHg1NzI3ZWNhZSAweGRhMjBhODdlIDB4MzhlY2MwMTQgMHg5YWVlYzE1OSAvLyBtZXRob2QgInBheW1lbnQoKXVpbnQ2NCIsIG1ldGhvZCAiZnVuZ2libGVBc3NldENyZWF0ZSgpdWludDY0IiwgbWV0aG9kICJub25GdW5naWJsZUFzc2V0Q3JlYXRlKCl1aW50NjQiLCBtZXRob2QgImFzc2V0T3B0SW4oYXNzZXQpdm9pZCIsIG1ldGhvZCAiYXNzZXRUcmFuc2Zlcihhc3NldCxhY2NvdW50LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJhc3NldEZyZWV6ZShhY2NvdW50LGFzc2V0KXZvaWQiLCBtZXRob2QgImFzc2V0UmV2b2tlKGFzc2V0LGFjY291bnQsdWludDY0KXZvaWQiLCBtZXRob2QgImFzc2V0Q29uZmlnKGFzc2V0KXZvaWQiLCBtZXRob2QgImFzc2V0RGVsZXRlKGFzc2V0KXZvaWQiLCBtZXRob2QgIm11bHRpSW5uZXJUeG5zKGFwcGxpY2F0aW9uKSh1aW50NjQsc3RyaW5nKSIsIG1ldGhvZCAiZGVwbG95QXBwKCl1aW50NjQiLCBtZXRob2QgImFyYzREZXBsb3lBcHAoKXVpbnQ2NCIsIG1ldGhvZCAibm9vcEFwcENhbGwoYXBwbGljYXRpb24pc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9wYXltZW50X3JvdXRlQDMgbWFpbl9mdW5naWJsZUFzc2V0Q3JlYXRlX3JvdXRlQDQgbWFpbl9ub25GdW5naWJsZUFzc2V0Q3JlYXRlX3JvdXRlQDUgbWFpbl9hc3NldE9wdEluX3JvdXRlQDYgbWFpbl9hc3NldFRyYW5zZmVyX3JvdXRlQDcgbWFpbl9hc3NldEZyZWV6ZV9yb3V0ZUA4IG1haW5fYXNzZXRSZXZva2Vfcm91dGVAOSBtYWluX2Fzc2V0Q29uZmlnX3JvdXRlQDEwIG1haW5fYXNzZXREZWxldGVfcm91dGVAMTEgbWFpbl9tdWx0aUlubmVyVHhuc19yb3V0ZUAxMiBtYWluX2RlcGxveUFwcF9yb3V0ZUAxMyBtYWluX2FyYzREZXBsb3lBcHBfcm91dGVAMTQgbWFpbl9ub29wQXBwQ2FsbF9yb3V0ZUAxNQoKbWFpbl9hZnRlcl9pZl9lbHNlQDIyOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9ub29wQXBwQ2FsbF9yb3V0ZUAxNToKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjMyOQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzI5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgbm9vcEFwcENhbGwKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzREZXBsb3lBcHBfcm91dGVAMTQ6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozMTEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDA0ZDIKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZXBsb3lBcHBfcm91dGVAMTM6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyOTAKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlcGxveUFwcAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tdWx0aUlubmVyVHhuc19yb3V0ZUAxMjoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjUwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgbXVsdGlJbm5lclR4bnMKICAgIHN3YXAKICAgIGl0b2IKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgcHVzaGJ5dGVzIDB4MDAwYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXREZWxldGVfcm91dGVAMTE6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMzMKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIzMwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFzc2V0RGVsZXRlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0Q29uZmlnX3JvdXRlQDEwOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjA1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMDUKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBhc3NldENvbmZpZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hc3NldFJldm9rZV9yb3V0ZUA5OgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYXNzZXRSZXZva2UKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRGcmVlemVfcm91dGVAODoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE1NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE1NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFzc2V0RnJlZXplCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0VHJhbnNmZXJfcm91dGVANzoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFzc2V0VHJhbnNmZXIKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRPcHRJbl9yb3V0ZUA2OgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYXNzZXRPcHRJbgogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ub25GdW5naWJsZUFzc2V0Q3JlYXRlX3JvdXRlQDU6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbm9uRnVuZ2libGVBc3NldENyZWF0ZQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9mdW5naWJsZUFzc2V0Q3JlYXRlX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZnVuZ2libGVBc3NldENyZWF0ZQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9wYXltZW50X3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgcGF5bWVudAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMTg6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIyCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjpJbm5lclRyYW5zYWN0aW9ucy5wYXltZW50KCkgLT4gdWludDY0OgpwYXltZW50OgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjctMzMKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIGFtb3VudDogNTAwMCwKICAgIHB1c2hpbnQgNTAwMCAvLyA1MDAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjctMzIKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzEKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjctMzMKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQW1vdW50CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozNQogICAgLy8gcmV0dXJuIHJlc3VsdC5hbW91bnQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjpJbm5lclRyYW5zYWN0aW9ucy5mdW5naWJsZUFzc2V0Q3JlYXRlKCkgLT4gdWludDY0OgpmdW5naWJsZUFzc2V0Q3JlYXRlOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NTQtNjEKICAgIC8vIGNvbnN0IGl0eG5SZXN1bHQgPSBpdHhuCiAgICAvLyAgIC5hc3NldENvbmZpZyh7CiAgICAvLyAgICAgdG90YWw6IDEwMF8wMDBfMDAwXzAwMCwKICAgIC8vICAgICBkZWNpbWFsczogMiwKICAgIC8vICAgICB1bml0TmFtZTogJ1JQJywKICAgIC8vICAgICBhc3NldE5hbWU6ICdSb3lhbHR5IFBvaW50cycsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NTkKICAgIC8vIGFzc2V0TmFtZTogJ1JveWFsdHkgUG9pbnRzJywKICAgIHB1c2hieXRlcyAiUm95YWx0eSBQb2ludHMiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TmFtZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIHVuaXROYW1lOiAnUlAnLAogICAgcHVzaGJ5dGVzICJSUCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGRlY2ltYWxzOiAyLAogICAgcHVzaGludCAyIC8vIDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHRvdGFsOiAxMDBfMDAwXzAwMF8wMDAsCiAgICBwdXNoaW50IDEwMDAwMDAwMDAwMCAvLyAxMDAwMDAwMDAwMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NTQtNjAKICAgIC8vIGNvbnN0IGl0eG5SZXN1bHQgPSBpdHhuCiAgICAvLyAgIC5hc3NldENvbmZpZyh7CiAgICAvLyAgICAgdG90YWw6IDEwMF8wMDBfMDAwXzAwMCwKICAgIC8vICAgICBkZWNpbWFsczogMiwKICAgIC8vICAgICB1bml0TmFtZTogJ1JQJywKICAgIC8vICAgICBhc3NldE5hbWU6ICdSb3lhbHR5IFBvaW50cycsCiAgICAvLyAgIH0pCiAgICBpbnRjXzIgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1NC02MQogICAgLy8gY29uc3QgaXR4blJlc3VsdCA9IGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICB0b3RhbDogMTAwXzAwMF8wMDBfMDAwLAogICAgLy8gICAgIGRlY2ltYWxzOiAyLAogICAgLy8gICAgIHVuaXROYW1lOiAnUlAnLAogICAgLy8gICAgIGFzc2V0TmFtZTogJ1JveWFsdHkgUG9pbnRzJywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NjMKICAgIC8vIHJldHVybiBpdHhuUmVzdWx0LmNyZWF0ZWRBc3NldC5pZAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLm5vbkZ1bmdpYmxlQXNzZXRDcmVhdGUoKSAtPiB1aW50NjQ6Cm5vbkZ1bmdpYmxlQXNzZXRDcmVhdGU6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3NS04OAogICAgLy8gY29uc3QgaXR4blJlc3VsdCA9IGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICB0b3RhbDogMTAwLAogICAgLy8gICAgIGRlY2ltYWxzOiAyLAogICAgLy8gICAgIHVuaXROYW1lOiAnTUwnLAogICAgLy8gICAgIGFzc2V0TmFtZTogJ01vbmEgTGlzYScsCiAgICAvLyAgICAgdXJsOiAnaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhJywKICAgIC8vICAgICBtYW5hZ2VyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmcmVlemU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGNsYXdiYWNrOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjgzLTg1CiAgICAvLyByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vIGZyZWV6ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyBjbGF3YmFjazogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBkdXBuIDMKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawogICAgaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo4MQogICAgLy8gdXJsOiAnaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhJywKICAgIHB1c2hieXRlcyAiaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVSTAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6ODAKICAgIC8vIGFzc2V0TmFtZTogJ01vbmEgTGlzYScsCiAgICBwdXNoYnl0ZXMgIk1vbmEgTGlzYSIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3OQogICAgLy8gdW5pdE5hbWU6ICdNTCcsCiAgICBwdXNoYnl0ZXMgIk1MIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3OAogICAgLy8gZGVjaW1hbHM6IDIsCiAgICBwdXNoaW50IDIgLy8gMgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3NwogICAgLy8gdG90YWw6IDEwMCwKICAgIHB1c2hpbnQgMTAwIC8vIDEwMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3NS04NwogICAgLy8gY29uc3QgaXR4blJlc3VsdCA9IGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICB0b3RhbDogMTAwLAogICAgLy8gICAgIGRlY2ltYWxzOiAyLAogICAgLy8gICAgIHVuaXROYW1lOiAnTUwnLAogICAgLy8gICAgIGFzc2V0TmFtZTogJ01vbmEgTGlzYScsCiAgICAvLyAgICAgdXJsOiAnaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhJywKICAgIC8vICAgICBtYW5hZ2VyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmcmVlemU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGNsYXdiYWNrOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzIgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6ODYKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6NzUtODgKICAgIC8vIGNvbnN0IGl0eG5SZXN1bHQgPSBpdHhuCiAgICAvLyAgIC5hc3NldENvbmZpZyh7CiAgICAvLyAgICAgdG90YWw6IDEwMCwKICAgIC8vICAgICBkZWNpbWFsczogMiwKICAgIC8vICAgICB1bml0TmFtZTogJ01MJywKICAgIC8vICAgICBhc3NldE5hbWU6ICdNb25hIExpc2EnLAogICAgLy8gICAgIHVybDogJ2h0dHBzOi8vbGlua190b19pcGZzL01vbmFfTGlzYScsCiAgICAvLyAgICAgbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgZnJlZXplOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBjbGF3YmFjazogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBc3NldElECiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo5MAogICAgLy8gcmV0dXJuIGl0eG5SZXN1bHQuY3JlYXRlZEFzc2V0LmlkCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRPcHRJbihhc3NldDogdWludDY0KSAtPiB2b2lkOgphc3NldE9wdEluOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OTktMTAwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldE9wdEluKGFzc2V0OiBBc3NldCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDEtMTA4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEwNQogICAgLy8gYXNzZXRBbW91bnQ6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDEtMTA3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTAxLTEwOAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjpJbm5lclRyYW5zYWN0aW9ucy5hc3NldFRyYW5zZmVyKGFzc2V0OiB1aW50NjQsIHJlY2VpdmVyOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0VHJhbnNmZXI6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMjctMTI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldFRyYW5zZmVyKGFzc2V0OiBBc3NldCwgcmVjZWl2ZXI6IEFjY291bnQsIGFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAzIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEyOS0xMzYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTI5LTEzNQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMzQKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTI5LTEzNgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmFzc2V0RnJlZXplKGFjY3RUb0JlRnJvemVuOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRGcmVlemU6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNTQtMTU1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldEZyZWV6ZShhY2N0VG9CZUZyb3plbjogQWNjb3VudCwgYXNzZXQ6IEFzc2V0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE1Ni0xNjMKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0RnJlZXplKHsKICAgIC8vICAgICBmcmVlemVBY2NvdW50OiBhY2N0VG9CZUZyb3plbiwgLy8gYWNjb3VudCB0byBiZSBmcm96ZW4KICAgIC8vICAgICBmcmVlemVBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZnJvemVuOiB0cnVlLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNjAKICAgIC8vIGZyb3plbjogdHJ1ZSwKICAgIGludGNfMCAvLyAxCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0RnJvemVuCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldEFjY291bnQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE1Ni0xNjIKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0RnJlZXplKHsKICAgIC8vICAgICBmcmVlemVBY2NvdW50OiBhY2N0VG9CZUZyb3plbiwgLy8gYWNjb3VudCB0byBiZSBmcm96ZW4KICAgIC8vICAgICBmcmVlemVBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZnJvemVuOiB0cnVlLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNSAvLyA1CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNjEKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTU2LTE2MwogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRGcmVlemUoewogICAgLy8gICAgIGZyZWV6ZUFjY291bnQ6IGFjY3RUb0JlRnJvemVuLCAvLyBhY2NvdW50IHRvIGJlIGZyb3plbgogICAgLy8gICAgIGZyZWV6ZUFzc2V0OiBhc3NldCwKICAgIC8vICAgICBmcm96ZW46IHRydWUsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRSZXZva2UoYXNzZXQ6IHVpbnQ2NCwgYWNjb3VudFRvQmVSZXZva2VkOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0UmV2b2tlOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTc5LTE4MAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYXNzZXRSZXZva2UoYXNzZXQ6IEFzc2V0LCBhY2NvdW50VG9CZVJldm9rZWQ6IEFjY291bnQsIGFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAzIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE4MS0xODkKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgICAgYXNzZXRTZW5kZXI6IGFjY291bnRUb0JlUmV2b2tlZCwgLy8gQXNzZXRTZW5kZXIgaXMgb25seSB1c2VkIGluIHRoZSBjYXNlIG9mIGNsYXdiYWNrCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFNlbmRlcgogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxODEtMTg4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0U2VuZGVyOiBhY2NvdW50VG9CZVJldm9rZWQsIC8vIEFzc2V0U2VuZGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgY2FzZSBvZiBjbGF3YmFjawogICAgLy8gICAgIGFzc2V0QW1vdW50OiBhbW91bnQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gZmVlOiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxODEtMTg5CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0U2VuZGVyOiBhY2NvdW50VG9CZVJldm9rZWQsIC8vIEFzc2V0U2VuZGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgY2FzZSBvZiBjbGF3YmFjawogICAgLy8gICAgIGFzc2V0QW1vdW50OiBhbW91bnQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRDb25maWcoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRDb25maWc6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMDUtMjA2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldENvbmZpZyhhc3NldDogQXNzZXQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjA3LTIxNgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIGNvbmZpZ0Fzc2V0OiBhc3NldCwKICAgIC8vICAgICBtYW5hZ2VyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmcmVlemU6IFR4bi5zZW5kZXIsCiAgICAvLyAgICAgY2xhd2JhY2s6IFR4bi5zZW5kZXIsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIxMAogICAgLy8gbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjExCiAgICAvLyByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGR1cAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjEyCiAgICAvLyBmcmVlemU6IFR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIGNsYXdiYWNrOiBUeG4uc2VuZGVyLAogICAgZHVwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMDctMjE1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldENvbmZpZyh7CiAgICAvLyAgICAgY29uZmlnQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZTogVHhuLnNlbmRlciwKICAgIC8vICAgICBjbGF3YmFjazogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzIgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyBmZWU6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIwNy0yMTYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICBjb25maWdBc3NldDogYXNzZXQsCiAgICAvLyAgICAgbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgZnJlZXplOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGNsYXdiYWNrOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmFzc2V0RGVsZXRlKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0RGVsZXRlOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjMzLTIzNAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYXNzZXREZWxldGUoYXNzZXQ6IEFzc2V0KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIzNS0yNDAKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICBjb25maWdBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjM1LTIzOQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIGNvbmZpZ0Fzc2V0OiBhc3NldCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzIgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjM4CiAgICAvLyBmZWU6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIzNS0yNDAKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICBjb25maWdBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMubXVsdGlJbm5lclR4bnMoYXBwSWQ6IHVpbnQ2NCkgLT4gdWludDY0LCBieXRlczoKbXVsdGlJbm5lclR4bnM6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNTAtMjUxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBtdWx0aUlubmVyVHhucyhhcHBJZDogQXBwbGljYXRpb24pOiBbdWludDY0LCBzdHJpbmddIHsKICAgIHByb3RvIDEgMgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjUzLTI1OQogICAgLy8gY29uc3QgcGF5VHhuID0gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgYW1vdW50OiA1MDAwLAogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNTYKICAgIC8vIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBhbW91bnQ6IDUwMDAsCiAgICBwdXNoaW50IDUwMDAgLy8gNTAwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI1My0yNTgKICAgIC8vIGNvbnN0IHBheVR4biA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjU3CiAgICAvLyBmZWU6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI1My0yNTkKICAgIC8vIGNvbnN0IHBheVR4biA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQW1vdW50CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNjItMjY4CiAgICAvLyBjb25zdCBhcHBDYWxsVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogYXBwSWQuaWQsCiAgICAvLyAgICAgYXBwQXJnczogW2FyYzQubWV0aG9kU2VsZWN0b3IoJ3NheUhlbGxvKHN0cmluZyxzdHJpbmcpc3RyaW5nJyksIG5ldyBhcmM0LlN0cignSmFuZScpLCBuZXcgYXJjNC5TdHIoJ0RvZScpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjY1CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKYW5lJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgYnl0ZWNfMSAvLyBtZXRob2QgInNheUhlbGxvKHN0cmluZyxzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHB1c2hieXRlcyAweDAwMDQ0YTYxNmU2NQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjXzIgLy8gMHgwMDAzNDQ2ZjY1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI2Mi0yNjcKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHBJZC5pZCwKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKYW5lJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNiAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNjYKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjYyLTI2OAogICAgLy8gY29uc3QgYXBwQ2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcElkLmlkLAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdzYXlIZWxsbyhzdHJpbmcsc3RyaW5nKXN0cmluZycpLCBuZXcgYXJjNC5TdHIoJ0phbmUnKSwgbmV3IGFyYzQuU3RyKCdEb2UnKV0sCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI3MQogICAgLy8gY29uc3QgaGVsbG9Xb3JsZFJlc3VsdCA9IGFyYzQuZGVjb2RlQXJjNDxzdHJpbmc+KGFwcENhbGxUeG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZXh0cmFjdCA2IDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI3MgogICAgLy8gcmV0dXJuIFtwYXlUeG4uYW1vdW50LCBoZWxsb1dvcmxkUmVzdWx0XQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmRlcGxveUFwcCgpIC0+IHVpbnQ2NDoKZGVwbG95QXBwOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6Mjk0LTMwMAogICAgLy8gY29uc3QgYXBwVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IEJ5dGVzKCdhcHByb3ZhbF9wcm9ncmFtJyksCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IEJ5dGVzKCdjbGVhcl9zdGF0ZV9wcm9ncmFtJyksCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI5NwogICAgLy8gY2xlYXJTdGF0ZVByb2dyYW06IEJ5dGVzKCdjbGVhcl9zdGF0ZV9wcm9ncmFtJyksCiAgICBwdXNoYnl0ZXMgImNsZWFyX3N0YXRlX3Byb2dyYW0iCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI5NgogICAgLy8gYXBwcm92YWxQcm9ncmFtOiBCeXRlcygnYXBwcm92YWxfcHJvZ3JhbScpLAogICAgcHVzaGJ5dGVzICJhcHByb3ZhbF9wcm9ncmFtIgogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6Mjk0LTI5OQogICAgLy8gY29uc3QgYXBwVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IEJ5dGVzKCdhcHByb3ZhbF9wcm9ncmFtJyksCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IEJ5dGVzKCdjbGVhcl9zdGF0ZV9wcm9ncmFtJyksCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgcHVzaGludCA2IC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI5OAogICAgLy8gZmVlOiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyOTQtMzAwCiAgICAvLyBjb25zdCBhcHBUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogQnl0ZXMoJ2FwcHJvdmFsX3Byb2dyYW0nKSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogQnl0ZXMoJ2NsZWFyX3N0YXRlX3Byb2dyYW0nKSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjMwMgogICAgLy8gcmV0dXJuIGFwcFR4bi5jcmVhdGVkQXBwLmlkCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMubm9vcEFwcENhbGwoYXBwSWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cm5vb3BBcHBDYWxsOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzI5LTMzMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgbm9vcEFwcENhbGwoYXBwSWQ6IEFwcGxpY2F0aW9uKTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzMyLTMzNwogICAgLy8gY29uc3QgY2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcElkLmlkLAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdzYXlIZWxsbyhzdHJpbmcsc3RyaW5nKXN0cmluZycpLCBuZXcgYXJjNC5TdHIoJ0pvaG4nKSwgbmV3IGFyYzQuU3RyKCdEb2UnKV0sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzM1CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKb2huJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgYnl0ZWNfMSAvLyBtZXRob2QgInNheUhlbGxvKHN0cmluZyxzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHB1c2hieXRlcyAweDAwMDQ0YTZmNjg2ZQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjXzIgLy8gMHgwMDAzNDQ2ZjY1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjMzMi0zMzYKICAgIC8vIGNvbnN0IGNhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHBJZC5pZCwKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKb2huJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgLy8gICB9KQogICAgcHVzaGludCA2IC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzMyLTMzNwogICAgLy8gY29uc3QgY2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcElkLmlkLAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdzYXlIZWxsbyhzdHJpbmcsc3RyaW5nKXN0cmluZycpLCBuZXcgYXJjNC5TdHIoJ0pvaG4nKSwgbmV3IGFyYzQuU3RyKCdEb2UnKV0sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzQwCiAgICAvLyByZXR1cm4gYXJjNC5kZWNvZGVBcmM0PHN0cmluZz4oY2FsbFR4bi5sYXN0TG9nLCAnbG9nJykKICAgIGR1cAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBleHRyYWN0IDYgMAogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDMgNAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4M2FhZDZkODYgMHgwMDAzNDQ2ZjY1CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTgKICAgIHB1c2hieXRlc3MgMHgyMzk1MDAyNyAweDAyMDdmNzdkIDB4ZDIyNDkyODQgMHg2NmEwNjNiZiAweDEyNTYzNzY3IDB4Y2ZiMTJkYjEgMHg3YjU4ZTIzNiAweGQwODY0ZmY0IDB4NTM1MWQ3YmUgMHg1NzI3ZWNhZSAweGRhMjBhODdlIDB4MzhlY2MwMTQgMHg5YWVlYzE1OSAvLyBtZXRob2QgInBheW1lbnQoKXVpbnQ2NCIsIG1ldGhvZCAiZnVuZ2libGVBc3NldENyZWF0ZSgpdWludDY0IiwgbWV0aG9kICJub25GdW5naWJsZUFzc2V0Q3JlYXRlKCl1aW50NjQiLCBtZXRob2QgImFzc2V0T3B0SW4oYXNzZXQpdm9pZCIsIG1ldGhvZCAiYXNzZXRUcmFuc2Zlcihhc3NldCxhY2NvdW50LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJhc3NldEZyZWV6ZShhY2NvdW50LGFzc2V0KXZvaWQiLCBtZXRob2QgImFzc2V0UmV2b2tlKGFzc2V0LGFjY291bnQsdWludDY0KXZvaWQiLCBtZXRob2QgImFzc2V0Q29uZmlnKGFzc2V0KXZvaWQiLCBtZXRob2QgImFzc2V0RGVsZXRlKGFzc2V0KXZvaWQiLCBtZXRob2QgIm11bHRpSW5uZXJUeG5zKGFwcGxpY2F0aW9uKSh1aW50NjQsc3RyaW5nKSIsIG1ldGhvZCAiZGVwbG95QXBwKCl1aW50NjQiLCBtZXRob2QgImFyYzREZXBsb3lBcHAoKXVpbnQ2NCIsIG1ldGhvZCAibm9vcEFwcENhbGwoYXBwbGljYXRpb24pc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9wYXltZW50X3JvdXRlQDMgbWFpbl9mdW5naWJsZUFzc2V0Q3JlYXRlX3JvdXRlQDQgbWFpbl9ub25GdW5naWJsZUFzc2V0Q3JlYXRlX3JvdXRlQDUgbWFpbl9hc3NldE9wdEluX3JvdXRlQDYgbWFpbl9hc3NldFRyYW5zZmVyX3JvdXRlQDcgbWFpbl9hc3NldEZyZWV6ZV9yb3V0ZUA4IG1haW5fYXNzZXRSZXZva2Vfcm91dGVAOSBtYWluX2Fzc2V0Q29uZmlnX3JvdXRlQDEwIG1haW5fYXNzZXREZWxldGVfcm91dGVAMTEgbWFpbl9tdWx0aUlubmVyVHhuc19yb3V0ZUAxMiBtYWluX2RlcGxveUFwcF9yb3V0ZUAxMyBtYWluX2FyYzREZXBsb3lBcHBfcm91dGVAMTQgbWFpbl9ub29wQXBwQ2FsbF9yb3V0ZUAxNQoKbWFpbl9hZnRlcl9pZl9lbHNlQDIyOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9ub29wQXBwQ2FsbF9yb3V0ZUAxNToKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjMxMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzEwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgbm9vcEFwcENhbGwKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzREZXBsb3lBcHBfcm91dGVAMTQ6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyOTIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDA0ZDIKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZXBsb3lBcHBfcm91dGVAMTM6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNzEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlcGxveUFwcAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tdWx0aUlubmVyVHhuc19yb3V0ZUAxMjoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIzMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjMxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgbXVsdGlJbm5lclR4bnMKICAgIHN3YXAKICAgIGl0b2IKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgcHVzaGJ5dGVzIDB4MDAwYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXREZWxldGVfcm91dGVAMTE6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIxNAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFzc2V0RGVsZXRlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0Q29uZmlnX3JvdXRlQDEwOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBhc3NldENvbmZpZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hc3NldFJldm9rZV9yb3V0ZUA5OgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTY4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTY4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYXNzZXRSZXZva2UKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRGcmVlemVfcm91dGVAODoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE0NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE0NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFzc2V0RnJlZXplCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0VHJhbnNmZXJfcm91dGVANzoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEyMwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEyMwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFzc2V0VHJhbnNmZXIKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRPcHRJbl9yb3V0ZUA2OgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTAwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIElubmVyVHJhbnNhY3Rpb25zIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBhc3NldE9wdEluCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX25vbkZ1bmdpYmxlQXNzZXRDcmVhdGVfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjcxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBub25GdW5naWJsZUFzc2V0Q3JlYXRlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Z1bmdpYmxlQXNzZXRDcmVhdGVfcm91dGVANDoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBmdW5naWJsZUFzc2V0Q3JlYXRlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3BheW1lbnRfcm91dGVAMzoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBwYXltZW50CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxODoKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMjIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLnBheW1lbnQoKSAtPiB1aW50NjQ6CnBheW1lbnQ6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozMS0zNwogICAgLy8gY29uc3QgcmVzdWx0ID0gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgYW1vdW50OiA1MDAwLAogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozNAogICAgLy8gcmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozMwogICAgLy8gYW1vdW50OiA1MDAwLAogICAgcHVzaGludCA1MDAwIC8vIDUwMDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozMS0zNgogICAgLy8gY29uc3QgcmVzdWx0ID0gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgYW1vdW50OiA1MDAwLAogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMCAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozNQogICAgLy8gZmVlOiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czozMS0zNwogICAgLy8gY29uc3QgcmVzdWx0ID0gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgYW1vdW50OiA1MDAwLAogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBBbW91bnQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyByZXR1cm4gcmVzdWx0LmFtb3VudAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmZ1bmdpYmxlQXNzZXRDcmVhdGUoKSAtPiB1aW50NjQ6CmZ1bmdpYmxlQXNzZXRDcmVhdGU6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1MC01NwogICAgLy8gY29uc3QgaXR4blJlc3VsdCA9IGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICB0b3RhbDogMTAwXzAwMF8wMDBfMDAwLAogICAgLy8gICAgIGRlY2ltYWxzOiAyLAogICAgLy8gICAgIHVuaXROYW1lOiAnUlAnLAogICAgLy8gICAgIGFzc2V0TmFtZTogJ1JveWFsdHkgUG9pbnRzJywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1NQogICAgLy8gYXNzZXROYW1lOiAnUm95YWx0eSBQb2ludHMnLAogICAgcHVzaGJ5dGVzICJSb3lhbHR5IFBvaW50cyIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1NAogICAgLy8gdW5pdE5hbWU6ICdSUCcsCiAgICBwdXNoYnl0ZXMgIlJQIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gZGVjaW1hbHM6IDIsCiAgICBwdXNoaW50IDIgLy8gMgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1MgogICAgLy8gdG90YWw6IDEwMF8wMDBfMDAwXzAwMCwKICAgIHB1c2hpbnQgMTAwMDAwMDAwMDAwIC8vIDEwMDAwMDAwMDAwMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1MC01NgogICAgLy8gY29uc3QgaXR4blJlc3VsdCA9IGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICB0b3RhbDogMTAwXzAwMF8wMDBfMDAwLAogICAgLy8gICAgIGRlY2ltYWxzOiAyLAogICAgLy8gICAgIHVuaXROYW1lOiAnUlAnLAogICAgLy8gICAgIGFzc2V0TmFtZTogJ1JveWFsdHkgUG9pbnRzJywKICAgIC8vICAgfSkKICAgIGludGNfMiAvLyAzCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjUwLTU3CiAgICAvLyBjb25zdCBpdHhuUmVzdWx0ID0gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIHRvdGFsOiAxMDBfMDAwXzAwMF8wMDAsCiAgICAvLyAgICAgZGVjaW1hbHM6IDIsCiAgICAvLyAgICAgdW5pdE5hbWU6ICdSUCcsCiAgICAvLyAgICAgYXNzZXROYW1lOiAnUm95YWx0eSBQb2ludHMnLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBc3NldElECiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo1OQogICAgLy8gcmV0dXJuIGl0eG5SZXN1bHQuY3JlYXRlZEFzc2V0LmlkCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMubm9uRnVuZ2libGVBc3NldENyZWF0ZSgpIC0+IHVpbnQ2NDoKbm9uRnVuZ2libGVBc3NldENyZWF0ZToKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjczLTg2CiAgICAvLyBjb25zdCBpdHhuUmVzdWx0ID0gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIHRvdGFsOiAxMDAsCiAgICAvLyAgICAgZGVjaW1hbHM6IDIsCiAgICAvLyAgICAgdW5pdE5hbWU6ICdNTCcsCiAgICAvLyAgICAgYXNzZXROYW1lOiAnTW9uYSBMaXNhJywKICAgIC8vICAgICB1cmw6ICdodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EnLAogICAgLy8gICAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgY2xhd2JhY2s6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6ODEtODMKICAgIC8vIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gZnJlZXplOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vIGNsYXdiYWNrOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGR1cG4gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjc5CiAgICAvLyB1cmw6ICdodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EnLAogICAgcHVzaGJ5dGVzICJodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3OAogICAgLy8gYXNzZXROYW1lOiAnTW9uYSBMaXNhJywKICAgIHB1c2hieXRlcyAiTW9uYSBMaXNhIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjc3CiAgICAvLyB1bml0TmFtZTogJ01MJywKICAgIHB1c2hieXRlcyAiTUwiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjc2CiAgICAvLyBkZWNpbWFsczogMiwKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyB0b3RhbDogMTAwLAogICAgcHVzaGludCAxMDAgLy8gMTAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjczLTg1CiAgICAvLyBjb25zdCBpdHhuUmVzdWx0ID0gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIHRvdGFsOiAxMDAsCiAgICAvLyAgICAgZGVjaW1hbHM6IDIsCiAgICAvLyAgICAgdW5pdE5hbWU6ICdNTCcsCiAgICAvLyAgICAgYXNzZXROYW1lOiAnTW9uYSBMaXNhJywKICAgIC8vICAgICB1cmw6ICdodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EnLAogICAgLy8gICAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgY2xhd2JhY2s6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMiAvLyAzCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo4NAogICAgLy8gZmVlOiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo3My04NgogICAgLy8gY29uc3QgaXR4blJlc3VsdCA9IGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICB0b3RhbDogMTAwLAogICAgLy8gICAgIGRlY2ltYWxzOiAyLAogICAgLy8gICAgIHVuaXROYW1lOiAnTUwnLAogICAgLy8gICAgIGFzc2V0TmFtZTogJ01vbmEgTGlzYScsCiAgICAvLyAgICAgdXJsOiAnaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhJywKICAgIC8vICAgICBtYW5hZ2VyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmcmVlemU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGNsYXdiYWNrOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjg4CiAgICAvLyByZXR1cm4gaXR4blJlc3VsdC5jcmVhdGVkQXNzZXQuaWQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjpJbm5lclRyYW5zYWN0aW9ucy5hc3NldE9wdEluKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0T3B0SW46CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDAtMTAxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldE9wdEluKGFzc2V0OiBBc3NldCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDItMTA5CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDQKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEwNgogICAgLy8gYXNzZXRBbW91bnQ6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDItMTA4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTAyLTEwOQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjpJbm5lclRyYW5zYWN0aW9ucy5hc3NldFRyYW5zZmVyKGFzc2V0OiB1aW50NjQsIHJlY2VpdmVyOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0VHJhbnNmZXI6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMjMtMTI0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldFRyYW5zZmVyKGFzc2V0OiBBc3NldCwgcmVjZWl2ZXI6IEFjY291bnQsIGFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAzIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjEyNS0xMzIKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTI1LTEzMQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTI1LTEzMgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmFzc2V0RnJlZXplKGFjY3RUb0JlRnJvemVuOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRGcmVlemU6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNDUtMTQ2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldEZyZWV6ZShhY2N0VG9CZUZyb3plbjogQWNjb3VudCwgYXNzZXQ6IEFzc2V0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE0Ny0xNTQKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0RnJlZXplKHsKICAgIC8vICAgICBmcmVlemVBY2NvdW50OiBhY2N0VG9CZUZyb3plbiwgLy8gYWNjb3VudCB0byBiZSBmcm96ZW4KICAgIC8vICAgICBmcmVlemVBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZnJvemVuOiB0cnVlLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNTEKICAgIC8vIGZyb3plbjogdHJ1ZSwKICAgIGludGNfMCAvLyAxCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0RnJvemVuCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldEFjY291bnQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE0Ny0xNTMKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0RnJlZXplKHsKICAgIC8vICAgICBmcmVlemVBY2NvdW50OiBhY2N0VG9CZUZyb3plbiwgLy8gYWNjb3VudCB0byBiZSBmcm96ZW4KICAgIC8vICAgICBmcmVlemVBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZnJvemVuOiB0cnVlLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNSAvLyA1CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNTIKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTQ3LTE1NAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRGcmVlemUoewogICAgLy8gICAgIGZyZWV6ZUFjY291bnQ6IGFjY3RUb0JlRnJvemVuLCAvLyBhY2NvdW50IHRvIGJlIGZyb3plbgogICAgLy8gICAgIGZyZWV6ZUFzc2V0OiBhc3NldCwKICAgIC8vICAgICBmcm96ZW46IHRydWUsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRSZXZva2UoYXNzZXQ6IHVpbnQ2NCwgYWNjb3VudFRvQmVSZXZva2VkOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0UmV2b2tlOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTY4LTE2OQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYXNzZXRSZXZva2UoYXNzZXQ6IEFzc2V0LCBhY2NvdW50VG9CZVJldm9rZWQ6IEFjY291bnQsIGFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAzIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE3MC0xNzgKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgICAgYXNzZXRTZW5kZXI6IGFjY291bnRUb0JlUmV2b2tlZCwgLy8gQXNzZXRTZW5kZXIgaXMgb25seSB1c2VkIGluIHRoZSBjYXNlIG9mIGNsYXdiYWNrCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTcyCiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFNlbmRlcgogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNzAtMTc3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0U2VuZGVyOiBhY2NvdW50VG9CZVJldm9rZWQsIC8vIEFzc2V0U2VuZGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgY2FzZSBvZiBjbGF3YmFjawogICAgLy8gICAgIGFzc2V0QW1vdW50OiBhbW91bnQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE3NgogICAgLy8gZmVlOiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxNzAtMTc4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0U2VuZGVyOiBhY2NvdW50VG9CZVJldm9rZWQsIC8vIEFzc2V0U2VuZGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgY2FzZSBvZiBjbGF3YmFjawogICAgLy8gICAgIGFzc2V0QW1vdW50OiBhbW91bnQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRDb25maWcoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRDb25maWc6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOTEtMTkyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhc3NldENvbmZpZyhhc3NldDogQXNzZXQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTkzLTIwMgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIGNvbmZpZ0Fzc2V0OiBhc3NldCwKICAgIC8vICAgICBtYW5hZ2VyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBmcmVlemU6IFR4bi5zZW5kZXIsCiAgICAvLyAgICAgY2xhd2JhY2s6IFR4bi5zZW5kZXIsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5NgogICAgLy8gbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTk3CiAgICAvLyByZXNlcnZlOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGR1cAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MTk4CiAgICAvLyBmcmVlemU6IFR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOTkKICAgIC8vIGNsYXdiYWNrOiBUeG4uc2VuZGVyLAogICAgZHVwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoxOTMtMjAxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldENvbmZpZyh7CiAgICAvLyAgICAgY29uZmlnQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIG1hbmFnZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZTogVHhuLnNlbmRlciwKICAgIC8vICAgICBjbGF3YmFjazogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzIgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjAwCiAgICAvLyBmZWU6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjE5My0yMDIKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICBjb25maWdBc3NldDogYXNzZXQsCiAgICAvLyAgICAgbWFuYWdlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZTogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgZnJlZXplOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGNsYXdiYWNrOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmFzc2V0RGVsZXRlKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0RGVsZXRlOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjE0LTIxNQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYXNzZXREZWxldGUoYXNzZXQ6IEFzc2V0KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIxNi0yMjEKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICBjb25maWdBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjE2LTIyMAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRDb25maWcoewogICAgLy8gICAgIGNvbmZpZ0Fzc2V0OiBhc3NldCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzIgLy8gMwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjE5CiAgICAvLyBmZWU6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIxNi0yMjEKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0Q29uZmlnKHsKICAgIC8vICAgICBjb25maWdBc3NldDogYXNzZXQsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMubXVsdGlJbm5lclR4bnMoYXBwSWQ6IHVpbnQ2NCkgLT4gdWludDY0LCBieXRlczoKbXVsdGlJbm5lclR4bnM6CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMzEtMjMyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBtdWx0aUlubmVyVHhucyhhcHBJZDogQXBwbGljYXRpb24pOiBbdWludDY0LCBzdHJpbmddIHsKICAgIHByb3RvIDEgMgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjM0LTI0MAogICAgLy8gY29uc3QgcGF5VHhuID0gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgYW1vdW50OiA1MDAwLAogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyMzcKICAgIC8vIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjM2CiAgICAvLyBhbW91bnQ6IDUwMDAsCiAgICBwdXNoaW50IDUwMDAgLy8gNTAwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIzNC0yMzkKICAgIC8vIGNvbnN0IHBheVR4biA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjM4CiAgICAvLyBmZWU6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjIzNC0yNDAKICAgIC8vIGNvbnN0IHBheVR4biA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogNTAwMCwKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQW1vdW50CiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNDMtMjQ5CiAgICAvLyBjb25zdCBhcHBDYWxsVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogYXBwSWQuaWQsCiAgICAvLyAgICAgYXBwQXJnczogW2FyYzQubWV0aG9kU2VsZWN0b3IoJ3NheUhlbGxvKHN0cmluZyxzdHJpbmcpc3RyaW5nJyksIG5ldyBhcmM0LlN0cignSmFuZScpLCBuZXcgYXJjNC5TdHIoJ0RvZScpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjQ2CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKYW5lJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgYnl0ZWNfMSAvLyBtZXRob2QgInNheUhlbGxvKHN0cmluZyxzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHB1c2hieXRlcyAweDAwMDQ0YTYxNmU2NQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjXzIgLy8gMHgwMDAzNDQ2ZjY1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI0My0yNDgKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHBJZC5pZCwKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKYW5lJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNiAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNDcKICAgIC8vIGZlZTogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MjQzLTI0OQogICAgLy8gY29uc3QgYXBwQ2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcElkLmlkLAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdzYXlIZWxsbyhzdHJpbmcsc3RyaW5nKXN0cmluZycpLCBuZXcgYXJjNC5TdHIoJ0phbmUnKSwgbmV3IGFyYzQuU3RyKCdEb2UnKV0sCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gY29uc3QgaGVsbG9Xb3JsZFJlc3VsdCA9IGFyYzQuZGVjb2RlQXJjNDxzdHJpbmc+KGFwcENhbGxUeG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZXh0cmFjdCA2IDAKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI1MwogICAgLy8gcmV0dXJuIFtwYXlUeG4uYW1vdW50LCBoZWxsb1dvcmxkUmVzdWx0XQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6OklubmVyVHJhbnNhY3Rpb25zLmRlcGxveUFwcCgpIC0+IHVpbnQ2NDoKZGVwbG95QXBwOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6Mjc1LTI4MQogICAgLy8gY29uc3QgYXBwVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IEJ5dGVzKCdhcHByb3ZhbF9wcm9ncmFtJyksCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IEJ5dGVzKCdjbGVhcl9zdGF0ZV9wcm9ncmFtJyksCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI3OAogICAgLy8gY2xlYXJTdGF0ZVByb2dyYW06IEJ5dGVzKCdjbGVhcl9zdGF0ZV9wcm9ncmFtJyksCiAgICBwdXNoYnl0ZXMgImNsZWFyX3N0YXRlX3Byb2dyYW0iCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI3NwogICAgLy8gYXBwcm92YWxQcm9ncmFtOiBCeXRlcygnYXBwcm92YWxfcHJvZ3JhbScpLAogICAgcHVzaGJ5dGVzICJhcHByb3ZhbF9wcm9ncmFtIgogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6Mjc1LTI4MAogICAgLy8gY29uc3QgYXBwVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IEJ5dGVzKCdhcHByb3ZhbF9wcm9ncmFtJyksCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IEJ5dGVzKCdjbGVhcl9zdGF0ZV9wcm9ncmFtJyksCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgcHVzaGludCA2IC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI3OQogICAgLy8gZmVlOiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czoyNzUtMjgxCiAgICAvLyBjb25zdCBhcHBUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogQnl0ZXMoJ2FwcHJvdmFsX3Byb2dyYW0nKSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogQnl0ZXMoJ2NsZWFyX3N0YXRlX3Byb2dyYW0nKSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjI4MwogICAgLy8gcmV0dXJuIGFwcFR4bi5jcmVhdGVkQXBwLmlkCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvSW5uZXJUcmFuc2FjdGlvbnMvY29udHJhY3QuYWxnby50czo6SW5uZXJUcmFuc2FjdGlvbnMubm9vcEFwcENhbGwoYXBwSWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cm5vb3BBcHBDYWxsOgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzEwLTMxMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgbm9vcEFwcENhbGwoYXBwSWQ6IEFwcGxpY2F0aW9uKTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzEzLTMxOAogICAgLy8gY29uc3QgY2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcElkLmlkLAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdzYXlIZWxsbyhzdHJpbmcsc3RyaW5nKXN0cmluZycpLCBuZXcgYXJjNC5TdHIoJ0pvaG4nKSwgbmV3IGFyYzQuU3RyKCdEb2UnKV0sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzE2CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKb2huJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgYnl0ZWNfMSAvLyBtZXRob2QgInNheUhlbGxvKHN0cmluZyxzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHB1c2hieXRlcyAweDAwMDQ0YTZmNjg2ZQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjXzIgLy8gMHgwMDAzNDQ2ZjY1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9Jbm5lclRyYW5zYWN0aW9ucy9jb250cmFjdC5hbGdvLnRzOjMxMy0zMTcKICAgIC8vIGNvbnN0IGNhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHBJZC5pZCwKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3Rvcignc2F5SGVsbG8oc3RyaW5nLHN0cmluZylzdHJpbmcnKSwgbmV3IGFyYzQuU3RyKCdKb2huJyksIG5ldyBhcmM0LlN0cignRG9lJyldLAogICAgLy8gICB9KQogICAgcHVzaGludCA2IC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzEzLTMxOAogICAgLy8gY29uc3QgY2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcElkLmlkLAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdzYXlIZWxsbyhzdHJpbmcsc3RyaW5nKXN0cmluZycpLCBuZXcgYXJjNC5TdHIoJ0pvaG4nKSwgbmV3IGFyYzQuU3RyKCdEb2UnKV0sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gY29udHJhY3RzL0lubmVyVHJhbnNhY3Rpb25zL2NvbnRyYWN0LmFsZ28udHM6MzIxCiAgICAvLyByZXR1cm4gYXJjNC5kZWNvZGVBcmM0PHN0cmluZz4oY2FsbFR4bi5sYXN0TG9nLCAnbG9nJykKICAgIGR1cAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBleHRyYWN0IDYgMAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/MyCounter.approval.puya.map b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/MyCounter.approval.puya.map index 06d7004..71e1f94 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/MyCounter.approval.puya.map +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/MyCounter.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "/Users/gabe.algo/Code/devportal-code-examples/projects/typescript-examples/contracts/ReferenceAccountApp/contract.algo.ts" ], - "mappings": ";;;;;;;;;;;;;;;;;;AAmBA;;AAAA;;;AAAA;;;;;;;;;;;;AAAA;;;AAAA;;;;;;AAAA;;AAgBG;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;;;;;;AAAA;AAAA;AAAA;AAAA;;AATA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAPH;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AASuB;;AAPwB;AAOR;AAAnC;;AASW;;AAAwB;;AAA5B;AAAP;AAEsD;;AAAQ;AAlBnB;AAkBmB;AAAA;AAA3C;;AAAgB;AAAmC;AAAnC;AAlBQ;AAkB3C;AAAA;AAE0B;;AAAQ;AApBS;AAoBT;AAAA;AAAlC", + "mappings": ";;;;;;;;;;;;;;;;;;AAoBA;;AAAA;;;AAAA;;;;;;;;;;;;AAAA;;;AAAA;;;;;;AAAA;;AAgBG;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;;;;;;AAAA;AAAA;AAAA;AAAA;;AATA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAPH;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AASuB;;AAPwB;AAOR;AAAnC;;AASW;;AAAwB;;AAA5B;AAAP;AAEsD;;AAAQ;AAlBnB;AAkBmB;AAAA;AAA3C;;AAAgB;AAAmC;AAAnC;AAlBQ;AAkB3C;AAAA;AAE0B;;AAAQ;AApBS;AAoBT;AAAA;AAAlC", "op_pc_offset": 0, "pc_events": { "1": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/MyCounter.approval.teal b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/MyCounter.approval.teal index eee8b0b..62f0f68 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/MyCounter.approval.teal +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/MyCounter.approval.teal @@ -5,7 +5,7 @@ main: intcblock 1 0 bytecblock "my_counter" - // contracts/ReferenceAccountApp/contract.algo.ts:20 + // contracts/ReferenceAccountApp/contract.algo.ts:21 // export class MyCounter extends Contract { txn NumAppArgs bz main_bare_routing@7 @@ -14,13 +14,13 @@ main: match main_optIn_route@3 main_incrementMyCounter_route@4 main_after_if_else@11: - // contracts/ReferenceAccountApp/contract.algo.ts:20 + // contracts/ReferenceAccountApp/contract.algo.ts:21 // export class MyCounter extends Contract { intc_1 // 0 return main_incrementMyCounter_route@4: - // contracts/ReferenceAccountApp/contract.algo.ts:36 + // contracts/ReferenceAccountApp/contract.algo.ts:37 // @abimethod() txn OnCompletion ! @@ -37,7 +37,7 @@ main_incrementMyCounter_route@4: return main_optIn_route@3: - // contracts/ReferenceAccountApp/contract.algo.ts:27 + // contracts/ReferenceAccountApp/contract.algo.ts:28 // @abimethod({ allowActions: 'OptIn' }) txn OnCompletion intc_0 // OptIn @@ -50,7 +50,7 @@ main_optIn_route@3: return main_bare_routing@7: - // contracts/ReferenceAccountApp/contract.algo.ts:20 + // contracts/ReferenceAccountApp/contract.algo.ts:21 // export class MyCounter extends Contract { txn OnCompletion bnz main_after_if_else@11 @@ -63,13 +63,13 @@ main_bare_routing@7: // contracts/ReferenceAccountApp/contract.algo.ts::MyCounter.optIn() -> void: optIn: - // contracts/ReferenceAccountApp/contract.algo.ts:29 + // contracts/ReferenceAccountApp/contract.algo.ts:30 // this.myCounter(Txn.sender).value = 0 txn Sender - // contracts/ReferenceAccountApp/contract.algo.ts:22 + // contracts/ReferenceAccountApp/contract.algo.ts:23 // public myCounter = LocalState({ key: 'my_counter' }) bytec_0 // "my_counter" - // contracts/ReferenceAccountApp/contract.algo.ts:29 + // contracts/ReferenceAccountApp/contract.algo.ts:30 // this.myCounter(Txn.sender).value = 0 intc_1 // 0 app_local_put @@ -78,20 +78,20 @@ optIn: // contracts/ReferenceAccountApp/contract.algo.ts::MyCounter.incrementMyCounter() -> uint64: incrementMyCounter: - // contracts/ReferenceAccountApp/contract.algo.ts:38 + // contracts/ReferenceAccountApp/contract.algo.ts:39 // assert(Txn.sender.isOptedIn(Global.currentApplicationId), 'Account must opt in to contract first') txn Sender global CurrentApplicationID app_opted_in assert // Account must opt in to contract first - // contracts/ReferenceAccountApp/contract.algo.ts:40 + // contracts/ReferenceAccountApp/contract.algo.ts:41 // this.myCounter(Txn.sender).value = this.myCounter(Txn.sender).value + 1 txn Sender intc_1 // 0 - // contracts/ReferenceAccountApp/contract.algo.ts:22 + // contracts/ReferenceAccountApp/contract.algo.ts:23 // public myCounter = LocalState({ key: 'my_counter' }) bytec_0 // "my_counter" - // contracts/ReferenceAccountApp/contract.algo.ts:40 + // contracts/ReferenceAccountApp/contract.algo.ts:41 // this.myCounter(Txn.sender).value = this.myCounter(Txn.sender).value + 1 app_local_get_ex assert // check LocalState exists @@ -99,21 +99,21 @@ incrementMyCounter: swap intc_0 // 1 + - // contracts/ReferenceAccountApp/contract.algo.ts:22 + // contracts/ReferenceAccountApp/contract.algo.ts:23 // public myCounter = LocalState({ key: 'my_counter' }) bytec_0 // "my_counter" - // contracts/ReferenceAccountApp/contract.algo.ts:40 + // contracts/ReferenceAccountApp/contract.algo.ts:41 // this.myCounter(Txn.sender).value = this.myCounter(Txn.sender).value + 1 swap app_local_put - // contracts/ReferenceAccountApp/contract.algo.ts:42 + // contracts/ReferenceAccountApp/contract.algo.ts:43 // return this.myCounter(Txn.sender).value txn Sender intc_1 // 0 - // contracts/ReferenceAccountApp/contract.algo.ts:22 + // contracts/ReferenceAccountApp/contract.algo.ts:23 // public myCounter = LocalState({ key: 'my_counter' }) bytec_0 // "my_counter" - // contracts/ReferenceAccountApp/contract.algo.ts:42 + // contracts/ReferenceAccountApp/contract.algo.ts:43 // return this.myCounter(Txn.sender).value app_local_get_ex assert // check LocalState exists diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/MyCounter.arc32.json b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/MyCounter.arc32.json index 7f7e4be..e35ebf7 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/MyCounter.arc32.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/MyCounter.arc32.json @@ -12,7 +12,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrICJteV9jb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q291bnRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4MjkzMTRkOTUgMHhlNmRiZWQ3ZiAvLyBtZXRob2QgIm9wdEluKCl2b2lkIiwgbWV0aG9kICJpbmNyZW1lbnRNeUNvdW50ZXIoKXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fb3B0SW5fcm91dGVAMyBtYWluX2luY3JlbWVudE15Q291bnRlcl9yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb3VudGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9pbmNyZW1lbnRNeUNvdW50ZXJfcm91dGVANDoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MzYKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGluY3JlbWVudE15Q291bnRlcgogICAgaXRvYgogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX29wdEluX3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG9wdEluCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q291bnRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo6TXlDb3VudGVyLm9wdEluKCkgLT4gdm9pZDoKb3B0SW46CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjI5CiAgICAvLyB0aGlzLm15Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSA9IDAKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIHB1YmxpYyBteUNvdW50ZXIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdteV9jb3VudGVyJyB9KQogICAgYnl0ZWNfMCAvLyAibXlfY291bnRlciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIHRoaXMubXlDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gMAogICAgaW50Y18xIC8vIDAKICAgIGFwcF9sb2NhbF9wdXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6Ok15Q291bnRlci5pbmNyZW1lbnRNeUNvdW50ZXIoKSAtPiB1aW50NjQ6CmluY3JlbWVudE15Q291bnRlcjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MzgKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyLmlzT3B0ZWRJbihHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uSWQpLCAnQWNjb3VudCBtdXN0IG9wdCBpbiB0byBjb250cmFjdCBmaXJzdCcpCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKICAgIGFwcF9vcHRlZF9pbgogICAgYXNzZXJ0IC8vIEFjY291bnQgbXVzdCBvcHQgaW4gdG8gY29udHJhY3QgZmlyc3QKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NDAKICAgIC8vIHRoaXMubXlDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgKyAxCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gcHVibGljIG15Q291bnRlciA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ215X2NvdW50ZXInIH0pCiAgICBieXRlY18wIC8vICJteV9jb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo0MAogICAgLy8gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgPSB0aGlzLm15Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSArIDEKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgdHhuIFNlbmRlcgogICAgc3dhcAogICAgaW50Y18wIC8vIDEKICAgICsKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIHB1YmxpYyBteUNvdW50ZXIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdteV9jb3VudGVyJyB9KQogICAgYnl0ZWNfMCAvLyAibXlfY291bnRlciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NDAKICAgIC8vIHRoaXMubXlDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgKyAxCiAgICBzd2FwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyByZXR1cm4gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMSAvLyAwCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBwdWJsaWMgbXlDb3VudGVyID0gTG9jYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnbXlfY291bnRlcicgfSkKICAgIGJ5dGVjXzAgLy8gIm15X2NvdW50ZXIiCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyByZXR1cm4gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrICJteV9jb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gZXhwb3J0IGNsYXNzIE15Q291bnRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4MjkzMTRkOTUgMHhlNmRiZWQ3ZiAvLyBtZXRob2QgIm9wdEluKCl2b2lkIiwgbWV0aG9kICJpbmNyZW1lbnRNeUNvdW50ZXIoKXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fb3B0SW5fcm91dGVAMyBtYWluX2luY3JlbWVudE15Q291bnRlcl9yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjIxCiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb3VudGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9pbmNyZW1lbnRNeUNvdW50ZXJfcm91dGVANDoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGluY3JlbWVudE15Q291bnRlcgogICAgaXRvYgogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX29wdEluX3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG9wdEluCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gZXhwb3J0IGNsYXNzIE15Q291bnRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo6TXlDb3VudGVyLm9wdEluKCkgLT4gdm9pZDoKb3B0SW46CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyB0aGlzLm15Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSA9IDAKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHB1YmxpYyBteUNvdW50ZXIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdteV9jb3VudGVyJyB9KQogICAgYnl0ZWNfMCAvLyAibXlfY291bnRlciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIHRoaXMubXlDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gMAogICAgaW50Y18xIC8vIDAKICAgIGFwcF9sb2NhbF9wdXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6Ok15Q291bnRlci5pbmNyZW1lbnRNeUNvdW50ZXIoKSAtPiB1aW50NjQ6CmluY3JlbWVudE15Q291bnRlcjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyLmlzT3B0ZWRJbihHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uSWQpLCAnQWNjb3VudCBtdXN0IG9wdCBpbiB0byBjb250cmFjdCBmaXJzdCcpCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKICAgIGFwcF9vcHRlZF9pbgogICAgYXNzZXJ0IC8vIEFjY291bnQgbXVzdCBvcHQgaW4gdG8gY29udHJhY3QgZmlyc3QKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRoaXMubXlDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgKyAxCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czoyMwogICAgLy8gcHVibGljIG15Q291bnRlciA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ215X2NvdW50ZXInIH0pCiAgICBieXRlY18wIC8vICJteV9jb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo0MQogICAgLy8gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgPSB0aGlzLm15Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSArIDEKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgdHhuIFNlbmRlcgogICAgc3dhcAogICAgaW50Y18wIC8vIDEKICAgICsKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHB1YmxpYyBteUNvdW50ZXIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdteV9jb3VudGVyJyB9KQogICAgYnl0ZWNfMCAvLyAibXlfY291bnRlciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRoaXMubXlDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgKyAxCiAgICBzd2FwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyByZXR1cm4gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMSAvLyAwCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjIzCiAgICAvLyBwdWJsaWMgbXlDb3VudGVyID0gTG9jYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnbXlfY291bnRlcicgfSkKICAgIGJ5dGVjXzAgLy8gIm15X2NvdW50ZXIiCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyByZXR1cm4gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/MyCounter.arc56.json b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/MyCounter.arc56.json index 577fc9a..ad024d8 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/MyCounter.arc56.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/MyCounter.arc56.json @@ -128,7 +128,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrICJteV9jb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q291bnRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4MjkzMTRkOTUgMHhlNmRiZWQ3ZiAvLyBtZXRob2QgIm9wdEluKCl2b2lkIiwgbWV0aG9kICJpbmNyZW1lbnRNeUNvdW50ZXIoKXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fb3B0SW5fcm91dGVAMyBtYWluX2luY3JlbWVudE15Q291bnRlcl9yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb3VudGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9pbmNyZW1lbnRNeUNvdW50ZXJfcm91dGVANDoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MzYKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGluY3JlbWVudE15Q291bnRlcgogICAgaXRvYgogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX29wdEluX3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG9wdEluCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q291bnRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo6TXlDb3VudGVyLm9wdEluKCkgLT4gdm9pZDoKb3B0SW46CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjI5CiAgICAvLyB0aGlzLm15Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSA9IDAKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIHB1YmxpYyBteUNvdW50ZXIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdteV9jb3VudGVyJyB9KQogICAgYnl0ZWNfMCAvLyAibXlfY291bnRlciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIHRoaXMubXlDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gMAogICAgaW50Y18xIC8vIDAKICAgIGFwcF9sb2NhbF9wdXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6Ok15Q291bnRlci5pbmNyZW1lbnRNeUNvdW50ZXIoKSAtPiB1aW50NjQ6CmluY3JlbWVudE15Q291bnRlcjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MzgKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyLmlzT3B0ZWRJbihHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uSWQpLCAnQWNjb3VudCBtdXN0IG9wdCBpbiB0byBjb250cmFjdCBmaXJzdCcpCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKICAgIGFwcF9vcHRlZF9pbgogICAgYXNzZXJ0IC8vIEFjY291bnQgbXVzdCBvcHQgaW4gdG8gY29udHJhY3QgZmlyc3QKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NDAKICAgIC8vIHRoaXMubXlDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgKyAxCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gcHVibGljIG15Q291bnRlciA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ215X2NvdW50ZXInIH0pCiAgICBieXRlY18wIC8vICJteV9jb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo0MAogICAgLy8gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgPSB0aGlzLm15Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSArIDEKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgdHhuIFNlbmRlcgogICAgc3dhcAogICAgaW50Y18wIC8vIDEKICAgICsKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIHB1YmxpYyBteUNvdW50ZXIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdteV9jb3VudGVyJyB9KQogICAgYnl0ZWNfMCAvLyAibXlfY291bnRlciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NDAKICAgIC8vIHRoaXMubXlDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgKyAxCiAgICBzd2FwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyByZXR1cm4gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMSAvLyAwCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBwdWJsaWMgbXlDb3VudGVyID0gTG9jYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnbXlfY291bnRlcicgfSkKICAgIGJ5dGVjXzAgLy8gIm15X2NvdW50ZXIiCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyByZXR1cm4gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrICJteV9jb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gZXhwb3J0IGNsYXNzIE15Q291bnRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4MjkzMTRkOTUgMHhlNmRiZWQ3ZiAvLyBtZXRob2QgIm9wdEluKCl2b2lkIiwgbWV0aG9kICJpbmNyZW1lbnRNeUNvdW50ZXIoKXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fb3B0SW5fcm91dGVAMyBtYWluX2luY3JlbWVudE15Q291bnRlcl9yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjIxCiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb3VudGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9pbmNyZW1lbnRNeUNvdW50ZXJfcm91dGVANDoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGluY3JlbWVudE15Q291bnRlcgogICAgaXRvYgogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX29wdEluX3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG9wdEluCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gZXhwb3J0IGNsYXNzIE15Q291bnRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo6TXlDb3VudGVyLm9wdEluKCkgLT4gdm9pZDoKb3B0SW46CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyB0aGlzLm15Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSA9IDAKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHB1YmxpYyBteUNvdW50ZXIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdteV9jb3VudGVyJyB9KQogICAgYnl0ZWNfMCAvLyAibXlfY291bnRlciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIHRoaXMubXlDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gMAogICAgaW50Y18xIC8vIDAKICAgIGFwcF9sb2NhbF9wdXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6Ok15Q291bnRlci5pbmNyZW1lbnRNeUNvdW50ZXIoKSAtPiB1aW50NjQ6CmluY3JlbWVudE15Q291bnRlcjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyLmlzT3B0ZWRJbihHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uSWQpLCAnQWNjb3VudCBtdXN0IG9wdCBpbiB0byBjb250cmFjdCBmaXJzdCcpCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKICAgIGFwcF9vcHRlZF9pbgogICAgYXNzZXJ0IC8vIEFjY291bnQgbXVzdCBvcHQgaW4gdG8gY29udHJhY3QgZmlyc3QKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRoaXMubXlDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgKyAxCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czoyMwogICAgLy8gcHVibGljIG15Q291bnRlciA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ215X2NvdW50ZXInIH0pCiAgICBieXRlY18wIC8vICJteV9jb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo0MQogICAgLy8gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgPSB0aGlzLm15Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSArIDEKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgdHhuIFNlbmRlcgogICAgc3dhcAogICAgaW50Y18wIC8vIDEKICAgICsKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHB1YmxpYyBteUNvdW50ZXIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdteV9jb3VudGVyJyB9KQogICAgYnl0ZWNfMCAvLyAibXlfY291bnRlciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRoaXMubXlDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgKyAxCiAgICBzd2FwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyByZXR1cm4gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMSAvLyAwCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjIzCiAgICAvLyBwdWJsaWMgbXlDb3VudGVyID0gTG9jYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnbXlfY291bnRlcicgfSkKICAgIGJ5dGVjXzAgLy8gIm15X2NvdW50ZXIiCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyByZXR1cm4gdGhpcy5teUNvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/ReferenceAccountApp.approval.puya.map b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/ReferenceAccountApp.approval.puya.map index d1a2b70..0f60679 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/ReferenceAccountApp.approval.puya.map +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/ReferenceAccountApp.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "/Users/gabe.algo/Code/devportal-code-examples/projects/typescript-examples/contracts/ReferenceAccountApp/contract.algo.ts" ], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAiDA;;AAAA;;;AAAA;;;;;;;;;;;;AAAA;;;AAAA;;;;;;AAAA;;AA4BG;;AAAA;AAAA;AAAA;;AAAA;AA5BH;;;AAAA;AAAA;;AAAA;;;AAAA;AAAA;;AA4BG;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAvBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AALH;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAKE;;;AAEkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGQ;;;AAG8C;AAA5C;AAEtB;;;AACK;AAAP;AAAA;AAGF;;AAAA;AAAA;AASF;;;AAG4B;;AAAA;;AAA4C;AAA5C;AAEtB;;;AACK;AAAP;AAAA;AAGF;;AAAA;AAAA", + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAkDA;;AAAA;;;AAAA;;;;;;;;;;;;AAAA;;;AAAA;;;;;;AAAA;;AA4BG;;AAAA;AAAA;AAAA;;AAAA;AA5BH;;;AAAA;AAAA;;AAAA;;;AAAA;AAAA;;AA4BG;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAvBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AALH;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAKE;;;AAEkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGQ;;;AAG8C;AAA5C;AAEtB;;;AACK;AAAP;AAAA;AAGF;;AAAA;AAAA;AASF;;;AAG4B;;AAAA;;AAA4C;AAA5C;AAEtB;;;AACK;AAAP;AAAA;AAGF;;AAAA;AAAA", "op_pc_offset": 0, "pc_events": { "1": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/ReferenceAccountApp.approval.teal b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/ReferenceAccountApp.approval.teal index a56d0e1..6bdd092 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/ReferenceAccountApp.approval.teal +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/ReferenceAccountApp.approval.teal @@ -5,7 +5,7 @@ main: intcblock 0 1 bytecblock 0x151f7c75 "my_counter" - // contracts/ReferenceAccountApp/contract.algo.ts:50 + // contracts/ReferenceAccountApp/contract.algo.ts:51 // export default class ReferenceAccountApp extends Contract { txn NumAppArgs bz main_bare_routing@7 @@ -14,20 +14,20 @@ main: match main_getMyCounter_route@3 main_getMyCounterWithArg_route@4 main_after_if_else@11: - // contracts/ReferenceAccountApp/contract.algo.ts:50 + // contracts/ReferenceAccountApp/contract.algo.ts:51 // export default class ReferenceAccountApp extends Contract { intc_0 // 0 return main_getMyCounterWithArg_route@4: - // contracts/ReferenceAccountApp/contract.algo.ts:78 + // contracts/ReferenceAccountApp/contract.algo.ts:79 // @abimethod({ readonly: true }) txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // contracts/ReferenceAccountApp/contract.algo.ts:50 + // contracts/ReferenceAccountApp/contract.algo.ts:51 // export default class ReferenceAccountApp extends Contract { txna ApplicationArgs 1 btoi @@ -35,7 +35,7 @@ main_getMyCounterWithArg_route@4: txna ApplicationArgs 2 btoi txnas Applications - // contracts/ReferenceAccountApp/contract.algo.ts:78 + // contracts/ReferenceAccountApp/contract.algo.ts:79 // @abimethod({ readonly: true }) callsub getMyCounterWithArg itob @@ -47,7 +47,7 @@ main_getMyCounterWithArg_route@4: return main_getMyCounter_route@3: - // contracts/ReferenceAccountApp/contract.algo.ts:55 + // contracts/ReferenceAccountApp/contract.algo.ts:56 // @abimethod({ readonly: true }) txn OnCompletion ! @@ -64,7 +64,7 @@ main_getMyCounter_route@3: return main_bare_routing@7: - // contracts/ReferenceAccountApp/contract.algo.ts:50 + // contracts/ReferenceAccountApp/contract.algo.ts:51 // export default class ReferenceAccountApp extends Contract { txn OnCompletion bnz main_after_if_else@11 @@ -77,31 +77,31 @@ main_bare_routing@7: // contracts/ReferenceAccountApp/contract.algo.ts::ReferenceAccountApp.getMyCounter() -> uint64: getMyCounter: - // contracts/ReferenceAccountApp/contract.algo.ts:55-56 + // contracts/ReferenceAccountApp/contract.algo.ts:56-57 // @abimethod({ readonly: true }) // public getMyCounter(): uint64 { proto 0 1 - // contracts/ReferenceAccountApp/contract.algo.ts:57 + // contracts/ReferenceAccountApp/contract.algo.ts:58 // const address = new Address('WMHF4FLJNKY2BPFK7YPV5ID6OZ7LVDB2B66ZTXEAMLL2NX4WJZRJFVX66M') pushbytes base32(WMHF4FLJNKY2BPFK7YPV5ID6OZ7LVDB2B66ZTXEAMLL2NX4WJZRA) // addr WMHF4FLJNKY2BPFK7YPV5ID6OZ7LVDB2B66ZTXEAMLL2NX4WJZRJFVX66M - // contracts/ReferenceAccountApp/contract.algo.ts:60 + // contracts/ReferenceAccountApp/contract.algo.ts:61 // const app = Application(1717) // Replace with your application id pushint 1717 // 1717 - // contracts/ReferenceAccountApp/contract.algo.ts:63 + // contracts/ReferenceAccountApp/contract.algo.ts:64 // const [value, hasValue] = op.AppLocal.getExUint64(account, app, Bytes('my_counter')) bytec_1 // "my_counter" app_local_get_ex - // contracts/ReferenceAccountApp/contract.algo.ts:65 + // contracts/ReferenceAccountApp/contract.algo.ts:66 // if (!hasValue) { bnz getMyCounter_after_if_else@2 - // contracts/ReferenceAccountApp/contract.algo.ts:66 + // contracts/ReferenceAccountApp/contract.algo.ts:67 // return 0 intc_0 // 0 swap retsub getMyCounter_after_if_else@2: - // contracts/ReferenceAccountApp/contract.algo.ts:69 + // contracts/ReferenceAccountApp/contract.algo.ts:70 // return value frame_dig 0 swap @@ -110,27 +110,27 @@ getMyCounter_after_if_else@2: // contracts/ReferenceAccountApp/contract.algo.ts::ReferenceAccountApp.getMyCounterWithArg(account: bytes, app: uint64) -> uint64: getMyCounterWithArg: - // contracts/ReferenceAccountApp/contract.algo.ts:78-79 + // contracts/ReferenceAccountApp/contract.algo.ts:79-80 // @abimethod({ readonly: true }) // public getMyCounterWithArg(account: Account, app: Application): uint64 { proto 2 1 - // contracts/ReferenceAccountApp/contract.algo.ts:81 + // contracts/ReferenceAccountApp/contract.algo.ts:82 // const [value, hasValue] = op.AppLocal.getExUint64(account, app, Bytes('my_counter')) frame_dig -2 frame_dig -1 bytec_1 // "my_counter" app_local_get_ex - // contracts/ReferenceAccountApp/contract.algo.ts:83 + // contracts/ReferenceAccountApp/contract.algo.ts:84 // if (!hasValue) { bnz getMyCounterWithArg_after_if_else@2 - // contracts/ReferenceAccountApp/contract.algo.ts:84 + // contracts/ReferenceAccountApp/contract.algo.ts:85 // return 0 intc_0 // 0 swap retsub getMyCounterWithArg_after_if_else@2: - // contracts/ReferenceAccountApp/contract.algo.ts:87 + // contracts/ReferenceAccountApp/contract.algo.ts:88 // return value frame_dig 0 swap diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/ReferenceAccountApp.arc32.json b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/ReferenceAccountApp.arc32.json index 5cc819a..aebebf2 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/ReferenceAccountApp.arc32.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/ReferenceAccountApp.arc32.json @@ -14,7 +14,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgIm15X2NvdW50ZXIiCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBY2NvdW50QXBwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHg4N2FkNzBiZiAweDMxMzk4ZjU3IC8vIG1ldGhvZCAiZ2V0TXlDb3VudGVyKCl1aW50NjQiLCBtZXRob2QgImdldE15Q291bnRlcldpdGhBcmcoYWNjb3VudCxhcHBsaWNhdGlvbil1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2dldE15Q291bnRlcl9yb3V0ZUAzIG1haW5fZ2V0TXlDb3VudGVyV2l0aEFyZ19yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBY2NvdW50QXBwIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRNeUNvdW50ZXJXaXRoQXJnX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjc4CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFwcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NzgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXRNeUNvdW50ZXJXaXRoQXJnCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldE15Q291bnRlcl9yb3V0ZUAzOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo1NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0TXlDb3VudGVyCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFwcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQWNjb3VudEFwcC5nZXRNeUNvdW50ZXIoKSAtPiB1aW50NjQ6CmdldE15Q291bnRlcjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NTUtNTYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldE15Q291bnRlcigpOiB1aW50NjQgewogICAgcHJvdG8gMCAxCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjb25zdCBhZGRyZXNzID0gbmV3IEFkZHJlc3MoJ1dNSEY0RkxKTktZMkJQRks3WVBWNUlENk9aN0xWREIyQjY2WlRYRUFNTEwyTlg0V0paUkpGVlg2Nk0nKQogICAgcHVzaGJ5dGVzIGJhc2UzMihXTUhGNEZMSk5LWTJCUEZLN1lQVjVJRDZPWjdMVkRCMkI2NlpUWEVBTUxMMk5YNFdKWlJBKSAvLyBhZGRyIFdNSEY0RkxKTktZMkJQRks3WVBWNUlENk9aN0xWREIyQjY2WlRYRUFNTEwyTlg0V0paUkpGVlg2Nk0KICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGNvbnN0IGFwcCA9IEFwcGxpY2F0aW9uKDE3MTcpIC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGFwcGxpY2F0aW9uIGlkCiAgICBwdXNoaW50IDE3MTcgLy8gMTcxNwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gY29uc3QgW3ZhbHVlLCBoYXNWYWx1ZV0gPSBvcC5BcHBMb2NhbC5nZXRFeFVpbnQ2NChhY2NvdW50LCBhcHAsIEJ5dGVzKCdteV9jb3VudGVyJykpCiAgICBieXRlY18xIC8vICJteV9jb3VudGVyIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo2NQogICAgLy8gaWYgKCFoYXNWYWx1ZSkgewogICAgYm56IGdldE15Q291bnRlcl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIHJldHVybiAwCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgcmV0c3ViCgpnZXRNeUNvdW50ZXJfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo2OQogICAgLy8gcmV0dXJuIHZhbHVlCiAgICBmcmFtZV9kaWcgMAogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQWNjb3VudEFwcC5nZXRNeUNvdW50ZXJXaXRoQXJnKGFjY291bnQ6IGJ5dGVzLCBhcHA6IHVpbnQ2NCkgLT4gdWludDY0OgpnZXRNeUNvdW50ZXJXaXRoQXJnOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo3OC03OQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0TXlDb3VudGVyV2l0aEFyZyhhY2NvdW50OiBBY2NvdW50LCBhcHA6IEFwcGxpY2F0aW9uKTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo4MQogICAgLy8gY29uc3QgW3ZhbHVlLCBoYXNWYWx1ZV0gPSBvcC5BcHBMb2NhbC5nZXRFeFVpbnQ2NChhY2NvdW50LCBhcHAsIEJ5dGVzKCdteV9jb3VudGVyJykpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYnl0ZWNfMSAvLyAibXlfY291bnRlciIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6ODMKICAgIC8vIGlmICghaGFzVmFsdWUpIHsKICAgIGJueiBnZXRNeUNvdW50ZXJXaXRoQXJnX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo4NAogICAgLy8gcmV0dXJuIDAKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmdldE15Q291bnRlcldpdGhBcmdfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo4NwogICAgLy8gcmV0dXJuIHZhbHVlCiAgICBmcmFtZV9kaWcgMAogICAgc3dhcAogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgIm15X2NvdW50ZXIiCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBY2NvdW50QXBwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHg4N2FkNzBiZiAweDMxMzk4ZjU3IC8vIG1ldGhvZCAiZ2V0TXlDb3VudGVyKCl1aW50NjQiLCBtZXRob2QgImdldE15Q291bnRlcldpdGhBcmcoYWNjb3VudCxhcHBsaWNhdGlvbil1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2dldE15Q291bnRlcl9yb3V0ZUAzIG1haW5fZ2V0TXlDb3VudGVyV2l0aEFyZ19yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBY2NvdW50QXBwIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRNeUNvdW50ZXJXaXRoQXJnX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjc5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFwcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NzkKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXRNeUNvdW50ZXJXaXRoQXJnCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldE15Q291bnRlcl9yb3V0ZUAzOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo1NgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0TXlDb3VudGVyCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFwcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQWNjb3VudEFwcC5nZXRNeUNvdW50ZXIoKSAtPiB1aW50NjQ6CmdldE15Q291bnRlcjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NTYtNTcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldE15Q291bnRlcigpOiB1aW50NjQgewogICAgcHJvdG8gMCAxCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjb25zdCBhZGRyZXNzID0gbmV3IEFkZHJlc3MoJ1dNSEY0RkxKTktZMkJQRks3WVBWNUlENk9aN0xWREIyQjY2WlRYRUFNTEwyTlg0V0paUkpGVlg2Nk0nKQogICAgcHVzaGJ5dGVzIGJhc2UzMihXTUhGNEZMSk5LWTJCUEZLN1lQVjVJRDZPWjdMVkRCMkI2NlpUWEVBTUxMMk5YNFdKWlJBKSAvLyBhZGRyIFdNSEY0RkxKTktZMkJQRks3WVBWNUlENk9aN0xWREIyQjY2WlRYRUFNTEwyTlg0V0paUkpGVlg2Nk0KICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIGNvbnN0IGFwcCA9IEFwcGxpY2F0aW9uKDE3MTcpIC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGFwcGxpY2F0aW9uIGlkCiAgICBwdXNoaW50IDE3MTcgLy8gMTcxNwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo2NAogICAgLy8gY29uc3QgW3ZhbHVlLCBoYXNWYWx1ZV0gPSBvcC5BcHBMb2NhbC5nZXRFeFVpbnQ2NChhY2NvdW50LCBhcHAsIEJ5dGVzKCdteV9jb3VudGVyJykpCiAgICBieXRlY18xIC8vICJteV9jb3VudGVyIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo2NgogICAgLy8gaWYgKCFoYXNWYWx1ZSkgewogICAgYm56IGdldE15Q291bnRlcl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIHJldHVybiAwCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgcmV0c3ViCgpnZXRNeUNvdW50ZXJfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo3MAogICAgLy8gcmV0dXJuIHZhbHVlCiAgICBmcmFtZV9kaWcgMAogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQWNjb3VudEFwcC5nZXRNeUNvdW50ZXJXaXRoQXJnKGFjY291bnQ6IGJ5dGVzLCBhcHA6IHVpbnQ2NCkgLT4gdWludDY0OgpnZXRNeUNvdW50ZXJXaXRoQXJnOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo3OS04MAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0TXlDb3VudGVyV2l0aEFyZyhhY2NvdW50OiBBY2NvdW50LCBhcHA6IEFwcGxpY2F0aW9uKTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gY29uc3QgW3ZhbHVlLCBoYXNWYWx1ZV0gPSBvcC5BcHBMb2NhbC5nZXRFeFVpbnQ2NChhY2NvdW50LCBhcHAsIEJ5dGVzKCdteV9jb3VudGVyJykpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYnl0ZWNfMSAvLyAibXlfY291bnRlciIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6ODQKICAgIC8vIGlmICghaGFzVmFsdWUpIHsKICAgIGJueiBnZXRNeUNvdW50ZXJXaXRoQXJnX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo4NQogICAgLy8gcmV0dXJuIDAKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmdldE15Q291bnRlcldpdGhBcmdfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo4OAogICAgLy8gcmV0dXJuIHZhbHVlCiAgICBmcmFtZV9kaWcgMAogICAgc3dhcAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/ReferenceAccountApp.arc56.json b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/ReferenceAccountApp.arc56.json index e2ece53..730c0f0 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/ReferenceAccountApp.arc56.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountApp/ReferenceAccountApp.arc56.json @@ -116,7 +116,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgIm15X2NvdW50ZXIiCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBY2NvdW50QXBwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHg4N2FkNzBiZiAweDMxMzk4ZjU3IC8vIG1ldGhvZCAiZ2V0TXlDb3VudGVyKCl1aW50NjQiLCBtZXRob2QgImdldE15Q291bnRlcldpdGhBcmcoYWNjb3VudCxhcHBsaWNhdGlvbil1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2dldE15Q291bnRlcl9yb3V0ZUAzIG1haW5fZ2V0TXlDb3VudGVyV2l0aEFyZ19yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBY2NvdW50QXBwIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRNeUNvdW50ZXJXaXRoQXJnX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjc4CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFwcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NzgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXRNeUNvdW50ZXJXaXRoQXJnCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldE15Q291bnRlcl9yb3V0ZUAzOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo1NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0TXlDb3VudGVyCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFwcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQWNjb3VudEFwcC5nZXRNeUNvdW50ZXIoKSAtPiB1aW50NjQ6CmdldE15Q291bnRlcjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NTUtNTYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldE15Q291bnRlcigpOiB1aW50NjQgewogICAgcHJvdG8gMCAxCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjb25zdCBhZGRyZXNzID0gbmV3IEFkZHJlc3MoJ1dNSEY0RkxKTktZMkJQRks3WVBWNUlENk9aN0xWREIyQjY2WlRYRUFNTEwyTlg0V0paUkpGVlg2Nk0nKQogICAgcHVzaGJ5dGVzIGJhc2UzMihXTUhGNEZMSk5LWTJCUEZLN1lQVjVJRDZPWjdMVkRCMkI2NlpUWEVBTUxMMk5YNFdKWlJBKSAvLyBhZGRyIFdNSEY0RkxKTktZMkJQRks3WVBWNUlENk9aN0xWREIyQjY2WlRYRUFNTEwyTlg0V0paUkpGVlg2Nk0KICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGNvbnN0IGFwcCA9IEFwcGxpY2F0aW9uKDE3MTcpIC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGFwcGxpY2F0aW9uIGlkCiAgICBwdXNoaW50IDE3MTcgLy8gMTcxNwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gY29uc3QgW3ZhbHVlLCBoYXNWYWx1ZV0gPSBvcC5BcHBMb2NhbC5nZXRFeFVpbnQ2NChhY2NvdW50LCBhcHAsIEJ5dGVzKCdteV9jb3VudGVyJykpCiAgICBieXRlY18xIC8vICJteV9jb3VudGVyIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo2NQogICAgLy8gaWYgKCFoYXNWYWx1ZSkgewogICAgYm56IGdldE15Q291bnRlcl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIHJldHVybiAwCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgcmV0c3ViCgpnZXRNeUNvdW50ZXJfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo2OQogICAgLy8gcmV0dXJuIHZhbHVlCiAgICBmcmFtZV9kaWcgMAogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQWNjb3VudEFwcC5nZXRNeUNvdW50ZXJXaXRoQXJnKGFjY291bnQ6IGJ5dGVzLCBhcHA6IHVpbnQ2NCkgLT4gdWludDY0OgpnZXRNeUNvdW50ZXJXaXRoQXJnOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo3OC03OQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0TXlDb3VudGVyV2l0aEFyZyhhY2NvdW50OiBBY2NvdW50LCBhcHA6IEFwcGxpY2F0aW9uKTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo4MQogICAgLy8gY29uc3QgW3ZhbHVlLCBoYXNWYWx1ZV0gPSBvcC5BcHBMb2NhbC5nZXRFeFVpbnQ2NChhY2NvdW50LCBhcHAsIEJ5dGVzKCdteV9jb3VudGVyJykpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYnl0ZWNfMSAvLyAibXlfY291bnRlciIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6ODMKICAgIC8vIGlmICghaGFzVmFsdWUpIHsKICAgIGJueiBnZXRNeUNvdW50ZXJXaXRoQXJnX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo4NAogICAgLy8gcmV0dXJuIDAKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmdldE15Q291bnRlcldpdGhBcmdfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo4NwogICAgLy8gcmV0dXJuIHZhbHVlCiAgICBmcmFtZV9kaWcgMAogICAgc3dhcAogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgIm15X2NvdW50ZXIiCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBY2NvdW50QXBwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHg4N2FkNzBiZiAweDMxMzk4ZjU3IC8vIG1ldGhvZCAiZ2V0TXlDb3VudGVyKCl1aW50NjQiLCBtZXRob2QgImdldE15Q291bnRlcldpdGhBcmcoYWNjb3VudCxhcHBsaWNhdGlvbil1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2dldE15Q291bnRlcl9yb3V0ZUAzIG1haW5fZ2V0TXlDb3VudGVyV2l0aEFyZ19yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBY2NvdW50QXBwIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRNeUNvdW50ZXJXaXRoQXJnX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjc5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFwcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NzkKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXRNeUNvdW50ZXJXaXRoQXJnCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldE15Q291bnRlcl9yb3V0ZUAzOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo1NgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0TXlDb3VudGVyCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFwcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQWNjb3VudEFwcC5nZXRNeUNvdW50ZXIoKSAtPiB1aW50NjQ6CmdldE15Q291bnRlcjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NTYtNTcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldE15Q291bnRlcigpOiB1aW50NjQgewogICAgcHJvdG8gMCAxCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFwcC9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjb25zdCBhZGRyZXNzID0gbmV3IEFkZHJlc3MoJ1dNSEY0RkxKTktZMkJQRks3WVBWNUlENk9aN0xWREIyQjY2WlRYRUFNTEwyTlg0V0paUkpGVlg2Nk0nKQogICAgcHVzaGJ5dGVzIGJhc2UzMihXTUhGNEZMSk5LWTJCUEZLN1lQVjVJRDZPWjdMVkRCMkI2NlpUWEVBTUxMMk5YNFdKWlJBKSAvLyBhZGRyIFdNSEY0RkxKTktZMkJQRks3WVBWNUlENk9aN0xWREIyQjY2WlRYRUFNTEwyTlg0V0paUkpGVlg2Nk0KICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIGNvbnN0IGFwcCA9IEFwcGxpY2F0aW9uKDE3MTcpIC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGFwcGxpY2F0aW9uIGlkCiAgICBwdXNoaW50IDE3MTcgLy8gMTcxNwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo2NAogICAgLy8gY29uc3QgW3ZhbHVlLCBoYXNWYWx1ZV0gPSBvcC5BcHBMb2NhbC5nZXRFeFVpbnQ2NChhY2NvdW50LCBhcHAsIEJ5dGVzKCdteV9jb3VudGVyJykpCiAgICBieXRlY18xIC8vICJteV9jb3VudGVyIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo2NgogICAgLy8gaWYgKCFoYXNWYWx1ZSkgewogICAgYm56IGdldE15Q291bnRlcl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIHJldHVybiAwCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgcmV0c3ViCgpnZXRNeUNvdW50ZXJfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo3MAogICAgLy8gcmV0dXJuIHZhbHVlCiAgICBmcmFtZV9kaWcgMAogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQWNjb3VudEFwcC5nZXRNeUNvdW50ZXJXaXRoQXJnKGFjY291bnQ6IGJ5dGVzLCBhcHA6IHVpbnQ2NCkgLT4gdWludDY0OgpnZXRNeUNvdW50ZXJXaXRoQXJnOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo3OS04MAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0TXlDb3VudGVyV2l0aEFyZyhhY2NvdW50OiBBY2NvdW50LCBhcHA6IEFwcGxpY2F0aW9uKTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gY29uc3QgW3ZhbHVlLCBoYXNWYWx1ZV0gPSBvcC5BcHBMb2NhbC5nZXRFeFVpbnQ2NChhY2NvdW50LCBhcHAsIEJ5dGVzKCdteV9jb3VudGVyJykpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYnl0ZWNfMSAvLyAibXlfY291bnRlciIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXBwL2NvbnRyYWN0LmFsZ28udHM6ODQKICAgIC8vIGlmICghaGFzVmFsdWUpIHsKICAgIGJueiBnZXRNeUNvdW50ZXJXaXRoQXJnX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo4NQogICAgLy8gcmV0dXJuIDAKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmdldE15Q291bnRlcldpdGhBcmdfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBcHAvY29udHJhY3QuYWxnby50czo4OAogICAgLy8gcmV0dXJuIHZhbHVlCiAgICBmcmFtZV9kaWcgMAogICAgc3dhcAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountAsset/ReferenceAccountAsset.approval.puya.map b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountAsset/ReferenceAccountAsset.approval.puya.map index 5230a0d..d19855c 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountAsset/ReferenceAccountAsset.approval.puya.map +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountAsset/ReferenceAccountAsset.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "/Users/gabe.algo/Code/devportal-code-examples/projects/typescript-examples/contracts/ReferenceAccountAsset/contract.algo.ts" ], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA;;AAAA;;;AAAA;;;;;;;;;;;;AAAA;;;AAAA;;;;;;AAAA;;;AAuBG;;AAAA;AAAA;AAAA;;AAAA;AAvBH;;;AAAA;AAAA;;AAAA;;;AAAA;AAAA;;AAuBG;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAlBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AALH;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAOoB;AAGI;AAEb;;AAAA;;AAAP;AALgB;AAGI;AAIb;;AAAA;AAAP;AASF;;;AAES;;AAAA;;AAAA;;AAAA;;AAAP;AAEO;;AAAA;;AAAA;;AAAA;AAAP", + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA;;AAAA;;;AAAA;;;;;;;;;;;;AAAA;;;AAAA;;;;;;AAAA;;;AAuBG;;AAAA;AAAA;AAAA;;AAAA;AAvBH;;;AAAA;AAAA;;AAAA;;;AAAA;AAAA;;AAuBG;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAlBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AALH;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAOoB;AAGI;AAEb;;AAAA;;AAAP;AALgB;AAGI;AAIb;;AAAA;AAAP;AASF;;;AAES;;AAAA;;AAAA;;AAAA;;AAAP;AAEO;;AAAA;;AAAA;;AAAA;AAAP", "op_pc_offset": 0, "pc_events": { "1": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountAsset/ReferenceAccountAsset.approval.teal b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountAsset/ReferenceAccountAsset.approval.teal index 1f2bae1..0613728 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountAsset/ReferenceAccountAsset.approval.teal +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountAsset/ReferenceAccountAsset.approval.teal @@ -5,7 +5,7 @@ main: intcblock 1 1472 bytecblock 0x151f7c75 base32(R3J76MDPEXQEWBV2LQ6FLQ4PYC4QXNHHPIL2BX2KSFU4WUNJJMDA) - // contracts/ReferenceAccountAsset/contract.algo.ts:7 + // contracts/ReferenceAccountAsset/contract.algo.ts:8 // export default class ReferenceAccountAsset extends Contract { txn NumAppArgs bz main_bare_routing@7 @@ -14,20 +14,20 @@ main: match main_getAssetBalance_route@3 main_getAssetBalanceWithArg_route@4 main_after_if_else@11: - // contracts/ReferenceAccountAsset/contract.algo.ts:7 + // contracts/ReferenceAccountAsset/contract.algo.ts:8 // export default class ReferenceAccountAsset extends Contract { pushint 0 // 0 return main_getAssetBalanceWithArg_route@4: - // contracts/ReferenceAccountAsset/contract.algo.ts:30 + // contracts/ReferenceAccountAsset/contract.algo.ts:31 // @abimethod({ readonly: true }) txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // contracts/ReferenceAccountAsset/contract.algo.ts:7 + // contracts/ReferenceAccountAsset/contract.algo.ts:8 // export default class ReferenceAccountAsset extends Contract { txna ApplicationArgs 1 btoi @@ -35,7 +35,7 @@ main_getAssetBalanceWithArg_route@4: txna ApplicationArgs 2 btoi txnas Assets - // contracts/ReferenceAccountAsset/contract.algo.ts:30 + // contracts/ReferenceAccountAsset/contract.algo.ts:31 // @abimethod({ readonly: true }) callsub getAssetBalanceWithArg itob @@ -47,7 +47,7 @@ main_getAssetBalanceWithArg_route@4: return main_getAssetBalance_route@3: - // contracts/ReferenceAccountAsset/contract.algo.ts:12 + // contracts/ReferenceAccountAsset/contract.algo.ts:13 // @abimethod({ readonly: true }) txn OnCompletion ! @@ -64,7 +64,7 @@ main_getAssetBalance_route@3: return main_bare_routing@7: - // contracts/ReferenceAccountAsset/contract.algo.ts:7 + // contracts/ReferenceAccountAsset/contract.algo.ts:8 // export default class ReferenceAccountAsset extends Contract { txn OnCompletion bnz main_after_if_else@11 @@ -77,24 +77,24 @@ main_bare_routing@7: // contracts/ReferenceAccountAsset/contract.algo.ts::ReferenceAccountAsset.getAssetBalance() -> uint64: getAssetBalance: - // contracts/ReferenceAccountAsset/contract.algo.ts:14 + // contracts/ReferenceAccountAsset/contract.algo.ts:15 // const address = new Address('R3J76MDPEXQEWBV2LQ6FLQ4PYC4QXNHHPIL2BX2KSFU4WUNJJMDBTLRNEM') // Replace with your account address bytec_1 // addr R3J76MDPEXQEWBV2LQ6FLQ4PYC4QXNHHPIL2BX2KSFU4WUNJJMDBTLRNEM - // contracts/ReferenceAccountAsset/contract.algo.ts:17 + // contracts/ReferenceAccountAsset/contract.algo.ts:18 // const asset = Asset(1472) // Replace with your asset ID intc_1 // 1472 - // contracts/ReferenceAccountAsset/contract.algo.ts:19 + // contracts/ReferenceAccountAsset/contract.algo.ts:20 // assert(account.isOptedIn(asset), 'Account is not opted in to the asset') asset_holding_get AssetBalance bury 1 assert // Account is not opted in to the asset - // contracts/ReferenceAccountAsset/contract.algo.ts:14 + // contracts/ReferenceAccountAsset/contract.algo.ts:15 // const address = new Address('R3J76MDPEXQEWBV2LQ6FLQ4PYC4QXNHHPIL2BX2KSFU4WUNJJMDBTLRNEM') // Replace with your account address bytec_1 // addr R3J76MDPEXQEWBV2LQ6FLQ4PYC4QXNHHPIL2BX2KSFU4WUNJJMDBTLRNEM - // contracts/ReferenceAccountAsset/contract.algo.ts:17 + // contracts/ReferenceAccountAsset/contract.algo.ts:18 // const asset = Asset(1472) // Replace with your asset ID intc_1 // 1472 - // contracts/ReferenceAccountAsset/contract.algo.ts:21 + // contracts/ReferenceAccountAsset/contract.algo.ts:22 // return asset.balance(account) asset_holding_get AssetBalance assert // account opted into asset @@ -103,18 +103,18 @@ getAssetBalance: // contracts/ReferenceAccountAsset/contract.algo.ts::ReferenceAccountAsset.getAssetBalanceWithArg(account: bytes, asset: uint64) -> uint64: getAssetBalanceWithArg: - // contracts/ReferenceAccountAsset/contract.algo.ts:30-31 + // contracts/ReferenceAccountAsset/contract.algo.ts:31-32 // @abimethod({ readonly: true }) // public getAssetBalanceWithArg(account: Account, asset: Asset) { proto 2 1 - // contracts/ReferenceAccountAsset/contract.algo.ts:32 + // contracts/ReferenceAccountAsset/contract.algo.ts:33 // assert(account.isOptedIn(asset), 'Account is not opted in to the asset') frame_dig -2 frame_dig -1 asset_holding_get AssetBalance bury 1 assert // Account is not opted in to the asset - // contracts/ReferenceAccountAsset/contract.algo.ts:34 + // contracts/ReferenceAccountAsset/contract.algo.ts:35 // return asset.balance(account) frame_dig -2 frame_dig -1 diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountAsset/ReferenceAccountAsset.arc32.json b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountAsset/ReferenceAccountAsset.arc32.json index 1e326ba..7fb16dd 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountAsset/ReferenceAccountAsset.arc32.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountAsset/ReferenceAccountAsset.arc32.json @@ -14,7 +14,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAxNDcyCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgYmFzZTMyKFIzSjc2TURQRVhRRVdCVjJMUTZGTFE0UFlDNFFYTkhIUElMMkJYMktTRlU0V1VOSkpNREEpCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFzc2V0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHg2ZDY4ZTU0ZCAweDgyNjRiNDA1IC8vIG1ldGhvZCAiZ2V0QXNzZXRCYWxhbmNlKCl1aW50NjQiLCBtZXRob2QgImdldEFzc2V0QmFsYW5jZVdpdGhBcmcoYWNjb3VudCxhc3NldCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2dldEFzc2V0QmFsYW5jZV9yb3V0ZUAzIG1haW5fZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZ19yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFzc2V0IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRBc3NldEJhbGFuY2VXaXRoQXJnX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFzc2V0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRBc3NldEJhbGFuY2Vfcm91dGVAMzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czoxMgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0QXNzZXRCYWxhbmNlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZUFjY291bnRBc3NldCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBY2NvdW50QXNzZXQuZ2V0QXNzZXRCYWxhbmNlKCkgLT4gdWludDY0OgpnZXRBc3NldEJhbGFuY2U6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MTQKICAgIC8vIGNvbnN0IGFkZHJlc3MgPSBuZXcgQWRkcmVzcygnUjNKNzZNRFBFWFFFV0JWMkxRNkZMUTRQWUM0UVhOSEhQSUwyQlgyS1NGVTRXVU5KSk1EQlRMUk5FTScpIC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGFjY291bnQgYWRkcmVzcwogICAgYnl0ZWNfMSAvLyBhZGRyIFIzSjc2TURQRVhRRVdCVjJMUTZGTFE0UFlDNFFYTkhIUElMMkJYMktTRlU0V1VOSkpNREJUTFJORU0KICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czoxNwogICAgLy8gY29uc3QgYXNzZXQgPSBBc3NldCgxNDcyKSAvLyBSZXBsYWNlIHdpdGggeW91ciBhc3NldCBJRAogICAgaW50Y18xIC8vIDE0NzIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gYXNzZXJ0KGFjY291bnQuaXNPcHRlZEluKGFzc2V0KSwgJ0FjY291bnQgaXMgbm90IG9wdGVkIGluIHRvIHRoZSBhc3NldCcpCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFjY291bnQgaXMgbm90IG9wdGVkIGluIHRvIHRoZSBhc3NldAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjE0CiAgICAvLyBjb25zdCBhZGRyZXNzID0gbmV3IEFkZHJlc3MoJ1IzSjc2TURQRVhRRVdCVjJMUTZGTFE0UFlDNFFYTkhIUElMMkJYMktTRlU0V1VOSkpNREJUTFJORU0nKSAvLyBSZXBsYWNlIHdpdGggeW91ciBhY2NvdW50IGFkZHJlc3MKICAgIGJ5dGVjXzEgLy8gYWRkciBSM0o3Nk1EUEVYUUVXQlYyTFE2RkxRNFBZQzRRWE5ISFBJTDJCWDJLU0ZVNFdVTkpKTURCVExSTkVNCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGNvbnN0IGFzc2V0ID0gQXNzZXQoMTQ3MikgLy8gUmVwbGFjZSB3aXRoIHlvdXIgYXNzZXQgSUQKICAgIGludGNfMSAvLyAxNDcyCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MjEKICAgIC8vIHJldHVybiBhc3NldC5iYWxhbmNlKGFjY291bnQpCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IG9wdGVkIGludG8gYXNzZXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQWNjb3VudEFzc2V0LmdldEFzc2V0QmFsYW5jZVdpdGhBcmcoYWNjb3VudDogYnl0ZXMsIGFzc2V0OiB1aW50NjQpIC0+IHVpbnQ2NDoKZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czozMC0zMQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZyhhY2NvdW50OiBBY2NvdW50LCBhc3NldDogQXNzZXQpIHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjMyCiAgICAvLyBhc3NlcnQoYWNjb3VudC5pc09wdGVkSW4oYXNzZXQpLCAnQWNjb3VudCBpcyBub3Qgb3B0ZWQgaW4gdG8gdGhlIGFzc2V0JykKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFjY291bnQgaXMgbm90IG9wdGVkIGluIHRvIHRoZSBhc3NldAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjM0CiAgICAvLyByZXR1cm4gYXNzZXQuYmFsYW5jZShhY2NvdW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgb3B0ZWQgaW50byBhc3NldAogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAxNDcyCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgYmFzZTMyKFIzSjc2TURQRVhRRVdCVjJMUTZGTFE0UFlDNFFYTkhIUElMMkJYMktTRlU0V1VOSkpNREEpCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFzc2V0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHg2ZDY4ZTU0ZCAweDgyNjRiNDA1IC8vIG1ldGhvZCAiZ2V0QXNzZXRCYWxhbmNlKCl1aW50NjQiLCBtZXRob2QgImdldEFzc2V0QmFsYW5jZVdpdGhBcmcoYWNjb3VudCxhc3NldCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2dldEFzc2V0QmFsYW5jZV9yb3V0ZUAzIG1haW5fZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZ19yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFzc2V0IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRBc3NldEJhbGFuY2VXaXRoQXJnX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MzEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFzc2V0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRBc3NldEJhbGFuY2Vfcm91dGVAMzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czoxMwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0QXNzZXRCYWxhbmNlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZUFjY291bnRBc3NldCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBY2NvdW50QXNzZXQuZ2V0QXNzZXRCYWxhbmNlKCkgLT4gdWludDY0OgpnZXRBc3NldEJhbGFuY2U6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MTUKICAgIC8vIGNvbnN0IGFkZHJlc3MgPSBuZXcgQWRkcmVzcygnUjNKNzZNRFBFWFFFV0JWMkxRNkZMUTRQWUM0UVhOSEhQSUwyQlgyS1NGVTRXVU5KSk1EQlRMUk5FTScpIC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGFjY291bnQgYWRkcmVzcwogICAgYnl0ZWNfMSAvLyBhZGRyIFIzSjc2TURQRVhRRVdCVjJMUTZGTFE0UFlDNFFYTkhIUElMMkJYMktTRlU0V1VOSkpNREJUTFJORU0KICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29uc3QgYXNzZXQgPSBBc3NldCgxNDcyKSAvLyBSZXBsYWNlIHdpdGggeW91ciBhc3NldCBJRAogICAgaW50Y18xIC8vIDE0NzIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gYXNzZXJ0KGFjY291bnQuaXNPcHRlZEluKGFzc2V0KSwgJ0FjY291bnQgaXMgbm90IG9wdGVkIGluIHRvIHRoZSBhc3NldCcpCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFjY291bnQgaXMgbm90IG9wdGVkIGluIHRvIHRoZSBhc3NldAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjE1CiAgICAvLyBjb25zdCBhZGRyZXNzID0gbmV3IEFkZHJlc3MoJ1IzSjc2TURQRVhRRVdCVjJMUTZGTFE0UFlDNFFYTkhIUElMMkJYMktTRlU0V1VOSkpNREJUTFJORU0nKSAvLyBSZXBsYWNlIHdpdGggeW91ciBhY2NvdW50IGFkZHJlc3MKICAgIGJ5dGVjXzEgLy8gYWRkciBSM0o3Nk1EUEVYUUVXQlYyTFE2RkxRNFBZQzRRWE5ISFBJTDJCWDJLU0ZVNFdVTkpKTURCVExSTkVNCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnN0IGFzc2V0ID0gQXNzZXQoMTQ3MikgLy8gUmVwbGFjZSB3aXRoIHlvdXIgYXNzZXQgSUQKICAgIGludGNfMSAvLyAxNDcyCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIHJldHVybiBhc3NldC5iYWxhbmNlKGFjY291bnQpCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IG9wdGVkIGludG8gYXNzZXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQWNjb3VudEFzc2V0LmdldEFzc2V0QmFsYW5jZVdpdGhBcmcoYWNjb3VudDogYnl0ZXMsIGFzc2V0OiB1aW50NjQpIC0+IHVpbnQ2NDoKZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czozMS0zMgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZyhhY2NvdW50OiBBY2NvdW50LCBhc3NldDogQXNzZXQpIHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBhc3NlcnQoYWNjb3VudC5pc09wdGVkSW4oYXNzZXQpLCAnQWNjb3VudCBpcyBub3Qgb3B0ZWQgaW4gdG8gdGhlIGFzc2V0JykKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFjY291bnQgaXMgbm90IG9wdGVkIGluIHRvIHRoZSBhc3NldAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjM1CiAgICAvLyByZXR1cm4gYXNzZXQuYmFsYW5jZShhY2NvdW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgb3B0ZWQgaW50byBhc3NldAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountAsset/ReferenceAccountAsset.arc56.json b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountAsset/ReferenceAccountAsset.arc56.json index 4062090..64146c2 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountAsset/ReferenceAccountAsset.arc56.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAccountAsset/ReferenceAccountAsset.arc56.json @@ -130,7 +130,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAxNDcyCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgYmFzZTMyKFIzSjc2TURQRVhRRVdCVjJMUTZGTFE0UFlDNFFYTkhIUElMMkJYMktTRlU0V1VOSkpNREEpCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFzc2V0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHg2ZDY4ZTU0ZCAweDgyNjRiNDA1IC8vIG1ldGhvZCAiZ2V0QXNzZXRCYWxhbmNlKCl1aW50NjQiLCBtZXRob2QgImdldEFzc2V0QmFsYW5jZVdpdGhBcmcoYWNjb3VudCxhc3NldCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2dldEFzc2V0QmFsYW5jZV9yb3V0ZUAzIG1haW5fZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZ19yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFzc2V0IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRBc3NldEJhbGFuY2VXaXRoQXJnX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFzc2V0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRBc3NldEJhbGFuY2Vfcm91dGVAMzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czoxMgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0QXNzZXRCYWxhbmNlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZUFjY291bnRBc3NldCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBY2NvdW50QXNzZXQuZ2V0QXNzZXRCYWxhbmNlKCkgLT4gdWludDY0OgpnZXRBc3NldEJhbGFuY2U6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MTQKICAgIC8vIGNvbnN0IGFkZHJlc3MgPSBuZXcgQWRkcmVzcygnUjNKNzZNRFBFWFFFV0JWMkxRNkZMUTRQWUM0UVhOSEhQSUwyQlgyS1NGVTRXVU5KSk1EQlRMUk5FTScpIC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGFjY291bnQgYWRkcmVzcwogICAgYnl0ZWNfMSAvLyBhZGRyIFIzSjc2TURQRVhRRVdCVjJMUTZGTFE0UFlDNFFYTkhIUElMMkJYMktTRlU0V1VOSkpNREJUTFJORU0KICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czoxNwogICAgLy8gY29uc3QgYXNzZXQgPSBBc3NldCgxNDcyKSAvLyBSZXBsYWNlIHdpdGggeW91ciBhc3NldCBJRAogICAgaW50Y18xIC8vIDE0NzIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gYXNzZXJ0KGFjY291bnQuaXNPcHRlZEluKGFzc2V0KSwgJ0FjY291bnQgaXMgbm90IG9wdGVkIGluIHRvIHRoZSBhc3NldCcpCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFjY291bnQgaXMgbm90IG9wdGVkIGluIHRvIHRoZSBhc3NldAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjE0CiAgICAvLyBjb25zdCBhZGRyZXNzID0gbmV3IEFkZHJlc3MoJ1IzSjc2TURQRVhRRVdCVjJMUTZGTFE0UFlDNFFYTkhIUElMMkJYMktTRlU0V1VOSkpNREJUTFJORU0nKSAvLyBSZXBsYWNlIHdpdGggeW91ciBhY2NvdW50IGFkZHJlc3MKICAgIGJ5dGVjXzEgLy8gYWRkciBSM0o3Nk1EUEVYUUVXQlYyTFE2RkxRNFBZQzRRWE5ISFBJTDJCWDJLU0ZVNFdVTkpKTURCVExSTkVNCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGNvbnN0IGFzc2V0ID0gQXNzZXQoMTQ3MikgLy8gUmVwbGFjZSB3aXRoIHlvdXIgYXNzZXQgSUQKICAgIGludGNfMSAvLyAxNDcyCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MjEKICAgIC8vIHJldHVybiBhc3NldC5iYWxhbmNlKGFjY291bnQpCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IG9wdGVkIGludG8gYXNzZXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQWNjb3VudEFzc2V0LmdldEFzc2V0QmFsYW5jZVdpdGhBcmcoYWNjb3VudDogYnl0ZXMsIGFzc2V0OiB1aW50NjQpIC0+IHVpbnQ2NDoKZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czozMC0zMQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZyhhY2NvdW50OiBBY2NvdW50LCBhc3NldDogQXNzZXQpIHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjMyCiAgICAvLyBhc3NlcnQoYWNjb3VudC5pc09wdGVkSW4oYXNzZXQpLCAnQWNjb3VudCBpcyBub3Qgb3B0ZWQgaW4gdG8gdGhlIGFzc2V0JykKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFjY291bnQgaXMgbm90IG9wdGVkIGluIHRvIHRoZSBhc3NldAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjM0CiAgICAvLyByZXR1cm4gYXNzZXQuYmFsYW5jZShhY2NvdW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgb3B0ZWQgaW50byBhc3NldAogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAxNDcyCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgYmFzZTMyKFIzSjc2TURQRVhRRVdCVjJMUTZGTFE0UFlDNFFYTkhIUElMMkJYMktTRlU0V1VOSkpNREEpCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFzc2V0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHg2ZDY4ZTU0ZCAweDgyNjRiNDA1IC8vIG1ldGhvZCAiZ2V0QXNzZXRCYWxhbmNlKCl1aW50NjQiLCBtZXRob2QgImdldEFzc2V0QmFsYW5jZVdpdGhBcmcoYWNjb3VudCxhc3NldCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2dldEFzc2V0QmFsYW5jZV9yb3V0ZUAzIG1haW5fZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZ19yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFzc2V0IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRBc3NldEJhbGFuY2VXaXRoQXJnX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MzEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQWNjb3VudEFzc2V0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRBc3NldEJhbGFuY2Vfcm91dGVAMzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czoxMwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0QXNzZXRCYWxhbmNlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZUFjY291bnRBc3NldCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBY2NvdW50QXNzZXQuZ2V0QXNzZXRCYWxhbmNlKCkgLT4gdWludDY0OgpnZXRBc3NldEJhbGFuY2U6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MTUKICAgIC8vIGNvbnN0IGFkZHJlc3MgPSBuZXcgQWRkcmVzcygnUjNKNzZNRFBFWFFFV0JWMkxRNkZMUTRQWUM0UVhOSEhQSUwyQlgyS1NGVTRXVU5KSk1EQlRMUk5FTScpIC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGFjY291bnQgYWRkcmVzcwogICAgYnl0ZWNfMSAvLyBhZGRyIFIzSjc2TURQRVhRRVdCVjJMUTZGTFE0UFlDNFFYTkhIUElMMkJYMktTRlU0V1VOSkpNREJUTFJORU0KICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29uc3QgYXNzZXQgPSBBc3NldCgxNDcyKSAvLyBSZXBsYWNlIHdpdGggeW91ciBhc3NldCBJRAogICAgaW50Y18xIC8vIDE0NzIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gYXNzZXJ0KGFjY291bnQuaXNPcHRlZEluKGFzc2V0KSwgJ0FjY291bnQgaXMgbm90IG9wdGVkIGluIHRvIHRoZSBhc3NldCcpCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFjY291bnQgaXMgbm90IG9wdGVkIGluIHRvIHRoZSBhc3NldAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjE1CiAgICAvLyBjb25zdCBhZGRyZXNzID0gbmV3IEFkZHJlc3MoJ1IzSjc2TURQRVhRRVdCVjJMUTZGTFE0UFlDNFFYTkhIUElMMkJYMktTRlU0V1VOSkpNREJUTFJORU0nKSAvLyBSZXBsYWNlIHdpdGggeW91ciBhY2NvdW50IGFkZHJlc3MKICAgIGJ5dGVjXzEgLy8gYWRkciBSM0o3Nk1EUEVYUUVXQlYyTFE2RkxRNFBZQzRRWE5ISFBJTDJCWDJLU0ZVNFdVTkpKTURCVExSTkVNCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnN0IGFzc2V0ID0gQXNzZXQoMTQ3MikgLy8gUmVwbGFjZSB3aXRoIHlvdXIgYXNzZXQgSUQKICAgIGludGNfMSAvLyAxNDcyCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQWNjb3VudEFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIHJldHVybiBhc3NldC5iYWxhbmNlKGFjY291bnQpCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IG9wdGVkIGludG8gYXNzZXQKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQWNjb3VudEFzc2V0LmdldEFzc2V0QmFsYW5jZVdpdGhBcmcoYWNjb3VudDogYnl0ZXMsIGFzc2V0OiB1aW50NjQpIC0+IHVpbnQ2NDoKZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBY2NvdW50QXNzZXQvY29udHJhY3QuYWxnby50czozMS0zMgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgZ2V0QXNzZXRCYWxhbmNlV2l0aEFyZyhhY2NvdW50OiBBY2NvdW50LCBhc3NldDogQXNzZXQpIHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBhc3NlcnQoYWNjb3VudC5pc09wdGVkSW4oYXNzZXQpLCAnQWNjb3VudCBpcyBub3Qgb3B0ZWQgaW4gdG8gdGhlIGFzc2V0JykKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFjY291bnQgaXMgbm90IG9wdGVkIGluIHRvIHRoZSBhc3NldAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFjY291bnRBc3NldC9jb250cmFjdC5hbGdvLnRzOjM1CiAgICAvLyByZXR1cm4gYXNzZXQuYmFsYW5jZShhY2NvdW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgb3B0ZWQgaW50byBhc3NldAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/Counter.approval.puya.map b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/Counter.approval.puya.map index bf6edba..8c2f708 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/Counter.approval.puya.map +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/Counter.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "/Users/gabe.algo/Code/devportal-code-examples/projects/typescript-examples/contracts/ReferenceApp/contract.algo.ts" ], - "mappings": ";;;;;;;;;;;;;;;;;;;;AAeS;AAAqD;AAA5D;AADF;;AAAA;;;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;;AAOG;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;;;;;;AAAA;AAAA;AAAA;AAAA;;AAPH;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AACS;AAAA;AAAA;AAAA;AAQqC;AAArB;AARhB;AAQL;AAAA;AARK;AAAA;AAAA;AAAA;AASL", + "mappings": ";;;;;;;;;;;;;;;;;;;;AAgBS;AAAqD;AAA5D;AADF;;AAAA;;;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;;AAOG;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;;;;;;AAAA;AAAA;AAAA;AAAA;;AAPH;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AACS;AAAA;AAAA;AAAA;AAQqC;AAArB;AARhB;AAQL;AAAA;AARK;AAAA;AAAA;AAAA;AASL", "op_pc_offset": 0, "pc_events": { "1": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/Counter.approval.teal b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/Counter.approval.teal index 0b2bddd..baf4dcd 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/Counter.approval.teal +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/Counter.approval.teal @@ -7,14 +7,14 @@ main: bytecblock "counter" txn ApplicationID bnz main_after_if_else@2 - // contracts/ReferenceApp/contract.algo.ts:16 + // contracts/ReferenceApp/contract.algo.ts:17 // public counter = GlobalState({ initialValue: Uint64(0) }) bytec_0 // "counter" intc_0 // 0 app_global_put main_after_if_else@2: - // contracts/ReferenceApp/contract.algo.ts:15 + // contracts/ReferenceApp/contract.algo.ts:16 // export class Counter extends Contract { txn NumAppArgs bz main_bare_routing@8 @@ -23,13 +23,13 @@ main_after_if_else@2: match main_increment_route@5 main_after_if_else@12: - // contracts/ReferenceApp/contract.algo.ts:15 + // contracts/ReferenceApp/contract.algo.ts:16 // export class Counter extends Contract { intc_0 // 0 return main_increment_route@5: - // contracts/ReferenceApp/contract.algo.ts:22 + // contracts/ReferenceApp/contract.algo.ts:23 // @abimethod() txn OnCompletion ! @@ -46,7 +46,7 @@ main_increment_route@5: return main_bare_routing@8: - // contracts/ReferenceApp/contract.algo.ts:15 + // contracts/ReferenceApp/contract.algo.ts:16 // export class Counter extends Contract { txn OnCompletion bnz main_after_if_else@12 @@ -59,29 +59,29 @@ main_bare_routing@8: // contracts/ReferenceApp/contract.algo.ts::Counter.increment() -> uint64: increment: - // contracts/ReferenceApp/contract.algo.ts:16 + // contracts/ReferenceApp/contract.algo.ts:17 // public counter = GlobalState({ initialValue: Uint64(0) }) intc_0 // 0 bytec_0 // "counter" app_global_get_ex assert // check GlobalState exists - // contracts/ReferenceApp/contract.algo.ts:24 + // contracts/ReferenceApp/contract.algo.ts:25 // this.counter.value = this.counter.value + 1 intc_1 // 1 + - // contracts/ReferenceApp/contract.algo.ts:16 + // contracts/ReferenceApp/contract.algo.ts:17 // public counter = GlobalState({ initialValue: Uint64(0) }) bytec_0 // "counter" - // contracts/ReferenceApp/contract.algo.ts:24 + // contracts/ReferenceApp/contract.algo.ts:25 // this.counter.value = this.counter.value + 1 swap app_global_put - // contracts/ReferenceApp/contract.algo.ts:16 + // contracts/ReferenceApp/contract.algo.ts:17 // public counter = GlobalState({ initialValue: Uint64(0) }) intc_0 // 0 bytec_0 // "counter" app_global_get_ex assert // check GlobalState exists - // contracts/ReferenceApp/contract.algo.ts:25 + // contracts/ReferenceApp/contract.algo.ts:26 // return this.counter.value retsub diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/Counter.arc32.json b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/Counter.arc32.json index aee6c23..b77e3ae 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/Counter.arc32.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/Counter.arc32.json @@ -7,7 +7,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJjb3VudGVyIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBwdWJsaWMgY291bnRlciA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgYnl0ZWNfMCAvLyAiY291bnRlciIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBjbGFzcyBDb3VudGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDgKICAgIHB1c2hieXRlcyAweDRhMzI1OTAxIC8vIG1ldGhvZCAiaW5jcmVtZW50KCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2luY3JlbWVudF9yb3V0ZUA1CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBjbGFzcyBDb3VudGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl9pbmNyZW1lbnRfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgaW5jcmVtZW50CiAgICBpdG9iCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDg6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBjbGFzcyBDb3VudGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6OkNvdW50ZXIuaW5jcmVtZW50KCkgLT4gdWludDY0OgppbmNyZW1lbnQ6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIHB1YmxpYyBjb3VudGVyID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiY291bnRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIHRoaXMuY291bnRlci52YWx1ZSA9IHRoaXMuY291bnRlci52YWx1ZSArIDEKICAgIGludGNfMSAvLyAxCiAgICArCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIHB1YmxpYyBjb3VudGVyID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBieXRlY18wIC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyB0aGlzLmNvdW50ZXIudmFsdWUgPSB0aGlzLmNvdW50ZXIudmFsdWUgKyAxCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBwdWJsaWMgY291bnRlciA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImNvdW50ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyByZXR1cm4gdGhpcy5jb3VudGVyLnZhbHVlCiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJjb3VudGVyIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBwdWJsaWMgY291bnRlciA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgYnl0ZWNfMCAvLyAiY291bnRlciIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGV4cG9ydCBjbGFzcyBDb3VudGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDgKICAgIHB1c2hieXRlcyAweDRhMzI1OTAxIC8vIG1ldGhvZCAiaW5jcmVtZW50KCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2luY3JlbWVudF9yb3V0ZUA1CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGV4cG9ydCBjbGFzcyBDb3VudGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl9pbmNyZW1lbnRfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czoyMwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgaW5jcmVtZW50CiAgICBpdG9iCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDg6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGV4cG9ydCBjbGFzcyBDb3VudGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6OkNvdW50ZXIuaW5jcmVtZW50KCkgLT4gdWludDY0OgppbmNyZW1lbnQ6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBjb3VudGVyID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiY291bnRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHRoaXMuY291bnRlci52YWx1ZSA9IHRoaXMuY291bnRlci52YWx1ZSArIDEKICAgIGludGNfMSAvLyAxCiAgICArCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBjb3VudGVyID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBieXRlY18wIC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyB0aGlzLmNvdW50ZXIudmFsdWUgPSB0aGlzLmNvdW50ZXIudmFsdWUgKyAxCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBwdWJsaWMgY291bnRlciA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImNvdW50ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyByZXR1cm4gdGhpcy5jb3VudGVyLnZhbHVlCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/Counter.arc56.json b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/Counter.arc56.json index fb41f89..2b9fad1 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/Counter.arc56.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/Counter.arc56.json @@ -98,7 +98,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJjb3VudGVyIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBwdWJsaWMgY291bnRlciA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgYnl0ZWNfMCAvLyAiY291bnRlciIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBjbGFzcyBDb3VudGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDgKICAgIHB1c2hieXRlcyAweDRhMzI1OTAxIC8vIG1ldGhvZCAiaW5jcmVtZW50KCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2luY3JlbWVudF9yb3V0ZUA1CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBjbGFzcyBDb3VudGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl9pbmNyZW1lbnRfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgaW5jcmVtZW50CiAgICBpdG9iCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDg6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBjbGFzcyBDb3VudGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6OkNvdW50ZXIuaW5jcmVtZW50KCkgLT4gdWludDY0OgppbmNyZW1lbnQ6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIHB1YmxpYyBjb3VudGVyID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiY291bnRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIHRoaXMuY291bnRlci52YWx1ZSA9IHRoaXMuY291bnRlci52YWx1ZSArIDEKICAgIGludGNfMSAvLyAxCiAgICArCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIHB1YmxpYyBjb3VudGVyID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBieXRlY18wIC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyB0aGlzLmNvdW50ZXIudmFsdWUgPSB0aGlzLmNvdW50ZXIudmFsdWUgKyAxCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBwdWJsaWMgY291bnRlciA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImNvdW50ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyByZXR1cm4gdGhpcy5jb3VudGVyLnZhbHVlCiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJjb3VudGVyIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBwdWJsaWMgY291bnRlciA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgYnl0ZWNfMCAvLyAiY291bnRlciIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGV4cG9ydCBjbGFzcyBDb3VudGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDgKICAgIHB1c2hieXRlcyAweDRhMzI1OTAxIC8vIG1ldGhvZCAiaW5jcmVtZW50KCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2luY3JlbWVudF9yb3V0ZUA1CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGV4cG9ydCBjbGFzcyBDb3VudGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl9pbmNyZW1lbnRfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czoyMwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgaW5jcmVtZW50CiAgICBpdG9iCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDg6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGV4cG9ydCBjbGFzcyBDb3VudGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6OkNvdW50ZXIuaW5jcmVtZW50KCkgLT4gdWludDY0OgppbmNyZW1lbnQ6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBjb3VudGVyID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiY291bnRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHRoaXMuY291bnRlci52YWx1ZSA9IHRoaXMuY291bnRlci52YWx1ZSArIDEKICAgIGludGNfMSAvLyAxCiAgICArCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBjb3VudGVyID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBieXRlY18wIC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyB0aGlzLmNvdW50ZXIudmFsdWUgPSB0aGlzLmNvdW50ZXIudmFsdWUgKyAxCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBwdWJsaWMgY291bnRlciA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImNvdW50ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyByZXR1cm4gdGhpcy5jb3VudGVyLnZhbHVlCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/ReferenceApp.approval.puya.map b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/ReferenceApp.approval.puya.map index 669803e..4a9eb0a 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/ReferenceApp.approval.puya.map +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/ReferenceApp.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "/Users/gabe.algo/Code/devportal-code-examples/projects/typescript-examples/contracts/ReferenceApp/contract.algo.ts" ], - "mappings": ";;;;;;;;;;;;;;;;;;AA+BA;;AAAA;;;AAAA;;;;;;;;;;;;AAAA;;;AAAA;;;;;;AAAA;;AA6BG;;AAAA;AAAA;AAAA;;AAAA;AA7BH;;;AAAA;AAAA;;AA6BG;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAxBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AALH;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAUuB;AAIL;;;AAPU;;;;;AAGL;;;AAKV;;;AALU;;;AAWZ;AAAA;;;AAAA;AAAA;;;AAA4C;AAA5C;AAAA;AAAA;AAAP;AAQF;;;AAGqB;AAIL;;;;;;;AAJK;;;AAKV;;;AALU;;;AAWZ;AAAA;;;AAAA;AAAA;;;AAA4C;AAA5C;AAAA;AAAA;AAAP", + "mappings": ";;;;;;;;;;;;;;;;;;AAgCA;;AAAA;;;AAAA;;;;;;;;;;;;AAAA;;;AAAA;;;;;;AAAA;;AA6BG;;AAAA;AAAA;AAAA;;AAAA;AA7BH;;;AAAA;AAAA;;AA6BG;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAxBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AALH;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAUuB;AAIL;;;AAPU;;;;;AAGL;;;AAKV;;;AALU;;;AAWZ;AAAA;;;AAAA;AAAA;;;AAA4C;AAA5C;AAAA;AAAA;AAAP;AAQF;;;AAGqB;AAIL;;;;;;;AAJK;;;AAKV;;;AALU;;;AAWZ;AAAA;;;AAAA;AAAA;;;AAA4C;AAA5C;AAAA;AAAA;AAAP", "op_pc_offset": 0, "pc_events": { "1": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/ReferenceApp.approval.teal b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/ReferenceApp.approval.teal index 7090c5e..8f43050 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/ReferenceApp.approval.teal +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/ReferenceApp.approval.teal @@ -5,7 +5,7 @@ main: intcblock 0 1 6 bytecblock 0x151f7c75 0x4a325901 - // contracts/ReferenceApp/contract.algo.ts:32 + // contracts/ReferenceApp/contract.algo.ts:33 // export default class ReferenceApp extends Contract { txn NumAppArgs bz main_bare_routing@7 @@ -14,25 +14,25 @@ main: match main_incrementViaInner_route@3 main_incrementViaInnerWithArg_route@4 main_after_if_else@11: - // contracts/ReferenceApp/contract.algo.ts:32 + // contracts/ReferenceApp/contract.algo.ts:33 // export default class ReferenceApp extends Contract { intc_0 // 0 return main_incrementViaInnerWithArg_route@4: - // contracts/ReferenceApp/contract.algo.ts:61 + // contracts/ReferenceApp/contract.algo.ts:62 // @abimethod() txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // contracts/ReferenceApp/contract.algo.ts:32 + // contracts/ReferenceApp/contract.algo.ts:33 // export default class ReferenceApp extends Contract { txna ApplicationArgs 1 btoi txnas Applications - // contracts/ReferenceApp/contract.algo.ts:61 + // contracts/ReferenceApp/contract.algo.ts:62 // @abimethod() callsub incrementViaInnerWithArg itob @@ -44,7 +44,7 @@ main_incrementViaInnerWithArg_route@4: return main_incrementViaInner_route@3: - // contracts/ReferenceApp/contract.algo.ts:37 + // contracts/ReferenceApp/contract.algo.ts:38 // @abimethod() txn OnCompletion ! @@ -61,7 +61,7 @@ main_incrementViaInner_route@3: return main_bare_routing@7: - // contracts/ReferenceApp/contract.algo.ts:32 + // contracts/ReferenceApp/contract.algo.ts:33 // export default class ReferenceApp extends Contract { txn OnCompletion bnz main_after_if_else@11 @@ -74,7 +74,7 @@ main_bare_routing@7: // contracts/ReferenceApp/contract.algo.ts::ReferenceApp.incrementViaInner() -> uint64: incrementViaInner: - // contracts/ReferenceApp/contract.algo.ts:42-49 + // contracts/ReferenceApp/contract.algo.ts:43-50 // const appCallTxn = itxn // .applicationCall({ // appId: app.id, @@ -84,15 +84,15 @@ incrementViaInner: // }) // .submit() itxn_begin - // contracts/ReferenceApp/contract.algo.ts:46 + // contracts/ReferenceApp/contract.algo.ts:47 // appArgs: [arc4.methodSelector('increment()uint64')], bytec_1 // method "increment()uint64" itxn_field ApplicationArgs - // contracts/ReferenceApp/contract.algo.ts:39 + // contracts/ReferenceApp/contract.algo.ts:40 // const app = Application(1717) // Replace with your application id pushint 1717 // 1717 itxn_field ApplicationID - // contracts/ReferenceApp/contract.algo.ts:42-48 + // contracts/ReferenceApp/contract.algo.ts:43-49 // const appCallTxn = itxn // .applicationCall({ // appId: app.id, @@ -102,11 +102,11 @@ incrementViaInner: // }) intc_2 // 6 itxn_field TypeEnum - // contracts/ReferenceApp/contract.algo.ts:47 + // contracts/ReferenceApp/contract.algo.ts:48 // fee: 0, intc_0 // 0 itxn_field Fee - // contracts/ReferenceApp/contract.algo.ts:42-49 + // contracts/ReferenceApp/contract.algo.ts:43-50 // const appCallTxn = itxn // .applicationCall({ // appId: app.id, @@ -117,7 +117,7 @@ incrementViaInner: // .submit() itxn_submit itxn LastLog - // contracts/ReferenceApp/contract.algo.ts:53 + // contracts/ReferenceApp/contract.algo.ts:54 // return arc4.decodeArc4(appCallTxn.lastLog, 'log') dup extract 4 0 @@ -132,11 +132,11 @@ incrementViaInner: // contracts/ReferenceApp/contract.algo.ts::ReferenceApp.incrementViaInnerWithArg(app: uint64) -> uint64: incrementViaInnerWithArg: - // contracts/ReferenceApp/contract.algo.ts:61-62 + // contracts/ReferenceApp/contract.algo.ts:62-63 // @abimethod() // public incrementViaInnerWithArg(app: Application): uint64 { proto 1 1 - // contracts/ReferenceApp/contract.algo.ts:64-71 + // contracts/ReferenceApp/contract.algo.ts:65-72 // const appCallTxn = itxn // .applicationCall({ // appId: app.id, @@ -146,13 +146,13 @@ incrementViaInnerWithArg: // }) // .submit() itxn_begin - // contracts/ReferenceApp/contract.algo.ts:68 + // contracts/ReferenceApp/contract.algo.ts:69 // appArgs: [arc4.methodSelector('increment()uint64')], bytec_1 // method "increment()uint64" itxn_field ApplicationArgs frame_dig -1 itxn_field ApplicationID - // contracts/ReferenceApp/contract.algo.ts:64-70 + // contracts/ReferenceApp/contract.algo.ts:65-71 // const appCallTxn = itxn // .applicationCall({ // appId: app.id, @@ -162,11 +162,11 @@ incrementViaInnerWithArg: // }) intc_2 // 6 itxn_field TypeEnum - // contracts/ReferenceApp/contract.algo.ts:69 + // contracts/ReferenceApp/contract.algo.ts:70 // fee: 0, intc_0 // 0 itxn_field Fee - // contracts/ReferenceApp/contract.algo.ts:64-71 + // contracts/ReferenceApp/contract.algo.ts:65-72 // const appCallTxn = itxn // .applicationCall({ // appId: app.id, @@ -177,7 +177,7 @@ incrementViaInnerWithArg: // .submit() itxn_submit itxn LastLog - // contracts/ReferenceApp/contract.algo.ts:75 + // contracts/ReferenceApp/contract.algo.ts:76 // return arc4.decodeArc4(appCallTxn.lastLog, 'log') dup extract 4 0 diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/ReferenceApp.arc32.json b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/ReferenceApp.arc32.json index 31367f2..ff7c03d 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/ReferenceApp.arc32.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/ReferenceApp.arc32.json @@ -12,7 +12,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDYKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDRhMzI1OTAxCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MzIKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZUFwcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4OTQwN2FlOTYgMHgxMTE4MzM0YiAvLyBtZXRob2QgImluY3JlbWVudFZpYUlubmVyKCl1aW50NjQiLCBtZXRob2QgImluY3JlbWVudFZpYUlubmVyV2l0aEFyZyhhcHBsaWNhdGlvbil1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2luY3JlbWVudFZpYUlubmVyX3JvdXRlQDMgbWFpbl9pbmNyZW1lbnRWaWFJbm5lcldpdGhBcmdfcm91dGVANAoKbWFpbl9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjMyCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX2luY3JlbWVudFZpYUlubmVyV2l0aEFyZ19yb3V0ZUA0OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjYxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjMyCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo2MQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGluY3JlbWVudFZpYUlubmVyV2l0aEFyZwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9pbmNyZW1lbnRWaWFJbm5lcl9yb3V0ZUAzOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjM3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBpbmNyZW1lbnRWaWFJbm5lcgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czozMgogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQXBwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6OlJlZmVyZW5jZUFwcC5pbmNyZW1lbnRWaWFJbm5lcigpIC0+IHVpbnQ2NDoKaW5jcmVtZW50VmlhSW5uZXI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NDItNDkKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHAuaWQsCiAgICAvLyAgICAgLy8gVXNlIG1ldGhvZFNlbGVjdG9yIHRvIGdldCB0aGUgQUJJIHNlbGVjdG9yIGZvciB0aGUgaW5jcmVtZW50IG1ldGhvZAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdpbmNyZW1lbnQoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICBieXRlY18xIC8vIG1ldGhvZCAiaW5jcmVtZW50KCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBjb25zdCBhcHAgPSBBcHBsaWNhdGlvbigxNzE3KSAvLyBSZXBsYWNlIHdpdGggeW91ciBhcHBsaWNhdGlvbiBpZAogICAgcHVzaGludCAxNzE3IC8vIDE3MTcKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjQyLTQ4CiAgICAvLyBjb25zdCBhcHBDYWxsVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogYXBwLmlkLAogICAgLy8gICAgIC8vIFVzZSBtZXRob2RTZWxlY3RvciB0byBnZXQgdGhlIEFCSSBzZWxlY3RvciBmb3IgdGhlIGluY3JlbWVudCBtZXRob2QKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgaW50Y18yIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gZmVlOiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NDItNDkKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHAuaWQsCiAgICAvLyAgICAgLy8gVXNlIG1ldGhvZFNlbGVjdG9yIHRvIGdldCB0aGUgQUJJIHNlbGVjdG9yIGZvciB0aGUgaW5jcmVtZW50IG1ldGhvZAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdpbmNyZW1lbnQoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyByZXR1cm4gYXJjNC5kZWNvZGVBcmM0PHVpbnQ2ND4oYXBwQ2FsbFR4bi5sYXN0TG9nLCAnbG9nJykKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgYnRvaQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBcHAuaW5jcmVtZW50VmlhSW5uZXJXaXRoQXJnKGFwcDogdWludDY0KSAtPiB1aW50NjQ6CmluY3JlbWVudFZpYUlubmVyV2l0aEFyZzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo2MS02MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgaW5jcmVtZW50VmlhSW5uZXJXaXRoQXJnKGFwcDogQXBwbGljYXRpb24pOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NjQtNzEKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHAuaWQsCiAgICAvLyAgICAgLy8gVXNlIG1ldGhvZFNlbGVjdG9yIHRvIGdldCB0aGUgQUJJIHNlbGVjdG9yIGZvciB0aGUgaW5jcmVtZW50IG1ldGhvZAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdpbmNyZW1lbnQoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICBieXRlY18xIC8vIG1ldGhvZCAiaW5jcmVtZW50KCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo2NC03MAogICAgLy8gY29uc3QgYXBwQ2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcC5pZCwKICAgIC8vICAgICAvLyBVc2UgbWV0aG9kU2VsZWN0b3IgdG8gZ2V0IHRoZSBBQkkgc2VsZWN0b3IgZm9yIHRoZSBpbmNyZW1lbnQgbWV0aG9kCiAgICAvLyAgICAgYXBwQXJnczogW2FyYzQubWV0aG9kU2VsZWN0b3IoJ2luY3JlbWVudCgpdWludDY0JyldLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMiAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIGZlZTogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjY0LTcxCiAgICAvLyBjb25zdCBhcHBDYWxsVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogYXBwLmlkLAogICAgLy8gICAgIC8vIFVzZSBtZXRob2RTZWxlY3RvciB0byBnZXQgdGhlIEFCSSBzZWxlY3RvciBmb3IgdGhlIGluY3JlbWVudCBtZXRob2QKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo3NQogICAgLy8gcmV0dXJuIGFyYzQuZGVjb2RlQXJjNDx1aW50NjQ+KGFwcENhbGxUeG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGJ0b2kKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDYKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDRhMzI1OTAxCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZUFwcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4OTQwN2FlOTYgMHgxMTE4MzM0YiAvLyBtZXRob2QgImluY3JlbWVudFZpYUlubmVyKCl1aW50NjQiLCBtZXRob2QgImluY3JlbWVudFZpYUlubmVyV2l0aEFyZyhhcHBsaWNhdGlvbil1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2luY3JlbWVudFZpYUlubmVyX3JvdXRlQDMgbWFpbl9pbmNyZW1lbnRWaWFJbm5lcldpdGhBcmdfcm91dGVANAoKbWFpbl9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX2luY3JlbWVudFZpYUlubmVyV2l0aEFyZ19yb3V0ZUA0OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo2MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGluY3JlbWVudFZpYUlubmVyV2l0aEFyZwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9pbmNyZW1lbnRWaWFJbm5lcl9yb3V0ZUAzOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjM4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBpbmNyZW1lbnRWaWFJbm5lcgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czozMwogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQXBwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6OlJlZmVyZW5jZUFwcC5pbmNyZW1lbnRWaWFJbm5lcigpIC0+IHVpbnQ2NDoKaW5jcmVtZW50VmlhSW5uZXI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NDMtNTAKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHAuaWQsCiAgICAvLyAgICAgLy8gVXNlIG1ldGhvZFNlbGVjdG9yIHRvIGdldCB0aGUgQUJJIHNlbGVjdG9yIGZvciB0aGUgaW5jcmVtZW50IG1ldGhvZAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdpbmNyZW1lbnQoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICBieXRlY18xIC8vIG1ldGhvZCAiaW5jcmVtZW50KCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjQwCiAgICAvLyBjb25zdCBhcHAgPSBBcHBsaWNhdGlvbigxNzE3KSAvLyBSZXBsYWNlIHdpdGggeW91ciBhcHBsaWNhdGlvbiBpZAogICAgcHVzaGludCAxNzE3IC8vIDE3MTcKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjQzLTQ5CiAgICAvLyBjb25zdCBhcHBDYWxsVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogYXBwLmlkLAogICAgLy8gICAgIC8vIFVzZSBtZXRob2RTZWxlY3RvciB0byBnZXQgdGhlIEFCSSBzZWxlY3RvciBmb3IgdGhlIGluY3JlbWVudCBtZXRob2QKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgaW50Y18yIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gZmVlOiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NDMtNTAKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHAuaWQsCiAgICAvLyAgICAgLy8gVXNlIG1ldGhvZFNlbGVjdG9yIHRvIGdldCB0aGUgQUJJIHNlbGVjdG9yIGZvciB0aGUgaW5jcmVtZW50IG1ldGhvZAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdpbmNyZW1lbnQoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyByZXR1cm4gYXJjNC5kZWNvZGVBcmM0PHVpbnQ2ND4oYXBwQ2FsbFR4bi5sYXN0TG9nLCAnbG9nJykKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgYnRvaQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBcHAuaW5jcmVtZW50VmlhSW5uZXJXaXRoQXJnKGFwcDogdWludDY0KSAtPiB1aW50NjQ6CmluY3JlbWVudFZpYUlubmVyV2l0aEFyZzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo2Mi02MwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgaW5jcmVtZW50VmlhSW5uZXJXaXRoQXJnKGFwcDogQXBwbGljYXRpb24pOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NjUtNzIKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHAuaWQsCiAgICAvLyAgICAgLy8gVXNlIG1ldGhvZFNlbGVjdG9yIHRvIGdldCB0aGUgQUJJIHNlbGVjdG9yIGZvciB0aGUgaW5jcmVtZW50IG1ldGhvZAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdpbmNyZW1lbnQoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICBieXRlY18xIC8vIG1ldGhvZCAiaW5jcmVtZW50KCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo2NS03MQogICAgLy8gY29uc3QgYXBwQ2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcC5pZCwKICAgIC8vICAgICAvLyBVc2UgbWV0aG9kU2VsZWN0b3IgdG8gZ2V0IHRoZSBBQkkgc2VsZWN0b3IgZm9yIHRoZSBpbmNyZW1lbnQgbWV0aG9kCiAgICAvLyAgICAgYXBwQXJnczogW2FyYzQubWV0aG9kU2VsZWN0b3IoJ2luY3JlbWVudCgpdWludDY0JyldLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMiAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIGZlZTogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjY1LTcyCiAgICAvLyBjb25zdCBhcHBDYWxsVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogYXBwLmlkLAogICAgLy8gICAgIC8vIFVzZSBtZXRob2RTZWxlY3RvciB0byBnZXQgdGhlIEFCSSBzZWxlY3RvciBmb3IgdGhlIGluY3JlbWVudCBtZXRob2QKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gcmV0dXJuIGFyYzQuZGVjb2RlQXJjNDx1aW50NjQ+KGFwcENhbGxUeG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGJ0b2kKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/ReferenceApp.arc56.json b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/ReferenceApp.arc56.json index fb422b5..ac9f820 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/ReferenceApp.arc56.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceApp/ReferenceApp.arc56.json @@ -118,7 +118,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDYKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDRhMzI1OTAxCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MzIKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZUFwcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4OTQwN2FlOTYgMHgxMTE4MzM0YiAvLyBtZXRob2QgImluY3JlbWVudFZpYUlubmVyKCl1aW50NjQiLCBtZXRob2QgImluY3JlbWVudFZpYUlubmVyV2l0aEFyZyhhcHBsaWNhdGlvbil1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2luY3JlbWVudFZpYUlubmVyX3JvdXRlQDMgbWFpbl9pbmNyZW1lbnRWaWFJbm5lcldpdGhBcmdfcm91dGVANAoKbWFpbl9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjMyCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX2luY3JlbWVudFZpYUlubmVyV2l0aEFyZ19yb3V0ZUA0OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjYxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjMyCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo2MQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGluY3JlbWVudFZpYUlubmVyV2l0aEFyZwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9pbmNyZW1lbnRWaWFJbm5lcl9yb3V0ZUAzOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjM3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBpbmNyZW1lbnRWaWFJbm5lcgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czozMgogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQXBwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6OlJlZmVyZW5jZUFwcC5pbmNyZW1lbnRWaWFJbm5lcigpIC0+IHVpbnQ2NDoKaW5jcmVtZW50VmlhSW5uZXI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NDItNDkKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHAuaWQsCiAgICAvLyAgICAgLy8gVXNlIG1ldGhvZFNlbGVjdG9yIHRvIGdldCB0aGUgQUJJIHNlbGVjdG9yIGZvciB0aGUgaW5jcmVtZW50IG1ldGhvZAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdpbmNyZW1lbnQoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICBieXRlY18xIC8vIG1ldGhvZCAiaW5jcmVtZW50KCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBjb25zdCBhcHAgPSBBcHBsaWNhdGlvbigxNzE3KSAvLyBSZXBsYWNlIHdpdGggeW91ciBhcHBsaWNhdGlvbiBpZAogICAgcHVzaGludCAxNzE3IC8vIDE3MTcKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjQyLTQ4CiAgICAvLyBjb25zdCBhcHBDYWxsVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogYXBwLmlkLAogICAgLy8gICAgIC8vIFVzZSBtZXRob2RTZWxlY3RvciB0byBnZXQgdGhlIEFCSSBzZWxlY3RvciBmb3IgdGhlIGluY3JlbWVudCBtZXRob2QKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgaW50Y18yIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gZmVlOiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NDItNDkKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHAuaWQsCiAgICAvLyAgICAgLy8gVXNlIG1ldGhvZFNlbGVjdG9yIHRvIGdldCB0aGUgQUJJIHNlbGVjdG9yIGZvciB0aGUgaW5jcmVtZW50IG1ldGhvZAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdpbmNyZW1lbnQoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyByZXR1cm4gYXJjNC5kZWNvZGVBcmM0PHVpbnQ2ND4oYXBwQ2FsbFR4bi5sYXN0TG9nLCAnbG9nJykKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgYnRvaQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBcHAuaW5jcmVtZW50VmlhSW5uZXJXaXRoQXJnKGFwcDogdWludDY0KSAtPiB1aW50NjQ6CmluY3JlbWVudFZpYUlubmVyV2l0aEFyZzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo2MS02MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgaW5jcmVtZW50VmlhSW5uZXJXaXRoQXJnKGFwcDogQXBwbGljYXRpb24pOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NjQtNzEKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHAuaWQsCiAgICAvLyAgICAgLy8gVXNlIG1ldGhvZFNlbGVjdG9yIHRvIGdldCB0aGUgQUJJIHNlbGVjdG9yIGZvciB0aGUgaW5jcmVtZW50IG1ldGhvZAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdpbmNyZW1lbnQoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICBieXRlY18xIC8vIG1ldGhvZCAiaW5jcmVtZW50KCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo2NC03MAogICAgLy8gY29uc3QgYXBwQ2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcC5pZCwKICAgIC8vICAgICAvLyBVc2UgbWV0aG9kU2VsZWN0b3IgdG8gZ2V0IHRoZSBBQkkgc2VsZWN0b3IgZm9yIHRoZSBpbmNyZW1lbnQgbWV0aG9kCiAgICAvLyAgICAgYXBwQXJnczogW2FyYzQubWV0aG9kU2VsZWN0b3IoJ2luY3JlbWVudCgpdWludDY0JyldLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMiAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIGZlZTogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjY0LTcxCiAgICAvLyBjb25zdCBhcHBDYWxsVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogYXBwLmlkLAogICAgLy8gICAgIC8vIFVzZSBtZXRob2RTZWxlY3RvciB0byBnZXQgdGhlIEFCSSBzZWxlY3RvciBmb3IgdGhlIGluY3JlbWVudCBtZXRob2QKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo3NQogICAgLy8gcmV0dXJuIGFyYzQuZGVjb2RlQXJjNDx1aW50NjQ+KGFwcENhbGxUeG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGJ0b2kKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDYKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDRhMzI1OTAxCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZUFwcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4OTQwN2FlOTYgMHgxMTE4MzM0YiAvLyBtZXRob2QgImluY3JlbWVudFZpYUlubmVyKCl1aW50NjQiLCBtZXRob2QgImluY3JlbWVudFZpYUlubmVyV2l0aEFyZyhhcHBsaWNhdGlvbil1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2luY3JlbWVudFZpYUlubmVyX3JvdXRlQDMgbWFpbl9pbmNyZW1lbnRWaWFJbm5lcldpdGhBcmdfcm91dGVANAoKbWFpbl9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX2luY3JlbWVudFZpYUlubmVyV2l0aEFyZ19yb3V0ZUA0OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo2MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGluY3JlbWVudFZpYUlubmVyV2l0aEFyZwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9pbmNyZW1lbnRWaWFJbm5lcl9yb3V0ZUAzOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjM4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBpbmNyZW1lbnRWaWFJbm5lcgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czozMwogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQXBwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6OlJlZmVyZW5jZUFwcC5pbmNyZW1lbnRWaWFJbm5lcigpIC0+IHVpbnQ2NDoKaW5jcmVtZW50VmlhSW5uZXI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NDMtNTAKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHAuaWQsCiAgICAvLyAgICAgLy8gVXNlIG1ldGhvZFNlbGVjdG9yIHRvIGdldCB0aGUgQUJJIHNlbGVjdG9yIGZvciB0aGUgaW5jcmVtZW50IG1ldGhvZAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdpbmNyZW1lbnQoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICBieXRlY18xIC8vIG1ldGhvZCAiaW5jcmVtZW50KCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjQwCiAgICAvLyBjb25zdCBhcHAgPSBBcHBsaWNhdGlvbigxNzE3KSAvLyBSZXBsYWNlIHdpdGggeW91ciBhcHBsaWNhdGlvbiBpZAogICAgcHVzaGludCAxNzE3IC8vIDE3MTcKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjQzLTQ5CiAgICAvLyBjb25zdCBhcHBDYWxsVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogYXBwLmlkLAogICAgLy8gICAgIC8vIFVzZSBtZXRob2RTZWxlY3RvciB0byBnZXQgdGhlIEFCSSBzZWxlY3RvciBmb3IgdGhlIGluY3JlbWVudCBtZXRob2QKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgaW50Y18yIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gZmVlOiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NDMtNTAKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHAuaWQsCiAgICAvLyAgICAgLy8gVXNlIG1ldGhvZFNlbGVjdG9yIHRvIGdldCB0aGUgQUJJIHNlbGVjdG9yIGZvciB0aGUgaW5jcmVtZW50IG1ldGhvZAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdpbmNyZW1lbnQoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyByZXR1cm4gYXJjNC5kZWNvZGVBcmM0PHVpbnQ2ND4oYXBwQ2FsbFR4bi5sYXN0TG9nLCAnbG9nJykKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgYnRvaQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBcHAuaW5jcmVtZW50VmlhSW5uZXJXaXRoQXJnKGFwcDogdWludDY0KSAtPiB1aW50NjQ6CmluY3JlbWVudFZpYUlubmVyV2l0aEFyZzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo2Mi02MwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgaW5jcmVtZW50VmlhSW5uZXJXaXRoQXJnKGFwcDogQXBwbGljYXRpb24pOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NjUtNzIKICAgIC8vIGNvbnN0IGFwcENhbGxUeG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBhcHAuaWQsCiAgICAvLyAgICAgLy8gVXNlIG1ldGhvZFNlbGVjdG9yIHRvIGdldCB0aGUgQUJJIHNlbGVjdG9yIGZvciB0aGUgaW5jcmVtZW50IG1ldGhvZAogICAgLy8gICAgIGFwcEFyZ3M6IFthcmM0Lm1ldGhvZFNlbGVjdG9yKCdpbmNyZW1lbnQoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICBieXRlY18xIC8vIG1ldGhvZCAiaW5jcmVtZW50KCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo2NS03MQogICAgLy8gY29uc3QgYXBwQ2FsbFR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGFwcC5pZCwKICAgIC8vICAgICAvLyBVc2UgbWV0aG9kU2VsZWN0b3IgdG8gZ2V0IHRoZSBBQkkgc2VsZWN0b3IgZm9yIHRoZSBpbmNyZW1lbnQgbWV0aG9kCiAgICAvLyAgICAgYXBwQXJnczogW2FyYzQubWV0aG9kU2VsZWN0b3IoJ2luY3JlbWVudCgpdWludDY0JyldLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIGludGNfMiAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwL2NvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIGZlZTogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcC9jb250cmFjdC5hbGdvLnRzOjY1LTcyCiAgICAvLyBjb25zdCBhcHBDYWxsVHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogYXBwLmlkLAogICAgLy8gICAgIC8vIFVzZSBtZXRob2RTZWxlY3RvciB0byBnZXQgdGhlIEFCSSBzZWxlY3RvciBmb3IgdGhlIGluY3JlbWVudCBtZXRob2QKICAgIC8vICAgICBhcHBBcmdzOiBbYXJjNC5tZXRob2RTZWxlY3RvcignaW5jcmVtZW50KCl1aW50NjQnKV0sCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHAvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gcmV0dXJuIGFyYzQuZGVjb2RlQXJjNDx1aW50NjQ+KGFwcENhbGxUeG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGJ0b2kKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAppBox/ReferenceAppBox.approval.puya.map b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAppBox/ReferenceAppBox.approval.puya.map index 5715fc0..abe94ba 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAppBox/ReferenceAppBox.approval.puya.map +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAppBox/ReferenceAppBox.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "/Users/gabe.algo/Code/devportal-code-examples/projects/typescript-examples/contracts/ReferenceAppBox/contract.algo.ts" ], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBS;AAAuD;;AAA9D;AACO;AAAyD;;AAAhE;AADO;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAagB;AAZhB;AAYL;AAAA;AAZK;AAAA;AAAA;AAAA;AAa0D;AAA5B;AAAR;AAAP;AAZf;AAYL;AAAA;AAlBJ;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;AAAA;;AAoGG;;AAAA;AAAA;AAAA;;AAAA;AApGH;;;AAAA;AAAA;;;AAAA;AAoGG;;;AAAA;;AAVA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AATA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAfA;;AAAA;AAAA;AAAA;;AAAA;AAlEH;;;AAAA;AAAA;;AAkEG;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAhBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAvBA;;AAAA;AAAA;AAAA;;AAAA;AA3BH;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AA2BG;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AA3BH;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AA2BE;;;AAGgB;;AAAA;;AAxBT;AAAA;AAAA;AAAA;AAwBE;AAAP;AACc;;AAAA;;AAAoB;;AAA3B;AAAP;AAtB8D;;AAwBL;;AAxBK;AAwBhC;AAAA;AAAA;AAAA;AAE9B;;;AA1B8D;;AA4BjC;;AA5BiC;AA4BjB;;AAAU;AAAV;AAA3C;AAAA;AAAA;;AAAA;AAAA;AACA;AAAA;AA7B4D;;AAgCjC;;AAhCiC;AAgCV;AAAlD;AAAA;AACc;AAAd;AAAA;AAQJ;;;AAzCgE;;AA2CL;;AA3CK;AA2ChC;AAAA;AAAA;AAAA;AAE9B;;;AACE;;AAAA;AAAA;AAGK;AAAP;AAAA;AAQF;;;AAzDgE;;AAAA;;AAAA;AA2DhC;AAAA;AAAA;AAAA;AAE9B;;;AACE;;AAAA;AAAA;AAGK;AAAP;AAAA;AApEK;AAAA;AAAA;AAAA;AA6EL;AAhFK;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAsFL;AAQF;;;AAjGO;AAmGL;;AAAA;AAlGK;AAmGL;;AAAA;AApGK;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAsGgB;AArGhB;AAqGL;AAAA;AArGK;AAAA;AAAA;AAAA;AAsG0D;AAA5B;AAAR;AAAP;AArGf;AAqGL;AAAA;", + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBS;AAAuD;;AAA9D;AACO;AAAyD;;AAAhE;AADO;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAagB;AAZhB;AAYL;AAAA;AAZK;AAAA;AAAA;AAAA;AAa0D;AAA5B;AAAR;AAAP;AAZf;AAYL;AAAA;AAlBJ;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;AAAA;;AAoGG;;AAAA;AAAA;AAAA;;AAAA;AApGH;;;AAAA;AAAA;;;AAAA;AAoGG;;;AAAA;;AAVA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AATA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAfA;;AAAA;AAAA;AAAA;;AAAA;AAlEH;;;AAAA;AAAA;;AAkEG;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAhBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAvBA;;AAAA;AAAA;AAAA;;AAAA;AA3BH;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AA2BG;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AA3BH;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AA2BE;;;AAGgB;;AAAA;;AAxBT;AAAA;AAAA;AAAA;AAwBE;AAAP;AACc;;AAAA;;AAAoB;;AAA3B;AAAP;AAtB8D;;AAwBL;;AAxBK;AAwBhC;AAAA;AAAA;AAAA;AAE9B;;;AA1B8D;;AA4BjC;;AA5BiC;AA4BjB;;AAAU;AAAV;AAA3C;AAAA;AAAA;;AAAA;AAAA;AACA;AAAA;AA7B4D;;AAgCjC;;AAhCiC;AAgCV;AAAlD;AAAA;AACc;AAAd;AAAA;AAQJ;;;AAzCgE;;AA2CL;;AA3CK;AA2ChC;AAAA;AAAA;AAAA;AAE9B;;;AACE;;AAAA;AAAA;AAGK;AAAP;AAAA;AAQF;;;AAzDgE;;AAAA;;AAAA;AA2DhC;AAAA;AAAA;AAAA;AAE9B;;;AACE;;AAAA;AAAA;AAGK;AAAP;AAAA;AApEK;AAAA;AAAA;AAAA;AA6EL;AAhFK;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAsFL;AAQF;;;AAjGO;AAmGL;;AAAA;AAlGK;AAmGL;;AAAA;AApGK;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAsGgB;AArGhB;AAqGL;AAAA;AArGK;AAAA;AAAA;AAAA;AAsG0D;AAA5B;AAAR;AAAP;AArGf;AAqGL;AAAA;", "op_pc_offset": 0, "pc_events": { "1": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAppBox/ReferenceAppBox.approval.teal b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAppBox/ReferenceAppBox.approval.teal index 2d64ef9..d8b3c6b 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAppBox/ReferenceAppBox.approval.teal +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAppBox/ReferenceAppBox.approval.teal @@ -7,60 +7,60 @@ main: bytecblock "keyLength" "valueLength" "boxSize" "boxMbr" 0x151f7c75 "counter" txn ApplicationID bnz main_after_if_else@2 - // contracts/ReferenceAppBox/contract.algo.ts:24 + // contracts/ReferenceAppBox/contract.algo.ts:25 // public keyLength = GlobalState({ initialValue: Uint64(32 + 19) }) // Account address (32 bytes) + key prefix overhead (19 bytes) bytec_0 // "keyLength" pushint 51 // 51 app_global_put - // contracts/ReferenceAppBox/contract.algo.ts:25 + // contracts/ReferenceAppBox/contract.algo.ts:26 // public valueLength = GlobalState({ initialValue: Uint64(8) }) // uint64 (8 bytes) bytec_1 // "valueLength" pushint 8 // 8 app_global_put - // contracts/ReferenceAppBox/contract.algo.ts:24 + // contracts/ReferenceAppBox/contract.algo.ts:25 // public keyLength = GlobalState({ initialValue: Uint64(32 + 19) }) // Account address (32 bytes) + key prefix overhead (19 bytes) intc_0 // 0 bytec_0 // "keyLength" app_global_get_ex assert // check GlobalState exists - // contracts/ReferenceAppBox/contract.algo.ts:25 + // contracts/ReferenceAppBox/contract.algo.ts:26 // public valueLength = GlobalState({ initialValue: Uint64(8) }) // uint64 (8 bytes) intc_0 // 0 bytec_1 // "valueLength" app_global_get_ex assert // check GlobalState exists - // contracts/ReferenceAppBox/contract.algo.ts:38 + // contracts/ReferenceAppBox/contract.algo.ts:39 // this.boxSize.value = this.keyLength.value + this.valueLength.value + - // contracts/ReferenceAppBox/contract.algo.ts:26 + // contracts/ReferenceAppBox/contract.algo.ts:27 // public boxSize = GlobalState() // Calculated in constructor bytec_2 // "boxSize" - // contracts/ReferenceAppBox/contract.algo.ts:38 + // contracts/ReferenceAppBox/contract.algo.ts:39 // this.boxSize.value = this.keyLength.value + this.valueLength.value swap app_global_put - // contracts/ReferenceAppBox/contract.algo.ts:26 + // contracts/ReferenceAppBox/contract.algo.ts:27 // public boxSize = GlobalState() // Calculated in constructor intc_0 // 0 bytec_2 // "boxSize" app_global_get_ex assert // check GlobalState exists - // contracts/ReferenceAppBox/contract.algo.ts:39 + // contracts/ReferenceAppBox/contract.algo.ts:40 // this.boxMbr.value = Uint64(2500) + this.boxSize.value * Uint64(400) // Base MBR + (size * per-byte cost) intc_2 // 400 * intc_3 // 2500 + - // contracts/ReferenceAppBox/contract.algo.ts:27 + // contracts/ReferenceAppBox/contract.algo.ts:28 // public boxMbr = GlobalState() // Calculated in constructor bytec_3 // "boxMbr" - // contracts/ReferenceAppBox/contract.algo.ts:39 + // contracts/ReferenceAppBox/contract.algo.ts:40 // this.boxMbr.value = Uint64(2500) + this.boxSize.value * Uint64(400) // Base MBR + (size * per-byte cost) swap app_global_put main_after_if_else@2: - // contracts/ReferenceAppBox/contract.algo.ts:21-22 + // contracts/ReferenceAppBox/contract.algo.ts:22-23 // @contract({ stateTotals: { globalUints: 4 } }) // export default class ReferenceAppBox extends Contract { txn NumAppArgs @@ -70,35 +70,35 @@ main_after_if_else@2: match main_incrementBoxCounter_route@5 main_getBoxCounter_route@6 main_getBoxCounterForAccount_route@7 main_getBoxMbr_route@8 main_getBoxConfiguration_route@9 main_updateBoxConfiguration_route@10 main_after_if_else@17: - // contracts/ReferenceAppBox/contract.algo.ts:21-22 + // contracts/ReferenceAppBox/contract.algo.ts:22-23 // @contract({ stateTotals: { globalUints: 4 } }) // export default class ReferenceAppBox extends Contract { intc_0 // 0 return main_updateBoxConfiguration_route@10: - // contracts/ReferenceAppBox/contract.algo.ts:121 + // contracts/ReferenceAppBox/contract.algo.ts:122 // @abimethod() txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // contracts/ReferenceAppBox/contract.algo.ts:21-22 + // contracts/ReferenceAppBox/contract.algo.ts:22-23 // @contract({ stateTotals: { globalUints: 4 } }) // export default class ReferenceAppBox extends Contract { txna ApplicationArgs 1 btoi txna ApplicationArgs 2 btoi - // contracts/ReferenceAppBox/contract.algo.ts:121 + // contracts/ReferenceAppBox/contract.algo.ts:122 // @abimethod() callsub updateBoxConfiguration intc_1 // 1 return main_getBoxConfiguration_route@9: - // contracts/ReferenceAppBox/contract.algo.ts:111 + // contracts/ReferenceAppBox/contract.algo.ts:112 // @abimethod({ readonly: true }) txn OnCompletion ! @@ -129,7 +129,7 @@ main_getBoxConfiguration_route@9: return main_getBoxMbr_route@8: - // contracts/ReferenceAppBox/contract.algo.ts:102 + // contracts/ReferenceAppBox/contract.algo.ts:103 // @abimethod({ readonly: true }) txn OnCompletion ! @@ -146,20 +146,20 @@ main_getBoxMbr_route@8: return main_getBoxCounterForAccount_route@7: - // contracts/ReferenceAppBox/contract.algo.ts:87 + // contracts/ReferenceAppBox/contract.algo.ts:88 // @abimethod({ readonly: true }) txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // contracts/ReferenceAppBox/contract.algo.ts:21-22 + // contracts/ReferenceAppBox/contract.algo.ts:22-23 // @contract({ stateTotals: { globalUints: 4 } }) // export default class ReferenceAppBox extends Contract { txna ApplicationArgs 1 btoi txnas Accounts - // contracts/ReferenceAppBox/contract.algo.ts:87 + // contracts/ReferenceAppBox/contract.algo.ts:88 // @abimethod({ readonly: true }) callsub getBoxCounterForAccount itob @@ -171,7 +171,7 @@ main_getBoxCounterForAccount_route@7: return main_getBoxCounter_route@6: - // contracts/ReferenceAppBox/contract.algo.ts:71 + // contracts/ReferenceAppBox/contract.algo.ts:72 // @abimethod({ readonly: true }) txn OnCompletion ! @@ -188,14 +188,14 @@ main_getBoxCounter_route@6: return main_incrementBoxCounter_route@5: - // contracts/ReferenceAppBox/contract.algo.ts:48 + // contracts/ReferenceAppBox/contract.algo.ts:49 // @abimethod() txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // contracts/ReferenceAppBox/contract.algo.ts:21-22 + // contracts/ReferenceAppBox/contract.algo.ts:22-23 // @contract({ stateTotals: { globalUints: 4 } }) // export default class ReferenceAppBox extends Contract { txn GroupIndex @@ -206,7 +206,7 @@ main_incrementBoxCounter_route@5: intc_1 // pay == assert // transaction type is pay - // contracts/ReferenceAppBox/contract.algo.ts:48 + // contracts/ReferenceAppBox/contract.algo.ts:49 // @abimethod() callsub incrementBoxCounter itob @@ -218,7 +218,7 @@ main_incrementBoxCounter_route@5: return main_bare_routing@13: - // contracts/ReferenceAppBox/contract.algo.ts:21-22 + // contracts/ReferenceAppBox/contract.algo.ts:22-23 // @contract({ stateTotals: { globalUints: 4 } }) // export default class ReferenceAppBox extends Contract { txn OnCompletion @@ -232,59 +232,59 @@ main_bare_routing@13: // contracts/ReferenceAppBox/contract.algo.ts::ReferenceAppBox.incrementBoxCounter(payMbr: uint64) -> uint64: incrementBoxCounter: - // contracts/ReferenceAppBox/contract.algo.ts:48-49 + // contracts/ReferenceAppBox/contract.algo.ts:49-50 // @abimethod() // public incrementBoxCounter(payMbr: gtxn.PaymentTxn): uint64 { proto 1 1 - // contracts/ReferenceAppBox/contract.algo.ts:51 + // contracts/ReferenceAppBox/contract.algo.ts:52 // assert(payMbr.amount === this.boxMbr.value, 'Payment must cover the box MBR') frame_dig -1 gtxns Amount - // contracts/ReferenceAppBox/contract.algo.ts:27 + // contracts/ReferenceAppBox/contract.algo.ts:28 // public boxMbr = GlobalState() // Calculated in constructor intc_0 // 0 bytec_3 // "boxMbr" app_global_get_ex assert // check GlobalState exists - // contracts/ReferenceAppBox/contract.algo.ts:51 + // contracts/ReferenceAppBox/contract.algo.ts:52 // assert(payMbr.amount === this.boxMbr.value, 'Payment must cover the box MBR') == assert // Payment must cover the box MBR - // contracts/ReferenceAppBox/contract.algo.ts:52 + // contracts/ReferenceAppBox/contract.algo.ts:53 // assert(payMbr.receiver === Global.currentApplicationAddress, 'Payment must be to the contract') frame_dig -1 gtxns Receiver global CurrentApplicationAddress == assert // Payment must be to the contract - // contracts/ReferenceAppBox/contract.algo.ts:30 + // contracts/ReferenceAppBox/contract.algo.ts:31 // public accountBoxCounter = BoxMap({ keyPrefix: 'counter' }) bytec 5 // "counter" - // contracts/ReferenceAppBox/contract.algo.ts:54 + // contracts/ReferenceAppBox/contract.algo.ts:55 // const [counter, hasCounter] = this.accountBoxCounter(Txn.sender).maybe() txn Sender - // contracts/ReferenceAppBox/contract.algo.ts:30 + // contracts/ReferenceAppBox/contract.algo.ts:31 // public accountBoxCounter = BoxMap({ keyPrefix: 'counter' }) concat - // contracts/ReferenceAppBox/contract.algo.ts:54 + // contracts/ReferenceAppBox/contract.algo.ts:55 // const [counter, hasCounter] = this.accountBoxCounter(Txn.sender).maybe() box_get swap btoi swap - // contracts/ReferenceAppBox/contract.algo.ts:56 + // contracts/ReferenceAppBox/contract.algo.ts:57 // if (hasCounter) { bz incrementBoxCounter_else_body@2 - // contracts/ReferenceAppBox/contract.algo.ts:30 + // contracts/ReferenceAppBox/contract.algo.ts:31 // public accountBoxCounter = BoxMap({ keyPrefix: 'counter' }) bytec 5 // "counter" - // contracts/ReferenceAppBox/contract.algo.ts:58 + // contracts/ReferenceAppBox/contract.algo.ts:59 // this.accountBoxCounter(Txn.sender).value = counter + 1 txn Sender - // contracts/ReferenceAppBox/contract.algo.ts:30 + // contracts/ReferenceAppBox/contract.algo.ts:31 // public accountBoxCounter = BoxMap({ keyPrefix: 'counter' }) concat - // contracts/ReferenceAppBox/contract.algo.ts:58 + // contracts/ReferenceAppBox/contract.algo.ts:59 // this.accountBoxCounter(Txn.sender).value = counter + 1 frame_dig 0 intc_1 // 1 @@ -294,27 +294,27 @@ incrementBoxCounter: uncover 2 swap box_put - // contracts/ReferenceAppBox/contract.algo.ts:59 + // contracts/ReferenceAppBox/contract.algo.ts:60 // return counter + 1 swap retsub incrementBoxCounter_else_body@2: - // contracts/ReferenceAppBox/contract.algo.ts:30 + // contracts/ReferenceAppBox/contract.algo.ts:31 // public accountBoxCounter = BoxMap({ keyPrefix: 'counter' }) bytec 5 // "counter" - // contracts/ReferenceAppBox/contract.algo.ts:62 + // contracts/ReferenceAppBox/contract.algo.ts:63 // this.accountBoxCounter(Txn.sender).value = Uint64(1) txn Sender - // contracts/ReferenceAppBox/contract.algo.ts:30 + // contracts/ReferenceAppBox/contract.algo.ts:31 // public accountBoxCounter = BoxMap({ keyPrefix: 'counter' }) concat - // contracts/ReferenceAppBox/contract.algo.ts:62 + // contracts/ReferenceAppBox/contract.algo.ts:63 // this.accountBoxCounter(Txn.sender).value = Uint64(1) intc_1 // 1 itob box_put - // contracts/ReferenceAppBox/contract.algo.ts:63 + // contracts/ReferenceAppBox/contract.algo.ts:64 // return Uint64(1) intc_1 // 1 swap @@ -323,36 +323,36 @@ incrementBoxCounter_else_body@2: // contracts/ReferenceAppBox/contract.algo.ts::ReferenceAppBox.getBoxCounter() -> uint64: getBoxCounter: - // contracts/ReferenceAppBox/contract.algo.ts:71-72 + // contracts/ReferenceAppBox/contract.algo.ts:72-73 // @abimethod({ readonly: true }) // public getBoxCounter(): uint64 { proto 0 1 - // contracts/ReferenceAppBox/contract.algo.ts:30 + // contracts/ReferenceAppBox/contract.algo.ts:31 // public accountBoxCounter = BoxMap({ keyPrefix: 'counter' }) bytec 5 // "counter" - // contracts/ReferenceAppBox/contract.algo.ts:73 + // contracts/ReferenceAppBox/contract.algo.ts:74 // const [counter, hasCounter] = this.accountBoxCounter(Txn.sender).maybe() txn Sender - // contracts/ReferenceAppBox/contract.algo.ts:30 + // contracts/ReferenceAppBox/contract.algo.ts:31 // public accountBoxCounter = BoxMap({ keyPrefix: 'counter' }) concat - // contracts/ReferenceAppBox/contract.algo.ts:73 + // contracts/ReferenceAppBox/contract.algo.ts:74 // const [counter, hasCounter] = this.accountBoxCounter(Txn.sender).maybe() box_get swap btoi swap - // contracts/ReferenceAppBox/contract.algo.ts:75 + // contracts/ReferenceAppBox/contract.algo.ts:76 // if (hasCounter) { bz getBoxCounter_after_if_else@2 - // contracts/ReferenceAppBox/contract.algo.ts:76 + // contracts/ReferenceAppBox/contract.algo.ts:77 // return counter frame_dig 0 swap retsub getBoxCounter_after_if_else@2: - // contracts/ReferenceAppBox/contract.algo.ts:79 + // contracts/ReferenceAppBox/contract.algo.ts:80 // return 0 intc_0 // 0 swap @@ -361,32 +361,32 @@ getBoxCounter_after_if_else@2: // contracts/ReferenceAppBox/contract.algo.ts::ReferenceAppBox.getBoxCounterForAccount(account: bytes) -> uint64: getBoxCounterForAccount: - // contracts/ReferenceAppBox/contract.algo.ts:87-88 + // contracts/ReferenceAppBox/contract.algo.ts:88-89 // @abimethod({ readonly: true }) // public getBoxCounterForAccount(account: Account): uint64 { proto 1 1 - // contracts/ReferenceAppBox/contract.algo.ts:30 + // contracts/ReferenceAppBox/contract.algo.ts:31 // public accountBoxCounter = BoxMap({ keyPrefix: 'counter' }) bytec 5 // "counter" frame_dig -1 concat - // contracts/ReferenceAppBox/contract.algo.ts:89 + // contracts/ReferenceAppBox/contract.algo.ts:90 // const [counter, hasCounter] = this.accountBoxCounter(account).maybe() box_get swap btoi swap - // contracts/ReferenceAppBox/contract.algo.ts:91 + // contracts/ReferenceAppBox/contract.algo.ts:92 // if (hasCounter) { bz getBoxCounterForAccount_after_if_else@2 - // contracts/ReferenceAppBox/contract.algo.ts:92 + // contracts/ReferenceAppBox/contract.algo.ts:93 // return counter frame_dig 0 swap retsub getBoxCounterForAccount_after_if_else@2: - // contracts/ReferenceAppBox/contract.algo.ts:95 + // contracts/ReferenceAppBox/contract.algo.ts:96 // return 0 intc_0 // 0 swap @@ -395,106 +395,106 @@ getBoxCounterForAccount_after_if_else@2: // contracts/ReferenceAppBox/contract.algo.ts::ReferenceAppBox.getBoxMbr() -> uint64: getBoxMbr: - // contracts/ReferenceAppBox/contract.algo.ts:27 + // contracts/ReferenceAppBox/contract.algo.ts:28 // public boxMbr = GlobalState() // Calculated in constructor intc_0 // 0 bytec_3 // "boxMbr" app_global_get_ex assert // check GlobalState exists - // contracts/ReferenceAppBox/contract.algo.ts:104 + // contracts/ReferenceAppBox/contract.algo.ts:105 // return this.boxMbr.value retsub // contracts/ReferenceAppBox/contract.algo.ts::ReferenceAppBox.getBoxConfiguration() -> uint64, uint64, uint64, uint64: getBoxConfiguration: - // contracts/ReferenceAppBox/contract.algo.ts:24 + // contracts/ReferenceAppBox/contract.algo.ts:25 // public keyLength = GlobalState({ initialValue: Uint64(32 + 19) }) // Account address (32 bytes) + key prefix overhead (19 bytes) intc_0 // 0 bytec_0 // "keyLength" app_global_get_ex assert // check GlobalState exists - // contracts/ReferenceAppBox/contract.algo.ts:25 + // contracts/ReferenceAppBox/contract.algo.ts:26 // public valueLength = GlobalState({ initialValue: Uint64(8) }) // uint64 (8 bytes) intc_0 // 0 bytec_1 // "valueLength" app_global_get_ex assert // check GlobalState exists - // contracts/ReferenceAppBox/contract.algo.ts:26 + // contracts/ReferenceAppBox/contract.algo.ts:27 // public boxSize = GlobalState() // Calculated in constructor intc_0 // 0 bytec_2 // "boxSize" app_global_get_ex assert // check GlobalState exists - // contracts/ReferenceAppBox/contract.algo.ts:27 + // contracts/ReferenceAppBox/contract.algo.ts:28 // public boxMbr = GlobalState() // Calculated in constructor intc_0 // 0 bytec_3 // "boxMbr" app_global_get_ex assert // check GlobalState exists - // contracts/ReferenceAppBox/contract.algo.ts:113 + // contracts/ReferenceAppBox/contract.algo.ts:114 // return [this.keyLength.value, this.valueLength.value, this.boxSize.value, this.boxMbr.value] retsub // contracts/ReferenceAppBox/contract.algo.ts::ReferenceAppBox.updateBoxConfiguration(newKeyLength: uint64, newValueLength: uint64) -> void: updateBoxConfiguration: - // contracts/ReferenceAppBox/contract.algo.ts:121-122 + // contracts/ReferenceAppBox/contract.algo.ts:122-123 // @abimethod() // public updateBoxConfiguration(newKeyLength: uint64, newValueLength: uint64): void { proto 2 0 - // contracts/ReferenceAppBox/contract.algo.ts:24 + // contracts/ReferenceAppBox/contract.algo.ts:25 // public keyLength = GlobalState({ initialValue: Uint64(32 + 19) }) // Account address (32 bytes) + key prefix overhead (19 bytes) bytec_0 // "keyLength" - // contracts/ReferenceAppBox/contract.algo.ts:123 + // contracts/ReferenceAppBox/contract.algo.ts:124 // this.keyLength.value = newKeyLength frame_dig -2 app_global_put - // contracts/ReferenceAppBox/contract.algo.ts:25 + // contracts/ReferenceAppBox/contract.algo.ts:26 // public valueLength = GlobalState({ initialValue: Uint64(8) }) // uint64 (8 bytes) bytec_1 // "valueLength" - // contracts/ReferenceAppBox/contract.algo.ts:124 + // contracts/ReferenceAppBox/contract.algo.ts:125 // this.valueLength.value = newValueLength frame_dig -1 app_global_put - // contracts/ReferenceAppBox/contract.algo.ts:24 + // contracts/ReferenceAppBox/contract.algo.ts:25 // public keyLength = GlobalState({ initialValue: Uint64(32 + 19) }) // Account address (32 bytes) + key prefix overhead (19 bytes) intc_0 // 0 bytec_0 // "keyLength" app_global_get_ex assert // check GlobalState exists - // contracts/ReferenceAppBox/contract.algo.ts:25 + // contracts/ReferenceAppBox/contract.algo.ts:26 // public valueLength = GlobalState({ initialValue: Uint64(8) }) // uint64 (8 bytes) intc_0 // 0 bytec_1 // "valueLength" app_global_get_ex assert // check GlobalState exists - // contracts/ReferenceAppBox/contract.algo.ts:127 + // contracts/ReferenceAppBox/contract.algo.ts:128 // this.boxSize.value = this.keyLength.value + this.valueLength.value + - // contracts/ReferenceAppBox/contract.algo.ts:26 + // contracts/ReferenceAppBox/contract.algo.ts:27 // public boxSize = GlobalState() // Calculated in constructor bytec_2 // "boxSize" - // contracts/ReferenceAppBox/contract.algo.ts:127 + // contracts/ReferenceAppBox/contract.algo.ts:128 // this.boxSize.value = this.keyLength.value + this.valueLength.value swap app_global_put - // contracts/ReferenceAppBox/contract.algo.ts:26 + // contracts/ReferenceAppBox/contract.algo.ts:27 // public boxSize = GlobalState() // Calculated in constructor intc_0 // 0 bytec_2 // "boxSize" app_global_get_ex assert // check GlobalState exists - // contracts/ReferenceAppBox/contract.algo.ts:128 + // contracts/ReferenceAppBox/contract.algo.ts:129 // this.boxMbr.value = Uint64(2500) + this.boxSize.value * Uint64(400) intc_2 // 400 * intc_3 // 2500 + - // contracts/ReferenceAppBox/contract.algo.ts:27 + // contracts/ReferenceAppBox/contract.algo.ts:28 // public boxMbr = GlobalState() // Calculated in constructor bytec_3 // "boxMbr" - // contracts/ReferenceAppBox/contract.algo.ts:128 + // contracts/ReferenceAppBox/contract.algo.ts:129 // this.boxMbr.value = Uint64(2500) + this.boxSize.value * Uint64(400) swap app_global_put diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAppBox/ReferenceAppBox.arc32.json b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAppBox/ReferenceAppBox.arc32.json index a35a30c..45b959b 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAppBox/ReferenceAppBox.arc32.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAppBox/ReferenceAppBox.arc32.json @@ -36,7 +36,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDQwMCAyNTAwCiAgICBieXRlY2Jsb2NrICJrZXlMZW5ndGgiICJ2YWx1ZUxlbmd0aCIgImJveFNpemUiICJib3hNYnIiIDB4MTUxZjdjNzUgImNvdW50ZXIiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIHB1YmxpYyBrZXlMZW5ndGggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMzIgKyAxOSkgfSkgLy8gQWNjb3VudCBhZGRyZXNzICgzMiBieXRlcykgKyBrZXkgcHJlZml4IG92ZXJoZWFkICgxOSBieXRlcykKICAgIGJ5dGVjXzAgLy8gImtleUxlbmd0aCIKICAgIHB1c2hpbnQgNTEgLy8gNTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyB2YWx1ZUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg4KSB9KSAvLyB1aW50NjQgKDggYnl0ZXMpCiAgICBieXRlY18xIC8vICJ2YWx1ZUxlbmd0aCIKICAgIHB1c2hpbnQgOCAvLyA4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBwdWJsaWMga2V5TGVuZ3RoID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDMyICsgMTkpIH0pIC8vIEFjY291bnQgYWRkcmVzcyAoMzIgYnl0ZXMpICsga2V5IHByZWZpeCBvdmVyaGVhZCAoMTkgYnl0ZXMpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAia2V5TGVuZ3RoIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gcHVibGljIHZhbHVlTGVuZ3RoID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDgpIH0pIC8vIHVpbnQ2NCAoOCBieXRlcykKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJ2YWx1ZUxlbmd0aCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MzgKICAgIC8vIHRoaXMuYm94U2l6ZS52YWx1ZSA9IHRoaXMua2V5TGVuZ3RoLnZhbHVlICsgdGhpcy52YWx1ZUxlbmd0aC52YWx1ZQogICAgKwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBieXRlY18yIC8vICJib3hTaXplIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjM4CiAgICAvLyB0aGlzLmJveFNpemUudmFsdWUgPSB0aGlzLmtleUxlbmd0aC52YWx1ZSArIHRoaXMudmFsdWVMZW5ndGgudmFsdWUKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIHB1YmxpYyBib3hTaXplID0gR2xvYmFsU3RhdGU8dWludDY0PigpIC8vIENhbGN1bGF0ZWQgaW4gY29uc3RydWN0b3IKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJib3hTaXplIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozOQogICAgLy8gdGhpcy5ib3hNYnIudmFsdWUgPSBVaW50NjQoMjUwMCkgKyB0aGlzLmJveFNpemUudmFsdWUgKiBVaW50NjQoNDAwKSAvLyBCYXNlIE1CUiArIChzaXplICogcGVyLWJ5dGUgY29zdCkKICAgIGludGNfMiAvLyA0MDAKICAgICoKICAgIGludGNfMyAvLyAyNTAwCiAgICArCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjcKICAgIC8vIHB1YmxpYyBib3hNYnIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gQ2FsY3VsYXRlZCBpbiBjb25zdHJ1Y3RvcgogICAgYnl0ZWNfMyAvLyAiYm94TWJyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyB0aGlzLmJveE1ici52YWx1ZSA9IFVpbnQ2NCgyNTAwKSArIHRoaXMuYm94U2l6ZS52YWx1ZSAqIFVpbnQ2NCg0MDApIC8vIEJhc2UgTUJSICsgKHNpemUgKiBwZXItYnl0ZSBjb3N0KQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjIxLTIyCiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHBCb3ggZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTMKICAgIHB1c2hieXRlc3MgMHgwNDBhMjM1ZSAweDU0MjVhMTQ1IDB4YjNiNGEyNjUgMHhiYmI1MjM5ZSAweDFhZWZlN2Y1IDB4MGUzODUxNjIgLy8gbWV0aG9kICJpbmNyZW1lbnRCb3hDb3VudGVyKHBheSl1aW50NjQiLCBtZXRob2QgImdldEJveENvdW50ZXIoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0Qm94Q291bnRlckZvckFjY291bnQoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgImdldEJveE1icigpdWludDY0IiwgbWV0aG9kICJnZXRCb3hDb25maWd1cmF0aW9uKCkodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIsIG1ldGhvZCAidXBkYXRlQm94Q29uZmlndXJhdGlvbih1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2luY3JlbWVudEJveENvdW50ZXJfcm91dGVANSBtYWluX2dldEJveENvdW50ZXJfcm91dGVANiBtYWluX2dldEJveENvdW50ZXJGb3JBY2NvdW50X3JvdXRlQDcgbWFpbl9nZXRCb3hNYnJfcm91dGVAOCBtYWluX2dldEJveENvbmZpZ3VyYXRpb25fcm91dGVAOSBtYWluX3VwZGF0ZUJveENvbmZpZ3VyYXRpb25fcm91dGVAMTAKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxNzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyMS0yMgogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQXBwQm94IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl91cGRhdGVCb3hDb25maWd1cmF0aW9uX3JvdXRlQDEwOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyMS0yMgogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQXBwQm94IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHVwZGF0ZUJveENvbmZpZ3VyYXRpb24KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0Qm94Q29uZmlndXJhdGlvbl9yb3V0ZUA5OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qm94Q29uZmlndXJhdGlvbgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveE1icl9yb3V0ZUA4OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEwMgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qm94TWJyCiAgICBpdG9iCiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveENvdW50ZXJGb3JBY2NvdW50X3JvdXRlQDc6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjEtMjIKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0IH0gfSkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZUFwcEJveCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXRCb3hDb3VudGVyRm9yQWNjb3VudAogICAgaXRvYgogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRCb3hDb3VudGVyX3JvdXRlQDY6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NzEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldEJveENvdW50ZXIKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5faW5jcmVtZW50Qm94Q291bnRlcl9yb3V0ZUA1OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjIxLTIyCiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHBCb3ggZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGluY3JlbWVudEJveENvdW50ZXIKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDEzOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjIxLTIyCiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHBCb3ggZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE3CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQXBwQm94LmluY3JlbWVudEJveENvdW50ZXIocGF5TWJyOiB1aW50NjQpIC0+IHVpbnQ2NDoKaW5jcmVtZW50Qm94Q291bnRlcjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo0OC00OQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgaW5jcmVtZW50Qm94Q291bnRlcihwYXlNYnI6IGd0eG4uUGF5bWVudFR4bik6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gYXNzZXJ0KHBheU1ici5hbW91bnQgPT09IHRoaXMuYm94TWJyLnZhbHVlLCAnUGF5bWVudCBtdXN0IGNvdmVyIHRoZSBib3ggTUJSJykKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQW1vdW50CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjcKICAgIC8vIHB1YmxpYyBib3hNYnIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gQ2FsY3VsYXRlZCBpbiBjb25zdHJ1Y3RvcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImJveE1iciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGFzc2VydChwYXlNYnIuYW1vdW50ID09PSB0aGlzLmJveE1ici52YWx1ZSwgJ1BheW1lbnQgbXVzdCBjb3ZlciB0aGUgYm94IE1CUicpCiAgICA9PQogICAgYXNzZXJ0IC8vIFBheW1lbnQgbXVzdCBjb3ZlciB0aGUgYm94IE1CUgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBhc3NlcnQocGF5TWJyLnJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgJ1BheW1lbnQgbXVzdCBiZSB0byB0aGUgY29udHJhY3QnKQogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gUGF5bWVudCBtdXN0IGJlIHRvIHRoZSBjb250cmFjdAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBjb25zdCBbY291bnRlciwgaGFzQ291bnRlcl0gPSB0aGlzLmFjY291bnRCb3hDb3VudGVyKFR4bi5zZW5kZXIpLm1heWJlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMAogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGNvbnN0IFtjb3VudGVyLCBoYXNDb3VudGVyXSA9IHRoaXMuYWNjb3VudEJveENvdW50ZXIoVHhuLnNlbmRlcikubWF5YmUoKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBpZiAoaGFzQ291bnRlcikgewogICAgYnogaW5jcmVtZW50Qm94Q291bnRlcl9lbHNlX2JvZHlAMgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyB0aGlzLmFjY291bnRCb3hDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gY291bnRlciArIDEKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMAogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIHRoaXMuYWNjb3VudEJveENvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgPSBjb3VudGVyICsgMQogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBkdXAKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU5CiAgICAvLyByZXR1cm4gY291bnRlciArIDEKICAgIHN3YXAKICAgIHJldHN1YgoKaW5jcmVtZW50Qm94Q291bnRlcl9lbHNlX2JvZHlAMjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMAogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgYnl0ZWMgNSAvLyAiY291bnRlciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo2MgogICAgLy8gdGhpcy5hY2NvdW50Qm94Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSA9IFVpbnQ2NCgxKQogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo2MgogICAgLy8gdGhpcy5hY2NvdW50Qm94Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSA9IFVpbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gcmV0dXJuIFVpbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQXBwQm94LmdldEJveENvdW50ZXIoKSAtPiB1aW50NjQ6CmdldEJveENvdW50ZXI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NzEtNzIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldEJveENvdW50ZXIoKTogdWludDY0IHsKICAgIHByb3RvIDAgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjczCiAgICAvLyBjb25zdCBbY291bnRlciwgaGFzQ291bnRlcl0gPSB0aGlzLmFjY291bnRCb3hDb3VudGVyKFR4bi5zZW5kZXIpLm1heWJlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMAogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NzMKICAgIC8vIGNvbnN0IFtjb3VudGVyLCBoYXNDb3VudGVyXSA9IHRoaXMuYWNjb3VudEJveENvdW50ZXIoVHhuLnNlbmRlcikubWF5YmUoKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyBpZiAoaGFzQ291bnRlcikgewogICAgYnogZ2V0Qm94Q291bnRlcl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gcmV0dXJuIGNvdW50ZXIKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmdldEJveENvdW50ZXJfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjc5CiAgICAvLyByZXR1cm4gMAogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQXBwQm94LmdldEJveENvdW50ZXJGb3JBY2NvdW50KGFjY291bnQ6IGJ5dGVzKSAtPiB1aW50NjQ6CmdldEJveENvdW50ZXJGb3JBY2NvdW50OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjg3LTg4CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBnZXRCb3hDb3VudGVyRm9yQWNjb3VudChhY2NvdW50OiBBY2NvdW50KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo4OQogICAgLy8gY29uc3QgW2NvdW50ZXIsIGhhc0NvdW50ZXJdID0gdGhpcy5hY2NvdW50Qm94Q291bnRlcihhY2NvdW50KS5tYXliZSgpCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6OTEKICAgIC8vIGlmIChoYXNDb3VudGVyKSB7CiAgICBieiBnZXRCb3hDb3VudGVyRm9yQWNjb3VudF9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo5MgogICAgLy8gcmV0dXJuIGNvdW50ZXIKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmdldEJveENvdW50ZXJGb3JBY2NvdW50X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo5NQogICAgLy8gcmV0dXJuIDAKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6OlJlZmVyZW5jZUFwcEJveC5nZXRCb3hNYnIoKSAtPiB1aW50NjQ6CmdldEJveE1icjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNwogICAgLy8gcHVibGljIGJveE1iciA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiYm94TWJyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMDQKICAgIC8vIHJldHVybiB0aGlzLmJveE1ici52YWx1ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBcHBCb3guZ2V0Qm94Q29uZmlndXJhdGlvbigpIC0+IHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NDoKZ2V0Qm94Q29uZmlndXJhdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gcHVibGljIGtleUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgzMiArIDE5KSB9KSAvLyBBY2NvdW50IGFkZHJlc3MgKDMyIGJ5dGVzKSArIGtleSBwcmVmaXggb3ZlcmhlYWQgKDE5IGJ5dGVzKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImtleUxlbmd0aCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyB2YWx1ZUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg4KSB9KSAvLyB1aW50NjQgKDggYnl0ZXMpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidmFsdWVMZW5ndGgiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYm94U2l6ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjcKICAgIC8vIHB1YmxpYyBib3hNYnIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gQ2FsY3VsYXRlZCBpbiBjb25zdHJ1Y3RvcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImJveE1iciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MTEzCiAgICAvLyByZXR1cm4gW3RoaXMua2V5TGVuZ3RoLnZhbHVlLCB0aGlzLnZhbHVlTGVuZ3RoLnZhbHVlLCB0aGlzLmJveFNpemUudmFsdWUsIHRoaXMuYm94TWJyLnZhbHVlXQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBcHBCb3gudXBkYXRlQm94Q29uZmlndXJhdGlvbihuZXdLZXlMZW5ndGg6IHVpbnQ2NCwgbmV3VmFsdWVMZW5ndGg6IHVpbnQ2NCkgLT4gdm9pZDoKdXBkYXRlQm94Q29uZmlndXJhdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMjEtMTIyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB1cGRhdGVCb3hDb25maWd1cmF0aW9uKG5ld0tleUxlbmd0aDogdWludDY0LCBuZXdWYWx1ZUxlbmd0aDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gcHVibGljIGtleUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgzMiArIDE5KSB9KSAvLyBBY2NvdW50IGFkZHJlc3MgKDMyIGJ5dGVzKSArIGtleSBwcmVmaXggb3ZlcmhlYWQgKDE5IGJ5dGVzKQogICAgYnl0ZWNfMCAvLyAia2V5TGVuZ3RoIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyMwogICAgLy8gdGhpcy5rZXlMZW5ndGgudmFsdWUgPSBuZXdLZXlMZW5ndGgKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gcHVibGljIHZhbHVlTGVuZ3RoID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDgpIH0pIC8vIHVpbnQ2NCAoOCBieXRlcykKICAgIGJ5dGVjXzEgLy8gInZhbHVlTGVuZ3RoIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyNAogICAgLy8gdGhpcy52YWx1ZUxlbmd0aC52YWx1ZSA9IG5ld1ZhbHVlTGVuZ3RoCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIHB1YmxpYyBrZXlMZW5ndGggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMzIgKyAxOSkgfSkgLy8gQWNjb3VudCBhZGRyZXNzICgzMiBieXRlcykgKyBrZXkgcHJlZml4IG92ZXJoZWFkICgxOSBieXRlcykKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJrZXlMZW5ndGgiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMgdmFsdWVMZW5ndGggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoOCkgfSkgLy8gdWludDY0ICg4IGJ5dGVzKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZhbHVlTGVuZ3RoIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMjcKICAgIC8vIHRoaXMuYm94U2l6ZS52YWx1ZSA9IHRoaXMua2V5TGVuZ3RoLnZhbHVlICsgdGhpcy52YWx1ZUxlbmd0aC52YWx1ZQogICAgKwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBieXRlY18yIC8vICJib3hTaXplIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gdGhpcy5ib3hTaXplLnZhbHVlID0gdGhpcy5rZXlMZW5ndGgudmFsdWUgKyB0aGlzLnZhbHVlTGVuZ3RoLnZhbHVlCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYm94U2l6ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MTI4CiAgICAvLyB0aGlzLmJveE1ici52YWx1ZSA9IFVpbnQ2NCgyNTAwKSArIHRoaXMuYm94U2l6ZS52YWx1ZSAqIFVpbnQ2NCg0MDApCiAgICBpbnRjXzIgLy8gNDAwCiAgICAqCiAgICBpbnRjXzMgLy8gMjUwMAogICAgKwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBwdWJsaWMgYm94TWJyID0gR2xvYmFsU3RhdGU8dWludDY0PigpIC8vIENhbGN1bGF0ZWQgaW4gY29uc3RydWN0b3IKICAgIGJ5dGVjXzMgLy8gImJveE1iciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIHRoaXMuYm94TWJyLnZhbHVlID0gVWludDY0KDI1MDApICsgdGhpcy5ib3hTaXplLnZhbHVlICogVWludDY0KDQwMCkKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDQwMCAyNTAwCiAgICBieXRlY2Jsb2NrICJrZXlMZW5ndGgiICJ2YWx1ZUxlbmd0aCIgImJveFNpemUiICJib3hNYnIiIDB4MTUxZjdjNzUgImNvdW50ZXIiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyBrZXlMZW5ndGggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMzIgKyAxOSkgfSkgLy8gQWNjb3VudCBhZGRyZXNzICgzMiBieXRlcykgKyBrZXkgcHJlZml4IG92ZXJoZWFkICgxOSBieXRlcykKICAgIGJ5dGVjXzAgLy8gImtleUxlbmd0aCIKICAgIHB1c2hpbnQgNTEgLy8gNTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIHB1YmxpYyB2YWx1ZUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg4KSB9KSAvLyB1aW50NjQgKDggYnl0ZXMpCiAgICBieXRlY18xIC8vICJ2YWx1ZUxlbmd0aCIKICAgIHB1c2hpbnQgOCAvLyA4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMga2V5TGVuZ3RoID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDMyICsgMTkpIH0pIC8vIEFjY291bnQgYWRkcmVzcyAoMzIgYnl0ZXMpICsga2V5IHByZWZpeCBvdmVyaGVhZCAoMTkgYnl0ZXMpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAia2V5TGVuZ3RoIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gcHVibGljIHZhbHVlTGVuZ3RoID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDgpIH0pIC8vIHVpbnQ2NCAoOCBieXRlcykKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJ2YWx1ZUxlbmd0aCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIHRoaXMuYm94U2l6ZS52YWx1ZSA9IHRoaXMua2V5TGVuZ3RoLnZhbHVlICsgdGhpcy52YWx1ZUxlbmd0aC52YWx1ZQogICAgKwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBieXRlY18yIC8vICJib3hTaXplIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyB0aGlzLmJveFNpemUudmFsdWUgPSB0aGlzLmtleUxlbmd0aC52YWx1ZSArIHRoaXMudmFsdWVMZW5ndGgudmFsdWUKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjcKICAgIC8vIHB1YmxpYyBib3hTaXplID0gR2xvYmFsU3RhdGU8dWludDY0PigpIC8vIENhbGN1bGF0ZWQgaW4gY29uc3RydWN0b3IKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJib3hTaXplIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo0MAogICAgLy8gdGhpcy5ib3hNYnIudmFsdWUgPSBVaW50NjQoMjUwMCkgKyB0aGlzLmJveFNpemUudmFsdWUgKiBVaW50NjQoNDAwKSAvLyBCYXNlIE1CUiArIChzaXplICogcGVyLWJ5dGUgY29zdCkKICAgIGludGNfMiAvLyA0MDAKICAgICoKICAgIGludGNfMyAvLyAyNTAwCiAgICArCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIHB1YmxpYyBib3hNYnIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gQ2FsY3VsYXRlZCBpbiBjb25zdHJ1Y3RvcgogICAgYnl0ZWNfMyAvLyAiYm94TWJyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjQwCiAgICAvLyB0aGlzLmJveE1ici52YWx1ZSA9IFVpbnQ2NCgyNTAwKSArIHRoaXMuYm94U2l6ZS52YWx1ZSAqIFVpbnQ2NCg0MDApIC8vIEJhc2UgTUJSICsgKHNpemUgKiBwZXItYnl0ZSBjb3N0KQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjIyLTIzCiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHBCb3ggZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTMKICAgIHB1c2hieXRlc3MgMHgwNDBhMjM1ZSAweDU0MjVhMTQ1IDB4YjNiNGEyNjUgMHhiYmI1MjM5ZSAweDFhZWZlN2Y1IDB4MGUzODUxNjIgLy8gbWV0aG9kICJpbmNyZW1lbnRCb3hDb3VudGVyKHBheSl1aW50NjQiLCBtZXRob2QgImdldEJveENvdW50ZXIoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0Qm94Q291bnRlckZvckFjY291bnQoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgImdldEJveE1icigpdWludDY0IiwgbWV0aG9kICJnZXRCb3hDb25maWd1cmF0aW9uKCkodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIsIG1ldGhvZCAidXBkYXRlQm94Q29uZmlndXJhdGlvbih1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2luY3JlbWVudEJveENvdW50ZXJfcm91dGVANSBtYWluX2dldEJveENvdW50ZXJfcm91dGVANiBtYWluX2dldEJveENvdW50ZXJGb3JBY2NvdW50X3JvdXRlQDcgbWFpbl9nZXRCb3hNYnJfcm91dGVAOCBtYWluX2dldEJveENvbmZpZ3VyYXRpb25fcm91dGVAOSBtYWluX3VwZGF0ZUJveENvbmZpZ3VyYXRpb25fcm91dGVAMTAKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxNzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyMi0yMwogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQXBwQm94IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl91cGRhdGVCb3hDb25maWd1cmF0aW9uX3JvdXRlQDEwOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyMi0yMwogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQXBwQm94IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHVwZGF0ZUJveENvbmZpZ3VyYXRpb24KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0Qm94Q29uZmlndXJhdGlvbl9yb3V0ZUA5OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjExMgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qm94Q29uZmlndXJhdGlvbgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveE1icl9yb3V0ZUA4OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEwMwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qm94TWJyCiAgICBpdG9iCiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveENvdW50ZXJGb3JBY2NvdW50X3JvdXRlQDc6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjItMjMKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0IH0gfSkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZUFwcEJveCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXRCb3hDb3VudGVyRm9yQWNjb3VudAogICAgaXRvYgogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRCb3hDb3VudGVyX3JvdXRlQDY6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NzIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldEJveENvdW50ZXIKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5faW5jcmVtZW50Qm94Q291bnRlcl9yb3V0ZUA1OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjIyLTIzCiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHBCb3ggZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo0OQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGluY3JlbWVudEJveENvdW50ZXIKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDEzOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjIyLTIzCiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHBCb3ggZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE3CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQXBwQm94LmluY3JlbWVudEJveENvdW50ZXIocGF5TWJyOiB1aW50NjQpIC0+IHVpbnQ2NDoKaW5jcmVtZW50Qm94Q291bnRlcjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo0OS01MAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgaW5jcmVtZW50Qm94Q291bnRlcihwYXlNYnI6IGd0eG4uUGF5bWVudFR4bik6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo1MgogICAgLy8gYXNzZXJ0KHBheU1ici5hbW91bnQgPT09IHRoaXMuYm94TWJyLnZhbHVlLCAnUGF5bWVudCBtdXN0IGNvdmVyIHRoZSBib3ggTUJSJykKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQW1vdW50CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIHB1YmxpYyBib3hNYnIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gQ2FsY3VsYXRlZCBpbiBjb25zdHJ1Y3RvcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImJveE1iciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NTIKICAgIC8vIGFzc2VydChwYXlNYnIuYW1vdW50ID09PSB0aGlzLmJveE1ici52YWx1ZSwgJ1BheW1lbnQgbXVzdCBjb3ZlciB0aGUgYm94IE1CUicpCiAgICA9PQogICAgYXNzZXJ0IC8vIFBheW1lbnQgbXVzdCBjb3ZlciB0aGUgYm94IE1CUgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBhc3NlcnQocGF5TWJyLnJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgJ1BheW1lbnQgbXVzdCBiZSB0byB0aGUgY29udHJhY3QnKQogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gUGF5bWVudCBtdXN0IGJlIHRvIHRoZSBjb250cmFjdAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBjb25zdCBbY291bnRlciwgaGFzQ291bnRlcl0gPSB0aGlzLmFjY291bnRCb3hDb3VudGVyKFR4bi5zZW5kZXIpLm1heWJlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMQogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGNvbnN0IFtjb3VudGVyLCBoYXNDb3VudGVyXSA9IHRoaXMuYWNjb3VudEJveENvdW50ZXIoVHhuLnNlbmRlcikubWF5YmUoKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBpZiAoaGFzQ291bnRlcikgewogICAgYnogaW5jcmVtZW50Qm94Q291bnRlcl9lbHNlX2JvZHlAMgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU5CiAgICAvLyB0aGlzLmFjY291bnRCb3hDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gY291bnRlciArIDEKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMQogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NTkKICAgIC8vIHRoaXMuYWNjb3VudEJveENvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgPSBjb3VudGVyICsgMQogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBkdXAKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyByZXR1cm4gY291bnRlciArIDEKICAgIHN3YXAKICAgIHJldHN1YgoKaW5jcmVtZW50Qm94Q291bnRlcl9lbHNlX2JvZHlAMjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMQogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgYnl0ZWMgNSAvLyAiY291bnRlciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gdGhpcy5hY2NvdW50Qm94Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSA9IFVpbnQ2NCgxKQogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gdGhpcy5hY2NvdW50Qm94Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSA9IFVpbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo2NAogICAgLy8gcmV0dXJuIFVpbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQXBwQm94LmdldEJveENvdW50ZXIoKSAtPiB1aW50NjQ6CmdldEJveENvdW50ZXI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NzItNzMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldEJveENvdW50ZXIoKTogdWludDY0IHsKICAgIHByb3RvIDAgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyBjb25zdCBbY291bnRlciwgaGFzQ291bnRlcl0gPSB0aGlzLmFjY291bnRCb3hDb3VudGVyKFR4bi5zZW5kZXIpLm1heWJlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMQogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NzQKICAgIC8vIGNvbnN0IFtjb3VudGVyLCBoYXNDb3VudGVyXSA9IHRoaXMuYWNjb3VudEJveENvdW50ZXIoVHhuLnNlbmRlcikubWF5YmUoKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjc2CiAgICAvLyBpZiAoaGFzQ291bnRlcikgewogICAgYnogZ2V0Qm94Q291bnRlcl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo3NwogICAgLy8gcmV0dXJuIGNvdW50ZXIKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmdldEJveENvdW50ZXJfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjgwCiAgICAvLyByZXR1cm4gMAogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQXBwQm94LmdldEJveENvdW50ZXJGb3JBY2NvdW50KGFjY291bnQ6IGJ5dGVzKSAtPiB1aW50NjQ6CmdldEJveENvdW50ZXJGb3JBY2NvdW50OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjg4LTg5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBnZXRCb3hDb3VudGVyRm9yQWNjb3VudChhY2NvdW50OiBBY2NvdW50KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo5MAogICAgLy8gY29uc3QgW2NvdW50ZXIsIGhhc0NvdW50ZXJdID0gdGhpcy5hY2NvdW50Qm94Q291bnRlcihhY2NvdW50KS5tYXliZSgpCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6OTIKICAgIC8vIGlmIChoYXNDb3VudGVyKSB7CiAgICBieiBnZXRCb3hDb3VudGVyRm9yQWNjb3VudF9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo5MwogICAgLy8gcmV0dXJuIGNvdW50ZXIKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmdldEJveENvdW50ZXJGb3JBY2NvdW50X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo5NgogICAgLy8gcmV0dXJuIDAKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6OlJlZmVyZW5jZUFwcEJveC5nZXRCb3hNYnIoKSAtPiB1aW50NjQ6CmdldEJveE1icjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gcHVibGljIGJveE1iciA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiYm94TWJyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMDUKICAgIC8vIHJldHVybiB0aGlzLmJveE1ici52YWx1ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBcHBCb3guZ2V0Qm94Q29uZmlndXJhdGlvbigpIC0+IHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NDoKZ2V0Qm94Q29uZmlndXJhdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gcHVibGljIGtleUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgzMiArIDE5KSB9KSAvLyBBY2NvdW50IGFkZHJlc3MgKDMyIGJ5dGVzKSArIGtleSBwcmVmaXggb3ZlcmhlYWQgKDE5IGJ5dGVzKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImtleUxlbmd0aCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIHB1YmxpYyB2YWx1ZUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg4KSB9KSAvLyB1aW50NjQgKDggYnl0ZXMpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidmFsdWVMZW5ndGgiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYm94U2l6ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIHB1YmxpYyBib3hNYnIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gQ2FsY3VsYXRlZCBpbiBjb25zdHJ1Y3RvcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImJveE1iciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MTE0CiAgICAvLyByZXR1cm4gW3RoaXMua2V5TGVuZ3RoLnZhbHVlLCB0aGlzLnZhbHVlTGVuZ3RoLnZhbHVlLCB0aGlzLmJveFNpemUudmFsdWUsIHRoaXMuYm94TWJyLnZhbHVlXQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBcHBCb3gudXBkYXRlQm94Q29uZmlndXJhdGlvbihuZXdLZXlMZW5ndGg6IHVpbnQ2NCwgbmV3VmFsdWVMZW5ndGg6IHVpbnQ2NCkgLT4gdm9pZDoKdXBkYXRlQm94Q29uZmlndXJhdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMjItMTIzCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB1cGRhdGVCb3hDb25maWd1cmF0aW9uKG5ld0tleUxlbmd0aDogdWludDY0LCBuZXdWYWx1ZUxlbmd0aDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gcHVibGljIGtleUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgzMiArIDE5KSB9KSAvLyBBY2NvdW50IGFkZHJlc3MgKDMyIGJ5dGVzKSArIGtleSBwcmVmaXggb3ZlcmhlYWQgKDE5IGJ5dGVzKQogICAgYnl0ZWNfMCAvLyAia2V5TGVuZ3RoIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyNAogICAgLy8gdGhpcy5rZXlMZW5ndGgudmFsdWUgPSBuZXdLZXlMZW5ndGgKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gcHVibGljIHZhbHVlTGVuZ3RoID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDgpIH0pIC8vIHVpbnQ2NCAoOCBieXRlcykKICAgIGJ5dGVjXzEgLy8gInZhbHVlTGVuZ3RoIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyNQogICAgLy8gdGhpcy52YWx1ZUxlbmd0aC52YWx1ZSA9IG5ld1ZhbHVlTGVuZ3RoCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyBrZXlMZW5ndGggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMzIgKyAxOSkgfSkgLy8gQWNjb3VudCBhZGRyZXNzICgzMiBieXRlcykgKyBrZXkgcHJlZml4IG92ZXJoZWFkICgxOSBieXRlcykKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJrZXlMZW5ndGgiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBwdWJsaWMgdmFsdWVMZW5ndGggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoOCkgfSkgLy8gdWludDY0ICg4IGJ5dGVzKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZhbHVlTGVuZ3RoIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIHRoaXMuYm94U2l6ZS52YWx1ZSA9IHRoaXMua2V5TGVuZ3RoLnZhbHVlICsgdGhpcy52YWx1ZUxlbmd0aC52YWx1ZQogICAgKwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBieXRlY18yIC8vICJib3hTaXplIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyOAogICAgLy8gdGhpcy5ib3hTaXplLnZhbHVlID0gdGhpcy5rZXlMZW5ndGgudmFsdWUgKyB0aGlzLnZhbHVlTGVuZ3RoLnZhbHVlCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYm94U2l6ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MTI5CiAgICAvLyB0aGlzLmJveE1ici52YWx1ZSA9IFVpbnQ2NCgyNTAwKSArIHRoaXMuYm94U2l6ZS52YWx1ZSAqIFVpbnQ2NCg0MDApCiAgICBpbnRjXzIgLy8gNDAwCiAgICAqCiAgICBpbnRjXzMgLy8gMjUwMAogICAgKwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBwdWJsaWMgYm94TWJyID0gR2xvYmFsU3RhdGU8dWludDY0PigpIC8vIENhbGN1bGF0ZWQgaW4gY29uc3RydWN0b3IKICAgIGJ5dGVjXzMgLy8gImJveE1iciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIHRoaXMuYm94TWJyLnZhbHVlID0gVWludDY0KDI1MDApICsgdGhpcy5ib3hTaXplLnZhbHVlICogVWludDY0KDQwMCkKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAppBox/ReferenceAppBox.arc56.json b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAppBox/ReferenceAppBox.arc56.json index 0d6b3b1..16cb274 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAppBox/ReferenceAppBox.arc56.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/ReferenceAppBox/ReferenceAppBox.arc56.json @@ -269,7 +269,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDQwMCAyNTAwCiAgICBieXRlY2Jsb2NrICJrZXlMZW5ndGgiICJ2YWx1ZUxlbmd0aCIgImJveFNpemUiICJib3hNYnIiIDB4MTUxZjdjNzUgImNvdW50ZXIiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIHB1YmxpYyBrZXlMZW5ndGggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMzIgKyAxOSkgfSkgLy8gQWNjb3VudCBhZGRyZXNzICgzMiBieXRlcykgKyBrZXkgcHJlZml4IG92ZXJoZWFkICgxOSBieXRlcykKICAgIGJ5dGVjXzAgLy8gImtleUxlbmd0aCIKICAgIHB1c2hpbnQgNTEgLy8gNTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyB2YWx1ZUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg4KSB9KSAvLyB1aW50NjQgKDggYnl0ZXMpCiAgICBieXRlY18xIC8vICJ2YWx1ZUxlbmd0aCIKICAgIHB1c2hpbnQgOCAvLyA4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBwdWJsaWMga2V5TGVuZ3RoID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDMyICsgMTkpIH0pIC8vIEFjY291bnQgYWRkcmVzcyAoMzIgYnl0ZXMpICsga2V5IHByZWZpeCBvdmVyaGVhZCAoMTkgYnl0ZXMpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAia2V5TGVuZ3RoIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gcHVibGljIHZhbHVlTGVuZ3RoID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDgpIH0pIC8vIHVpbnQ2NCAoOCBieXRlcykKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJ2YWx1ZUxlbmd0aCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MzgKICAgIC8vIHRoaXMuYm94U2l6ZS52YWx1ZSA9IHRoaXMua2V5TGVuZ3RoLnZhbHVlICsgdGhpcy52YWx1ZUxlbmd0aC52YWx1ZQogICAgKwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBieXRlY18yIC8vICJib3hTaXplIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjM4CiAgICAvLyB0aGlzLmJveFNpemUudmFsdWUgPSB0aGlzLmtleUxlbmd0aC52YWx1ZSArIHRoaXMudmFsdWVMZW5ndGgudmFsdWUKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIHB1YmxpYyBib3hTaXplID0gR2xvYmFsU3RhdGU8dWludDY0PigpIC8vIENhbGN1bGF0ZWQgaW4gY29uc3RydWN0b3IKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJib3hTaXplIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozOQogICAgLy8gdGhpcy5ib3hNYnIudmFsdWUgPSBVaW50NjQoMjUwMCkgKyB0aGlzLmJveFNpemUudmFsdWUgKiBVaW50NjQoNDAwKSAvLyBCYXNlIE1CUiArIChzaXplICogcGVyLWJ5dGUgY29zdCkKICAgIGludGNfMiAvLyA0MDAKICAgICoKICAgIGludGNfMyAvLyAyNTAwCiAgICArCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjcKICAgIC8vIHB1YmxpYyBib3hNYnIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gQ2FsY3VsYXRlZCBpbiBjb25zdHJ1Y3RvcgogICAgYnl0ZWNfMyAvLyAiYm94TWJyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyB0aGlzLmJveE1ici52YWx1ZSA9IFVpbnQ2NCgyNTAwKSArIHRoaXMuYm94U2l6ZS52YWx1ZSAqIFVpbnQ2NCg0MDApIC8vIEJhc2UgTUJSICsgKHNpemUgKiBwZXItYnl0ZSBjb3N0KQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjIxLTIyCiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHBCb3ggZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTMKICAgIHB1c2hieXRlc3MgMHgwNDBhMjM1ZSAweDU0MjVhMTQ1IDB4YjNiNGEyNjUgMHhiYmI1MjM5ZSAweDFhZWZlN2Y1IDB4MGUzODUxNjIgLy8gbWV0aG9kICJpbmNyZW1lbnRCb3hDb3VudGVyKHBheSl1aW50NjQiLCBtZXRob2QgImdldEJveENvdW50ZXIoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0Qm94Q291bnRlckZvckFjY291bnQoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgImdldEJveE1icigpdWludDY0IiwgbWV0aG9kICJnZXRCb3hDb25maWd1cmF0aW9uKCkodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIsIG1ldGhvZCAidXBkYXRlQm94Q29uZmlndXJhdGlvbih1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2luY3JlbWVudEJveENvdW50ZXJfcm91dGVANSBtYWluX2dldEJveENvdW50ZXJfcm91dGVANiBtYWluX2dldEJveENvdW50ZXJGb3JBY2NvdW50X3JvdXRlQDcgbWFpbl9nZXRCb3hNYnJfcm91dGVAOCBtYWluX2dldEJveENvbmZpZ3VyYXRpb25fcm91dGVAOSBtYWluX3VwZGF0ZUJveENvbmZpZ3VyYXRpb25fcm91dGVAMTAKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxNzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyMS0yMgogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQXBwQm94IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl91cGRhdGVCb3hDb25maWd1cmF0aW9uX3JvdXRlQDEwOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyMS0yMgogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQXBwQm94IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHVwZGF0ZUJveENvbmZpZ3VyYXRpb24KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0Qm94Q29uZmlndXJhdGlvbl9yb3V0ZUA5OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qm94Q29uZmlndXJhdGlvbgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveE1icl9yb3V0ZUA4OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEwMgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qm94TWJyCiAgICBpdG9iCiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveENvdW50ZXJGb3JBY2NvdW50X3JvdXRlQDc6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjEtMjIKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0IH0gfSkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZUFwcEJveCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXRCb3hDb3VudGVyRm9yQWNjb3VudAogICAgaXRvYgogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRCb3hDb3VudGVyX3JvdXRlQDY6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NzEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldEJveENvdW50ZXIKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5faW5jcmVtZW50Qm94Q291bnRlcl9yb3V0ZUA1OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjIxLTIyCiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHBCb3ggZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGluY3JlbWVudEJveENvdW50ZXIKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDEzOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjIxLTIyCiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHBCb3ggZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE3CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQXBwQm94LmluY3JlbWVudEJveENvdW50ZXIocGF5TWJyOiB1aW50NjQpIC0+IHVpbnQ2NDoKaW5jcmVtZW50Qm94Q291bnRlcjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo0OC00OQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgaW5jcmVtZW50Qm94Q291bnRlcihwYXlNYnI6IGd0eG4uUGF5bWVudFR4bik6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gYXNzZXJ0KHBheU1ici5hbW91bnQgPT09IHRoaXMuYm94TWJyLnZhbHVlLCAnUGF5bWVudCBtdXN0IGNvdmVyIHRoZSBib3ggTUJSJykKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQW1vdW50CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjcKICAgIC8vIHB1YmxpYyBib3hNYnIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gQ2FsY3VsYXRlZCBpbiBjb25zdHJ1Y3RvcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImJveE1iciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGFzc2VydChwYXlNYnIuYW1vdW50ID09PSB0aGlzLmJveE1ici52YWx1ZSwgJ1BheW1lbnQgbXVzdCBjb3ZlciB0aGUgYm94IE1CUicpCiAgICA9PQogICAgYXNzZXJ0IC8vIFBheW1lbnQgbXVzdCBjb3ZlciB0aGUgYm94IE1CUgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBhc3NlcnQocGF5TWJyLnJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgJ1BheW1lbnQgbXVzdCBiZSB0byB0aGUgY29udHJhY3QnKQogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gUGF5bWVudCBtdXN0IGJlIHRvIHRoZSBjb250cmFjdAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBjb25zdCBbY291bnRlciwgaGFzQ291bnRlcl0gPSB0aGlzLmFjY291bnRCb3hDb3VudGVyKFR4bi5zZW5kZXIpLm1heWJlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMAogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGNvbnN0IFtjb3VudGVyLCBoYXNDb3VudGVyXSA9IHRoaXMuYWNjb3VudEJveENvdW50ZXIoVHhuLnNlbmRlcikubWF5YmUoKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBpZiAoaGFzQ291bnRlcikgewogICAgYnogaW5jcmVtZW50Qm94Q291bnRlcl9lbHNlX2JvZHlAMgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyB0aGlzLmFjY291bnRCb3hDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gY291bnRlciArIDEKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMAogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIHRoaXMuYWNjb3VudEJveENvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgPSBjb3VudGVyICsgMQogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBkdXAKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU5CiAgICAvLyByZXR1cm4gY291bnRlciArIDEKICAgIHN3YXAKICAgIHJldHN1YgoKaW5jcmVtZW50Qm94Q291bnRlcl9lbHNlX2JvZHlAMjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMAogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgYnl0ZWMgNSAvLyAiY291bnRlciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo2MgogICAgLy8gdGhpcy5hY2NvdW50Qm94Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSA9IFVpbnQ2NCgxKQogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo2MgogICAgLy8gdGhpcy5hY2NvdW50Qm94Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSA9IFVpbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gcmV0dXJuIFVpbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQXBwQm94LmdldEJveENvdW50ZXIoKSAtPiB1aW50NjQ6CmdldEJveENvdW50ZXI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NzEtNzIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldEJveENvdW50ZXIoKTogdWludDY0IHsKICAgIHByb3RvIDAgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjczCiAgICAvLyBjb25zdCBbY291bnRlciwgaGFzQ291bnRlcl0gPSB0aGlzLmFjY291bnRCb3hDb3VudGVyKFR4bi5zZW5kZXIpLm1heWJlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMAogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NzMKICAgIC8vIGNvbnN0IFtjb3VudGVyLCBoYXNDb3VudGVyXSA9IHRoaXMuYWNjb3VudEJveENvdW50ZXIoVHhuLnNlbmRlcikubWF5YmUoKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyBpZiAoaGFzQ291bnRlcikgewogICAgYnogZ2V0Qm94Q291bnRlcl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gcmV0dXJuIGNvdW50ZXIKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmdldEJveENvdW50ZXJfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjc5CiAgICAvLyByZXR1cm4gMAogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQXBwQm94LmdldEJveENvdW50ZXJGb3JBY2NvdW50KGFjY291bnQ6IGJ5dGVzKSAtPiB1aW50NjQ6CmdldEJveENvdW50ZXJGb3JBY2NvdW50OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjg3LTg4CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBnZXRCb3hDb3VudGVyRm9yQWNjb3VudChhY2NvdW50OiBBY2NvdW50KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo4OQogICAgLy8gY29uc3QgW2NvdW50ZXIsIGhhc0NvdW50ZXJdID0gdGhpcy5hY2NvdW50Qm94Q291bnRlcihhY2NvdW50KS5tYXliZSgpCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6OTEKICAgIC8vIGlmIChoYXNDb3VudGVyKSB7CiAgICBieiBnZXRCb3hDb3VudGVyRm9yQWNjb3VudF9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo5MgogICAgLy8gcmV0dXJuIGNvdW50ZXIKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmdldEJveENvdW50ZXJGb3JBY2NvdW50X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo5NQogICAgLy8gcmV0dXJuIDAKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6OlJlZmVyZW5jZUFwcEJveC5nZXRCb3hNYnIoKSAtPiB1aW50NjQ6CmdldEJveE1icjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNwogICAgLy8gcHVibGljIGJveE1iciA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiYm94TWJyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMDQKICAgIC8vIHJldHVybiB0aGlzLmJveE1ici52YWx1ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBcHBCb3guZ2V0Qm94Q29uZmlndXJhdGlvbigpIC0+IHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NDoKZ2V0Qm94Q29uZmlndXJhdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gcHVibGljIGtleUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgzMiArIDE5KSB9KSAvLyBBY2NvdW50IGFkZHJlc3MgKDMyIGJ5dGVzKSArIGtleSBwcmVmaXggb3ZlcmhlYWQgKDE5IGJ5dGVzKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImtleUxlbmd0aCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyB2YWx1ZUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg4KSB9KSAvLyB1aW50NjQgKDggYnl0ZXMpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidmFsdWVMZW5ndGgiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYm94U2l6ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjcKICAgIC8vIHB1YmxpYyBib3hNYnIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gQ2FsY3VsYXRlZCBpbiBjb25zdHJ1Y3RvcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImJveE1iciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MTEzCiAgICAvLyByZXR1cm4gW3RoaXMua2V5TGVuZ3RoLnZhbHVlLCB0aGlzLnZhbHVlTGVuZ3RoLnZhbHVlLCB0aGlzLmJveFNpemUudmFsdWUsIHRoaXMuYm94TWJyLnZhbHVlXQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBcHBCb3gudXBkYXRlQm94Q29uZmlndXJhdGlvbihuZXdLZXlMZW5ndGg6IHVpbnQ2NCwgbmV3VmFsdWVMZW5ndGg6IHVpbnQ2NCkgLT4gdm9pZDoKdXBkYXRlQm94Q29uZmlndXJhdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMjEtMTIyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB1cGRhdGVCb3hDb25maWd1cmF0aW9uKG5ld0tleUxlbmd0aDogdWludDY0LCBuZXdWYWx1ZUxlbmd0aDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gcHVibGljIGtleUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgzMiArIDE5KSB9KSAvLyBBY2NvdW50IGFkZHJlc3MgKDMyIGJ5dGVzKSArIGtleSBwcmVmaXggb3ZlcmhlYWQgKDE5IGJ5dGVzKQogICAgYnl0ZWNfMCAvLyAia2V5TGVuZ3RoIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyMwogICAgLy8gdGhpcy5rZXlMZW5ndGgudmFsdWUgPSBuZXdLZXlMZW5ndGgKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gcHVibGljIHZhbHVlTGVuZ3RoID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDgpIH0pIC8vIHVpbnQ2NCAoOCBieXRlcykKICAgIGJ5dGVjXzEgLy8gInZhbHVlTGVuZ3RoIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyNAogICAgLy8gdGhpcy52YWx1ZUxlbmd0aC52YWx1ZSA9IG5ld1ZhbHVlTGVuZ3RoCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIHB1YmxpYyBrZXlMZW5ndGggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMzIgKyAxOSkgfSkgLy8gQWNjb3VudCBhZGRyZXNzICgzMiBieXRlcykgKyBrZXkgcHJlZml4IG92ZXJoZWFkICgxOSBieXRlcykKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJrZXlMZW5ndGgiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMgdmFsdWVMZW5ndGggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoOCkgfSkgLy8gdWludDY0ICg4IGJ5dGVzKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZhbHVlTGVuZ3RoIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMjcKICAgIC8vIHRoaXMuYm94U2l6ZS52YWx1ZSA9IHRoaXMua2V5TGVuZ3RoLnZhbHVlICsgdGhpcy52YWx1ZUxlbmd0aC52YWx1ZQogICAgKwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBieXRlY18yIC8vICJib3hTaXplIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gdGhpcy5ib3hTaXplLnZhbHVlID0gdGhpcy5rZXlMZW5ndGgudmFsdWUgKyB0aGlzLnZhbHVlTGVuZ3RoLnZhbHVlCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYm94U2l6ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MTI4CiAgICAvLyB0aGlzLmJveE1ici52YWx1ZSA9IFVpbnQ2NCgyNTAwKSArIHRoaXMuYm94U2l6ZS52YWx1ZSAqIFVpbnQ2NCg0MDApCiAgICBpbnRjXzIgLy8gNDAwCiAgICAqCiAgICBpbnRjXzMgLy8gMjUwMAogICAgKwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBwdWJsaWMgYm94TWJyID0gR2xvYmFsU3RhdGU8dWludDY0PigpIC8vIENhbGN1bGF0ZWQgaW4gY29uc3RydWN0b3IKICAgIGJ5dGVjXzMgLy8gImJveE1iciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIHRoaXMuYm94TWJyLnZhbHVlID0gVWludDY0KDI1MDApICsgdGhpcy5ib3hTaXplLnZhbHVlICogVWludDY0KDQwMCkKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDQwMCAyNTAwCiAgICBieXRlY2Jsb2NrICJrZXlMZW5ndGgiICJ2YWx1ZUxlbmd0aCIgImJveFNpemUiICJib3hNYnIiIDB4MTUxZjdjNzUgImNvdW50ZXIiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyBrZXlMZW5ndGggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMzIgKyAxOSkgfSkgLy8gQWNjb3VudCBhZGRyZXNzICgzMiBieXRlcykgKyBrZXkgcHJlZml4IG92ZXJoZWFkICgxOSBieXRlcykKICAgIGJ5dGVjXzAgLy8gImtleUxlbmd0aCIKICAgIHB1c2hpbnQgNTEgLy8gNTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIHB1YmxpYyB2YWx1ZUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg4KSB9KSAvLyB1aW50NjQgKDggYnl0ZXMpCiAgICBieXRlY18xIC8vICJ2YWx1ZUxlbmd0aCIKICAgIHB1c2hpbnQgOCAvLyA4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMga2V5TGVuZ3RoID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDMyICsgMTkpIH0pIC8vIEFjY291bnQgYWRkcmVzcyAoMzIgYnl0ZXMpICsga2V5IHByZWZpeCBvdmVyaGVhZCAoMTkgYnl0ZXMpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAia2V5TGVuZ3RoIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gcHVibGljIHZhbHVlTGVuZ3RoID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDgpIH0pIC8vIHVpbnQ2NCAoOCBieXRlcykKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJ2YWx1ZUxlbmd0aCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIHRoaXMuYm94U2l6ZS52YWx1ZSA9IHRoaXMua2V5TGVuZ3RoLnZhbHVlICsgdGhpcy52YWx1ZUxlbmd0aC52YWx1ZQogICAgKwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBieXRlY18yIC8vICJib3hTaXplIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyB0aGlzLmJveFNpemUudmFsdWUgPSB0aGlzLmtleUxlbmd0aC52YWx1ZSArIHRoaXMudmFsdWVMZW5ndGgudmFsdWUKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjcKICAgIC8vIHB1YmxpYyBib3hTaXplID0gR2xvYmFsU3RhdGU8dWludDY0PigpIC8vIENhbGN1bGF0ZWQgaW4gY29uc3RydWN0b3IKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJib3hTaXplIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo0MAogICAgLy8gdGhpcy5ib3hNYnIudmFsdWUgPSBVaW50NjQoMjUwMCkgKyB0aGlzLmJveFNpemUudmFsdWUgKiBVaW50NjQoNDAwKSAvLyBCYXNlIE1CUiArIChzaXplICogcGVyLWJ5dGUgY29zdCkKICAgIGludGNfMiAvLyA0MDAKICAgICoKICAgIGludGNfMyAvLyAyNTAwCiAgICArCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIHB1YmxpYyBib3hNYnIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gQ2FsY3VsYXRlZCBpbiBjb25zdHJ1Y3RvcgogICAgYnl0ZWNfMyAvLyAiYm94TWJyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjQwCiAgICAvLyB0aGlzLmJveE1ici52YWx1ZSA9IFVpbnQ2NCgyNTAwKSArIHRoaXMuYm94U2l6ZS52YWx1ZSAqIFVpbnQ2NCg0MDApIC8vIEJhc2UgTUJSICsgKHNpemUgKiBwZXItYnl0ZSBjb3N0KQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjIyLTIzCiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHBCb3ggZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTMKICAgIHB1c2hieXRlc3MgMHgwNDBhMjM1ZSAweDU0MjVhMTQ1IDB4YjNiNGEyNjUgMHhiYmI1MjM5ZSAweDFhZWZlN2Y1IDB4MGUzODUxNjIgLy8gbWV0aG9kICJpbmNyZW1lbnRCb3hDb3VudGVyKHBheSl1aW50NjQiLCBtZXRob2QgImdldEJveENvdW50ZXIoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0Qm94Q291bnRlckZvckFjY291bnQoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgImdldEJveE1icigpdWludDY0IiwgbWV0aG9kICJnZXRCb3hDb25maWd1cmF0aW9uKCkodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIsIG1ldGhvZCAidXBkYXRlQm94Q29uZmlndXJhdGlvbih1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2luY3JlbWVudEJveENvdW50ZXJfcm91dGVANSBtYWluX2dldEJveENvdW50ZXJfcm91dGVANiBtYWluX2dldEJveENvdW50ZXJGb3JBY2NvdW50X3JvdXRlQDcgbWFpbl9nZXRCb3hNYnJfcm91dGVAOCBtYWluX2dldEJveENvbmZpZ3VyYXRpb25fcm91dGVAOSBtYWluX3VwZGF0ZUJveENvbmZpZ3VyYXRpb25fcm91dGVAMTAKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxNzoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyMi0yMwogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQXBwQm94IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl91cGRhdGVCb3hDb25maWd1cmF0aW9uX3JvdXRlQDEwOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyMi0yMwogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQgfSB9KQogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVmZXJlbmNlQXBwQm94IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHVwZGF0ZUJveENvbmZpZ3VyYXRpb24KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0Qm94Q29uZmlndXJhdGlvbl9yb3V0ZUA5OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjExMgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qm94Q29uZmlndXJhdGlvbgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveE1icl9yb3V0ZUA4OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEwMwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qm94TWJyCiAgICBpdG9iCiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJveENvdW50ZXJGb3JBY2NvdW50X3JvdXRlQDc6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjItMjMKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0IH0gfSkKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZUFwcEJveCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXRCb3hDb3VudGVyRm9yQWNjb3VudAogICAgaXRvYgogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRCb3hDb3VudGVyX3JvdXRlQDY6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NzIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldEJveENvdW50ZXIKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5faW5jcmVtZW50Qm94Q291bnRlcl9yb3V0ZUA1OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjIyLTIzCiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHBCb3ggZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo0OQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGluY3JlbWVudEJveENvdW50ZXIKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDEzOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjIyLTIzCiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCB9IH0pCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2VBcHBCb3ggZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE3CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQXBwQm94LmluY3JlbWVudEJveENvdW50ZXIocGF5TWJyOiB1aW50NjQpIC0+IHVpbnQ2NDoKaW5jcmVtZW50Qm94Q291bnRlcjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo0OS01MAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgaW5jcmVtZW50Qm94Q291bnRlcihwYXlNYnI6IGd0eG4uUGF5bWVudFR4bik6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo1MgogICAgLy8gYXNzZXJ0KHBheU1ici5hbW91bnQgPT09IHRoaXMuYm94TWJyLnZhbHVlLCAnUGF5bWVudCBtdXN0IGNvdmVyIHRoZSBib3ggTUJSJykKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQW1vdW50CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIHB1YmxpYyBib3hNYnIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gQ2FsY3VsYXRlZCBpbiBjb25zdHJ1Y3RvcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImJveE1iciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NTIKICAgIC8vIGFzc2VydChwYXlNYnIuYW1vdW50ID09PSB0aGlzLmJveE1ici52YWx1ZSwgJ1BheW1lbnQgbXVzdCBjb3ZlciB0aGUgYm94IE1CUicpCiAgICA9PQogICAgYXNzZXJ0IC8vIFBheW1lbnQgbXVzdCBjb3ZlciB0aGUgYm94IE1CUgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBhc3NlcnQocGF5TWJyLnJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgJ1BheW1lbnQgbXVzdCBiZSB0byB0aGUgY29udHJhY3QnKQogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gUGF5bWVudCBtdXN0IGJlIHRvIHRoZSBjb250cmFjdAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBjb25zdCBbY291bnRlciwgaGFzQ291bnRlcl0gPSB0aGlzLmFjY291bnRCb3hDb3VudGVyKFR4bi5zZW5kZXIpLm1heWJlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMQogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGNvbnN0IFtjb3VudGVyLCBoYXNDb3VudGVyXSA9IHRoaXMuYWNjb3VudEJveENvdW50ZXIoVHhuLnNlbmRlcikubWF5YmUoKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBpZiAoaGFzQ291bnRlcikgewogICAgYnogaW5jcmVtZW50Qm94Q291bnRlcl9lbHNlX2JvZHlAMgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjU5CiAgICAvLyB0aGlzLmFjY291bnRCb3hDb3VudGVyKFR4bi5zZW5kZXIpLnZhbHVlID0gY291bnRlciArIDEKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMQogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NTkKICAgIC8vIHRoaXMuYWNjb3VudEJveENvdW50ZXIoVHhuLnNlbmRlcikudmFsdWUgPSBjb3VudGVyICsgMQogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBkdXAKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyByZXR1cm4gY291bnRlciArIDEKICAgIHN3YXAKICAgIHJldHN1YgoKaW5jcmVtZW50Qm94Q291bnRlcl9lbHNlX2JvZHlAMjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMQogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgYnl0ZWMgNSAvLyAiY291bnRlciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gdGhpcy5hY2NvdW50Qm94Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSA9IFVpbnQ2NCgxKQogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gdGhpcy5hY2NvdW50Qm94Q291bnRlcihUeG4uc2VuZGVyKS52YWx1ZSA9IFVpbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo2NAogICAgLy8gcmV0dXJuIFVpbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQXBwQm94LmdldEJveENvdW50ZXIoKSAtPiB1aW50NjQ6CmdldEJveENvdW50ZXI6CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NzItNzMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldEJveENvdW50ZXIoKTogdWludDY0IHsKICAgIHByb3RvIDAgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyBjb25zdCBbY291bnRlciwgaGFzQ291bnRlcl0gPSB0aGlzLmFjY291bnRCb3hDb3VudGVyKFR4bi5zZW5kZXIpLm1heWJlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czozMQogICAgLy8gcHVibGljIGFjY291bnRCb3hDb3VudGVyID0gQm94TWFwPEFjY291bnQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdjb3VudGVyJyB9KQogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6NzQKICAgIC8vIGNvbnN0IFtjb3VudGVyLCBoYXNDb3VudGVyXSA9IHRoaXMuYWNjb3VudEJveENvdW50ZXIoVHhuLnNlbmRlcikubWF5YmUoKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjc2CiAgICAvLyBpZiAoaGFzQ291bnRlcikgewogICAgYnogZ2V0Qm94Q291bnRlcl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo3NwogICAgLy8gcmV0dXJuIGNvdW50ZXIKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmdldEJveENvdW50ZXJfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjgwCiAgICAvLyByZXR1cm4gMAogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo6UmVmZXJlbmNlQXBwQm94LmdldEJveENvdW50ZXJGb3JBY2NvdW50KGFjY291bnQ6IGJ5dGVzKSAtPiB1aW50NjQ6CmdldEJveENvdW50ZXJGb3JBY2NvdW50OgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjg4LTg5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBnZXRCb3hDb3VudGVyRm9yQWNjb3VudChhY2NvdW50OiBBY2NvdW50KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBwdWJsaWMgYWNjb3VudEJveENvdW50ZXIgPSBCb3hNYXA8QWNjb3VudCwgdWludDY0Pih7IGtleVByZWZpeDogJ2NvdW50ZXInIH0pCiAgICBieXRlYyA1IC8vICJjb3VudGVyIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo5MAogICAgLy8gY29uc3QgW2NvdW50ZXIsIGhhc0NvdW50ZXJdID0gdGhpcy5hY2NvdW50Qm94Q291bnRlcihhY2NvdW50KS5tYXliZSgpCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6OTIKICAgIC8vIGlmIChoYXNDb3VudGVyKSB7CiAgICBieiBnZXRCb3hDb3VudGVyRm9yQWNjb3VudF9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo5MwogICAgLy8gcmV0dXJuIGNvdW50ZXIKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmdldEJveENvdW50ZXJGb3JBY2NvdW50X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czo5NgogICAgLy8gcmV0dXJuIDAKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6OlJlZmVyZW5jZUFwcEJveC5nZXRCb3hNYnIoKSAtPiB1aW50NjQ6CmdldEJveE1icjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gcHVibGljIGJveE1iciA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiYm94TWJyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMDUKICAgIC8vIHJldHVybiB0aGlzLmJveE1ici52YWx1ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBcHBCb3guZ2V0Qm94Q29uZmlndXJhdGlvbigpIC0+IHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NDoKZ2V0Qm94Q29uZmlndXJhdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gcHVibGljIGtleUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgzMiArIDE5KSB9KSAvLyBBY2NvdW50IGFkZHJlc3MgKDMyIGJ5dGVzKSArIGtleSBwcmVmaXggb3ZlcmhlYWQgKDE5IGJ5dGVzKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImtleUxlbmd0aCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIHB1YmxpYyB2YWx1ZUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCg4KSB9KSAvLyB1aW50NjQgKDggYnl0ZXMpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidmFsdWVMZW5ndGgiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYm94U2l6ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIHB1YmxpYyBib3hNYnIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkgLy8gQ2FsY3VsYXRlZCBpbiBjb25zdHJ1Y3RvcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImJveE1iciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MTE0CiAgICAvLyByZXR1cm4gW3RoaXMua2V5TGVuZ3RoLnZhbHVlLCB0aGlzLnZhbHVlTGVuZ3RoLnZhbHVlLCB0aGlzLmJveFNpemUudmFsdWUsIHRoaXMuYm94TWJyLnZhbHVlXQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjpSZWZlcmVuY2VBcHBCb3gudXBkYXRlQm94Q29uZmlndXJhdGlvbihuZXdLZXlMZW5ndGg6IHVpbnQ2NCwgbmV3VmFsdWVMZW5ndGg6IHVpbnQ2NCkgLT4gdm9pZDoKdXBkYXRlQm94Q29uZmlndXJhdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMjItMTIzCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB1cGRhdGVCb3hDb25maWd1cmF0aW9uKG5ld0tleUxlbmd0aDogdWludDY0LCBuZXdWYWx1ZUxlbmd0aDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gcHVibGljIGtleUxlbmd0aCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgzMiArIDE5KSB9KSAvLyBBY2NvdW50IGFkZHJlc3MgKDMyIGJ5dGVzKSArIGtleSBwcmVmaXggb3ZlcmhlYWQgKDE5IGJ5dGVzKQogICAgYnl0ZWNfMCAvLyAia2V5TGVuZ3RoIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyNAogICAgLy8gdGhpcy5rZXlMZW5ndGgudmFsdWUgPSBuZXdLZXlMZW5ndGgKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gcHVibGljIHZhbHVlTGVuZ3RoID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDgpIH0pIC8vIHVpbnQ2NCAoOCBieXRlcykKICAgIGJ5dGVjXzEgLy8gInZhbHVlTGVuZ3RoIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyNQogICAgLy8gdGhpcy52YWx1ZUxlbmd0aC52YWx1ZSA9IG5ld1ZhbHVlTGVuZ3RoCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyBrZXlMZW5ndGggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMzIgKyAxOSkgfSkgLy8gQWNjb3VudCBhZGRyZXNzICgzMiBieXRlcykgKyBrZXkgcHJlZml4IG92ZXJoZWFkICgxOSBieXRlcykKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJrZXlMZW5ndGgiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBwdWJsaWMgdmFsdWVMZW5ndGggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoOCkgfSkgLy8gdWludDY0ICg4IGJ5dGVzKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZhbHVlTGVuZ3RoIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIHRoaXMuYm94U2l6ZS52YWx1ZSA9IHRoaXMua2V5TGVuZ3RoLnZhbHVlICsgdGhpcy52YWx1ZUxlbmd0aC52YWx1ZQogICAgKwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBieXRlY18yIC8vICJib3hTaXplIgogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjEyOAogICAgLy8gdGhpcy5ib3hTaXplLnZhbHVlID0gdGhpcy5rZXlMZW5ndGgudmFsdWUgKyB0aGlzLnZhbHVlTGVuZ3RoLnZhbHVlCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBwdWJsaWMgYm94U2l6ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKSAvLyBDYWxjdWxhdGVkIGluIGNvbnN0cnVjdG9yCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYm94U2l6ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvUmVmZXJlbmNlQXBwQm94L2NvbnRyYWN0LmFsZ28udHM6MTI5CiAgICAvLyB0aGlzLmJveE1ici52YWx1ZSA9IFVpbnQ2NCgyNTAwKSArIHRoaXMuYm94U2l6ZS52YWx1ZSAqIFVpbnQ2NCg0MDApCiAgICBpbnRjXzIgLy8gNDAwCiAgICAqCiAgICBpbnRjXzMgLy8gMjUwMAogICAgKwogICAgLy8gY29udHJhY3RzL1JlZmVyZW5jZUFwcEJveC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBwdWJsaWMgYm94TWJyID0gR2xvYmFsU3RhdGU8dWludDY0PigpIC8vIENhbGN1bGF0ZWQgaW4gY29uc3RydWN0b3IKICAgIGJ5dGVjXzMgLy8gImJveE1iciIKICAgIC8vIGNvbnRyYWN0cy9SZWZlcmVuY2VBcHBCb3gvY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIHRoaXMuYm94TWJyLnZhbHVlID0gVWludDY0KDI1MDApICsgdGhpcy5ib3hTaXplLnZhbHVlICogVWludDY0KDQwMCkKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ScratchStorage/ScratchStorage.approval.puya.map b/projects/typescript-examples/contracts/artifacts/contracts/ScratchStorage/ScratchStorage.approval.puya.map index ec8f44c..decb69c 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ScratchStorage/ScratchStorage.approval.puya.map +++ b/projects/typescript-examples/contracts/artifacts/contracts/ScratchStorage/ScratchStorage.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "/Users/gabe.algo/Code/devportal-code-examples/projects/typescript-examples/contracts/ScratchStorage/contract.algo.ts" ], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;AAAA;;AAmEG;;AAAA;AAAA;AAAA;;AAAA;AAnEH;;;AAAA;AAAA;;;AAAA;AAmEG;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAbA;;AAAA;AAAA;AAAA;;AAAA;AAtDH;;;AAAA;AAAA;;;AAAA;AAsDG;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAfD;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAvCF;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAQ4B;AAAxB;;AACuB;AAAvB;;AACwB;AAAxB;;AACyB;;;AAAzB;;AAYe;;AACA;;AACI;;AAHJ;;AAKG;AAAX;AAAP;AAC4B;AAArB;AAAP;AACO;AAAW;AAAX;AAAP;AACkB;;;AAAX;AAAP;AAaO;AAAP;AAWF;;;AAES;;AAAA;;AAAA;AAAP;AAWF;;;AAES;;AAAA;;AAAA;AAAP", + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;AAAA;;AA0DG;;AAAA;AAAA;AAAA;;AAAA;AA1DH;;;AAAA;AAAA;;;AAAA;AA0DG;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAXA;;AAAA;AAAA;AAAA;;AAAA;AA/CH;;;AAAA;AAAA;;;AAAA;AA+CG;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAbD;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAlCF;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAO4B;AAAxB;;AACuB;AAAvB;;AACwB;AAAxB;;AACyB;;;AAAzB;;AAUe;;AACA;;AACI;;AAHJ;;AAKG;AAAX;AAAP;AAC4B;AAArB;AAAP;AACO;AAAW;AAAX;AAAP;AACkB;;;AAAX;AAAP;AAWO;AAAP;AASF;;;AAES;;AAAA;;AAAA;AAAP;AASF;;;AAES;;AAAA;;AAAA;AAAP", "op_pc_offset": 0, "pc_events": { "1": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ScratchStorage/ScratchStorage.approval.teal b/projects/typescript-examples/contracts/artifacts/contracts/ScratchStorage/ScratchStorage.approval.teal index bb4249a..18dd915 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ScratchStorage/ScratchStorage.approval.teal +++ b/projects/typescript-examples/contracts/artifacts/contracts/ScratchStorage/ScratchStorage.approval.teal @@ -5,7 +5,7 @@ main: intcblock 1 0 42 100 bytecblock 0x151f7c75 "Hello, Algorand!" - // contracts/ScratchStorage/contract.algo.ts:26-27 + // contracts/ScratchStorage/contract.algo.ts:27-28 // @contract({ scratchSlots: [0, 1, 2, { from: 10, to: 20 }] }) // This reserves slots 0, 1, 2 and slots 10-20 // export default class ScratchStorage extends Contract { txn NumAppArgs @@ -15,28 +15,28 @@ main: match main_demonstrateScratchStorage_route@3 main_readFromGroupTransaction_route@4 main_readBytesFromGroupTransaction_route@5 main_after_if_else@12: - // contracts/ScratchStorage/contract.algo.ts:26-27 + // contracts/ScratchStorage/contract.algo.ts:27-28 // @contract({ scratchSlots: [0, 1, 2, { from: 10, to: 20 }] }) // This reserves slots 0, 1, 2 and slots 10-20 // export default class ScratchStorage extends Contract { intc_1 // 0 return main_readBytesFromGroupTransaction_route@5: - // contracts/ScratchStorage/contract.algo.ts:93 + // contracts/ScratchStorage/contract.algo.ts:85 // @abimethod({ readonly: true }) txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // contracts/ScratchStorage/contract.algo.ts:26-27 + // contracts/ScratchStorage/contract.algo.ts:27-28 // @contract({ scratchSlots: [0, 1, 2, { from: 10, to: 20 }] }) // This reserves slots 0, 1, 2 and slots 10-20 // export default class ScratchStorage extends Contract { txna ApplicationArgs 1 btoi txna ApplicationArgs 2 btoi - // contracts/ScratchStorage/contract.algo.ts:93 + // contracts/ScratchStorage/contract.algo.ts:85 // @abimethod({ readonly: true }) callsub readBytesFromGroupTransaction dup @@ -53,21 +53,21 @@ main_readBytesFromGroupTransaction_route@5: return main_readFromGroupTransaction_route@4: - // contracts/ScratchStorage/contract.algo.ts:80 + // contracts/ScratchStorage/contract.algo.ts:74 // @abimethod({ readonly: true }) txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // contracts/ScratchStorage/contract.algo.ts:26-27 + // contracts/ScratchStorage/contract.algo.ts:27-28 // @contract({ scratchSlots: [0, 1, 2, { from: 10, to: 20 }] }) // This reserves slots 0, 1, 2 and slots 10-20 // export default class ScratchStorage extends Contract { txna ApplicationArgs 1 btoi txna ApplicationArgs 2 btoi - // contracts/ScratchStorage/contract.algo.ts:80 + // contracts/ScratchStorage/contract.algo.ts:74 // @abimethod({ readonly: true }) callsub readFromGroupTransaction itob @@ -79,7 +79,7 @@ main_readFromGroupTransaction_route@4: return main_demonstrateScratchStorage_route@3: - // contracts/ScratchStorage/contract.algo.ts:65 + // contracts/ScratchStorage/contract.algo.ts:61 // public demonstrateScratchStorage(): boolean { txn OnCompletion ! @@ -99,7 +99,7 @@ main_demonstrateScratchStorage_route@3: return main_bare_routing@8: - // contracts/ScratchStorage/contract.algo.ts:26-27 + // contracts/ScratchStorage/contract.algo.ts:27-28 // @contract({ scratchSlots: [0, 1, 2, { from: 10, to: 20 }] }) // This reserves slots 0, 1, 2 and slots 10-20 // export default class ScratchStorage extends Contract { txn OnCompletion @@ -129,40 +129,40 @@ demonstrateScratchStorage: // Scratch.store(15, Uint64(999)) pushint 999 // 999 store 15 - // contracts/ScratchStorage/contract.algo.ts:49 + // contracts/ScratchStorage/contract.algo.ts:47 // const value2 = Scratch.loadUint64(2) load 2 - // contracts/ScratchStorage/contract.algo.ts:50 + // contracts/ScratchStorage/contract.algo.ts:48 // const value3 = Scratch.loadUint64(15) load 15 - // contracts/ScratchStorage/contract.algo.ts:51 + // contracts/ScratchStorage/contract.algo.ts:49 // const bytesValue = Scratch.loadBytes(1) load 1 - // contracts/ScratchStorage/contract.algo.ts:48 + // contracts/ScratchStorage/contract.algo.ts:46 // const value1 = Scratch.loadUint64(0) load 0 - // contracts/ScratchStorage/contract.algo.ts:53 + // contracts/ScratchStorage/contract.algo.ts:51 // assert(value1 === 42, 'Value in slot 0 should be 42') intc_2 // 42 == assert // Value in slot 0 should be 42 - // contracts/ScratchStorage/contract.algo.ts:54 + // contracts/ScratchStorage/contract.algo.ts:52 // assert(bytesValue === Bytes('Hello, Algorand!'), 'Value in slot 1 should be "Hello, Algorand!"') bytec_1 // "Hello, Algorand!" == assert // Value in slot 1 should be "Hello, Algorand!" - // contracts/ScratchStorage/contract.algo.ts:55 + // contracts/ScratchStorage/contract.algo.ts:53 // assert(value2 === 100, 'Value in slot 2 should be 100') swap intc_3 // 100 == assert // Value in slot 2 should be 100 - // contracts/ScratchStorage/contract.algo.ts:56 + // contracts/ScratchStorage/contract.algo.ts:54 // assert(value3 === 999, 'Value in slot 15 should be 999') pushint 999 // 999 == assert // Value in slot 15 should be 999 - // contracts/ScratchStorage/contract.algo.ts:69 + // contracts/ScratchStorage/contract.algo.ts:65 // return true intc_0 // 1 retsub @@ -170,11 +170,11 @@ demonstrateScratchStorage: // contracts/ScratchStorage/contract.algo.ts::ScratchStorage.readFromGroupTransaction(groupIndex: uint64, scratchSlot: uint64) -> uint64: readFromGroupTransaction: - // contracts/ScratchStorage/contract.algo.ts:80-81 + // contracts/ScratchStorage/contract.algo.ts:74-75 // @abimethod({ readonly: true }) // public readFromGroupTransaction(groupIndex: uint64, scratchSlot: uint64): uint64 { proto 2 1 - // contracts/ScratchStorage/contract.algo.ts:82 + // contracts/ScratchStorage/contract.algo.ts:76 // return gloadUint64(groupIndex, scratchSlot) frame_dig -2 frame_dig -1 @@ -184,11 +184,11 @@ readFromGroupTransaction: // contracts/ScratchStorage/contract.algo.ts::ScratchStorage.readBytesFromGroupTransaction(groupIndex: uint64, scratchSlot: uint64) -> bytes: readBytesFromGroupTransaction: - // contracts/ScratchStorage/contract.algo.ts:93-94 + // contracts/ScratchStorage/contract.algo.ts:85-86 // @abimethod({ readonly: true }) // public readBytesFromGroupTransaction(groupIndex: uint64, scratchSlot: uint64): bytes { proto 2 1 - // contracts/ScratchStorage/contract.algo.ts:95 + // contracts/ScratchStorage/contract.algo.ts:87 // return gloadBytes(groupIndex, scratchSlot) frame_dig -2 frame_dig -1 diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ScratchStorage/ScratchStorage.arc32.json b/projects/typescript-examples/contracts/artifacts/contracts/ScratchStorage/ScratchStorage.arc32.json index da3d96b..5ceb174 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ScratchStorage/ScratchStorage.arc32.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/ScratchStorage/ScratchStorage.arc32.json @@ -19,7 +19,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDQyIDEwMAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1ICJIZWxsbywgQWxnb3JhbmQhIgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjYtMjcKICAgIC8vIEBjb250cmFjdCh7IHNjcmF0Y2hTbG90czogWzAsIDEsIDIsIHsgZnJvbTogMTAsIHRvOiAyMCB9XSB9KSAvLyBUaGlzIHJlc2VydmVzIHNsb3RzIDAsIDEsIDIgYW5kIHNsb3RzIDEwLTIwCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBTY3JhdGNoU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A4CiAgICBwdXNoYnl0ZXNzIDB4MDExNjhjNWMgMHgwZWVjMGJkOSAweDEwZmI0YTY2IC8vIG1ldGhvZCAiZGVtb25zdHJhdGVTY3JhdGNoU3RvcmFnZSgpYm9vbCIsIG1ldGhvZCAicmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uKHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJyZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbih1aW50NjQsdWludDY0KWJ5dGVbXSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZGVtb25zdHJhdGVTY3JhdGNoU3RvcmFnZV9yb3V0ZUAzIG1haW5fcmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uX3JvdXRlQDQgbWFpbl9yZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbl9yb3V0ZUA1CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNi0yNwogICAgLy8gQGNvbnRyYWN0KHsgc2NyYXRjaFNsb3RzOiBbMCwgMSwgMiwgeyBmcm9tOiAxMCwgdG86IDIwIH1dIH0pIC8vIFRoaXMgcmVzZXJ2ZXMgc2xvdHMgMCwgMSwgMiBhbmQgc2xvdHMgMTAtMjAKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjcmF0Y2hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9yZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbl9yb3V0ZUA1OgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNi0yNwogICAgLy8gQGNvbnRyYWN0KHsgc2NyYXRjaFNsb3RzOiBbMCwgMSwgMiwgeyBmcm9tOiAxMCwgdG86IDIwIH1dIH0pIC8vIFRoaXMgcmVzZXJ2ZXMgc2xvdHMgMCwgMSwgMiBhbmQgc2xvdHMgMTAtMjAKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjcmF0Y2hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiByZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI2LTI3CiAgICAvLyBAY29udHJhY3QoeyBzY3JhdGNoU2xvdHM6IFswLCAxLCAyLCB7IGZyb206IDEwLCB0bzogMjAgfV0gfSkgLy8gVGhpcyByZXNlcnZlcyBzbG90cyAwLCAxLCAyIGFuZCBzbG90cyAxMC0yMAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NyYXRjaFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIHJlYWRGcm9tR3JvdXBUcmFuc2FjdGlvbgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZW1vbnN0cmF0ZVNjcmF0Y2hTdG9yYWdlX3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo2NQogICAgLy8gcHVibGljIGRlbW9uc3RyYXRlU2NyYXRjaFN0b3JhZ2UoKTogYm9vbGVhbiB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVtb25zdHJhdGVTY3JhdGNoU3RvcmFnZQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAODoKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI2LTI3CiAgICAvLyBAY29udHJhY3QoeyBzY3JhdGNoU2xvdHM6IFswLCAxLCAyLCB7IGZyb206IDEwLCB0bzogMjAgfV0gfSkgLy8gVGhpcyByZXNlcnZlcyBzbG90cyAwLCAxLCAyIGFuZCBzbG90cyAxMC0yMAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NyYXRjaFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDEyCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpTY3JhdGNoU3RvcmFnZS5kZW1vbnN0cmF0ZVNjcmF0Y2hTdG9yYWdlKCkgLT4gdWludDY0OgpkZW1vbnN0cmF0ZVNjcmF0Y2hTdG9yYWdlOgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzQKICAgIC8vIFNjcmF0Y2guc3RvcmUoMCwgVWludDY0KDQyKSkKICAgIGludGNfMiAvLyA0MgogICAgc3RvcmUgMAogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzUKICAgIC8vIFNjcmF0Y2guc3RvcmUoMSwgQnl0ZXMoJ0hlbGxvLCBBbGdvcmFuZCEnKSkKICAgIGJ5dGVjXzEgLy8gIkhlbGxvLCBBbGdvcmFuZCEiCiAgICBzdG9yZSAxCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNgogICAgLy8gU2NyYXRjaC5zdG9yZSgyLCBVaW50NjQoMTAwKSkKICAgIGludGNfMyAvLyAxMDAKICAgIHN0b3JlIDIKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM3CiAgICAvLyBTY3JhdGNoLnN0b3JlKDE1LCBVaW50NjQoOTk5KSkKICAgIHB1c2hpbnQgOTk5IC8vIDk5OQogICAgc3RvcmUgMTUKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyBjb25zdCB2YWx1ZTIgPSBTY3JhdGNoLmxvYWRVaW50NjQoMikKICAgIGxvYWQgMgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NTAKICAgIC8vIGNvbnN0IHZhbHVlMyA9IFNjcmF0Y2gubG9hZFVpbnQ2NCgxNSkKICAgIGxvYWQgMTUKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBjb25zdCBieXRlc1ZhbHVlID0gU2NyYXRjaC5sb2FkQnl0ZXMoMSkKICAgIGxvYWQgMQogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGNvbnN0IHZhbHVlMSA9IFNjcmF0Y2gubG9hZFVpbnQ2NCgwKQogICAgbG9hZCAwCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gYXNzZXJ0KHZhbHVlMSA9PT0gNDIsICdWYWx1ZSBpbiBzbG90IDAgc2hvdWxkIGJlIDQyJykKICAgIGludGNfMiAvLyA0MgogICAgPT0KICAgIGFzc2VydCAvLyBWYWx1ZSBpbiBzbG90IDAgc2hvdWxkIGJlIDQyCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo1NAogICAgLy8gYXNzZXJ0KGJ5dGVzVmFsdWUgPT09IEJ5dGVzKCdIZWxsbywgQWxnb3JhbmQhJyksICdWYWx1ZSBpbiBzbG90IDEgc2hvdWxkIGJlICJIZWxsbywgQWxnb3JhbmQhIicpCiAgICBieXRlY18xIC8vICJIZWxsbywgQWxnb3JhbmQhIgogICAgPT0KICAgIGFzc2VydCAvLyBWYWx1ZSBpbiBzbG90IDEgc2hvdWxkIGJlICJIZWxsbywgQWxnb3JhbmQhIgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGFzc2VydCh2YWx1ZTIgPT09IDEwMCwgJ1ZhbHVlIGluIHNsb3QgMiBzaG91bGQgYmUgMTAwJykKICAgIHN3YXAKICAgIGludGNfMyAvLyAxMDAKICAgID09CiAgICBhc3NlcnQgLy8gVmFsdWUgaW4gc2xvdCAyIHNob3VsZCBiZSAxMDAKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBhc3NlcnQodmFsdWUzID09PSA5OTksICdWYWx1ZSBpbiBzbG90IDE1IHNob3VsZCBiZSA5OTknKQogICAgcHVzaGludCA5OTkgLy8gOTk5CiAgICA9PQogICAgYXNzZXJ0IC8vIFZhbHVlIGluIHNsb3QgMTUgc2hvdWxkIGJlIDk5OQogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIHJldHVybiB0cnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OlNjcmF0Y2hTdG9yYWdlLnJlYWRGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpIC0+IHVpbnQ2NDoKcmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uOgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODAtODEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIHJlYWRGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gcmV0dXJuIGdsb2FkVWludDY0KGdyb3VwSW5kZXgsIHNjcmF0Y2hTbG90KQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGdsb2Fkc3MKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpTY3JhdGNoU3RvcmFnZS5yZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpIC0+IGJ5dGVzOgpyZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjkzLTk0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyByZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjk1CiAgICAvLyByZXR1cm4gZ2xvYWRCeXRlcyhncm91cEluZGV4LCBzY3JhdGNoU2xvdCkKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBnbG9hZHNzCiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDQyIDEwMAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1ICJIZWxsbywgQWxnb3JhbmQhIgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjctMjgKICAgIC8vIEBjb250cmFjdCh7IHNjcmF0Y2hTbG90czogWzAsIDEsIDIsIHsgZnJvbTogMTAsIHRvOiAyMCB9XSB9KSAvLyBUaGlzIHJlc2VydmVzIHNsb3RzIDAsIDEsIDIgYW5kIHNsb3RzIDEwLTIwCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBTY3JhdGNoU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A4CiAgICBwdXNoYnl0ZXNzIDB4MDExNjhjNWMgMHgwZWVjMGJkOSAweDEwZmI0YTY2IC8vIG1ldGhvZCAiZGVtb25zdHJhdGVTY3JhdGNoU3RvcmFnZSgpYm9vbCIsIG1ldGhvZCAicmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uKHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJyZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbih1aW50NjQsdWludDY0KWJ5dGVbXSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZGVtb25zdHJhdGVTY3JhdGNoU3RvcmFnZV9yb3V0ZUAzIG1haW5fcmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uX3JvdXRlQDQgbWFpbl9yZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbl9yb3V0ZUA1CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc2NyYXRjaFNsb3RzOiBbMCwgMSwgMiwgeyBmcm9tOiAxMCwgdG86IDIwIH1dIH0pIC8vIFRoaXMgcmVzZXJ2ZXMgc2xvdHMgMCwgMSwgMiBhbmQgc2xvdHMgMTAtMjAKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjcmF0Y2hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9yZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbl9yb3V0ZUA1OgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc2NyYXRjaFNsb3RzOiBbMCwgMSwgMiwgeyBmcm9tOiAxMCwgdG86IDIwIH1dIH0pIC8vIFRoaXMgcmVzZXJ2ZXMgc2xvdHMgMCwgMSwgMiBhbmQgc2xvdHMgMTAtMjAKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjcmF0Y2hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiByZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo3NAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzY3JhdGNoU2xvdHM6IFswLCAxLCAyLCB7IGZyb206IDEwLCB0bzogMjAgfV0gfSkgLy8gVGhpcyByZXNlcnZlcyBzbG90cyAwLCAxLCAyIGFuZCBzbG90cyAxMC0yMAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NyYXRjaFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo3NAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIHJlYWRGcm9tR3JvdXBUcmFuc2FjdGlvbgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZW1vbnN0cmF0ZVNjcmF0Y2hTdG9yYWdlX3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo2MQogICAgLy8gcHVibGljIGRlbW9uc3RyYXRlU2NyYXRjaFN0b3JhZ2UoKTogYm9vbGVhbiB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVtb25zdHJhdGVTY3JhdGNoU3RvcmFnZQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAODoKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzY3JhdGNoU2xvdHM6IFswLCAxLCAyLCB7IGZyb206IDEwLCB0bzogMjAgfV0gfSkgLy8gVGhpcyByZXNlcnZlcyBzbG90cyAwLCAxLCAyIGFuZCBzbG90cyAxMC0yMAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NyYXRjaFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDEyCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpTY3JhdGNoU3RvcmFnZS5kZW1vbnN0cmF0ZVNjcmF0Y2hTdG9yYWdlKCkgLT4gdWludDY0OgpkZW1vbnN0cmF0ZVNjcmF0Y2hTdG9yYWdlOgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzQKICAgIC8vIFNjcmF0Y2guc3RvcmUoMCwgVWludDY0KDQyKSkKICAgIGludGNfMiAvLyA0MgogICAgc3RvcmUgMAogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzUKICAgIC8vIFNjcmF0Y2guc3RvcmUoMSwgQnl0ZXMoJ0hlbGxvLCBBbGdvcmFuZCEnKSkKICAgIGJ5dGVjXzEgLy8gIkhlbGxvLCBBbGdvcmFuZCEiCiAgICBzdG9yZSAxCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNgogICAgLy8gU2NyYXRjaC5zdG9yZSgyLCBVaW50NjQoMTAwKSkKICAgIGludGNfMyAvLyAxMDAKICAgIHN0b3JlIDIKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM3CiAgICAvLyBTY3JhdGNoLnN0b3JlKDE1LCBVaW50NjQoOTk5KSkKICAgIHB1c2hpbnQgOTk5IC8vIDk5OQogICAgc3RvcmUgMTUKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyBjb25zdCB2YWx1ZTIgPSBTY3JhdGNoLmxvYWRVaW50NjQoMikKICAgIGxvYWQgMgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGNvbnN0IHZhbHVlMyA9IFNjcmF0Y2gubG9hZFVpbnQ2NCgxNSkKICAgIGxvYWQgMTUKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyBjb25zdCBieXRlc1ZhbHVlID0gU2NyYXRjaC5sb2FkQnl0ZXMoMSkKICAgIGxvYWQgMQogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIGNvbnN0IHZhbHVlMSA9IFNjcmF0Y2gubG9hZFVpbnQ2NCgwKQogICAgbG9hZCAwCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gYXNzZXJ0KHZhbHVlMSA9PT0gNDIsICdWYWx1ZSBpbiBzbG90IDAgc2hvdWxkIGJlIDQyJykKICAgIGludGNfMiAvLyA0MgogICAgPT0KICAgIGFzc2VydCAvLyBWYWx1ZSBpbiBzbG90IDAgc2hvdWxkIGJlIDQyCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo1MgogICAgLy8gYXNzZXJ0KGJ5dGVzVmFsdWUgPT09IEJ5dGVzKCdIZWxsbywgQWxnb3JhbmQhJyksICdWYWx1ZSBpbiBzbG90IDEgc2hvdWxkIGJlICJIZWxsbywgQWxnb3JhbmQhIicpCiAgICBieXRlY18xIC8vICJIZWxsbywgQWxnb3JhbmQhIgogICAgPT0KICAgIGFzc2VydCAvLyBWYWx1ZSBpbiBzbG90IDEgc2hvdWxkIGJlICJIZWxsbywgQWxnb3JhbmQhIgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NTMKICAgIC8vIGFzc2VydCh2YWx1ZTIgPT09IDEwMCwgJ1ZhbHVlIGluIHNsb3QgMiBzaG91bGQgYmUgMTAwJykKICAgIHN3YXAKICAgIGludGNfMyAvLyAxMDAKICAgID09CiAgICBhc3NlcnQgLy8gVmFsdWUgaW4gc2xvdCAyIHNob3VsZCBiZSAxMDAKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBhc3NlcnQodmFsdWUzID09PSA5OTksICdWYWx1ZSBpbiBzbG90IDE1IHNob3VsZCBiZSA5OTknKQogICAgcHVzaGludCA5OTkgLy8gOTk5CiAgICA9PQogICAgYXNzZXJ0IC8vIFZhbHVlIGluIHNsb3QgMTUgc2hvdWxkIGJlIDk5OQogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIHJldHVybiB0cnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OlNjcmF0Y2hTdG9yYWdlLnJlYWRGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpIC0+IHVpbnQ2NDoKcmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uOgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NzQtNzUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIHJlYWRGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gcmV0dXJuIGdsb2FkVWludDY0KGdyb3VwSW5kZXgsIHNjcmF0Y2hTbG90KQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGdsb2Fkc3MKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpTY3JhdGNoU3RvcmFnZS5yZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpIC0+IGJ5dGVzOgpyZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg1LTg2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyByZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyByZXR1cm4gZ2xvYWRCeXRlcyhncm91cEluZGV4LCBzY3JhdGNoU2xvdCkKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBnbG9hZHNzCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ScratchStorage/ScratchStorage.arc56.json b/projects/typescript-examples/contracts/artifacts/contracts/ScratchStorage/ScratchStorage.arc56.json index 90fb7a5..273a2fe 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ScratchStorage/ScratchStorage.arc56.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/ScratchStorage/ScratchStorage.arc56.json @@ -171,7 +171,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDQyIDEwMAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1ICJIZWxsbywgQWxnb3JhbmQhIgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjYtMjcKICAgIC8vIEBjb250cmFjdCh7IHNjcmF0Y2hTbG90czogWzAsIDEsIDIsIHsgZnJvbTogMTAsIHRvOiAyMCB9XSB9KSAvLyBUaGlzIHJlc2VydmVzIHNsb3RzIDAsIDEsIDIgYW5kIHNsb3RzIDEwLTIwCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBTY3JhdGNoU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A4CiAgICBwdXNoYnl0ZXNzIDB4MDExNjhjNWMgMHgwZWVjMGJkOSAweDEwZmI0YTY2IC8vIG1ldGhvZCAiZGVtb25zdHJhdGVTY3JhdGNoU3RvcmFnZSgpYm9vbCIsIG1ldGhvZCAicmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uKHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJyZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbih1aW50NjQsdWludDY0KWJ5dGVbXSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZGVtb25zdHJhdGVTY3JhdGNoU3RvcmFnZV9yb3V0ZUAzIG1haW5fcmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uX3JvdXRlQDQgbWFpbl9yZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbl9yb3V0ZUA1CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNi0yNwogICAgLy8gQGNvbnRyYWN0KHsgc2NyYXRjaFNsb3RzOiBbMCwgMSwgMiwgeyBmcm9tOiAxMCwgdG86IDIwIH1dIH0pIC8vIFRoaXMgcmVzZXJ2ZXMgc2xvdHMgMCwgMSwgMiBhbmQgc2xvdHMgMTAtMjAKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjcmF0Y2hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9yZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbl9yb3V0ZUA1OgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNi0yNwogICAgLy8gQGNvbnRyYWN0KHsgc2NyYXRjaFNsb3RzOiBbMCwgMSwgMiwgeyBmcm9tOiAxMCwgdG86IDIwIH1dIH0pIC8vIFRoaXMgcmVzZXJ2ZXMgc2xvdHMgMCwgMSwgMiBhbmQgc2xvdHMgMTAtMjAKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjcmF0Y2hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiByZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI2LTI3CiAgICAvLyBAY29udHJhY3QoeyBzY3JhdGNoU2xvdHM6IFswLCAxLCAyLCB7IGZyb206IDEwLCB0bzogMjAgfV0gfSkgLy8gVGhpcyByZXNlcnZlcyBzbG90cyAwLCAxLCAyIGFuZCBzbG90cyAxMC0yMAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NyYXRjaFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIHJlYWRGcm9tR3JvdXBUcmFuc2FjdGlvbgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZW1vbnN0cmF0ZVNjcmF0Y2hTdG9yYWdlX3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo2NQogICAgLy8gcHVibGljIGRlbW9uc3RyYXRlU2NyYXRjaFN0b3JhZ2UoKTogYm9vbGVhbiB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVtb25zdHJhdGVTY3JhdGNoU3RvcmFnZQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAODoKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI2LTI3CiAgICAvLyBAY29udHJhY3QoeyBzY3JhdGNoU2xvdHM6IFswLCAxLCAyLCB7IGZyb206IDEwLCB0bzogMjAgfV0gfSkgLy8gVGhpcyByZXNlcnZlcyBzbG90cyAwLCAxLCAyIGFuZCBzbG90cyAxMC0yMAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NyYXRjaFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDEyCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpTY3JhdGNoU3RvcmFnZS5kZW1vbnN0cmF0ZVNjcmF0Y2hTdG9yYWdlKCkgLT4gdWludDY0OgpkZW1vbnN0cmF0ZVNjcmF0Y2hTdG9yYWdlOgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzQKICAgIC8vIFNjcmF0Y2guc3RvcmUoMCwgVWludDY0KDQyKSkKICAgIGludGNfMiAvLyA0MgogICAgc3RvcmUgMAogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzUKICAgIC8vIFNjcmF0Y2guc3RvcmUoMSwgQnl0ZXMoJ0hlbGxvLCBBbGdvcmFuZCEnKSkKICAgIGJ5dGVjXzEgLy8gIkhlbGxvLCBBbGdvcmFuZCEiCiAgICBzdG9yZSAxCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNgogICAgLy8gU2NyYXRjaC5zdG9yZSgyLCBVaW50NjQoMTAwKSkKICAgIGludGNfMyAvLyAxMDAKICAgIHN0b3JlIDIKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM3CiAgICAvLyBTY3JhdGNoLnN0b3JlKDE1LCBVaW50NjQoOTk5KSkKICAgIHB1c2hpbnQgOTk5IC8vIDk5OQogICAgc3RvcmUgMTUKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyBjb25zdCB2YWx1ZTIgPSBTY3JhdGNoLmxvYWRVaW50NjQoMikKICAgIGxvYWQgMgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NTAKICAgIC8vIGNvbnN0IHZhbHVlMyA9IFNjcmF0Y2gubG9hZFVpbnQ2NCgxNSkKICAgIGxvYWQgMTUKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBjb25zdCBieXRlc1ZhbHVlID0gU2NyYXRjaC5sb2FkQnl0ZXMoMSkKICAgIGxvYWQgMQogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGNvbnN0IHZhbHVlMSA9IFNjcmF0Y2gubG9hZFVpbnQ2NCgwKQogICAgbG9hZCAwCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gYXNzZXJ0KHZhbHVlMSA9PT0gNDIsICdWYWx1ZSBpbiBzbG90IDAgc2hvdWxkIGJlIDQyJykKICAgIGludGNfMiAvLyA0MgogICAgPT0KICAgIGFzc2VydCAvLyBWYWx1ZSBpbiBzbG90IDAgc2hvdWxkIGJlIDQyCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo1NAogICAgLy8gYXNzZXJ0KGJ5dGVzVmFsdWUgPT09IEJ5dGVzKCdIZWxsbywgQWxnb3JhbmQhJyksICdWYWx1ZSBpbiBzbG90IDEgc2hvdWxkIGJlICJIZWxsbywgQWxnb3JhbmQhIicpCiAgICBieXRlY18xIC8vICJIZWxsbywgQWxnb3JhbmQhIgogICAgPT0KICAgIGFzc2VydCAvLyBWYWx1ZSBpbiBzbG90IDEgc2hvdWxkIGJlICJIZWxsbywgQWxnb3JhbmQhIgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGFzc2VydCh2YWx1ZTIgPT09IDEwMCwgJ1ZhbHVlIGluIHNsb3QgMiBzaG91bGQgYmUgMTAwJykKICAgIHN3YXAKICAgIGludGNfMyAvLyAxMDAKICAgID09CiAgICBhc3NlcnQgLy8gVmFsdWUgaW4gc2xvdCAyIHNob3VsZCBiZSAxMDAKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBhc3NlcnQodmFsdWUzID09PSA5OTksICdWYWx1ZSBpbiBzbG90IDE1IHNob3VsZCBiZSA5OTknKQogICAgcHVzaGludCA5OTkgLy8gOTk5CiAgICA9PQogICAgYXNzZXJ0IC8vIFZhbHVlIGluIHNsb3QgMTUgc2hvdWxkIGJlIDk5OQogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIHJldHVybiB0cnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OlNjcmF0Y2hTdG9yYWdlLnJlYWRGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpIC0+IHVpbnQ2NDoKcmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uOgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODAtODEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIHJlYWRGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gcmV0dXJuIGdsb2FkVWludDY0KGdyb3VwSW5kZXgsIHNjcmF0Y2hTbG90KQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGdsb2Fkc3MKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpTY3JhdGNoU3RvcmFnZS5yZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpIC0+IGJ5dGVzOgpyZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjkzLTk0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyByZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjk1CiAgICAvLyByZXR1cm4gZ2xvYWRCeXRlcyhncm91cEluZGV4LCBzY3JhdGNoU2xvdCkKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBnbG9hZHNzCiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDQyIDEwMAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1ICJIZWxsbywgQWxnb3JhbmQhIgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MjctMjgKICAgIC8vIEBjb250cmFjdCh7IHNjcmF0Y2hTbG90czogWzAsIDEsIDIsIHsgZnJvbTogMTAsIHRvOiAyMCB9XSB9KSAvLyBUaGlzIHJlc2VydmVzIHNsb3RzIDAsIDEsIDIgYW5kIHNsb3RzIDEwLTIwCiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBTY3JhdGNoU3RvcmFnZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A4CiAgICBwdXNoYnl0ZXNzIDB4MDExNjhjNWMgMHgwZWVjMGJkOSAweDEwZmI0YTY2IC8vIG1ldGhvZCAiZGVtb25zdHJhdGVTY3JhdGNoU3RvcmFnZSgpYm9vbCIsIG1ldGhvZCAicmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uKHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJyZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbih1aW50NjQsdWludDY0KWJ5dGVbXSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZGVtb25zdHJhdGVTY3JhdGNoU3RvcmFnZV9yb3V0ZUAzIG1haW5fcmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uX3JvdXRlQDQgbWFpbl9yZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbl9yb3V0ZUA1CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc2NyYXRjaFNsb3RzOiBbMCwgMSwgMiwgeyBmcm9tOiAxMCwgdG86IDIwIH1dIH0pIC8vIFRoaXMgcmVzZXJ2ZXMgc2xvdHMgMCwgMSwgMiBhbmQgc2xvdHMgMTAtMjAKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjcmF0Y2hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9yZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbl9yb3V0ZUA1OgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc2NyYXRjaFNsb3RzOiBbMCwgMSwgMiwgeyBmcm9tOiAxMCwgdG86IDIwIH1dIH0pIC8vIFRoaXMgcmVzZXJ2ZXMgc2xvdHMgMCwgMSwgMiBhbmQgc2xvdHMgMTAtMjAKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjcmF0Y2hTdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiByZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo3NAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzY3JhdGNoU2xvdHM6IFswLCAxLCAyLCB7IGZyb206IDEwLCB0bzogMjAgfV0gfSkgLy8gVGhpcyByZXNlcnZlcyBzbG90cyAwLCAxLCAyIGFuZCBzbG90cyAxMC0yMAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NyYXRjaFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo3NAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIHJlYWRGcm9tR3JvdXBUcmFuc2FjdGlvbgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZW1vbnN0cmF0ZVNjcmF0Y2hTdG9yYWdlX3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo2MQogICAgLy8gcHVibGljIGRlbW9uc3RyYXRlU2NyYXRjaFN0b3JhZ2UoKTogYm9vbGVhbiB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVtb25zdHJhdGVTY3JhdGNoU3RvcmFnZQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAODoKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzY3JhdGNoU2xvdHM6IFswLCAxLCAyLCB7IGZyb206IDEwLCB0bzogMjAgfV0gfSkgLy8gVGhpcyByZXNlcnZlcyBzbG90cyAwLCAxLCAyIGFuZCBzbG90cyAxMC0yMAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NyYXRjaFN0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDEyCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpTY3JhdGNoU3RvcmFnZS5kZW1vbnN0cmF0ZVNjcmF0Y2hTdG9yYWdlKCkgLT4gdWludDY0OgpkZW1vbnN0cmF0ZVNjcmF0Y2hTdG9yYWdlOgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzQKICAgIC8vIFNjcmF0Y2guc3RvcmUoMCwgVWludDY0KDQyKSkKICAgIGludGNfMiAvLyA0MgogICAgc3RvcmUgMAogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6MzUKICAgIC8vIFNjcmF0Y2guc3RvcmUoMSwgQnl0ZXMoJ0hlbGxvLCBBbGdvcmFuZCEnKSkKICAgIGJ5dGVjXzEgLy8gIkhlbGxvLCBBbGdvcmFuZCEiCiAgICBzdG9yZSAxCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czozNgogICAgLy8gU2NyYXRjaC5zdG9yZSgyLCBVaW50NjQoMTAwKSkKICAgIGludGNfMyAvLyAxMDAKICAgIHN0b3JlIDIKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjM3CiAgICAvLyBTY3JhdGNoLnN0b3JlKDE1LCBVaW50NjQoOTk5KSkKICAgIHB1c2hpbnQgOTk5IC8vIDk5OQogICAgc3RvcmUgMTUKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyBjb25zdCB2YWx1ZTIgPSBTY3JhdGNoLmxvYWRVaW50NjQoMikKICAgIGxvYWQgMgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGNvbnN0IHZhbHVlMyA9IFNjcmF0Y2gubG9hZFVpbnQ2NCgxNSkKICAgIGxvYWQgMTUKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyBjb25zdCBieXRlc1ZhbHVlID0gU2NyYXRjaC5sb2FkQnl0ZXMoMSkKICAgIGxvYWQgMQogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIGNvbnN0IHZhbHVlMSA9IFNjcmF0Y2gubG9hZFVpbnQ2NCgwKQogICAgbG9hZCAwCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gYXNzZXJ0KHZhbHVlMSA9PT0gNDIsICdWYWx1ZSBpbiBzbG90IDAgc2hvdWxkIGJlIDQyJykKICAgIGludGNfMiAvLyA0MgogICAgPT0KICAgIGFzc2VydCAvLyBWYWx1ZSBpbiBzbG90IDAgc2hvdWxkIGJlIDQyCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo1MgogICAgLy8gYXNzZXJ0KGJ5dGVzVmFsdWUgPT09IEJ5dGVzKCdIZWxsbywgQWxnb3JhbmQhJyksICdWYWx1ZSBpbiBzbG90IDEgc2hvdWxkIGJlICJIZWxsbywgQWxnb3JhbmQhIicpCiAgICBieXRlY18xIC8vICJIZWxsbywgQWxnb3JhbmQhIgogICAgPT0KICAgIGFzc2VydCAvLyBWYWx1ZSBpbiBzbG90IDEgc2hvdWxkIGJlICJIZWxsbywgQWxnb3JhbmQhIgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NTMKICAgIC8vIGFzc2VydCh2YWx1ZTIgPT09IDEwMCwgJ1ZhbHVlIGluIHNsb3QgMiBzaG91bGQgYmUgMTAwJykKICAgIHN3YXAKICAgIGludGNfMyAvLyAxMDAKICAgID09CiAgICBhc3NlcnQgLy8gVmFsdWUgaW4gc2xvdCAyIHNob3VsZCBiZSAxMDAKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBhc3NlcnQodmFsdWUzID09PSA5OTksICdWYWx1ZSBpbiBzbG90IDE1IHNob3VsZCBiZSA5OTknKQogICAgcHVzaGludCA5OTkgLy8gOTk5CiAgICA9PQogICAgYXNzZXJ0IC8vIFZhbHVlIGluIHNsb3QgMTUgc2hvdWxkIGJlIDk5OQogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIHJldHVybiB0cnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6OlNjcmF0Y2hTdG9yYWdlLnJlYWRGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpIC0+IHVpbnQ2NDoKcmVhZEZyb21Hcm91cFRyYW5zYWN0aW9uOgogICAgLy8gY29udHJhY3RzL1NjcmF0Y2hTdG9yYWdlL2NvbnRyYWN0LmFsZ28udHM6NzQtNzUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIHJlYWRGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyBjb250cmFjdHMvU2NyYXRjaFN0b3JhZ2UvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gcmV0dXJuIGdsb2FkVWludDY0KGdyb3VwSW5kZXgsIHNjcmF0Y2hTbG90KQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGdsb2Fkc3MKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjpTY3JhdGNoU3RvcmFnZS5yZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpIC0+IGJ5dGVzOgpyZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg1LTg2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyByZWFkQnl0ZXNGcm9tR3JvdXBUcmFuc2FjdGlvbihncm91cEluZGV4OiB1aW50NjQsIHNjcmF0Y2hTbG90OiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIGNvbnRyYWN0cy9TY3JhdGNoU3RvcmFnZS9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyByZXR1cm4gZ2xvYWRCeXRlcyhncm91cEluZGV4LCBzY3JhdGNoU2xvdCkKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBnbG9hZHNzCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": {