2024-03-19 21:19:38 +00:00
use std ::collections ::BTreeMap ;
2023-11-29 21:13:20 +00:00
use cosmwasm_schema ::{ cw_serde , QueryResponses } ;
2024-07-30 17:55:52 +00:00
use cosmwasm_std ::{ Addr , HexBinary , Uint128 , Uint64 } ;
use quartz_common ::contract ::{
2024-07-18 23:34:31 +00:00
msg ::execute ::attested ::{ RawAttested , RawAttestedMsgSansHandler , RawDefaultAttestation } ,
2024-06-20 19:56:01 +00:00
prelude ::* ,
} ;
2024-03-19 21:19:38 +00:00
2024-07-30 17:55:52 +00:00
use crate ::state ::{ LiquiditySource , RawHash , SettleOff } ;
2023-11-29 21:13:20 +00:00
2024-07-30 17:55:52 +00:00
pub type AttestedMsg < M , RA > = RawAttested < RawAttestedMsgSansHandler < M > , RA > ;
2024-06-20 19:56:01 +00:00
2023-11-29 21:13:20 +00:00
#[ cw_serde ]
2024-08-06 20:50:11 +00:00
pub struct InstantiateMsg < RA = RawDefaultAttestation > {
pub quartz : QuartzInstantiateMsg < RA > ,
}
2023-11-29 21:13:20 +00:00
#[ cw_serde ]
2024-03-19 21:19:38 +00:00
#[ allow(clippy::large_enum_variant) ]
2024-07-18 23:34:31 +00:00
pub enum ExecuteMsg < RA = RawDefaultAttestation > {
2024-09-25 19:14:06 +00:00
Quartz ( QuartzExecuteMsg < RA > ) ,
2024-06-18 09:30:00 +00:00
FaucetMint ( execute ::FaucetMintMsg ) ,
Transfer ( execute ::Cw20Transfer ) ,
2024-03-19 21:19:38 +00:00
SubmitObligation ( execute ::SubmitObligationMsg ) ,
2024-05-07 22:06:09 +00:00
SubmitObligations ( execute ::SubmitObligationsMsg ) ,
2024-07-18 23:34:31 +00:00
SubmitSetoffs ( AttestedMsg < execute ::SubmitSetoffsMsg , RA > ) ,
2024-08-21 16:43:59 +00:00
InitClearing { } ,
2024-07-01 20:35:52 +00:00
SetLiquiditySources ( execute ::SetLiquiditySourcesMsg ) ,
2023-11-29 22:09:57 +00:00
}
2023-11-29 21:13:20 +00:00
2024-07-30 17:55:52 +00:00
// TODO: Added this back here because adding overdraft contract as a dependency is causing errors. Overdraft isn't correctly disabling entrypoints when acting as a dependency
#[ cw_serde ]
pub enum OverdraftExecuteMsg {
DrawCredit {
receiver : Addr ,
amount : Uint128 ,
} ,
DrawCreditFromTender {
debtor : Addr ,
amount : Uint128 ,
} ,
TransferCreditFromTender {
sender : Addr ,
receiver : Addr ,
amount : Uint128 ,
} ,
IncreaseBalance {
receiver : Addr ,
amount : Uint128 ,
} ,
DecreaseBalance {
receiver : Addr ,
amount : Uint128 ,
} ,
Lock { } ,
Unlock { } ,
AddOwner {
new : Addr ,
} ,
}
2023-11-29 21:37:02 +00:00
pub mod execute {
2024-07-30 17:55:52 +00:00
use cosmwasm_std ::Uint128 ;
use quartz_common ::contract ::{ msg ::execute ::attested ::HasUserData , state ::UserData } ;
2024-06-20 19:56:01 +00:00
use sha2 ::{ Digest , Sha256 } ;
2024-03-19 21:19:38 +00:00
use super ::* ;
2024-07-30 17:55:52 +00:00
use crate ::state ::LiquiditySource ;
2023-12-22 13:10:51 +00:00
2024-06-18 09:30:00 +00:00
#[ cw_serde ]
pub struct FaucetMintMsg {
pub recipient : String ,
pub amount : u64 ,
}
#[ cw_serde ]
pub struct Cw20Transfer {
pub recipient : String ,
pub amount : u64 ,
}
2024-01-10 15:10:24 +00:00
#[ cw_serde ]
2024-03-19 21:19:38 +00:00
pub struct SubmitObligationMsg {
pub ciphertext : HexBinary ,
pub digest : HexBinary ,
// pub signatures: [HexBinary; 2],
// pub proof: π
2024-01-10 15:10:24 +00:00
}
2024-05-07 22:06:09 +00:00
#[ cw_serde ]
2024-05-16 09:05:41 +00:00
pub struct SubmitObligationsMsg {
pub obligations : Vec < SubmitObligationMsg > ,
2024-07-30 17:55:52 +00:00
pub liquidity_sources : Vec < LiquiditySource > ,
2024-05-16 09:05:41 +00:00
}
2024-05-07 22:06:09 +00:00
#[ cw_serde ]
pub struct SubmitTenderMsg {
pub ciphertext : HexBinary ,
pub digest : HexBinary ,
// pub proof: π
}
2023-11-29 21:37:02 +00:00
#[ cw_serde ]
2024-03-19 21:19:38 +00:00
pub struct SubmitSetoffsMsg {
2024-05-07 22:06:09 +00:00
pub setoffs_enc : BTreeMap < RawHash , SettleOff > ,
2024-03-19 21:19:38 +00:00
// pub proof: π,
2023-11-29 21:37:02 +00:00
}
2024-06-20 19:56:01 +00:00
impl HasUserData for SubmitSetoffsMsg {
fn user_data ( & self ) -> UserData {
let mut hasher = Sha256 ::new ( ) ;
hasher . update ( serde_json ::to_string ( & self ) . expect ( " infallible serializer " ) ) ;
let digest : [ u8 ; 32 ] = hasher . finalize ( ) . into ( ) ;
let mut user_data = [ 0 u8 ; 64 ] ;
user_data [ 0 .. 32 ] . copy_from_slice ( & digest ) ;
user_data
}
}
2024-07-01 20:35:52 +00:00
#[ cw_serde ]
pub struct SetLiquiditySourcesMsg {
2024-07-30 17:55:52 +00:00
pub liquidity_sources : Vec < LiquiditySource > ,
}
#[ cw_serde ]
pub enum EscrowExecuteMsg {
ExecuteSetoff {
payer : String ,
payee : String ,
amount : Vec < ( String , Uint128 ) > ,
} ,
2024-07-01 20:35:52 +00:00
}
2023-11-29 21:37:02 +00:00
}
2024-05-16 09:05:41 +00:00
2023-11-29 21:13:20 +00:00
#[ cw_serde ]
#[ derive(QueryResponses) ]
2024-05-07 22:06:09 +00:00
pub enum QueryMsg {
#[ returns(GetAllSetoffsResponse) ]
2024-09-05 17:05:16 +00:00
GetAllSetoffs { } ,
2024-05-16 09:05:41 +00:00
#[ returns(GetLiquiditySourcesResponse) ]
2024-07-11 13:31:46 +00:00
GetLiquiditySources { epoch : Option < Uint64 > } , // `None` means latest
2024-05-07 22:06:09 +00:00
#[ returns(cw20::BalanceResponse) ]
Balance { address : String } ,
}
// We define a custom struct for each query response
#[ cw_serde ]
pub struct GetAllSetoffsResponse {
pub setoffs : Vec < ( HexBinary , SettleOff ) > ,
}
2023-12-05 17:03:43 +00:00
2024-05-16 09:05:41 +00:00
#[ cw_serde ]
pub struct GetLiquiditySourcesResponse {
2024-07-30 17:55:52 +00:00
pub liquidity_sources : Vec < LiquiditySource > ,
2024-05-16 09:05:41 +00:00
}
2024-03-19 21:19:38 +00:00
#[ cfg(test) ]
mod tests {
2023-12-05 17:03:43 +00:00
use super ::* ;
2024-03-19 21:19:38 +00:00
#[ test ]
fn test_serde_instantiate_msg ( ) {
let _ : InstantiateMsg = serde_json ::from_str (
r #" {
2024-08-06 20:50:11 +00:00
" quartz " : {
" msg " : {
" config " : {
" mr_enclave " : " 1bfb949d235f61e5dc40f874ba3e9c36adef1e7a521b4b5f70e10fb1dc803251 " ,
" epoch_duration " : {
" secs " : 43200 ,
" nanos " : 0
} ,
" light_client_opts " : {
" chain_id " : " testing " ,
" trusted_height " : 1 ,
" trusted_hash " : " a1d115ba3a5e9fcc12ed68a9d8669159e9085f6f96ec26619f5c7ceb4ee02869 " ,
" trust_threshold " : [
2 ,
3
] ,
" trusting_period " : 1209600 ,
" max_clock_drift " : 5 ,
" max_block_lag " : 5
2024-09-05 10:07:35 +00:00
} ,
2024-09-25 19:14:06 +00:00
" tcbinfo_contract " : " wasm14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s0phg4d " ,
" dcap_verifier_contract " : " wasm14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s0phg4d "
2024-03-19 21:19:38 +00:00
}
2024-08-06 20:50:11 +00:00
} ,
" attestation " : {
2024-09-25 19:14:06 +00:00
" quote " : " 03000200000000000a000f00939a7233f79c4ca9940a0db3957f06077944f37bdafec57cf7d4ab6bc395e0a1000000000e0e100fffff0100000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000e700000000000000e76ee038f2c61c4edee980be5b80fa5c6ff7934ef3458c72868dbaaa569705ee0000000000000000000000000000000000000000000000000000000000000000255197a6388e504446dbf83726c2a9cb3cef9035cc3dabd6cf47d69a994f959400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c91fdf2b07731beb31190c6e492588aff1be719d725a8c685f337d85bd7fd2480000000000000000000000000000000000000000000000000000000000000000ca1000002529e2f0229c295e0cd8973cc3ad54b214ee0d0cb8efb022694b95bf767587b2fe4d049214f263c4539b36422343567401ac2931fcf4d7bbf27b8021d9dc8957bae275a28eae9b7d785811e4e967e6f5c03cd850bc8087600262e38756786ae09d931d4e77d1b928f25b3c3ff67b42da0a149b07e49fc570ddeff8a8386120880e0e100fffff0100000000000000000000000000000000000000000000000000000000000000000000000000000000001500000000000000e70000000000000096b347a64e5a045e27369c26e6dcda51fd7c850e9b3a3a79e718f43261dee1e400000000000000000000000000000000000000000000000000000000000000008c4f5775d796503e96137f77c68a829a0056ac8ded70140b081b094490c57bff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000254f579e046f1423f1f2da170254f912bb49097a0e041f3f670793e3fd6dd63f000000000000000000000000000000000000000000000000000000000000000058d5d2a9c79533eeac51c24d3bc062c7c26c1e2ffd62e224dfe899251e5fddca4fb757d9edc0d27f50f7954eb81523f8db6054921e66ec8d187685b732d2f25b2000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f0500620e00002d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d494945386a4343424a696741774942416749554854525a7054426e4d59655063575531354542316643507561485177436759494b6f5a497a6a3045417749770a634445694d434147413155454177775a535735305a577767553064594946424453794251624746305a6d397962534244515445614d42674741315545436777520a535735305a577767513239796347397959585270623234784644415342674e564241634d43314e68626e526849454e7359584a684d51737743515944565151490a44414a445154454c4d416b474131554542684d4356564d774868634e4d6a51774e5445344d5449314e4451325768634e4d7a45774e5445344d5449314e4451320a576a42774d534977494159445651514444426c4a626e526c624342545231676755454e4c49454e6c636e52705a6d6c6a5958526c4d526f77474159445651514b0a4442464a626e526c6243424462334a7762334a6864476c76626a45554d424947413155454277774c553246756447456751327868636d4578437a414a42674e560a4241674d416b4e424d517377435159445651514745774a56557a425a4d424d4742797147534d34394167454743437147534d34394177454841304941424f64700a696252626a7639566159476a7159584a766f7670333253752f594861313541727943546735566c384762744348417a396e5952786d4e6a303372553548687a4d0a513030752b364a6d794748744b4f773866364f6a67674d4f4d494944436a416642674e5648534d4547444157674253566231334e765276683655424a796454300a4d383442567776655644427242674e56485238455a4442694d47436758714263686c706f64485277637a6f764c32467761533530636e567a6447566b633256790a646d6c6a5a584d75615735305a577775593239744c334e6e6543396a5a584a3061575a7059324630615739754c3359304c33426a61324e796244396a595431770a624746305a6d397962535a6c626d4e765a476c755a7a316b5a584977485159445652304f42425945464167706b386e6b7a4c6371776b6749376f7567574844560a574d67314d41344741315564447745422f775145417749477744414d42674e5648524d4241663845416a41414d4949434f77594a4b6f5a496876684e415130420a424949434c444343416967774867594b4b6f5a496876684e415130424151515151576f736c643645563066526f62747368385149737a434341575547436971470a534962345451454e41514977676746564d42414743797147534962345451454e415149424167454f4
" collateral " : " a76b726f6f745f63615f63726c590125308201213081c8020101300a06082a8648ce3d0403023068311a301806035504030c11496e74656c2053475820526f6f74204341311a3018060355040a0c11496e74656c20436f72706f726174696f6e3114301206035504070c0b53616e746120436c617261310b300906035504080c024341310b3009060355040613025553170d3233303430333130323235315a170d3234303430323130323235315aa02f302d300a0603551d140403020101301f0603551d2304183016801422650cd65a9d3489f383b49552bf501b392706ac300a06082a8648ce3d0403020348003045022051577d47d9fba157b65f1eb5f4657bbc5e56ccaf735a03f1b963d704805ab118022100939015ec1636e7eafa5f426c1e402647c673132b6850cabd68cef6bad7682a037470636b5f63726c5f6973737565725f636861696e8299029c183018820218981830188202183e18a00302010202150018d018e818aa18da187518d718f9182e1849171898183c187b14186518d018d518f21859184d18300a0608182a1886184818ce183d040302183018681831181a183018180603185504030c111849186e18741865186c182018531847185818201852186f186f18741820184318411831181a1830181806031855040a0c111849186e18741865186c18201843186f18721870186f1872186118741869186f186e1831141830120603185504070c0b18531861186e1874186118201843186c18611872186118310b1830090603185504080c021843184118310b1830090603185504061302185518531830181e170d183118381830183518321831183118301835183018311830185a170d183318331830183518321831183118301835183018311830185a1830187118311823183018210603185504030c181a1849186e18741865186c1820185318471858182018501843184b182018501872186f1863186518731873186f18721820184318411831181a1830181806031855040a0c111849186e18741865186c18201843186f18721870186f1872186118741869186f186e1831141830120603185504070c0b18531861186e1874186118201843186c18611872186118310b1830090603185504080c021843184118310b183009060318550406130218551853183018591830130607182a1886184818ce183d02010608182a1886184818ce183d030107031842000418bf186a18f818d3182918d8188318a018b518d91875186e184f18ee1859189e187e184c1864182618f118a018a218f3183e18fc187e18cf189f182818241837187718eb188318cd187918d5184c0418f618661018c2188918fc188818b8189c182f1837187c0d06189f1862181c141892183018930918ac1318a3188118bb1830188118b81830181f06031855181d1823041818183016188014182218650c18d6185a189d1834188918f3188318b41895185218bf1850181b183918270618ac1830185206031855181d181f04184b183018491830184718a0184518a018431886184118681874187418701873183a182f182f186318651872187418691866186918631861187418651873182e187418721875187318741865186418731865187218761869186318651873182e1869186e18741865186c182e1863186f186d182f1849186e18741865186c1853184718581852186f186f187418431841182e1864186518721830181d06031855181d0e0416041418d018e818aa18da187518d718f9182e1849171898183c187b14186518d018d518f21859184d18300e06031855181d0f010118ff04040302010618301206031855181d13010118ff0408183006010118ff02010018300a0608182a1886184818ce183d04030203184800183018450218210018891881183618ed185618a318b21867185918b7188e18a81880185c18ce1890186118ae18ab18e618c5189218e3182f18c618ef182f182e1820189118b11877021820184618a318ef05182218b318cd0618a00418b4182a18e618ce184018ef184a185d18a218261891182718cc18ff18d218e018f318e018d81518f718599902931830188202188f1830188202183418a0030201020214182218650c18d6185a189d1834188918f3188318b41895185218bf1850181b183918270618ac18300a0608182a1886184818ce183d040302183018681831181a183018180603185504030c111849186e18741865186c182018531847185818201852186f186f18741820184318411831181a1830181806031855040a0c111849186e18741865186c18201843186f18721870186f1872186118741869186f186e1831141830120603185504070c0b18531861186e1874186118201843186c18611872186118310b1830090603185504080c021843184118310b1830090603185504061302185518531830181e170d183118381830183518321831183118301834183518311830185a170d183418391831183218331831183218331835183918351839185a183018681831181a183018180603185504030c111849186e18741865186c182018531847185818201852186f186f18741820184318411831181a1830181806031855040a0c111849186e18741865186c18201843186f18721870186f1872186118741869186f186e1831141830120603185504070c0b18531861186e1874186118201843186c18611872186118310b1830090603185504080c021843184118310b183009060318550406130218551853183018591830130607182a1886184818ce183d02010608182a1886184818ce183d03010703
2024-03-19 21:19:38 +00:00
}
}
} " #,
) . expect ( " failed to deserialize hardcoded quartz instantiate msg " ) ;
2023-12-22 13:10:51 +00:00
}
2023-12-05 17:03:43 +00:00
2024-03-19 21:19:38 +00:00
#[ test ]
fn test_serde_execute_msg ( ) {
let _ : ExecuteMsg = serde_json ::from_str (
r #" {
" quartz " : {
" session_create " : {
" msg " : {
2024-09-25 19:14:06 +00:00
" nonce " :" 9eec5e41e5a715c5a89eb182054daa1877796549a3bde865d7f2196b5f0811ca "
2024-03-19 21:19:38 +00:00
} ,
" attestation " : {
2024-09-25 19:14:06 +00:00
" quote " :" 03000200000000000a000f00939a7233f79c4ca9940a0db3957f06077944f37bdafec57cf7d4ab6bc395e0a1000000000e0e100fffff0100000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000e7000000000000008821f6c6bf4c800c4852addc5b10a422d01ed714573258ac67f9e4b2478ffec90000000000000000000000000000000000000000000000000000000000000000255197a6388e504446dbf83726c2a9cb3cef9035cc3dabd6cf47d69a994f95940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000056f352bac0614437a144a771ab582a979b301a5b8e5aaa80fd02f8f8de19a5da0000000000000000000000000000000000000000000000000000000000000000ca100000146a1ca7a9ddcdf55d220b8267d64915e91c3c789aefa2805248bc55472ba2faddc3108c86edb59b3c03981bc7a8a16f653eccc4ba82bf9192e88a2fa1c4c6f1bae275a28eae9b7d785811e4e967e6f5c03cd850bc8087600262e38756786ae09d931d4e77d1b928f25b3c3ff67b42da0a149b07e49fc570ddeff8a8386120880e0e100fffff0100000000000000000000000000000000000000000000000000000000000000000000000000000000001500000000000000e70000000000000096b347a64e5a045e27369c26e6dcda51fd7c850e9b3a3a79e718f43261dee1e400000000000000000000000000000000000000000000000000000000000000008c4f5775d796503e96137f77c68a829a0056ac8ded70140b081b094490c57bff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000254f579e046f1423f1f2da170254f912bb49097a0e041f3f670793e3fd6dd63f000000000000000000000000000000000000000000000000000000000000000058d5d2a9c79533eeac51c24d3bc062c7c26c1e2ffd62e224dfe899251e5fddca4fb757d9edc0d27f50f7954eb81523f8db6054921e66ec8d187685b732d2f25b2000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f0500620e00002d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d494945386a4343424a696741774942416749554854525a7054426e4d59655063575531354542316643507561485177436759494b6f5a497a6a3045417749770a634445694d434147413155454177775a535735305a577767553064594946424453794251624746305a6d397962534244515445614d42674741315545436777520a535735305a577767513239796347397959585270623234784644415342674e564241634d43314e68626e526849454e7359584a684d51737743515944565151490a44414a445154454c4d416b474131554542684d4356564d774868634e4d6a51774e5445344d5449314e4451325768634e4d7a45774e5445344d5449314e4451320a576a42774d534977494159445651514444426c4a626e526c624342545231676755454e4c49454e6c636e52705a6d6c6a5958526c4d526f77474159445651514b0a4442464a626e526c6243424462334a7762334a6864476c76626a45554d424947413155454277774c553246756447456751327868636d4578437a414a42674e560a4241674d416b4e424d517377435159445651514745774a56557a425a4d424d4742797147534d34394167454743437147534d34394177454841304941424f64700a696252626a7639566159476a7159584a766f7670333253752f594861313541727943546735566c384762744348417a396e5952786d4e6a303372553548687a4d0a513030752b364a6d794748744b4f773866364f6a67674d4f4d494944436a416642674e5648534d4547444157674253566231334e765276683655424a796454300a4d383442567776655644427242674e56485238455a4442694d47436758714263686c706f64485277637a6f764c32467761533530636e567a6447566b633256790a646d6c6a5a584d75615735305a577775593239744c334e6e6543396a5a584a3061575a7059324630615739754c3359304c33426a61324e796244396a595431770a624746305a6d397962535a6c626d4e765a476c755a7a316b5a584977485159445652304f42425945464167706b386e6b7a4c6371776b6749376f7567574844560a574d67314d41344741315564447745422f775145417749477744414d42674e5648524d4241663845416a41414d4949434f77594a4b6f5a496876684e415130420a424949434c444343416967774867594b4b6f5a496876684e415130424151515151576f736c643645563066526f62747368385149737a434341575547436971470a534962345451454e41514977676746564d42414743797147534962345451454e41514942416745
" collateral " :" a76b726f6f745f63615f63726c590125308201213081c8020101300a06082a8648ce3d0403023068311a301806035504030c11496e74656c2053475820526f6f74204341311a3018060355040a0c11496e74656c20436f72706f726174696f6e3114301206035504070c0b53616e746120436c617261310b300906035504080c024341310b3009060355040613025553170d3233303430333130323235315a170d3234303430323130323235315aa02f302d300a0603551d140403020101301f0603551d2304183016801422650cd65a9d3489f383b49552bf501b392706ac300a06082a8648ce3d0403020348003045022051577d47d9fba157b65f1eb5f4657bbc5e56ccaf735a03f1b963d704805ab118022100939015ec1636e7eafa5f426c1e402647c673132b6850cabd68cef6bad7682a037470636b5f63726c5f6973737565725f636861696e8299029c183018820218981830188202183e18a00302010202150018d018e818aa18da187518d718f9182e1849171898183c187b14186518d018d518f21859184d18300a0608182a1886184818ce183d040302183018681831181a183018180603185504030c111849186e18741865186c182018531847185818201852186f186f18741820184318411831181a1830181806031855040a0c111849186e18741865186c18201843186f18721870186f1872186118741869186f186e1831141830120603185504070c0b18531861186e1874186118201843186c18611872186118310b1830090603185504080c021843184118310b1830090603185504061302185518531830181e170d183118381830183518321831183118301835183018311830185a170d183318331830183518321831183118301835183018311830185a1830187118311823183018210603185504030c181a1849186e18741865186c1820185318471858182018501843184b182018501872186f1863186518731873186f18721820184318411831181a1830181806031855040a0c111849186e18741865186c18201843186f18721870186f1872186118741869186f186e1831141830120603185504070c0b18531861186e1874186118201843186c18611872186118310b1830090603185504080c021843184118310b183009060318550406130218551853183018591830130607182a1886184818ce183d02010608182a1886184818ce183d030107031842000418bf186a18f818d3182918d8188318a018b518d91875186e184f18ee1859189e187e184c1864182618f118a018a218f3183e18fc187e18cf189f182818241837187718eb188318cd187918d5184c0418f618661018c2188918fc188818b8189c182f1837187c0d06189f1862181c141892183018930918ac1318a3188118bb1830188118b81830181f06031855181d1823041818183016188014182218650c18d6185a189d1834188918f3188318b41895185218bf1850181b183918270618ac1830185206031855181d181f04184b183018491830184718a0184518a018431886184118681874187418701873183a182f182f186318651872187418691866186918631861187418651873182e187418721875187318741865186418731865187218761869186318651873182e1869186e18741865186c182e1863186f186d182f1849186e18741865186c1853184718581852186f186f187418431841182e1864186518721830181d06031855181d0e0416041418d018e818aa18da187518d718f9182e1849171898183c187b14186518d018d518f21859184d18300e06031855181d0f010118ff04040302010618301206031855181d13010118ff0408183006010118ff02010018300a0608182a1886184818ce183d04030203184800183018450218210018891881183618ed185618a318b21867185918b7188e18a81880185c18ce1890186118ae18ab18e618c5189218e3182f18c618ef182f182e1820189118b11877021820184618a318ef05182218b318cd0618a00418b4182a18e618ce184018ef184a185d18a218261891182718cc18ff18d218e018f318e018d81518f718599902931830188202188f1830188202183418a0030201020214182218650c18d6185a189d1834188918f3188318b41895185218bf1850181b183918270618ac18300a0608182a1886184818ce183d040302183018681831181a183018180603185504030c111849186e18741865186c182018531847185818201852186f186f18741820184318411831181a1830181806031855040a0c111849186e18741865186c18201843186f18721870186f1872186118741869186f186e1831141830120603185504070c0b18531861186e1874186118201843186c18611872186118310b1830090603185504080c021843184118310b1830090603185504061302185518531830181e170d183118381830183518321831183118301834183518311830185a170d183418391831183218331831183218331835183918351839185a183018681831181a183018180603185504030c111849186e18741865186c182018531847185818201852186f186f18741820184318411831181a1830181806031855040a0c111849186e18741865186c18201843186f18721870186f1872186118741869186f186e1831141830120603185504070c0b18531861186e1874186118201843186c18611872186118310b1830090603185504080c021843184118310b183009060318550406130218551853183018591830130607182a1886184818ce183d02010608182a1886184818ce183d03010
2024-03-19 21:19:38 +00:00
}
}
}
} " #,
) . expect ( " failed to deserialize hardcoded quartz msg " ) ;
2023-12-05 17:03:43 +00:00
}
}