{"version":3,"sources":["../../src/proto/gen/buf/validate/validate_pb.ts","../../src/proto/gen/google/api/field_behavior_pb.ts","../../src/proto/gen/thru/common/v1/consensus_pb.ts","../../src/proto/gen/thru/common/v1/errors_pb.ts","../../src/proto/gen/thru/common/v1/primitives_pb.ts","../../src/proto/gen/thru/common/v1/filters_pb.ts","../../src/proto/gen/thru/common/v1/pagination_pb.ts","../../src/proto/gen/thru/core/v1/types_pb.ts","../../src/proto/gen/thru/core/v1/account_pb.ts","../../src/proto/gen/thru/core/v1/block_pb.ts","../../src/proto/gen/thru/core/v1/node_pb.ts","../../src/proto/gen/thru/core/v1/state_pb.ts","../../src/proto/gen/thru/core/v1/transaction_pb.ts","../../src/proto/gen/google/api/http_pb.ts","../../src/proto/gen/google/api/annotations_pb.ts","../../src/proto/gen/google/api/launch_stage_pb.ts","../../src/proto/gen/google/api/client_pb.ts","../../src/proto/gen/thru/services/v1/command_service_pb.ts","../../src/proto/gen/thru/services/v1/debug_service_pb.ts","../../src/proto/gen/thru/services/v1/query_service_pb.ts","../../src/proto/gen/thru/services/v1/streaming_service_pb.ts"],"names":["file_google_protobuf_descriptor","file_google_protobuf_duration","file_google_protobuf_field_mask","file_google_protobuf_timestamp","fileDesc","messageDesc","ConsensusStatus","enumDesc","ErrorType","AccountView","BlockView","ExecutionStatus","StateProofType","TransactionView","TransactionVmError","SubmissionStatus","serviceDesc","VmFaultCode","NodeMode"],"mappings":";;;;;;;AAwDO,IAAM,0BAAA,sCACF,ivrEAAA,EAAmvrE,CAACA,qCAAiCC,iCAAA,EAA+BC,mCAAA,EAAiCC,kCAA8B,CAAC,CAAA;AC/Bx3rE,IAAM,iDACXC,kBAAAA,CAAS,srBAAA,EAAwrB,CAACJ,mCAA+B,CAAC,CAAA;ACZ7tB,IAAM,6BAAA,mBACXI,kBAAAA,CAAS,w8CAAA,EAA08C,CAAC,0BAAA,EAA4B,8BAAA,EAAgCD,kCAA8B,CAAC;AA8D1iD,IAAM,oBAAA,mBACXE,qBAAAA,CAAY,6BAAA,EAA+B,CAAC;AAcvC,IAAM,oBAAA,mBACXA,qBAAAA,CAAY,6BAAA,EAA+B,CAAC;AAcvC,IAAM,gCAAA,mBACXA,qBAAAA,CAAY,6BAAA,EAA+B,CAAC;AA0BvC,IAAM,aAAA,mBACXA,qBAAAA,CAAY,6BAAA,EAA+B,CAAC;AAQvC,IAAK,eAAA,qBAAAC,gBAAAA,KAAL;AAML,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAQA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AAQA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AAOA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,eAAY,CAAA,CAAA,GAAZ,WAAA;AAQA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,sBAAmB,CAAA,CAAA,GAAnB,kBAAA;AAQA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,sBAAmB,CAAA,CAAA,GAAnB,kBAAA;AA7CU,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;AAmDL,IAAM,qBAAA,mBACXC,kBAAAA,CAAS,6BAAA,EAA+B,CAAC;ACrLpC,IAAM,0BAAA,mBACXH,kBAAAA,CAAS,6iCAAA,EAA+iC,CAAC,0BAAA,EAA4B,8BAAA,EAAgCD,kCAA8B,CAAC;AAgD/oC,IAAM,iBAAA,mBACXE,qBAAAA,CAAY,0BAAA,EAA4B,CAAC;AAOpC,IAAK,SAAA,qBAAAG,UAAAA,KAAL;AAML,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAOA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,eAAY,CAAA,CAAA,GAAZ,WAAA;AAOA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,kBAAe,CAAA,CAAA,GAAf,cAAA;AAOA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,+BAA4B,CAAA,CAAA,GAA5B,2BAAA;AAOA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,qBAAkB,CAAA,CAAA,GAAlB,iBAAA;AAOA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,2BAAwB,CAAA,CAAA,GAAxB,uBAAA;AAOA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,oBAAiB,CAAA,CAAA,GAAjB,gBAAA;AAhDU,EAAA,OAAAA,UAAAA;AAAA,CAAA,EAAA,SAAA,IAAA,EAAA;AAsDL,IAAM,eAAA,mBACXD,kBAAAA,CAAS,0BAAA,EAA4B,CAAC;AClHjC,IAAM,iDACXH,kBAAAA,CAAS,wjBAAwjB,CAAC,0BAAA,EAA4B,8BAA8B,CAAC;AAoBxnB,IAAM,YAAA,mBACXC,qBAAAA,CAAY,8BAAA,EAAgC,CAAC;AAoBxC,IAAM,eAAA,mBACXA,qBAAAA,CAAY,8BAAA,EAAgC,CAAC;AAoBxC,IAAM,cAAA,mBACXA,qBAAAA,CAAY,8BAAA,EAAgC,CAAC;AAoBxC,IAAM,iBAAA,mBACXA,qBAAAA,CAAY,8BAAA,EAAgC,CAAC;;;ACnFxC,IAAM,2BAAA,mBACXD,kBAAAA,CAAS,4pDAAA,EAA8pD,CAAC,0BAAA,EAA4B,8BAAA,EAAgC,8BAA8B,CAAC;AA2B9vD,IAAM,YAAA,mBACXC,qBAAAA,CAAY,2BAAA,EAA6B,CAAC;AA0FrC,IAAM,sBAAA,mBACXA,qBAAAA,CAAY,2BAAA,EAA6B,CAAC;AAkBrC,IAAM,eAAA,mBACXA,qBAAAA,CAAY,2BAAA,EAA6B,CAAC;AAkBrC,IAAM,gBAAA,mBACXA,qBAAAA,CAAY,2BAAA,EAA6B,CAAC;AAmCrC,IAAM,yBAAA,mBACXA,qBAAAA,CAAY,2BAAA,EAA6B,CAAC;ACpMrC,IAAM,iDACXD,kBAAAA,CAAS,kuBAAkuB,CAAC,0BAAA,EAA4B,8BAA8B,CAAC;AAkClyB,IAAM,iBAAA,mBACXC,qBAAAA,CAAY,8BAAA,EAAgC,CAAC;AA2BxC,IAAM,kBAAA,mBACXA,qBAAAA,CAAY,8BAAA,EAAgC,CAAC;AC/DxC,IAAM,uBAAA,mBACXD,kBAAAA,CAAS,iaAAA,EAAma,CAAC,0BAAA,EAA4B,8BAAA,EAAgC,8BAA8B,CAAC;AAoBngB,IAAM,UAAA,mBACXC,qBAAAA,CAAY,uBAAA,EAAyB,CAAC;AAoBjC,IAAM,eAAA,mBACXA,qBAAAA,CAAY,uBAAA,EAAyB,CAAC;;;ACrCjC,IAAM,yBAAA,mBACXD,kBAAAA,CAAS,o1FAAA,EAAs1F,CAAC,0BAAA,EAA4B,8BAAA,EAAgCD,kCAAAA,EAAgC,6BAAA,EAA+B,8BAAA,EAAgC,uBAAuB,CAAC;AAgD9gG,IAAM,kBAAA,mBACXE,qBAAAA,CAAY,yBAAA,EAA2B,CAAC;AAyDnC,IAAM,iBAAA,mBACXA,qBAAAA,CAAY,yBAAA,EAA2B,CAAC;AA4BnC,IAAM,iBAAA,mBACXA,qBAAAA,CAAY,yBAAA,EAA2B,CAAC;AAuBnC,IAAM,eAAA,mBACXA,qBAAAA,CAAY,yBAAA,EAA2B,CAAC;AAsCnC,IAAM,iBAAA,mBACXA,qBAAAA,CAAY,yBAAA,EAA2B,CAAC;AAqCnC,IAAM,4BAAA,mBACXA,qBAAAA,CAAY,yBAAA,EAA2B,CAAC;AAsCnC,IAAM,aAAA,mBACXA,qBAAAA,CAAY,yBAAA,EAA2B,CAAC;AAiCnC,IAAM,gBAAA,mBACXA,qBAAAA,CAAY,yBAAA,EAA2B,CAAC;AAOnC,IAAK,WAAA,qBAAAI,YAAAA,KAAL;AAML,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAOA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAOA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,eAAY,CAAA,CAAA,GAAZ,WAAA;AAOA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,eAAY,CAAA,CAAA,GAAZ,WAAA;AAOA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AAlCU,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AAwCL,IAAM,iBAAA,mBACXF,kBAAAA,CAAS,yBAAA,EAA2B,CAAC;ACtWhC,IAAM,uBAAA,mBACXH,kBAAAA,CAAS,snEAAA,EAAwnE,CAAC,0BAAA,EAA4B,8BAAA,EAAgCD,kCAAAA,EAAgC,8BAAA,EAAgC,6BAAA,EAA+B,uBAAuB,CAAC;AAwFhzE,IAAM,iBAAA,mBACXE,qBAAAA,CAAY,uBAAA,EAAyB,CAAC;AAsCjC,IAAM,iBAAA,mBACXA,qBAAAA,CAAY,uBAAA,EAAyB,CAAC;AAiCjC,IAAM,WAAA,mBACXA,qBAAAA,CAAY,uBAAA,EAAyB,CAAC;AAuBjC,IAAM,cAAA,mBACXA,qBAAAA,CAAY,uBAAA,EAAyB,CAAC;AAOjC,IAAK,SAAA,qBAAAK,UAAAA,KAAL;AAIL,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAKA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAKA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,uBAAoB,CAAA,CAAA,GAApB,mBAAA;AAKA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,eAAY,CAAA,CAAA,GAAZ,WAAA;AAKA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AAxBU,EAAA,OAAAA,UAAAA;AAAA,CAAA,EAAA,SAAA,IAAA,EAAA;AA8BL,IAAM,eAAA,mBACXH,kBAAAA,CAAS,uBAAA,EAAyB,CAAC;AAO9B,IAAK,eAAA,qBAAAI,gBAAAA,KAAL;AAIL,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAKA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,aAAU,CAAA,CAAA,GAAV,SAAA;AAKA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AAKA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,YAAS,CAAA,CAAA,GAAT,QAAA;AAnBU,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;AAyBL,IAAM,qBAAA,mBACXJ,kBAAAA,CAAS,uBAAA,EAAyB,CAAC;ACzQ9B,IAAM,yCACXH,kBAAAA,CAAS,+0BAA+0B,CAAC,8BAAA,EAAgC,8BAA8B,CAAC;AA2Bn5B,IAAM,iBAAA,mBACXC,qBAAAA,CAAY,sBAAA,EAAwB,CAAC;AA2BhC,IAAM,kBAAA,mBACXA,qBAAAA,CAAY,sBAAA,EAAwB,CAAC;AAqEhC,IAAM,gBAAA,mBACXA,qBAAAA,CAAY,sBAAA,EAAwB,CAAC;AC9HhC,IAAM,uBAAA,mBACXD,kBAAAA,CAAS,yyBAAA,EAA2yB,CAAC,8BAAA,EAAgC,uBAAA,EAAyB,8BAA8B,CAAC;AA4Bx4B,IAAM,uBAAA,mBACXC,qBAAAA,CAAY,uBAAA,EAAyB,CAAC;AAuBjC,IAAM,gBAAA,mBACXA,qBAAAA,CAAY,uBAAA,EAAyB,CAAC;AAOjC,IAAK,cAAA,qBAAAO,eAAAA,KAAL;AAIL,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAKA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AAKA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AAKA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AAnBU,EAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;AAyBL,IAAM,oBAAA,mBACXL,kBAAAA,CAAS,uBAAA,EAAyB,CAAC;ACtF9B,IAAM,6BAAA,mBACXH,kBAAAA,CAAS,ioKAAA,EAAmoK,CAAC,0BAAA,EAA4B,8BAAA,EAAgC,uBAAA,EAAyB,8BAA8B,CAAC;AA+F5vK,IAAM,uBAAA,mBACXC,qBAAAA,CAAY,6BAAA,EAA+B,CAAC;AAiGvC,IAAM,gCAAA,mBACXA,qBAAAA,CAAY,6BAAA,EAA+B,CAAC;AAsCvC,IAAM,sBAAA,mBACXA,qBAAAA,CAAY,6BAAA,EAA+B,CAAC;AA2CvC,IAAM,iBAAA,mBACXA,qBAAAA,CAAY,6BAAA,EAA+B,CAAC;AAuBvC,IAAM,oBAAA,mBACXA,qBAAAA,CAAY,6BAAA,EAA+B,CAAC;AAOvC,IAAK,eAAA,qBAAAQ,gBAAAA,KAAL;AAIL,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAKA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,oBAAiB,CAAA,CAAA,GAAjB,gBAAA;AAKA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAKA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,qBAAkB,CAAA,CAAA,GAAlB,iBAAA;AAKA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AAxBU,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;AA8BL,IAAM,qBAAA,mBACXN,kBAAAA,CAAS,6BAAA,EAA+B,CAAC;AAOpC,IAAK,kBAAA,qBAAAO,mBAAAA,KAAL;AAML,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,oCAAiC,CAAA,CAAA,GAAjC,gCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,yCAAsC,IAAA,CAAA,GAAtC,qCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,0CAAuC,IAAA,CAAA,GAAvC,sCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,wCAAqC,IAAA,CAAA,GAArC,oCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,4CAAyC,IAAA,CAAA,GAAzC,wCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,4CAAyC,IAAA,CAAA,GAAzC,wCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,4CAAyC,IAAA,CAAA,GAAzC,wCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,sDAAmD,IAAA,CAAA,GAAnD,kDAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,qDAAkD,IAAA,CAAA,GAAlD,iDAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,uDAAoD,IAAA,CAAA,GAApD,mDAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,wCAAqC,IAAA,CAAA,GAArC,oCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,yCAAsC,IAAA,CAAA,GAAtC,qCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,yDAAsD,IAAA,CAAA,GAAtD,qDAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,2DAAwD,IAAA,CAAA,GAAxD,uDAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,uCAAoC,IAAA,CAAA,GAApC,mCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,kCAA+B,IAAA,CAAA,GAA/B,8BAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,wDAAqD,IAAA,CAAA,GAArD,oDAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,6DAA0D,IAAA,CAAA,GAA1D,yDAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,6DAA0D,IAAA,CAAA,GAA1D,yDAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,0DAAuD,IAAA,CAAA,GAAvD,sDAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,sEAAmE,IAAA,CAAA,GAAnE,kEAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,6EAA0E,IAAA,CAAA,GAA1E,yEAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,mEAAgE,IAAA,CAAA,GAAhE,+DAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,sDAAmD,IAAA,CAAA,GAAnD,kDAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,oCAAiC,IAAA,CAAA,GAAjC,gCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,kDAA+C,IAAA,CAAA,GAA/C,8CAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,oCAAiC,IAAA,CAAA,GAAjC,gCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,uCAAoC,IAAA,CAAA,GAApC,mCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,uCAAoC,IAAA,CAAA,GAApC,mCAAA;AA1MU,EAAA,OAAAA,mBAAAA;AAAA,CAAA,EAAA,kBAAA,IAAA,EAAA;AAgNL,IAAM,wBAAA,mBACXP,kBAAAA,CAAS,6BAAA,EAA+B,CAAC;ACniBpC,IAAM,oBAAA,mBACXH,kBAAAA,CAAS,6yBAA6yB,CAAA;ACEjzB,IAAM,8CACXA,kBAAAA,CAAS,0ZAA0Z,CAAC,oBAAA,EAAsBJ,mCAA+B,CAAC,CAAA;ACLrd,IAAM,4BAAA,mBACXI,kBAAAA,CAAS,sdAAsd,CAAA;ACI1d,IAAM,sBAAA,mBACXA,kBAAAA,CAAS,w5LAAA,EAA05L,CAAC,4BAAA,EAA8BJ,mCAAAA,EAAiCC,iCAA6B,CAAC,CAAA;ACP5/L,IAAM,qCAAA,mBACXG,kBAAAA,CAAS,wiEAAA,EAA0iE,CAAC,2BAAA,EAA6B,sBAAA,EAAwB,8BAAA,EAAgC,6BAAA,EAA+B,8BAAA,EAAgC,6BAAA,EAA+B,uBAAA,EAAyBH,iCAA6B,CAAC;AAoBzxE,IAAM,4BAAA,mBACXI,qBAAAA,CAAY,qCAAA,EAAuC,CAAC;AAkB/C,IAAM,6BAAA,mBACXA,qBAAAA,CAAY,qCAAA,EAAuC,CAAC;AA2B/C,IAAM,kCAAA,mBACXA,qBAAAA,CAAY,qCAAA,EAAuC,CAAC;AA2B/C,IAAM,mCAAA,mBACXA,qBAAAA,CAAY,qCAAA,EAAuC,CAAC;AA4B/C,IAAM,4BAAA,mBACXA,qBAAAA,CAAY,qCAAA,EAAuC,CAAC;AAyC/C,IAAM,6BAAA,mBACXA,qBAAAA,CAAY,qCAAA,EAAuC,CAAC;AAO/C,IAAK,gBAAA,qBAAAU,iBAAAA,KAAL;AAML,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAOA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AAOA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AApBU,EAAA,OAAAA,iBAAAA;AAAA,CAAA,EAAA,gBAAA,IAAA,EAAA;AA0BL,IAAM,sBAAA,mBACXR,kBAAAA,CAAS,qCAAA,EAAuC,CAAC;AAQ5C,IAAM,cAAA,mBAkCXS,qBAAA,CAAY,qCAAA,EAAuC,CAAC;AC/O/C,IAAM,sDACXZ,kBAAAA,CAAS,4nFAA4nF,CAAC,0BAAA,EAA4B,6BAA6B,sBAAA,EAAwB,8BAAA,EAAgCD,oCAAgC,6BAAA,EAA+B,2BAAA,EAA6B,gCAAgC,8BAAA,EAAgC,yBAAA,EAA2B,yBAAyB,uBAAA,EAAyB,6BAAA,EAA+B,uBAAuB,CAAC;AA+ClhG,IAAM,eAAA,mBACXE,qBAAAA,CAAY,mCAAA,EAAqC,CAAC;AA2B7C,IAAM,gBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,CAAC;AAgC7C,IAAM,mBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,CAAC;AAwF7C,IAAM,wBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,CAAC;AAiC7C,IAAM,qBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,CAAC;AAwC7C,IAAM,2BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,CAAC;AAqD7C,IAAM,4BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,CAAC;AAO7C,IAAK,WAAA,qBAAAY,YAAAA,KAAL;AAML,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,mBAAgB,CAAA,CAAA,GAAhB,eAAA;AAOA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,qBAAkB,CAAA,CAAA,GAAlB,iBAAA;AAOA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,oBAAiB,CAAA,CAAA,GAAjB,gBAAA;AAOA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,oBAAiB,CAAA,CAAA,GAAjB,gBAAA;AA3BU,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AAiCL,IAAM,iBAAA,mBACXV,kBAAAA,CAAS,mCAAA,EAAqC,CAAC;AAO1C,IAAM,YAAA,mBAYXS,qBAAAA,CAAY,mCAAA,EAAqC,CAAC;AC3X7C,IAAM,mCAAA,mBACXZ,kBAAAA,CAAS,wrjBAAA,EAA0rjB,CAAC,0BAAA,EAA4B,2BAAA,EAA6B,wBAAwB,8BAAA,EAAgCD,kCAAAA,EAAgC,+BAA+B,2BAAA,EAA6B,8BAAA,EAAgC,gCAAgC,yBAAA,EAA2B,uBAAA,EAAyB,yBAAyB,6BAAA,EAA+B,uBAAA,EAAyB,sBAAsB,CAAC;AAiCxmkB,IAAM,uBAAA,mBACXE,qBAAAA,CAAY,mCAAA,EAAqC,CAAC;AAoC7C,IAAM,0BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,CAAC;AAiC7C,IAAM,2BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,CAAC;AA4B7C,IAAM,8BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,CAAC;AAkB7C,IAAM,+BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,CAAC;AAkB7C,IAAM,gCAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,CAAC;AAwC7C,IAAM,qBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,CAAC;AAmC7C,IAAM,wBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,CAAC;AA4J7C,IAAM,yBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,CAAC;AAuB7C,IAAM,0BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,CAAC;AA6L7C,IAAM,uBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAuB9C,IAAM,wBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAsL9C,IAAM,uCAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAwB9C,IAAM,wCAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAc9C,IAAM,uBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAkB9C,IAAM,wBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAuB9C,IAAM,qBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAoE9C,IAAM,WAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AA0M9C,IAAM,uBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAuB9C,IAAM,wBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAiK9C,IAAM,6BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAuB9C,IAAM,8BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAkB9C,IAAM,iCAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AA4B9C,IAAM,uBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAY9C,IAAM,sBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AA4B9C,IAAM,uBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAc9C,IAAM,yBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AA6B9C,IAAM,0BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AA2B9C,IAAM,0BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAuB9C,IAAM,oBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAkB9C,IAAM,2BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AA+B9C,IAAM,iCAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAuB9C,IAAM,0BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAkB9C,IAAM,kCAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAoB9C,IAAM,2BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AA2D9C,IAAM,4BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAkC9C,IAAM,4BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAkB9C,IAAM,6BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAc9C,IAAM,0BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAkB9C,IAAM,2BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAc9C,IAAM,2BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAkB9C,IAAM,4BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAc9C,IAAM,0BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAkD9C,IAAM,2BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAkC9C,IAAM,yBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAuB9C,IAAM,sBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AA+C9C,IAAM,gCAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AA6B9C,IAAM,6BAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAyB9C,IAAM,iCAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAmC9C,IAAM,iCAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAuB9C,IAAM,kCAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AA+C9C,IAAM,qCAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAuB9C,IAAM,sCAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAkC9C,IAAM,sBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAc9C,IAAM,iCAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AA8D9C,IAAM,uBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAoB9C,IAAM,wBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAoC9C,IAAM,yBAAA,mBACXA,qBAAAA,CAAY,mCAAA,EAAqC,EAAE;AAO9C,IAAK,QAAA,qBAAAa,SAAAA,KAAL;AAIL,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,aAAU,CAAA,CAAA,GAAV,SAAA;AAKA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,aAAU,CAAA,CAAA,GAAV,SAAA;AAKA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,kBAAe,CAAA,CAAA,GAAf,cAAA;AAdU,EAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;AAoBL,IAAM,cAAA,mBACXX,kBAAAA,CAAS,mCAAA,EAAqC,CAAC;AAO1C,IAAM,YAAA,mBAwSXS,qBAAAA,CAAY,mCAAA,EAAqC,CAAC;AC3rF7C,IAAM,0DACXZ,kBAAAA,CAAS,60LAAA,EAA+0L,CAAC,4BAA4B,8BAAA,EAAgC,8BAAA,EAAgCH,iCAAAA,EAA+BE,kCAAAA,EAAgC,+BAA+B,2BAAA,EAA6B,yBAAA,EAA2B,yBAAyB,6BAAA,EAA+B,uBAAA,EAAyB,sBAAsB,CAAC;AA6H9qM,IAAM,yBAAA,mBACXE,qBAAAA,CAAY,uCAAA,EAAyC,CAAC;AAkBjD,IAAM,0BAAA,mBACXA,qBAAAA,CAAY,uCAAA,EAAyC,CAAC;AAiKjD,IAAM,iCAAA,mBACXA,qBAAAA,CAAY,uCAAA,EAAyC,CAAC;AAiDjD,IAAM,mBAAA,mBACXA,qBAAAA,CAAY,uCAAA,EAAyC,CAAC;AAqDjD,IAAM,mBAAA,mBACXA,qBAAAA,CAAY,uCAAA,EAAyC,CAAC;AAoCjD,IAAM,kCAAA,mBACXA,qBAAAA,CAAY,uCAAA,EAAyC,CAAC;AAkHjD,IAAM,+BAAA,mBACXA,qBAAAA,CAAY,uCAAA,EAAyC,CAAC;AAkBjD,IAAM,gCAAA,mBACXA,qBAAAA,CAAY,uCAAA,EAAyC,CAAC;AA+JjD,IAAM,yBAAA,mBACXA,qBAAAA,CAAY,uCAAA,EAAyC,CAAC;AAuFjD,IAAM,0BAAA,mBACXA,qBAAAA,CAAY,uCAAA,EAAyC,CAAC;AAuBjD,IAAM,6BAAA,mBACXA,qBAAAA,CAAY,uCAAA,EAAyC,EAAE;AAsClD,IAAM,8BAAA,mBACXA,qBAAAA,CAAY,uCAAA,EAAyC,EAAE;AAmDlD,IAAM,8BAAA,mBACXA,qBAAAA,CAAY,uCAAA,EAAyC,EAAE;AAkIlD,IAAM,+BAAA,mBACXA,qBAAAA,CAAY,uCAAA,EAAyC,EAAE;AAclD,IAAM,yBAAA,mBACXA,qBAAAA,CAAY,uCAAA,EAAyC,EAAE;AA4BlD,IAAM,0BAAA,mBACXA,qBAAAA,CAAY,uCAAA,EAAyC,EAAE;AAclD,IAAM,8BAAA,mBACXA,qBAAAA,CAAY,uCAAA,EAAyC,EAAE;AAkClD,IAAM,+BAAA,mBACXA,qBAAAA,CAAY,uCAAA,EAAyC,EAAE;AAOlD,IAAM,gBAAA,mBA0EXW,qBAAAA,CAAY,uCAAA,EAAyC,CAAC","file":"index.cjs","sourcesContent":["// Copyright 2023-2026 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file buf/validate/validate.proto (package buf.validate, syntax proto2)\n/* eslint-disable */\n\n// [Protovalidate](https://protovalidate.com/) is the semantic validation library for Protobuf.\n// It provides standard annotations to validate common rules on messages and fields, as well as the ability to use [CEL](https://cel.dev) to write custom rules.\n// It's the next generation of [protoc-gen-validate](https://github.com/bufbuild/protoc-gen-validate).\n//\n// This package provides the options, messages, and enums that power Protovalidate.\n// Apply its options to messages, fields, and oneofs in your Protobuf schemas to add validation rules:\n//\n// ```proto\n// message User {\n//   string id = 1 [(buf.validate.field).string.uuid = true];\n//   string first_name = 2 [(buf.validate.field).string.max_len = 64];\n//   string last_name = 3 [(buf.validate.field).string.max_len = 64];\n//\n//   option (buf.validate.message).cel = {\n//     id: \"first_name_requires_last_name\"\n//     message: \"last_name must be present if first_name is present\"\n//     expression: \"!has(this.first_name) || has(this.last_name)\"\n//   };\n// }\n// ```\n//\n// These rules are enforced at runtime by language-specific libraries.\n// See the [developer quickstart](https://protovalidate.com/quickstart/) to get started, or go directly to the runtime library for your language:\n// [Go](https://github.com/bufbuild/protovalidate-go),\n// [JavaScript/TypeScript](https://github.com/bufbuild/protovalidate-es),\n// [Java](https://github.com/bufbuild/protovalidate-java),\n// [Python](https://github.com/bufbuild/protovalidate-python),\n// or [C++](https://github.com/bufbuild/protovalidate-cc).\n\nimport type { GenEnum, GenExtension, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, extDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { Duration, FieldDescriptorProto_Type, FieldMask, FieldOptions, MessageOptions, OneofOptions, Timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_field_mask, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file buf/validate/validate.proto.\n */\nexport const file_buf_validate_validate: GenFile = /*@__PURE__*/\n  fileDesc(\"ChtidWYvdmFsaWRhdGUvdmFsaWRhdGUucHJvdG8SDGJ1Zi52YWxpZGF0ZSI3CgRSdWxlEgoKAmlkGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKZXhwcmVzc2lvbhgDIAEoCSKGAQoMTWVzc2FnZVJ1bGVzEhYKDmNlbF9leHByZXNzaW9uGAUgAygJEh8KA2NlbBgDIAMoCzISLmJ1Zi52YWxpZGF0ZS5SdWxlEi0KBW9uZW9mGAQgAygLMh4uYnVmLnZhbGlkYXRlLk1lc3NhZ2VPbmVvZlJ1bGVKBAgBEAJSCGRpc2FibGVkIjQKEE1lc3NhZ2VPbmVvZlJ1bGUSDgoGZmllbGRzGAEgAygJEhAKCHJlcXVpcmVkGAIgASgIIh4KCk9uZW9mUnVsZXMSEAoIcmVxdWlyZWQYASABKAgiiwkKCkZpZWxkUnVsZXMSFgoOY2VsX2V4cHJlc3Npb24YHSADKAkSHwoDY2VsGBcgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGUSEAoIcmVxdWlyZWQYGSABKAgSJAoGaWdub3JlGBsgASgOMhQuYnVmLnZhbGlkYXRlLklnbm9yZRIpCgVmbG9hdBgBIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GbG9hdFJ1bGVzSAASKwoGZG91YmxlGAIgASgLMhkuYnVmLnZhbGlkYXRlLkRvdWJsZVJ1bGVzSAASKQoFaW50MzIYAyABKAsyGC5idWYudmFsaWRhdGUuSW50MzJSdWxlc0gAEikKBWludDY0GAQgASgLMhguYnVmLnZhbGlkYXRlLkludDY0UnVsZXNIABIrCgZ1aW50MzIYBSABKAsyGS5idWYudmFsaWRhdGUuVUludDMyUnVsZXNIABIrCgZ1aW50NjQYBiABKAsyGS5idWYudmFsaWRhdGUuVUludDY0UnVsZXNIABIrCgZzaW50MzIYByABKAsyGS5idWYudmFsaWRhdGUuU0ludDMyUnVsZXNIABIrCgZzaW50NjQYCCABKAsyGS5idWYudmFsaWRhdGUuU0ludDY0UnVsZXNIABItCgdmaXhlZDMyGAkgASgLMhouYnVmLnZhbGlkYXRlLkZpeGVkMzJSdWxlc0gAEi0KB2ZpeGVkNjQYCiABKAsyGi5idWYudmFsaWRhdGUuRml4ZWQ2NFJ1bGVzSAASLwoIc2ZpeGVkMzIYCyABKAsyGy5idWYudmFsaWRhdGUuU0ZpeGVkMzJSdWxlc0gAEi8KCHNmaXhlZDY0GAwgASgLMhsuYnVmLnZhbGlkYXRlLlNGaXhlZDY0UnVsZXNIABInCgRib29sGA0gASgLMhcuYnVmLnZhbGlkYXRlLkJvb2xSdWxlc0gAEisKBnN0cmluZxgOIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlc0gAEikKBWJ5dGVzGA8gASgLMhguYnVmLnZhbGlkYXRlLkJ5dGVzUnVsZXNIABInCgRlbnVtGBAgASgLMhcuYnVmLnZhbGlkYXRlLkVudW1SdWxlc0gAEi8KCHJlcGVhdGVkGBIgASgLMhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXNIABIlCgNtYXAYEyABKAsyFi5idWYudmFsaWRhdGUuTWFwUnVsZXNIABIlCgNhbnkYFCABKAsyFi5idWYudmFsaWRhdGUuQW55UnVsZXNIABIvCghkdXJhdGlvbhgVIAEoCzIbLmJ1Zi52YWxpZGF0ZS5EdXJhdGlvblJ1bGVzSAASMgoKZmllbGRfbWFzaxgcIAEoCzIcLmJ1Zi52YWxpZGF0ZS5GaWVsZE1hc2tSdWxlc0gAEjEKCXRpbWVzdGFtcBgWIAEoCzIcLmJ1Zi52YWxpZGF0ZS5UaW1lc3RhbXBSdWxlc0gAQgYKBHR5cGVKBAgYEBlKBAgaEBtSB3NraXBwZWRSDGlnbm9yZV9lbXB0eSJVCg9QcmVkZWZpbmVkUnVsZXMSHwoDY2VsGAEgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGVKBAgYEBlKBAgaEBtSB3NraXBwZWRSDGlnbm9yZV9lbXB0eSL4FgoKRmxvYXRSdWxlcxJ9CgVjb25zdBgBIAEoAkJuwkhrCmkKC2Zsb2F0LmNvbnN0Glp0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICdtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSmQEKAmx0GAIgASgCQooBwkiGAQqDAQoIZmxvYXQubHQadyFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQpPyAnbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASqQEKA2x0ZRgDIAEoAkKZAcJIlQEKkgEKCWZsb2F0Lmx0ZRqEASFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUpPyAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEtAHCgJndBgEIAEoAkLBB8JIvQcKhgEKCGZsb2F0Lmd0GnohaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq9AQoLZmxvYXQuZ3RfbHQarQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrHAQoVZmxvYXQuZ3RfbHRfZXhjbHVzaXZlGq0BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCkpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKzQEKDGZsb2F0Lmd0X2x0ZRq8AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCtcBChZmbG9hdC5ndF9sdGVfZXhjbHVzaXZlGrwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARKcCAoDZ3RlGAUgASgCQowIwkiICAqVAQoJZmxvYXQuZ3RlGocBIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCswBCgxmbG9hdC5ndGVfbHQauwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtYBChZmbG9hdC5ndGVfbHRfZXhjbHVzaXZlGrsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrcAQoNZmxvYXQuZ3RlX2x0ZRrKAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK5gEKF2Zsb2F0Lmd0ZV9sdGVfZXhjbHVzaXZlGsoBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEnkKAmluGAYgAygCQm3CSGoKaAoIZmxvYXQuaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnAKBm5vdF9pbhgHIAMoAkJgwkhdClsKDGZsb2F0Lm5vdF9pbhpLdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAnbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEm8KBmZpbml0ZRgIIAEoCEJfwkhcCloKDGZsb2F0LmZpbml0ZRpKcnVsZXMuZmluaXRlID8gKHRoaXMuaXNOYW4oKSB8fCB0aGlzLmlzSW5mKCkgPyAnbXVzdCBiZSBmaW5pdGUnIDogJycpIDogJycSKwoHZXhhbXBsZRgJIAMoAkIawkgXChUKDWZsb2F0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIooXCgtEb3VibGVSdWxlcxJ+CgVjb25zdBgBIAEoAUJvwkhsCmoKDGRvdWJsZS5jb25zdBpadGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAnbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEpoBCgJsdBgCIAEoAUKLAcJIhwEKhAEKCWRvdWJsZS5sdBp3IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCk/ICdtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKqAQoDbHRlGAMgASgBQpoBwkiWAQqTAQoKZG91YmxlLmx0ZRqEASFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUpPyAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEtUHCgJndBgEIAEoAULGB8JIwgcKhwEKCWRvdWJsZS5ndBp6IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKvgEKDGRvdWJsZS5ndF9sdBqtAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsgBChZkb3VibGUuZ3RfbHRfZXhjbHVzaXZlGq0BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCkpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKzgEKDWRvdWJsZS5ndF9sdGUavAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrYAQoXZG91YmxlLmd0X2x0ZV9leGNsdXNpdmUavAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEqEICgNndGUYBSABKAFCkQjCSI0ICpYBCgpkb3VibGUuZ3RlGocBIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCs0BCg1kb3VibGUuZ3RlX2x0GrsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrXAQoXZG91YmxlLmd0ZV9sdF9leGNsdXNpdmUauwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCt0BCg5kb3VibGUuZ3RlX2x0ZRrKAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK5wEKGGRvdWJsZS5ndGVfbHRlX2V4Y2x1c2l2ZRrKAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ6CgJpbhgGIAMoAUJuwkhrCmkKCWRvdWJsZS5pbhpcISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAnbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycScQoGbm90X2luGAcgAygBQmHCSF4KXAoNZG91YmxlLm5vdF9pbhpLdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAnbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEnAKBmZpbml0ZRgIIAEoCEJgwkhdClsKDWRvdWJsZS5maW5pdGUaSnJ1bGVzLmZpbml0ZSA/ICh0aGlzLmlzTmFuKCkgfHwgdGhpcy5pc0luZigpID8gJ211c3QgYmUgZmluaXRlJyA6ICcnKSA6ICcnEiwKB2V4YW1wbGUYCSADKAFCG8JIGAoWCg5kb3VibGUuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4isBQKCkludDMyUnVsZXMSfQoFY29uc3QYASABKAVCbsJIawppCgtpbnQzMi5jb25zdBpadGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAnbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEoQBCgJsdBgCIAEoBUJ2wkhzCnEKCGludDMyLmx0GmUhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ211c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpUBCgNsdGUYAyABKAVChQHCSIEBCn8KCWludDMyLmx0ZRpyIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAAS+QYKAmd0GAQgASgFQuoGwkjmBgp0CghpbnQzMi5ndBpoIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKrQEKC2ludDMyLmd0X2x0Gp0BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq1AQoVaW50MzIuZ3RfbHRfZXhjbHVzaXZlGpsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvQEKDGludDMyLmd0X2x0ZRqsAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKxQEKFmludDMyLmd0X2x0ZV9leGNsdXNpdmUaqgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEsUHCgNndGUYBSABKAVCtQfCSLEHCoIBCglpbnQzMi5ndGUadSFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwq8AQoMaW50MzIuZ3RlX2x0GqsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCsQBChZpbnQzMi5ndGVfbHRfZXhjbHVzaXZlGqkBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrMAQoNaW50MzIuZ3RlX2x0ZRq6AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrUAQoXaW50MzIuZ3RlX2x0ZV9leGNsdXNpdmUauAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESeQoCaW4YBiADKAVCbcJIagpoCghpbnQzMi5pbhpcISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAnbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycScAoGbm90X2luGAcgAygFQmDCSF0KWwoMaW50MzIubm90X2luGkt0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICdtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSKwoHZXhhbXBsZRgIIAMoBUIawkgXChUKDWludDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIrAUCgpJbnQ2NFJ1bGVzEn0KBWNvbnN0GAEgASgDQm7CSGsKaQoLaW50NjQuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKEAQoCbHQYAiABKANCdsJIcwpxCghpbnQ2NC5sdBplIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICdtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKVAQoDbHRlGAMgASgDQoUBwkiBAQp/CglpbnQ2NC5sdGUaciFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEvkGCgJndBgEIAEoA0LqBsJI5gYKdAoIaW50NjQuZ3QaaCFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCq0BCgtpbnQ2NC5ndF9sdBqdAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKtQEKFWludDY0Lmd0X2x0X2V4Y2x1c2l2ZRqbAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr0BCgxpbnQ2NC5ndF9sdGUarAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCsUBChZpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGqoBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLFBwoDZ3RlGAUgASgDQrUHwkixBwqCAQoJaW50NjQuZ3RlGnUhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKvAEKDGludDY0Lmd0ZV9sdBqrAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrEAQoWaW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqpAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzAEKDWludDY0Lmd0ZV9sdGUaugFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK1AEKF2ludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGrgBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEnkKAmluGAYgAygDQm3CSGoKaAoIaW50NjQuaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnAKBm5vdF9pbhgHIAMoA0JgwkhdClsKDGludDY0Lm5vdF9pbhpLdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAnbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEisKB2V4YW1wbGUYCSADKANCGsJIFwoVCg1pbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLCFAoLVUludDMyUnVsZXMSfgoFY29uc3QYASABKA1Cb8JIbApqCgx1aW50MzIuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKFAQoCbHQYAiABKA1Cd8JIdApyCgl1aW50MzIubHQaZSFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAnbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASlwEKA2x0ZRgDIAEoDUKHAcJIgwEKgAEKCnVpbnQzMi5sdGUaciFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEv4GCgJndBgEIAEoDULvBsJI6wYKdQoJdWludDMyLmd0GmghaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwquAQoMdWludDMyLmd0X2x0Gp0BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq2AQoWdWludDMyLmd0X2x0X2V4Y2x1c2l2ZRqbAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr4BCg11aW50MzIuZ3RfbHRlGqwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrGAQoXdWludDMyLmd0X2x0ZV9leGNsdXNpdmUaqgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEsoHCgNndGUYBSABKA1CugfCSLYHCoMBCgp1aW50MzIuZ3RlGnUhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKvQEKDXVpbnQzMi5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKxQEKF3VpbnQzMi5ndGVfbHRfZXhjbHVzaXZlGqkBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrNAQoOdWludDMyLmd0ZV9sdGUaugFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK1QEKGHVpbnQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ6CgJpbhgGIAMoDUJuwkhrCmkKCXVpbnQzMi5pbhpcISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAnbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycScQoGbm90X2luGAcgAygNQmHCSF4KXAoNdWludDMyLm5vdF9pbhpLdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAnbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKA1CG8JIGAoWCg51aW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iwhQKC1VJbnQ2NFJ1bGVzEn4KBWNvbnN0GAEgASgEQm/CSGwKagoMdWludDY0LmNvbnN0Glp0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICdtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycShQEKAmx0GAIgASgEQnfCSHQKcgoJdWludDY0Lmx0GmUhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ211c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpcBCgNsdGUYAyABKARChwHCSIMBCoABCgp1aW50NjQubHRlGnIhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ211c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABL+BgoCZ3QYBCABKARC7wbCSOsGCnUKCXVpbnQ2NC5ndBpoIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKrgEKDHVpbnQ2NC5ndF9sdBqdAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKtgEKFnVpbnQ2NC5ndF9sdF9leGNsdXNpdmUamwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoNdWludDY0Lmd0X2x0ZRqsAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKxgEKF3VpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGqoBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLKBwoDZ3RlGAUgASgEQroHwki2BwqDAQoKdWludDY0Lmd0ZRp1IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCr0BCg11aW50NjQuZ3RlX2x0GqsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCsUBChd1aW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqpAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzQEKDnVpbnQ2NC5ndGVfbHRlGroBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtUBChh1aW50NjQuZ3RlX2x0ZV9leGNsdXNpdmUauAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESegoCaW4YBiADKARCbsJIawppCgl1aW50NjQuaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnEKBm5vdF9pbhgHIAMoBEJhwkheClwKDXVpbnQ2NC5ub3RfaW4aS3RoaXMgaW4gcnVsZXMubm90X2luID8gJ211c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIsCgdleGFtcGxlGAggAygEQhvCSBgKFgoOdWludDY0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIsIUCgtTSW50MzJSdWxlcxJ+CgVjb25zdBgBIAEoEUJvwkhsCmoKDHNpbnQzMi5jb25zdBpadGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAnbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEoUBCgJsdBgCIAEoEUJ3wkh0CnIKCXNpbnQzMi5sdBplIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICdtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKXAQoDbHRlGAMgASgRQocBwkiDAQqAAQoKc2ludDMyLmx0ZRpyIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAAS/gYKAmd0GAQgASgRQu8GwkjrBgp1CglzaW50MzIuZ3QaaCFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCq4BCgxzaW50MzIuZ3RfbHQanQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrYBChZzaW50MzIuZ3RfbHRfZXhjbHVzaXZlGpsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvgEKDXNpbnQzMi5ndF9sdGUarAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCsYBChdzaW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqqAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAESygcKA2d0ZRgFIAEoEUK6B8JItgcKgwEKCnNpbnQzMi5ndGUadSFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwq9AQoNc2ludDMyLmd0ZV9sdBqrAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrFAQoXc2ludDMyLmd0ZV9sdF9leGNsdXNpdmUaqQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BCg5zaW50MzIuZ3RlX2x0ZRq6AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrVAQoYc2ludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGrgBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEnoKAmluGAYgAygRQm7CSGsKaQoJc2ludDMyLmluGlwhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICdtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJxCgZub3RfaW4YByADKBFCYcJIXgpcCg1zaW50MzIubm90X2luGkt0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICdtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoEUIbwkgYChYKDnNpbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLCFAoLU0ludDY0UnVsZXMSfgoFY29uc3QYASABKBJCb8JIbApqCgxzaW50NjQuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKFAQoCbHQYAiABKBJCd8JIdApyCglzaW50NjQubHQaZSFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAnbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASlwEKA2x0ZRgDIAEoEkKHAcJIgwEKgAEKCnNpbnQ2NC5sdGUaciFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEv4GCgJndBgEIAEoEkLvBsJI6wYKdQoJc2ludDY0Lmd0GmghaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwquAQoMc2ludDY0Lmd0X2x0Gp0BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq2AQoWc2ludDY0Lmd0X2x0X2V4Y2x1c2l2ZRqbAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr4BCg1zaW50NjQuZ3RfbHRlGqwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrGAQoXc2ludDY0Lmd0X2x0ZV9leGNsdXNpdmUaqgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEsoHCgNndGUYBSABKBJCugfCSLYHCoMBCgpzaW50NjQuZ3RlGnUhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKvQEKDXNpbnQ2NC5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKxQEKF3NpbnQ2NC5ndGVfbHRfZXhjbHVzaXZlGqkBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrNAQoOc2ludDY0Lmd0ZV9sdGUaugFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK1QEKGHNpbnQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ6CgJpbhgGIAMoEkJuwkhrCmkKCXNpbnQ2NC5pbhpcISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAnbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycScQoGbm90X2luGAcgAygSQmHCSF4KXAoNc2ludDY0Lm5vdF9pbhpLdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAnbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKBJCG8JIGAoWCg5zaW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i0xQKDEZpeGVkMzJSdWxlcxJ/CgVjb25zdBgBIAEoB0JwwkhtCmsKDWZpeGVkMzIuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKGAQoCbHQYAiABKAdCeMJIdQpzCgpmaXhlZDMyLmx0GmUhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ211c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpgBCgNsdGUYAyABKAdCiAHCSIQBCoEBCgtmaXhlZDMyLmx0ZRpyIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASgwcKAmd0GAQgASgHQvQGwkjwBgp2CgpmaXhlZDMyLmd0GmghaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqvAQoNZml4ZWQzMi5ndF9sdBqdAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKtwEKF2ZpeGVkMzIuZ3RfbHRfZXhjbHVzaXZlGpsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvwEKDmZpeGVkMzIuZ3RfbHRlGqwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrHAQoYZml4ZWQzMi5ndF9sdGVfZXhjbHVzaXZlGqoBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLPBwoDZ3RlGAUgASgHQr8Hwki7BwqEAQoLZml4ZWQzMi5ndGUadSFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwq+AQoOZml4ZWQzMi5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKxgEKGGZpeGVkMzIuZ3RlX2x0X2V4Y2x1c2l2ZRqpAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzgEKD2ZpeGVkMzIuZ3RlX2x0ZRq6AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrWAQoZZml4ZWQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ7CgJpbhgGIAMoB0JvwkhsCmoKCmZpeGVkMzIuaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnIKBm5vdF9pbhgHIAMoB0JiwkhfCl0KDmZpeGVkMzIubm90X2luGkt0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICdtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLQoHZXhhbXBsZRgIIAMoB0IcwkgZChcKD2ZpeGVkMzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i0xQKDEZpeGVkNjRSdWxlcxJ/CgVjb25zdBgBIAEoBkJwwkhtCmsKDWZpeGVkNjQuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKGAQoCbHQYAiABKAZCeMJIdQpzCgpmaXhlZDY0Lmx0GmUhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ211c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpgBCgNsdGUYAyABKAZCiAHCSIQBCoEBCgtmaXhlZDY0Lmx0ZRpyIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASgwcKAmd0GAQgASgGQvQGwkjwBgp2CgpmaXhlZDY0Lmd0GmghaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqvAQoNZml4ZWQ2NC5ndF9sdBqdAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKtwEKF2ZpeGVkNjQuZ3RfbHRfZXhjbHVzaXZlGpsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvwEKDmZpeGVkNjQuZ3RfbHRlGqwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrHAQoYZml4ZWQ2NC5ndF9sdGVfZXhjbHVzaXZlGqoBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLPBwoDZ3RlGAUgASgGQr8Hwki7BwqEAQoLZml4ZWQ2NC5ndGUadSFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwq+AQoOZml4ZWQ2NC5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKxgEKGGZpeGVkNjQuZ3RlX2x0X2V4Y2x1c2l2ZRqpAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzgEKD2ZpeGVkNjQuZ3RlX2x0ZRq6AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrWAQoZZml4ZWQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ7CgJpbhgGIAMoBkJvwkhsCmoKCmZpeGVkNjQuaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnIKBm5vdF9pbhgHIAMoBkJiwkhfCl0KDmZpeGVkNjQubm90X2luGkt0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICdtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLQoHZXhhbXBsZRgIIAMoBkIcwkgZChcKD2ZpeGVkNjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i5RQKDVNGaXhlZDMyUnVsZXMSgAEKBWNvbnN0GAEgASgPQnHCSG4KbAoOc2ZpeGVkMzIuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKHAQoCbHQYAiABKA9CecJIdgp0CgtzZml4ZWQzMi5sdBplIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICdtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKZAQoDbHRlGAMgASgPQokBwkiFAQqCAQoMc2ZpeGVkMzIubHRlGnIhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ211c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKIBwoCZ3QYBCABKA9C+QbCSPUGCncKC3NmaXhlZDMyLmd0GmghaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqwAQoOc2ZpeGVkMzIuZ3RfbHQanQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrgBChhzZml4ZWQzMi5ndF9sdF9leGNsdXNpdmUamwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrAAQoPc2ZpeGVkMzIuZ3RfbHRlGqwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrIAQoZc2ZpeGVkMzIuZ3RfbHRlX2V4Y2x1c2l2ZRqqAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES1AcKA2d0ZRgFIAEoD0LEB8JIwAcKhQEKDHNmaXhlZDMyLmd0ZRp1IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCr8BCg9zZml4ZWQzMi5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKxwEKGXNmaXhlZDMyLmd0ZV9sdF9leGNsdXNpdmUaqQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs8BChBzZml4ZWQzMi5ndGVfbHRlGroBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtcBChpzZml4ZWQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ8CgJpbhgGIAMoD0JwwkhtCmsKC3NmaXhlZDMyLmluGlwhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICdtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJzCgZub3RfaW4YByADKA9CY8JIYApeCg9zZml4ZWQzMi5ub3RfaW4aS3RoaXMgaW4gcnVsZXMubm90X2luID8gJ211c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIuCgdleGFtcGxlGAggAygPQh3CSBoKGAoQc2ZpeGVkMzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i5RQKDVNGaXhlZDY0UnVsZXMSgAEKBWNvbnN0GAEgASgQQnHCSG4KbAoOc2ZpeGVkNjQuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKHAQoCbHQYAiABKBBCecJIdgp0CgtzZml4ZWQ2NC5sdBplIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICdtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKZAQoDbHRlGAMgASgQQokBwkiFAQqCAQoMc2ZpeGVkNjQubHRlGnIhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ211c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKIBwoCZ3QYBCABKBBC+QbCSPUGCncKC3NmaXhlZDY0Lmd0GmghaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqwAQoOc2ZpeGVkNjQuZ3RfbHQanQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrgBChhzZml4ZWQ2NC5ndF9sdF9leGNsdXNpdmUamwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrAAQoPc2ZpeGVkNjQuZ3RfbHRlGqwBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrIAQoZc2ZpeGVkNjQuZ3RfbHRlX2V4Y2x1c2l2ZRqqAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES1AcKA2d0ZRgFIAEoEELEB8JIwAcKhQEKDHNmaXhlZDY0Lmd0ZRp1IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCr8BCg9zZml4ZWQ2NC5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKxwEKGXNmaXhlZDY0Lmd0ZV9sdF9leGNsdXNpdmUaqQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs8BChBzZml4ZWQ2NC5ndGVfbHRlGroBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtcBChpzZml4ZWQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ8CgJpbhgGIAMoEEJwwkhtCmsKC3NmaXhlZDY0LmluGlwhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICdtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJzCgZub3RfaW4YByADKBBCY8JIYApeCg9zZml4ZWQ2NC5ub3RfaW4aS3RoaXMgaW4gcnVsZXMubm90X2luID8gJ211c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIuCgdleGFtcGxlGAggAygQQh3CSBoKGAoQc2ZpeGVkNjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iwAEKCUJvb2xSdWxlcxJ8CgVjb25zdBgBIAEoCEJtwkhqCmgKCmJvb2wuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxIqCgdleGFtcGxlGAIgAygIQhnCSBYKFAoMYm9vbC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIi6jwKC1N0cmluZ1J1bGVzEoABCgVjb25zdBgBIAEoCUJxwkhuCmwKDHN0cmluZy5jb25zdBpcdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAnbXVzdCBlcXVhbCBgJXNgJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycScQoDbGVuGBMgASgEQmTCSGEKXwoKc3RyaW5nLmxlbhpRdWludCh0aGlzLnNpemUoKSkgIT0gcnVsZXMubGVuID8gJ211c3QgYmUgJXMgY2hhcmFjdGVycycuZm9ybWF0KFtydWxlcy5sZW5dKSA6ICcnEokBCgdtaW5fbGVuGAIgASgEQnjCSHUKcwoOc3RyaW5nLm1pbl9sZW4aYXVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX2xlbiA/ICdtdXN0IGJlIGF0IGxlYXN0ICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubWluX2xlbl0pIDogJycSiAEKB21heF9sZW4YAyABKARCd8JIdApyCg5zdHJpbmcubWF4X2xlbhpgdWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfbGVuID8gJ211c3QgYmUgYXQgbW9zdCAlcyBjaGFyYWN0ZXJzJy5mb3JtYXQoW3J1bGVzLm1heF9sZW5dKSA6ICcnEosBCglsZW5fYnl0ZXMYFCABKARCeMJIdQpzChBzdHJpbmcubGVuX2J5dGVzGl91aW50KGJ5dGVzKHRoaXMpLnNpemUoKSkgIT0gcnVsZXMubGVuX2J5dGVzID8gJ211c3QgYmUgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubGVuX2J5dGVzXSkgOiAnJxKUAQoJbWluX2J5dGVzGAQgASgEQoABwkh9CnsKEHN0cmluZy5taW5fYnl0ZXMaZ3VpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9ieXRlcyA/ICdtdXN0IGJlIGF0IGxlYXN0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1pbl9ieXRlc10pIDogJycSkgEKCW1heF9ieXRlcxgFIAEoBEJ/wkh8CnoKEHN0cmluZy5tYXhfYnl0ZXMaZnVpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSA+IHJ1bGVzLm1heF9ieXRlcyA/ICdtdXN0IGJlIGF0IG1vc3QgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubWF4X2J5dGVzXSkgOiAnJxKHAQoHcGF0dGVybhgGIAEoCUJ2wkhzCnEKDnN0cmluZy5wYXR0ZXJuGl8hdGhpcy5tYXRjaGVzKHJ1bGVzLnBhdHRlcm4pID8gJ2RvZXMgbm90IG1hdGNoIHJlZ2V4IHBhdHRlcm4gYCVzYCcuZm9ybWF0KFtydWxlcy5wYXR0ZXJuXSkgOiAnJxJ+CgZwcmVmaXgYByABKAlCbsJIawppCg1zdHJpbmcucHJlZml4GlghdGhpcy5zdGFydHNXaXRoKHJ1bGVzLnByZWZpeCkgPyAnZG9lcyBub3QgaGF2ZSBwcmVmaXggYCVzYCcuZm9ybWF0KFtydWxlcy5wcmVmaXhdKSA6ICcnEnwKBnN1ZmZpeBgIIAEoCUJswkhpCmcKDXN0cmluZy5zdWZmaXgaViF0aGlzLmVuZHNXaXRoKHJ1bGVzLnN1ZmZpeCkgPyAnZG9lcyBub3QgaGF2ZSBzdWZmaXggYCVzYCcuZm9ybWF0KFtydWxlcy5zdWZmaXhdKSA6ICcnEooBCghjb250YWlucxgJIAEoCUJ4wkh1CnMKD3N0cmluZy5jb250YWlucxpgIXRoaXMuY29udGFpbnMocnVsZXMuY29udGFpbnMpID8gJ2RvZXMgbm90IGNvbnRhaW4gc3Vic3RyaW5nIGAlc2AnLmZvcm1hdChbcnVsZXMuY29udGFpbnNdKSA6ICcnEpEBCgxub3RfY29udGFpbnMYFyABKAlCe8JIeAp2ChNzdHJpbmcubm90X2NvbnRhaW5zGl90aGlzLmNvbnRhaW5zKHJ1bGVzLm5vdF9jb250YWlucykgPyAnY29udGFpbnMgc3Vic3RyaW5nIGAlc2AnLmZvcm1hdChbcnVsZXMubm90X2NvbnRhaW5zXSkgOiAnJxJ6CgJpbhgKIAMoCUJuwkhrCmkKCXN0cmluZy5pbhpcISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAnbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycScQoGbm90X2luGAsgAygJQmHCSF4KXAoNc3RyaW5nLm5vdF9pbhpLdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAnbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEtkBCgVlbWFpbBgMIAEoCELHAcJIwwEKWwoMc3RyaW5nLmVtYWlsEh1tdXN0IGJlIGEgdmFsaWQgZW1haWwgYWRkcmVzcxosIXJ1bGVzLmVtYWlsIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0VtYWlsKCkKZAoSc3RyaW5nLmVtYWlsX2VtcHR5EjJ2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzcxoaIXJ1bGVzLmVtYWlsIHx8IHRoaXMgIT0gJydIABLhAQoIaG9zdG5hbWUYDSABKAhCzAHCSMgBCl8KD3N0cmluZy5ob3N0bmFtZRIYbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lGjIhcnVsZXMuaG9zdG5hbWUgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdG5hbWUoKQplChVzdHJpbmcuaG9zdG5hbWVfZW1wdHkSLXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBob3N0bmFtZRodIXJ1bGVzLmhvc3RuYW1lIHx8IHRoaXMgIT0gJydIABLBAQoCaXAYDiABKAhCsgHCSK4BCk8KCXN0cmluZy5pcBIabXVzdCBiZSBhIHZhbGlkIElQIGFkZHJlc3MaJiFydWxlcy5pcCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCgpClsKD3N0cmluZy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaFyFydWxlcy5pcCB8fCB0aGlzICE9ICcnSAAS0AEKBGlwdjQYDyABKAhCvwHCSLsBClYKC3N0cmluZy5pcHY0EhxtdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzGikhcnVsZXMuaXB2NCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCg0KQphChFzdHJpbmcuaXB2NF9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgYWRkcmVzcxoZIXJ1bGVzLmlwdjQgfHwgdGhpcyAhPSAnJ0gAEtABCgRpcHY2GBAgASgIQr8Bwki7AQpWCgtzdHJpbmcuaXB2NhIcbXVzdCBiZSBhIHZhbGlkIElQdjYgYWRkcmVzcxopIXJ1bGVzLmlwdjYgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXAoNikKYQoRc3RyaW5nLmlwdjZfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3MaGSFydWxlcy5pcHY2IHx8IHRoaXMgIT0gJydIABK5AQoDdXJpGBEgASgIQqkBwkilAQpLCgpzdHJpbmcudXJpEhNtdXN0IGJlIGEgdmFsaWQgVVJJGighcnVsZXMudXJpIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc1VyaSgpClYKEHN0cmluZy51cmlfZW1wdHkSKHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVUkkaGCFydWxlcy51cmkgfHwgdGhpcyAhPSAnJ0gAEmoKB3VyaV9yZWYYEiABKAhCV8JIVApSCg5zdHJpbmcudXJpX3JlZhIdbXVzdCBiZSBhIHZhbGlkIFVSSSBSZWZlcmVuY2UaISFydWxlcy51cmlfcmVmIHx8IHRoaXMuaXNVcmlSZWYoKUgAEokCCgdhZGRyZXNzGBUgASgIQvUBwkjxAQp7Cg5zdHJpbmcuYWRkcmVzcxInbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lLCBvciBpcCBhZGRyZXNzGkAhcnVsZXMuYWRkcmVzcyB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0bmFtZSgpIHx8IHRoaXMuaXNJcCgpCnIKFHN0cmluZy5hZGRyZXNzX2VtcHR5Ejx2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgaG9zdG5hbWUsIG9yIGlwIGFkZHJlc3MaHCFydWxlcy5hZGRyZXNzIHx8IHRoaXMgIT0gJydIABKSAgoEdXVpZBgWIAEoCEKBAsJI/QEKnwEKC3N0cmluZy51dWlkEhRtdXN0IGJlIGEgdmFsaWQgVVVJRBp6IXJ1bGVzLnV1aWQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kJykKWQoRc3RyaW5nLnV1aWRfZW1wdHkSKXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVVUlEGhkhcnVsZXMudXVpZCB8fCB0aGlzICE9ICcnSAAS6gEKBXR1dWlkGCEgASgIQtgBwkjUAQptCgxzdHJpbmcudHV1aWQSHG11c3QgYmUgYSB2YWxpZCB0cmltbWVkIFVVSUQaPyFydWxlcy50dXVpZCB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcygnXlswLTlhLWZBLUZdezMyfSQnKQpjChJzdHJpbmcudHV1aWRfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCB0cmltbWVkIFVVSUQaGiFydWxlcy50dXVpZCB8fCB0aGlzICE9ICcnSAASkAIKEWlwX3dpdGhfcHJlZml4bGVuGBogASgIQvIBwkjuAQpyChhzdHJpbmcuaXBfd2l0aF9wcmVmaXhsZW4SGW11c3QgYmUgYSB2YWxpZCBJUCBwcmVmaXgaOyFydWxlcy5pcF93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCgpCngKHnN0cmluZy5pcF93aXRoX3ByZWZpeGxlbl9lbXB0eRIudmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIHByZWZpeBomIXJ1bGVzLmlwX3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgIT0gJydIABLJAgoTaXB2NF93aXRoX3ByZWZpeGxlbhgbIAEoCEKpAsJIpQIKjQEKGnN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuEi9tdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBo+IXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCkKkgEKIHN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuX2VtcHR5EkR2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBooIXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyAhPSAnJ0gAEskCChNpcHY2X3dpdGhfcHJlZml4bGVuGBwgASgIQqkCwkilAgqNAQoac3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW4SL211c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGj4hcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCg2KQqSAQogc3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW5fZW1wdHkSRHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGighcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzICE9ICcnSAAS7AEKCWlwX3ByZWZpeBgdIAEoCELWAcJI0gEKZgoQc3RyaW5nLmlwX3ByZWZpeBIZbXVzdCBiZSBhIHZhbGlkIElQIHByZWZpeBo3IXJ1bGVzLmlwX3ByZWZpeCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCh0cnVlKQpoChZzdHJpbmcuaXBfcHJlZml4X2VtcHR5Ei52YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgcHJlZml4Gh4hcnVsZXMuaXBfcHJlZml4IHx8IHRoaXMgIT0gJydIABL9AQoLaXB2NF9wcmVmaXgYHiABKAhC5QHCSOEBCm8KEnN0cmluZy5pcHY0X3ByZWZpeBIbbXVzdCBiZSBhIHZhbGlkIElQdjQgcHJlZml4GjwhcnVsZXMuaXB2NF9wcmVmaXggfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCwgdHJ1ZSkKbgoYc3RyaW5nLmlwdjRfcHJlZml4X2VtcHR5EjB2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBwcmVmaXgaICFydWxlcy5pcHY0X3ByZWZpeCB8fCB0aGlzICE9ICcnSAAS/QEKC2lwdjZfcHJlZml4GB8gASgIQuUBwkjhAQpvChJzdHJpbmcuaXB2Nl9wcmVmaXgSG211c3QgYmUgYSB2YWxpZCBJUHY2IHByZWZpeBo8IXJ1bGVzLmlwdjZfcHJlZml4IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDYsIHRydWUpCm4KGHN0cmluZy5pcHY2X3ByZWZpeF9lbXB0eRIwdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgcHJlZml4GiAhcnVsZXMuaXB2Nl9wcmVmaXggfHwgdGhpcyAhPSAnJ0gAEq8CCg1ob3N0X2FuZF9wb3J0GCAgASgIQpUCwkiRAgqTAQoUc3RyaW5nLmhvc3RfYW5kX3BvcnQSO211c3QgYmUgYSB2YWxpZCBob3N0IChob3N0bmFtZSBvciBJUCBhZGRyZXNzKSBhbmQgcG9ydCBwYWlyGj4hcnVsZXMuaG9zdF9hbmRfcG9ydCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0QW5kUG9ydCh0cnVlKQp5ChpzdHJpbmcuaG9zdF9hbmRfcG9ydF9lbXB0eRI3dmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3QgYW5kIHBvcnQgcGFpchoiIXJ1bGVzLmhvc3RfYW5kX3BvcnQgfHwgdGhpcyAhPSAnJ0gAEu4BCgR1bGlkGCMgASgIQt0BwkjZAQp8CgtzdHJpbmcudWxpZBIUbXVzdCBiZSBhIHZhbGlkIFVMSUQaVyFydWxlcy51bGlkIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCdeWzAtN11bMC05QS1ISktNTlAtVFYtWmEtaGprbW5wLXR2LXpdezI1fSQnKQpZChFzdHJpbmcudWxpZF9lbXB0eRIpdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIFVMSUQaGSFydWxlcy51bGlkIHx8IHRoaXMgIT0gJydIABLUAgoMcHJvdG9idWZfZnFuGCUgASgIQrsCwki3AgqvAQoTc3RyaW5nLnByb3RvYnVmX2ZxbhItbXVzdCBiZSBhIHZhbGlkIGZ1bGx5LXF1YWxpZmllZCBQcm90b2J1ZiBuYW1lGmkhcnVsZXMucHJvdG9idWZfZnFuIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCdeW0EtWmEtel9dW0EtWmEtel8wLTldKihcXC5bQS1aYS16X11bQS1aYS16XzAtOV0qKSokJykKggEKGXN0cmluZy5wcm90b2J1Zl9mcW5fZW1wdHkSQnZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBmdWxseS1xdWFsaWZpZWQgUHJvdG9idWYgbmFtZRohIXJ1bGVzLnByb3RvYnVmX2ZxbiB8fCB0aGlzICE9ICcnSAASkQMKEHByb3RvYnVmX2RvdF9mcW4YJiABKAhC9ALCSPACCs0BChdzdHJpbmcucHJvdG9idWZfZG90X2ZxbhJAbXVzdCBiZSBhIHZhbGlkIGZ1bGx5LXF1YWxpZmllZCBQcm90b2J1ZiBuYW1lIHdpdGggYSBsZWFkaW5nIGRvdBpwIXJ1bGVzLnByb3RvYnVmX2RvdF9mcW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15cXC5bQS1aYS16X11bQS1aYS16XzAtOV0qKFxcLltBLVphLXpfXVtBLVphLXpfMC05XSopKiQnKQqdAQodc3RyaW5nLnByb3RvYnVmX2RvdF9mcW5fZW1wdHkSVXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBmdWxseS1xdWFsaWZpZWQgUHJvdG9idWYgbmFtZSB3aXRoIGEgbGVhZGluZyBkb3QaJSFydWxlcy5wcm90b2J1Zl9kb3RfZnFuIHx8IHRoaXMgIT0gJydIABKcBQoQd2VsbF9rbm93bl9yZWdleBgYIAEoDjIYLmJ1Zi52YWxpZGF0ZS5Lbm93blJlZ2V4QuUEwkjhBArqAQojc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX25hbWUSIG11c3QgYmUgYSB2YWxpZCBIVFRQIGhlYWRlciBuYW1lGqABcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAxIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCFoYXMocnVsZXMuc3RyaWN0KSB8fCBydWxlcy5zdHJpY3QgPydeOj9bMC05YS16QS1aISMkJSZcJyorLS5eX3x+XHg2MF0rJCcgOideW15cdTAwMDBcdTAwMEFcdTAwMERdKyQnKQqNAQopc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX25hbWVfZW1wdHkSNXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBIVFRQIGhlYWRlciBuYW1lGilydWxlcy53ZWxsX2tub3duX3JlZ2V4ICE9IDEgfHwgdGhpcyAhPSAnJwrhAQokc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX3ZhbHVlEiFtdXN0IGJlIGEgdmFsaWQgSFRUUCBoZWFkZXIgdmFsdWUalQFydWxlcy53ZWxsX2tub3duX3JlZ2V4ICE9IDIgfHwgdGhpcy5tYXRjaGVzKCFoYXMocnVsZXMuc3RyaWN0KSB8fCBydWxlcy5zdHJpY3QgPydeW15cdTAwMDAtXHUwMDA4XHUwMDBBLVx1MDAxRlx1MDA3Rl0qJCcgOideW15cdTAwMDBcdTAwMEFcdTAwMERdKiQnKUgAEg4KBnN0cmljdBgZIAEoCBIsCgdleGFtcGxlGCIgAygJQhvCSBgKFgoOc3RyaW5nLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkIMCgp3ZWxsX2tub3duIt0RCgpCeXRlc1J1bGVzEnoKBWNvbnN0GAEgASgMQmvCSGgKZgoLYnl0ZXMuY29uc3QaV3RoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgYmUgJXgnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxJrCgNsZW4YDSABKARCXsJIWwpZCglieXRlcy5sZW4aTHVpbnQodGhpcy5zaXplKCkpICE9IHJ1bGVzLmxlbiA/ICdtdXN0IGJlICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLmxlbl0pIDogJycSgwEKB21pbl9sZW4YAiABKARCcsJIbwptCg1ieXRlcy5taW5fbGVuGlx1aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9sZW4gPyAnbXVzdCBiZSBhdCBsZWFzdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5taW5fbGVuXSkgOiAnJxKCAQoHbWF4X2xlbhgDIAEoBEJxwkhuCmwKDWJ5dGVzLm1heF9sZW4aW3VpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2xlbiA/ICdtdXN0IGJlIGF0IG1vc3QgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubWF4X2xlbl0pIDogJycSigEKB3BhdHRlcm4YBCABKAlCecJIdgp0Cg1ieXRlcy5wYXR0ZXJuGmMhc3RyaW5nKHRoaXMpLm1hdGNoZXMocnVsZXMucGF0dGVybikgPyAnbXVzdCBtYXRjaCByZWdleCBwYXR0ZXJuIGAlc2AnLmZvcm1hdChbcnVsZXMucGF0dGVybl0pIDogJycSewoGcHJlZml4GAUgASgMQmvCSGgKZgoMYnl0ZXMucHJlZml4GlYhdGhpcy5zdGFydHNXaXRoKHJ1bGVzLnByZWZpeCkgPyAnZG9lcyBub3QgaGF2ZSBwcmVmaXggJXgnLmZvcm1hdChbcnVsZXMucHJlZml4XSkgOiAnJxJ5CgZzdWZmaXgYBiABKAxCacJIZgpkCgxieXRlcy5zdWZmaXgaVCF0aGlzLmVuZHNXaXRoKHJ1bGVzLnN1ZmZpeCkgPyAnZG9lcyBub3QgaGF2ZSBzdWZmaXggJXgnLmZvcm1hdChbcnVsZXMuc3VmZml4XSkgOiAnJxJ9Cghjb250YWlucxgHIAEoDEJrwkhoCmYKDmJ5dGVzLmNvbnRhaW5zGlQhdGhpcy5jb250YWlucyhydWxlcy5jb250YWlucykgPyAnZG9lcyBub3QgY29udGFpbiAleCcuZm9ybWF0KFtydWxlcy5jb250YWluc10pIDogJycSoQEKAmluGAggAygMQpQBwkiQAQqNAQoIYnl0ZXMuaW4agAFnZXRGaWVsZChydWxlcywgJ2luJykuc2l6ZSgpID4gMCAmJiAhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICdtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJwCgZub3RfaW4YCSADKAxCYMJIXQpbCgxieXRlcy5ub3RfaW4aS3RoaXMgaW4gcnVsZXMubm90X2luID8gJ211c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxLlAQoCaXAYCiABKAhC1gHCSNIBCm4KCGJ5dGVzLmlwEhptdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcxpGIXJ1bGVzLmlwIHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNCB8fCB0aGlzLnNpemUoKSA9PSAxNgpgCg5ieXRlcy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaHSFydWxlcy5pcCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS3gEKBGlwdjQYCyABKAhCzQHCSMkBCl8KCmJ5dGVzLmlwdjQSHG11c3QgYmUgYSB2YWxpZCBJUHY0IGFkZHJlc3MaMyFydWxlcy5pcHY0IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNApmChBieXRlcy5pcHY0X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzGh8hcnVsZXMuaXB2NCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS3wEKBGlwdjYYDCABKAhCzgHCSMoBCmAKCmJ5dGVzLmlwdjYSHG11c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3MaNCFydWxlcy5pcHY2IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gMTYKZgoQYnl0ZXMuaXB2Nl9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgYWRkcmVzcxofIXJ1bGVzLmlwdjYgfHwgdGhpcy5zaXplKCkgIT0gMEgAEs8BCgR1dWlkGA8gASgIQr4Bwki6AQpYCgpieXRlcy51dWlkEhRtdXN0IGJlIGEgdmFsaWQgVVVJRBo0IXJ1bGVzLnV1aWQgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSAxNgpeChBieXRlcy51dWlkX2VtcHR5Eil2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgVVVJRBofIXJ1bGVzLnV1aWQgfHwgdGhpcy5zaXplKCkgIT0gMEgAEisKB2V4YW1wbGUYDiADKAxCGsJIFwoVCg1ieXRlcy5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCDAoKd2VsbF9rbm93biLBAwoJRW51bVJ1bGVzEnwKBWNvbnN0GAEgASgFQm3CSGoKaAoKZW51bS5jb25zdBpadGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAnbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEhQKDGRlZmluZWRfb25seRgCIAEoCBJ4CgJpbhgDIAMoBUJswkhpCmcKB2VudW0uaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEm8KBm5vdF9pbhgEIAMoBUJfwkhcCloKC2VudW0ubm90X2luGkt0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICdtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSKgoHZXhhbXBsZRgFIAMoBUIZwkgWChQKDGVudW0uZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACIu0DCg1SZXBlYXRlZFJ1bGVzEpYBCgltaW5faXRlbXMYASABKARCggHCSH8KfQoScmVwZWF0ZWQubWluX2l0ZW1zGmd1aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9pdGVtcyA/ICdtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJWQgaXRlbShzKScuZm9ybWF0KFtydWxlcy5taW5faXRlbXNdKSA6ICcnEpwBCgltYXhfaXRlbXMYAiABKARCiAHCSIQBCoEBChJyZXBlYXRlZC5tYXhfaXRlbXMaa3VpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2l0ZW1zID8gJ211c3QgY29udGFpbiBubyBtb3JlIHRoYW4gJXMgaXRlbShzKScuZm9ybWF0KFtydWxlcy5tYXhfaXRlbXNdKSA6ICcnEnAKBnVuaXF1ZRgDIAEoCEJgwkhdClsKD3JlcGVhdGVkLnVuaXF1ZRIocmVwZWF0ZWQgdmFsdWUgbXVzdCBjb250YWluIHVuaXF1ZSBpdGVtcxoeIXJ1bGVzLnVuaXF1ZSB8fCB0aGlzLnVuaXF1ZSgpEicKBWl0ZW1zGAQgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXMqCQjoBxCAgICAAiKKAwoITWFwUnVsZXMSjwEKCW1pbl9wYWlycxgBIAEoBEJ8wkh5CncKDW1hcC5taW5fcGFpcnMaZnVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX3BhaXJzID8gJ21hcCBtdXN0IGJlIGF0IGxlYXN0ICVkIGVudHJpZXMnLmZvcm1hdChbcnVsZXMubWluX3BhaXJzXSkgOiAnJxKOAQoJbWF4X3BhaXJzGAIgASgEQnvCSHgKdgoNbWFwLm1heF9wYWlycxpldWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfcGFpcnMgPyAnbWFwIG11c3QgYmUgYXQgbW9zdCAlZCBlbnRyaWVzJy5mb3JtYXQoW3J1bGVzLm1heF9wYWlyc10pIDogJycSJgoEa2V5cxgEIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzEigKBnZhbHVlcxgFIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzKgkI6AcQgICAgAIiJgoIQW55UnVsZXMSCgoCaW4YAiADKAkSDgoGbm90X2luGAMgAygJIr8WCg1EdXJhdGlvblJ1bGVzEpsBCgVjb25zdBgCIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkJxwkhuCmwKDmR1cmF0aW9uLmNvbnN0Glp0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICdtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSogEKAmx0GAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQnnCSHYKdAoLZHVyYXRpb24ubHQaZSFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAnbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAAStAEKA2x0ZRgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkKJAcJIhQEKggEKDGR1cmF0aW9uLmx0ZRpyIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASowcKAmd0GAUgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQvkGwkj1Bgp3CgtkdXJhdGlvbi5ndBpoIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKsAEKDmR1cmF0aW9uLmd0X2x0Gp0BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq4AQoYZHVyYXRpb24uZ3RfbHRfZXhjbHVzaXZlGpsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKwAEKD2R1cmF0aW9uLmd0X2x0ZRqsAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKyAEKGWR1cmF0aW9uLmd0X2x0ZV9leGNsdXNpdmUaqgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEu8HCgNndGUYBiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CxAfCSMAHCoUBCgxkdXJhdGlvbi5ndGUadSFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwq/AQoPZHVyYXRpb24uZ3RlX2x0GqsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCscBChlkdXJhdGlvbi5ndGVfbHRfZXhjbHVzaXZlGqkBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrPAQoQZHVyYXRpb24uZ3RlX2x0ZRq6AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrXAQoaZHVyYXRpb24uZ3RlX2x0ZV9leGNsdXNpdmUauAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESlwEKAmluGAcgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQnDCSG0KawoLZHVyYXRpb24uaW4aXCEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ211c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEo4BCgZub3RfaW4YCCADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CY8JIYApeCg9kdXJhdGlvbi5ub3RfaW4aS3RoaXMgaW4gcnVsZXMubm90X2luID8gJ211c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxJJCgdleGFtcGxlGAkgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQh3CSBoKGAoQZHVyYXRpb24uZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i6wUKDkZpZWxkTWFza1J1bGVzErkBCgVjb25zdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tCjQHCSIkBCoYBChBmaWVsZF9tYXNrLmNvbnN0GnJ0aGlzLnBhdGhzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKS5wYXRocyA/ICdtdXN0IGVxdWFsIHBhdGhzICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKS5wYXRoc10pIDogJycS0wEKAmluGAIgAygJQsYBwkjCAQq/AQoNZmllbGRfbWFzay5pbhqtASF0aGlzLnBhdGhzLmFsbChwLCBwIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSB8fCBnZXRGaWVsZChydWxlcywgJ2luJykuZXhpc3RzKGYsIHAuc3RhcnRzV2l0aChmKycuJykpKSA/ICdtdXN0IG9ubHkgY29udGFpbiBwYXRocyBpbiAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEu0BCgZub3RfaW4YAyADKAlC3AHCSNgBCtUBChFmaWVsZF9tYXNrLm5vdF9pbhq/ASF0aGlzLnBhdGhzLmFsbChwLCAhKHAgaW4gZ2V0RmllbGQocnVsZXMsICdub3RfaW4nKSB8fCBnZXRGaWVsZChydWxlcywgJ25vdF9pbicpLmV4aXN0cyhmLCBwLnN0YXJ0c1dpdGgoZisnLicpKSkpID8gJ211c3Qgbm90IGNvbnRhaW4gYW55IHBhdGhzIGluICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnbm90X2luJyldKSA6ICcnEkwKB2V4YW1wbGUYBCADKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrQh/CSBwKGgoSZmllbGRfbWFzay5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIisBcKDlRpbWVzdGFtcFJ1bGVzEp0BCgVjb25zdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCcsJIbwptCg90aW1lc3RhbXAuY29uc3QaWnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ211c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKkAQoCbHQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQnrCSHcKdQoMdGltZXN0YW1wLmx0GmUhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ211c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAErYBCgNsdGUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQooBwkiGAQqDAQoNdGltZXN0YW1wLmx0ZRpyIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASZgoGbHRfbm93GAcgASgIQlTCSFEKTwoQdGltZXN0YW1wLmx0X25vdxo7KHJ1bGVzLmx0X25vdyAmJiB0aGlzID4gbm93KSA/ICdtdXN0IGJlIGxlc3MgdGhhbiBub3cnIDogJydIABKpBwoCZ3QYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQv4Gwkj6Bgp4Cgx0aW1lc3RhbXAuZ3QaaCFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrEBCg90aW1lc3RhbXAuZ3RfbHQanQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrkBChl0aW1lc3RhbXAuZ3RfbHRfZXhjbHVzaXZlGpsBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKwQEKEHRpbWVzdGFtcC5ndF9sdGUarAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICdtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCskBChp0aW1lc3RhbXAuZ3RfbHRlX2V4Y2x1c2l2ZRqqAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES9QcKA2d0ZRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCyQfCSMUHCoYBCg10aW1lc3RhbXAuZ3RlGnUhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKwAEKEHRpbWVzdGFtcC5ndGVfbHQaqwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKyAEKGnRpbWVzdGFtcC5ndGVfbHRfZXhjbHVzaXZlGqkBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrQAQoRdGltZXN0YW1wLmd0ZV9sdGUaugFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAnbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK2AEKG3RpbWVzdGFtcC5ndGVfbHRlX2V4Y2x1c2l2ZRq4AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJpCgZndF9ub3cYCCABKAhCV8JIVApSChB0aW1lc3RhbXAuZ3Rfbm93Gj4ocnVsZXMuZ3Rfbm93ICYmIHRoaXMgPCBub3cpID8gJ211c3QgYmUgZ3JlYXRlciB0aGFuIG5vdycgOiAnJ0gBErEBCgZ3aXRoaW4YCSABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25ChQHCSIEBCn8KEHRpbWVzdGFtcC53aXRoaW4aa3RoaXMgPCBub3ctcnVsZXMud2l0aGluIHx8IHRoaXMgPiBub3crcnVsZXMud2l0aGluID8gJ211c3QgYmUgd2l0aGluICVzIG9mIG5vdycuZm9ybWF0KFtydWxlcy53aXRoaW5dKSA6ICcnEksKB2V4YW1wbGUYCiADKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQh7CSBsKGQoRdGltZXN0YW1wLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIjkKClZpb2xhdGlvbnMSKwoKdmlvbGF0aW9ucxgBIAMoCzIXLmJ1Zi52YWxpZGF0ZS5WaW9sYXRpb24inwEKCVZpb2xhdGlvbhImCgVmaWVsZBgFIAEoCzIXLmJ1Zi52YWxpZGF0ZS5GaWVsZFBhdGgSJQoEcnVsZRgGIAEoCzIXLmJ1Zi52YWxpZGF0ZS5GaWVsZFBhdGgSDwoHcnVsZV9pZBgCIAEoCRIPCgdtZXNzYWdlGAMgASgJEg8KB2Zvcl9rZXkYBCABKAhKBAgBEAJSCmZpZWxkX3BhdGgiPQoJRmllbGRQYXRoEjAKCGVsZW1lbnRzGAEgAygLMh4uYnVmLnZhbGlkYXRlLkZpZWxkUGF0aEVsZW1lbnQi6QIKEEZpZWxkUGF0aEVsZW1lbnQSFAoMZmllbGRfbnVtYmVyGAEgASgFEhIKCmZpZWxkX25hbWUYAiABKAkSPgoKZmllbGRfdHlwZRgDIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlEjwKCGtleV90eXBlGAQgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUSPgoKdmFsdWVfdHlwZRgFIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlEg8KBWluZGV4GAYgASgESAASEgoIYm9vbF9rZXkYByABKAhIABIRCgdpbnRfa2V5GAggASgDSAASEgoIdWludF9rZXkYCSABKARIABIUCgpzdHJpbmdfa2V5GAogASgJSABCCwoJc3Vic2NyaXB0KqEBCgZJZ25vcmUSFgoSSUdOT1JFX1VOU1BFQ0lGSUVEEAASGAoUSUdOT1JFX0lGX1pFUk9fVkFMVUUQARIRCg1JR05PUkVfQUxXQVlTEAMiBAgCEAIqDElHTk9SRV9FTVBUWSoOSUdOT1JFX0RFRkFVTFQqF0lHTk9SRV9JRl9ERUZBVUxUX1ZBTFVFKhVJR05PUkVfSUZfVU5QT1BVTEFURUQqbgoKS25vd25SZWdleBIbChdLTk9XTl9SRUdFWF9VTlNQRUNJRklFRBAAEiAKHEtOT1dOX1JFR0VYX0hUVFBfSEVBREVSX05BTUUQARIhCh1LTk9XTl9SRUdFWF9IVFRQX0hFQURFUl9WQUxVRRACOlYKB21lc3NhZ2USHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYhwkgASgLMhouYnVmLnZhbGlkYXRlLk1lc3NhZ2VSdWxlc1IHbWVzc2FnZTpOCgVvbmVvZhIdLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMYhwkgASgLMhguYnVmLnZhbGlkYXRlLk9uZW9mUnVsZXNSBW9uZW9mOk4KBWZpZWxkEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxiHCSABKAsyGC5idWYudmFsaWRhdGUuRmllbGRSdWxlc1IFZmllbGQ6XQoKcHJlZGVmaW5lZBIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMYiAkgASgLMh0uYnVmLnZhbGlkYXRlLlByZWRlZmluZWRSdWxlc1IKcHJlZGVmaW5lZEK7AQoQY29tLmJ1Zi52YWxpZGF0ZUINVmFsaWRhdGVQcm90b1ABWkdidWYuYnVpbGQvZ2VuL2dvL2J1ZmJ1aWxkL3Byb3RvdmFsaWRhdGUvcHJvdG9jb2xidWZmZXJzL2dvL2J1Zi92YWxpZGF0ZaICA0JWWKoCDEJ1Zi5WYWxpZGF0ZcoCDEJ1ZlxWYWxpZGF0ZeICGEJ1ZlxWYWxpZGF0ZVxHUEJNZXRhZGF0YeoCDUJ1Zjo6VmFsaWRhdGU\", [file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_field_mask, file_google_protobuf_timestamp]);\n\n/**\n * `Rule` represents a validation rule written in the Common Expression\n * Language (CEL) syntax. Each Rule includes a unique identifier, an\n * optional error message, and the CEL expression to evaluate. For more\n * information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n * ```proto\n * message Foo {\n *   option (buf.validate.message).cel = {\n *     id: \"foo.bar\"\n *     message: \"bar must be greater than 0\"\n *     expression: \"this.bar > 0\"\n *   };\n *   int32 bar = 1;\n * }\n * ```\n *\n * @generated from message buf.validate.Rule\n */\nexport type Rule = Message<\"buf.validate.Rule\"> & {\n  /**\n   * `id` is a string that serves as a machine-readable name for this Rule.\n   * It should be unique within its scope, which could be either a message or a field.\n   *\n   * @generated from field: optional string id = 1;\n   */\n  id: string;\n\n  /**\n   * `message` is an optional field that provides a human-readable error message\n   * for this Rule when the CEL expression evaluates to false. If a\n   * non-empty message is provided, any strings resulting from the CEL\n   * expression evaluation are ignored.\n   *\n   * @generated from field: optional string message = 2;\n   */\n  message: string;\n\n  /**\n   * `expression` is the actual CEL expression that will be evaluated for\n   * validation. This string must resolve to either a boolean or a string\n   * value. If the expression evaluates to false or a non-empty string, the\n   * validation is considered failed, and the message is rejected.\n   *\n   * @generated from field: optional string expression = 3;\n   */\n  expression: string;\n};\n\n/**\n * Describes the message buf.validate.Rule.\n * Use `create(RuleSchema)` to create a new message.\n */\nexport const RuleSchema: GenMessage<Rule> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 0);\n\n/**\n * MessageRules represents validation rules that are applied to the entire message.\n * It includes disabling options and a list of Rule messages representing Common Expression Language (CEL) validation rules.\n *\n * @generated from message buf.validate.MessageRules\n */\nexport type MessageRules = Message<\"buf.validate.MessageRules\"> & {\n  /**\n   * `cel_expression` is a repeated field CEL expressions. Each expression specifies a validation\n   * rule to be applied to this message. These rules are written in Common Expression Language (CEL) syntax.\n   *\n   * This is a simplified form of the `cel` Rule field, where only `expression` is set. This allows for\n   * simpler syntax when defining CEL Rules where `id` and `message` derived from the `expression`. `id` will\n   * be same as the `expression`.\n   *\n   * For more information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n   *\n   * ```proto\n   * message MyMessage {\n   *   // The field `foo` must be greater than 42.\n   *   option (buf.validate.message).cel_expression = \"this.foo > 42\";\n   *   // The field `foo` must be less than 84.\n   *   option (buf.validate.message).cel_expression = \"this.foo < 84\";\n   *   optional int32 foo = 1;\n   * }\n   * ```\n   *\n   * @generated from field: repeated string cel_expression = 5;\n   */\n  celExpression: string[];\n\n  /**\n   * `cel` is a repeated field of type Rule. Each Rule specifies a validation rule to be applied to this message.\n   * These rules are written in Common Expression Language (CEL) syntax. For more information,\n   * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n   *\n   *\n   * ```proto\n   * message MyMessage {\n   *   // The field `foo` must be greater than 42.\n   *   option (buf.validate.message).cel = {\n   *     id: \"my_message.value\",\n   *     message: \"must be greater than 42\",\n   *     expression: \"this.foo > 42\",\n   *   };\n   *   optional int32 foo = 1;\n   * }\n   * ```\n   *\n   * @generated from field: repeated buf.validate.Rule cel = 3;\n   */\n  cel: Rule[];\n\n  /**\n   * `oneof` is a repeated field of type MessageOneofRule that specifies a list of fields\n   * of which at most one can be present. If `required` is also specified, then exactly one\n   * of the specified fields _must_ be present.\n   *\n   * This will enforce oneof-like constraints with a few features not provided by\n   * actual Protobuf oneof declarations:\n   *   1. Repeated and map fields are allowed in this validation. In a Protobuf oneof,\n   *      only scalar fields are allowed.\n   *   2. Fields with implicit presence are allowed. In a Protobuf oneof, all member\n   *      fields have explicit presence. This means that, for the purpose of determining\n   *      how many fields are set, explicitly setting such a field to its zero value is\n   *      effectively the same as not setting it at all.\n   *   3. This will always generate validation errors for a message unmarshalled from\n   *      serialized data that sets more than one field. With a Protobuf oneof, when\n   *      multiple fields are present in the serialized form, earlier values are usually\n   *      silently ignored when unmarshalling, with only the last field being set when\n   *      unmarshalling completes.\n   *\n   * Note that adding a field to a `oneof` will also set the IGNORE_IF_ZERO_VALUE on the fields. This means\n   * only the field that is set will be validated and the unset fields are not validated according to the field rules.\n   * This behavior can be overridden by setting `ignore` against a field.\n   *\n   * ```proto\n   * message MyMessage {\n   *   // Only one of `field1` or `field2` _can_ be present in this message.\n   *   option (buf.validate.message).oneof = { fields: [\"field1\", \"field2\"] };\n   *   // Exactly one of `field3` or `field4` _must_ be present in this message.\n   *   option (buf.validate.message).oneof = { fields: [\"field3\", \"field4\"], required: true };\n   *   string field1 = 1;\n   *   bytes field2 = 2;\n   *   bool field3 = 3;\n   *   int32 field4 = 4;\n   * }\n   * ```\n   *\n   * @generated from field: repeated buf.validate.MessageOneofRule oneof = 4;\n   */\n  oneof: MessageOneofRule[];\n};\n\n/**\n * Describes the message buf.validate.MessageRules.\n * Use `create(MessageRulesSchema)` to create a new message.\n */\nexport const MessageRulesSchema: GenMessage<MessageRules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 1);\n\n/**\n * @generated from message buf.validate.MessageOneofRule\n */\nexport type MessageOneofRule = Message<\"buf.validate.MessageOneofRule\"> & {\n  /**\n   * A list of field names to include in the oneof. All field names must be\n   * defined in the message. At least one field must be specified, and\n   * duplicates are not permitted.\n   *\n   * @generated from field: repeated string fields = 1;\n   */\n  fields: string[];\n\n  /**\n   * If true, one of the fields specified _must_ be set.\n   *\n   * @generated from field: optional bool required = 2;\n   */\n  required: boolean;\n};\n\n/**\n * Describes the message buf.validate.MessageOneofRule.\n * Use `create(MessageOneofRuleSchema)` to create a new message.\n */\nexport const MessageOneofRuleSchema: GenMessage<MessageOneofRule> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 2);\n\n/**\n * The `OneofRules` message type enables you to manage rules for\n * oneof fields in your protobuf messages.\n *\n * @generated from message buf.validate.OneofRules\n */\nexport type OneofRules = Message<\"buf.validate.OneofRules\"> & {\n  /**\n   * If `required` is true, exactly one field of the oneof must be set. A\n   * validation error is returned if no fields in the oneof are set. Further rules\n   * should be placed on the fields themselves to ensure they are valid values,\n   * such as `min_len` or `gt`.\n   *\n   * ```proto\n   * message MyMessage {\n   *   oneof value {\n   *     // Either `a` or `b` must be set. If `a` is set, it must also be\n   *     // non-empty; whereas if `b` is set, it can still be an empty string.\n   *     option (buf.validate.oneof).required = true;\n   *     string a = 1 [(buf.validate.field).string.min_len = 1];\n   *     string b = 2;\n   *   }\n   * }\n   * ```\n   *\n   * @generated from field: optional bool required = 1;\n   */\n  required: boolean;\n};\n\n/**\n * Describes the message buf.validate.OneofRules.\n * Use `create(OneofRulesSchema)` to create a new message.\n */\nexport const OneofRulesSchema: GenMessage<OneofRules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 3);\n\n/**\n * FieldRules encapsulates the rules for each type of field. Depending on\n * the field, the correct set should be used to ensure proper validations.\n *\n * @generated from message buf.validate.FieldRules\n */\nexport type FieldRules = Message<\"buf.validate.FieldRules\"> & {\n  /**\n   * `cel_expression` is a repeated field CEL expressions. Each expression specifies a validation\n   * rule to be applied to this message. These rules are written in Common Expression Language (CEL) syntax.\n   *\n   * This is a simplified form of the `cel` Rule field, where only `expression` is set. This allows for\n   * simpler syntax when defining CEL Rules where `id` and `message` derived from the `expression`. `id` will\n   * be same as the `expression`.\n   *\n   * For more information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n   *\n   * ```proto\n   * message MyMessage {\n   *   // The field `value` must be greater than 42.\n   *   optional int32 value = 1 [(buf.validate.field).cel_expression = \"this > 42\"];\n   * }\n   * ```\n   *\n   * @generated from field: repeated string cel_expression = 29;\n   */\n  celExpression: string[];\n\n  /**\n   * `cel` is a repeated field used to represent a textual expression\n   * in the Common Expression Language (CEL) syntax. For more information,\n   * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n   *\n   * ```proto\n   * message MyMessage {\n   *   // The field `value` must be greater than 42.\n   *   optional int32 value = 1 [(buf.validate.field).cel = {\n   *     id: \"my_message.value\",\n   *     message: \"must be greater than 42\",\n   *     expression: \"this > 42\",\n   *   }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated buf.validate.Rule cel = 23;\n   */\n  cel: Rule[];\n\n  /**\n   * If `required` is true, the field must be set. A validation error is returned\n   * if the field is not set.\n   *\n   * ```proto\n   * syntax=\"proto3\";\n   *\n   * message FieldsWithPresence {\n   *   // Requires any string to be set, including the empty string.\n   *   optional string link = 1 [\n   *     (buf.validate.field).required = true\n   *   ];\n   *   // Requires true or false to be set.\n   *   optional bool disabled = 2 [\n   *     (buf.validate.field).required = true\n   *   ];\n   *   // Requires a message to be set, including the empty message.\n   *   SomeMessage msg = 4 [\n   *     (buf.validate.field).required = true\n   *   ];\n   * }\n   * ```\n   *\n   * All fields in the example above track presence. By default, Protovalidate\n   * ignores rules on those fields if no value is set. `required` ensures that\n   * the fields are set and valid.\n   *\n   * Fields that don't track presence are always validated by Protovalidate,\n   * whether they are set or not. It is not necessary to add `required`. It\n   * can be added to indicate that the field cannot be the zero value.\n   *\n   * ```proto\n   * syntax=\"proto3\";\n   *\n   * message FieldsWithoutPresence {\n   *   // `string.email` always applies, even to an empty string.\n   *   string link = 1 [\n   *     (buf.validate.field).string.email = true\n   *   ];\n   *   // `repeated.min_items` always applies, even to an empty list.\n   *   repeated string labels = 2 [\n   *     (buf.validate.field).repeated.min_items = 1\n   *   ];\n   *   // `required`, for fields that don't track presence, indicates\n   *   // the value of the field can't be the zero value.\n   *   int32 zero_value_not_allowed = 3 [\n   *     (buf.validate.field).required = true\n   *   ];\n   * }\n   * ```\n   *\n   * To learn which fields track presence, see the\n   * [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat).\n   *\n   * Note: While field rules can be applied to repeated items, map keys, and map\n   * values, the elements are always considered to be set. Consequently,\n   * specifying `repeated.items.required` is redundant.\n   *\n   * @generated from field: optional bool required = 25;\n   */\n  required: boolean;\n\n  /**\n   * Ignore validation rules on the field if its value matches the specified\n   * criteria. See the `Ignore` enum for details.\n   *\n   * ```proto\n   * message UpdateRequest {\n   *   // The uri rule only applies if the field is not an empty string.\n   *   string url = 1 [\n   *     (buf.validate.field).ignore = IGNORE_IF_ZERO_VALUE,\n   *     (buf.validate.field).string.uri = true\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: optional buf.validate.Ignore ignore = 27;\n   */\n  ignore: Ignore;\n\n  /**\n   * @generated from oneof buf.validate.FieldRules.type\n   */\n  type: {\n    /**\n     * Scalar Field Types\n     *\n     * @generated from field: buf.validate.FloatRules float = 1;\n     */\n    value: FloatRules;\n    case: \"float\";\n  } | {\n    /**\n     * @generated from field: buf.validate.DoubleRules double = 2;\n     */\n    value: DoubleRules;\n    case: \"double\";\n  } | {\n    /**\n     * @generated from field: buf.validate.Int32Rules int32 = 3;\n     */\n    value: Int32Rules;\n    case: \"int32\";\n  } | {\n    /**\n     * @generated from field: buf.validate.Int64Rules int64 = 4;\n     */\n    value: Int64Rules;\n    case: \"int64\";\n  } | {\n    /**\n     * @generated from field: buf.validate.UInt32Rules uint32 = 5;\n     */\n    value: UInt32Rules;\n    case: \"uint32\";\n  } | {\n    /**\n     * @generated from field: buf.validate.UInt64Rules uint64 = 6;\n     */\n    value: UInt64Rules;\n    case: \"uint64\";\n  } | {\n    /**\n     * @generated from field: buf.validate.SInt32Rules sint32 = 7;\n     */\n    value: SInt32Rules;\n    case: \"sint32\";\n  } | {\n    /**\n     * @generated from field: buf.validate.SInt64Rules sint64 = 8;\n     */\n    value: SInt64Rules;\n    case: \"sint64\";\n  } | {\n    /**\n     * @generated from field: buf.validate.Fixed32Rules fixed32 = 9;\n     */\n    value: Fixed32Rules;\n    case: \"fixed32\";\n  } | {\n    /**\n     * @generated from field: buf.validate.Fixed64Rules fixed64 = 10;\n     */\n    value: Fixed64Rules;\n    case: \"fixed64\";\n  } | {\n    /**\n     * @generated from field: buf.validate.SFixed32Rules sfixed32 = 11;\n     */\n    value: SFixed32Rules;\n    case: \"sfixed32\";\n  } | {\n    /**\n     * @generated from field: buf.validate.SFixed64Rules sfixed64 = 12;\n     */\n    value: SFixed64Rules;\n    case: \"sfixed64\";\n  } | {\n    /**\n     * @generated from field: buf.validate.BoolRules bool = 13;\n     */\n    value: BoolRules;\n    case: \"bool\";\n  } | {\n    /**\n     * @generated from field: buf.validate.StringRules string = 14;\n     */\n    value: StringRules;\n    case: \"string\";\n  } | {\n    /**\n     * @generated from field: buf.validate.BytesRules bytes = 15;\n     */\n    value: BytesRules;\n    case: \"bytes\";\n  } | {\n    /**\n     * Complex Field Types\n     *\n     * @generated from field: buf.validate.EnumRules enum = 16;\n     */\n    value: EnumRules;\n    case: \"enum\";\n  } | {\n    /**\n     * @generated from field: buf.validate.RepeatedRules repeated = 18;\n     */\n    value: RepeatedRules;\n    case: \"repeated\";\n  } | {\n    /**\n     * @generated from field: buf.validate.MapRules map = 19;\n     */\n    value: MapRules;\n    case: \"map\";\n  } | {\n    /**\n     * Well-Known Field Types\n     *\n     * @generated from field: buf.validate.AnyRules any = 20;\n     */\n    value: AnyRules;\n    case: \"any\";\n  } | {\n    /**\n     * @generated from field: buf.validate.DurationRules duration = 21;\n     */\n    value: DurationRules;\n    case: \"duration\";\n  } | {\n    /**\n     * @generated from field: buf.validate.FieldMaskRules field_mask = 28;\n     */\n    value: FieldMaskRules;\n    case: \"fieldMask\";\n  } | {\n    /**\n     * @generated from field: buf.validate.TimestampRules timestamp = 22;\n     */\n    value: TimestampRules;\n    case: \"timestamp\";\n  } | { case: undefined; value?: undefined };\n};\n\n/**\n * Describes the message buf.validate.FieldRules.\n * Use `create(FieldRulesSchema)` to create a new message.\n */\nexport const FieldRulesSchema: GenMessage<FieldRules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 4);\n\n/**\n * PredefinedRules are custom rules that can be re-used with\n * multiple fields.\n *\n * @generated from message buf.validate.PredefinedRules\n */\nexport type PredefinedRules = Message<\"buf.validate.PredefinedRules\"> & {\n  /**\n   * `cel` is a repeated field used to represent a textual expression\n   * in the Common Expression Language (CEL) syntax. For more information,\n   * [see our documentation](https://buf.build/docs/protovalidate/schemas/predefined-rules/).\n   *\n   * ```proto\n   * message MyMessage {\n   *   // The field `value` must be greater than 42.\n   *   optional int32 value = 1 [(buf.validate.predefined).cel = {\n   *     id: \"my_message.value\",\n   *     message: \"must be greater than 42\",\n   *     expression: \"this > 42\",\n   *   }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated buf.validate.Rule cel = 1;\n   */\n  cel: Rule[];\n};\n\n/**\n * Describes the message buf.validate.PredefinedRules.\n * Use `create(PredefinedRulesSchema)` to create a new message.\n */\nexport const PredefinedRulesSchema: GenMessage<PredefinedRules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 5);\n\n/**\n * FloatRules describes the rules applied to `float` values. These\n * rules may also be applied to the `google.protobuf.FloatValue` Well-Known-Type.\n *\n * @generated from message buf.validate.FloatRules\n */\nexport type FloatRules = Message<\"buf.validate.FloatRules\"> & {\n  /**\n   * `const` requires the field value to exactly match the specified value. If\n   * the field value doesn't match, an error message is generated.\n   *\n   * ```proto\n   * message MyFloat {\n   *   // value must equal 42.0\n   *   float value = 1 [(buf.validate.field).float.const = 42.0];\n   * }\n   * ```\n   *\n   * @generated from field: optional float const = 1;\n   */\n  const: number;\n\n  /**\n   * @generated from oneof buf.validate.FloatRules.less_than\n   */\n  lessThan: {\n    /**\n     * `lt` requires the field value to be less than the specified value (field <\n     * value). If the field value is equal to or greater than the specified value,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyFloat {\n     *   // must be less than 10.0\n     *   float value = 1 [(buf.validate.field).float.lt = 10.0];\n     * }\n     * ```\n     *\n     * @generated from field: float lt = 2;\n     */\n    value: number;\n    case: \"lt\";\n  } | {\n    /**\n     * `lte` requires the field value to be less than or equal to the specified\n     * value (field <= value). If the field value is greater than the specified\n     * value, an error message is generated.\n     *\n     * ```proto\n     * message MyFloat {\n     *   // must be less than or equal to 10.0\n     *   float value = 1 [(buf.validate.field).float.lte = 10.0];\n     * }\n     * ```\n     *\n     * @generated from field: float lte = 3;\n     */\n    value: number;\n    case: \"lte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * @generated from oneof buf.validate.FloatRules.greater_than\n   */\n  greaterThan: {\n    /**\n     * `gt` requires the field value to be greater than the specified value\n     * (exclusive). If the value of `gt` is larger than a specified `lt` or\n     * `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyFloat {\n     *   // must be greater than 5.0 [float.gt]\n     *   float value = 1 [(buf.validate.field).float.gt = 5.0];\n     *\n     *   // must be greater than 5 and less than 10.0 [float.gt_lt]\n     *   float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];\n     *\n     *   // must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]\n     *   float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];\n     * }\n     * ```\n     *\n     * @generated from field: float gt = 4;\n     */\n    value: number;\n    case: \"gt\";\n  } | {\n    /**\n     * `gte` requires the field value to be greater than or equal to the specified\n     * value (exclusive). If the value of `gte` is larger than a specified `lt`\n     * or `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyFloat {\n     *   // must be greater than or equal to 5.0 [float.gte]\n     *   float value = 1 [(buf.validate.field).float.gte = 5.0];\n     *\n     *   // must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]\n     *   float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];\n     *\n     *   // must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]\n     *   float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];\n     * }\n     * ```\n     *\n     * @generated from field: float gte = 5;\n     */\n    value: number;\n    case: \"gte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * `in` requires the field value to be equal to one of the specified values.\n   * If the field value isn't one of the specified values, an error message\n   * is generated.\n   *\n   * ```proto\n   * message MyFloat {\n   *   // must be in list [1.0, 2.0, 3.0]\n   *   float value = 1 [(buf.validate.field).float = { in: [1.0, 2.0, 3.0] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated float in = 6;\n   */\n  in: number[];\n\n  /**\n   * `not_in` requires the field value to not be equal to any of the specified\n   * values. If the field value is one of the specified values, an error\n   * message is generated.\n   *\n   * ```proto\n   * message MyFloat {\n   *   // value must not be in list [1.0, 2.0, 3.0]\n   *   float value = 1 [(buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated float not_in = 7;\n   */\n  notIn: number[];\n\n  /**\n   * `finite` requires the field value to be finite. If the field value is\n   * infinite or NaN, an error message is generated.\n   *\n   * @generated from field: optional bool finite = 8;\n   */\n  finite: boolean;\n\n  /**\n   * `example` specifies values that the field may have. These values SHOULD\n   * conform to other rules. `example` values will not impact validation\n   * but may be used as helpful guidance on how to populate the given field.\n   *\n   * ```proto\n   * message MyFloat {\n   *   float value = 1 [\n   *     (buf.validate.field).float.example = 1.0,\n   *     (buf.validate.field).float.example = inf\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: repeated float example = 9;\n   */\n  example: number[];\n};\n\n/**\n * Describes the message buf.validate.FloatRules.\n * Use `create(FloatRulesSchema)` to create a new message.\n */\nexport const FloatRulesSchema: GenMessage<FloatRules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 6);\n\n/**\n * DoubleRules describes the rules applied to `double` values. These\n * rules may also be applied to the `google.protobuf.DoubleValue` Well-Known-Type.\n *\n * @generated from message buf.validate.DoubleRules\n */\nexport type DoubleRules = Message<\"buf.validate.DoubleRules\"> & {\n  /**\n   * `const` requires the field value to exactly match the specified value. If\n   * the field value doesn't match, an error message is generated.\n   *\n   * ```proto\n   * message MyDouble {\n   *   // value must equal 42.0\n   *   double value = 1 [(buf.validate.field).double.const = 42.0];\n   * }\n   * ```\n   *\n   * @generated from field: optional double const = 1;\n   */\n  const: number;\n\n  /**\n   * @generated from oneof buf.validate.DoubleRules.less_than\n   */\n  lessThan: {\n    /**\n     * `lt` requires the field value to be less than the specified value (field <\n     * value). If the field value is equal to or greater than the specified\n     * value, an error message is generated.\n     *\n     * ```proto\n     * message MyDouble {\n     *   // must be less than 10.0\n     *   double value = 1 [(buf.validate.field).double.lt = 10.0];\n     * }\n     * ```\n     *\n     * @generated from field: double lt = 2;\n     */\n    value: number;\n    case: \"lt\";\n  } | {\n    /**\n     * `lte` requires the field value to be less than or equal to the specified value\n     * (field <= value). If the field value is greater than the specified value,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyDouble {\n     *   // must be less than or equal to 10.0\n     *   double value = 1 [(buf.validate.field).double.lte = 10.0];\n     * }\n     * ```\n     *\n     * @generated from field: double lte = 3;\n     */\n    value: number;\n    case: \"lte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * @generated from oneof buf.validate.DoubleRules.greater_than\n   */\n  greaterThan: {\n    /**\n     * `gt` requires the field value to be greater than the specified value\n     * (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,\n     * the range is reversed, and the field value must be outside the specified\n     * range. If the field value doesn't meet the required conditions, an error\n     * message is generated.\n     *\n     * ```proto\n     * message MyDouble {\n     *   // must be greater than 5.0 [double.gt]\n     *   double value = 1 [(buf.validate.field).double.gt = 5.0];\n     *\n     *   // must be greater than 5 and less than 10.0 [double.gt_lt]\n     *   double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];\n     *\n     *   // must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]\n     *   double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];\n     * }\n     * ```\n     *\n     * @generated from field: double gt = 4;\n     */\n    value: number;\n    case: \"gt\";\n  } | {\n    /**\n     * `gte` requires the field value to be greater than or equal to the specified\n     * value (exclusive). If the value of `gte` is larger than a specified `lt` or\n     * `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyDouble {\n     *   // must be greater than or equal to 5.0 [double.gte]\n     *   double value = 1 [(buf.validate.field).double.gte = 5.0];\n     *\n     *   // must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]\n     *   double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];\n     *\n     *   // must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]\n     *   double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];\n     * }\n     * ```\n     *\n     * @generated from field: double gte = 5;\n     */\n    value: number;\n    case: \"gte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * `in` requires the field value to be equal to one of the specified values.\n   * If the field value isn't one of the specified values, an error message is\n   * generated.\n   *\n   * ```proto\n   * message MyDouble {\n   *   // must be in list [1.0, 2.0, 3.0]\n   *   double value = 1 [(buf.validate.field).double = { in: [1.0, 2.0, 3.0] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated double in = 6;\n   */\n  in: number[];\n\n  /**\n   * `not_in` requires the field value to not be equal to any of the specified\n   * values. If the field value is one of the specified values, an error\n   * message is generated.\n   *\n   * ```proto\n   * message MyDouble {\n   *   // value must not be in list [1.0, 2.0, 3.0]\n   *   double value = 1 [(buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated double not_in = 7;\n   */\n  notIn: number[];\n\n  /**\n   * `finite` requires the field value to be finite. If the field value is\n   * infinite or NaN, an error message is generated.\n   *\n   * @generated from field: optional bool finite = 8;\n   */\n  finite: boolean;\n\n  /**\n   * `example` specifies values that the field may have. These values SHOULD\n   * conform to other rules. `example` values will not impact validation\n   * but may be used as helpful guidance on how to populate the given field.\n   *\n   * ```proto\n   * message MyDouble {\n   *   double value = 1 [\n   *     (buf.validate.field).double.example = 1.0,\n   *     (buf.validate.field).double.example = inf\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: repeated double example = 9;\n   */\n  example: number[];\n};\n\n/**\n * Describes the message buf.validate.DoubleRules.\n * Use `create(DoubleRulesSchema)` to create a new message.\n */\nexport const DoubleRulesSchema: GenMessage<DoubleRules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 7);\n\n/**\n * Int32Rules describes the rules applied to `int32` values. These\n * rules may also be applied to the `google.protobuf.Int32Value` Well-Known-Type.\n *\n * @generated from message buf.validate.Int32Rules\n */\nexport type Int32Rules = Message<\"buf.validate.Int32Rules\"> & {\n  /**\n   * `const` requires the field value to exactly match the specified value. If\n   * the field value doesn't match, an error message is generated.\n   *\n   * ```proto\n   * message MyInt32 {\n   *   // value must equal 42\n   *   int32 value = 1 [(buf.validate.field).int32.const = 42];\n   * }\n   * ```\n   *\n   * @generated from field: optional int32 const = 1;\n   */\n  const: number;\n\n  /**\n   * @generated from oneof buf.validate.Int32Rules.less_than\n   */\n  lessThan: {\n    /**\n     * `lt` requires the field value to be less than the specified value (field\n     * < value). If the field value is equal to or greater than the specified\n     * value, an error message is generated.\n     *\n     * ```proto\n     * message MyInt32 {\n     *   // must be less than 10\n     *   int32 value = 1 [(buf.validate.field).int32.lt = 10];\n     * }\n     * ```\n     *\n     * @generated from field: int32 lt = 2;\n     */\n    value: number;\n    case: \"lt\";\n  } | {\n    /**\n     * `lte` requires the field value to be less than or equal to the specified\n     * value (field <= value). If the field value is greater than the specified\n     * value, an error message is generated.\n     *\n     * ```proto\n     * message MyInt32 {\n     *   // must be less than or equal to 10\n     *   int32 value = 1 [(buf.validate.field).int32.lte = 10];\n     * }\n     * ```\n     *\n     * @generated from field: int32 lte = 3;\n     */\n    value: number;\n    case: \"lte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * @generated from oneof buf.validate.Int32Rules.greater_than\n   */\n  greaterThan: {\n    /**\n     * `gt` requires the field value to be greater than the specified value\n     * (exclusive). If the value of `gt` is larger than a specified `lt` or\n     * `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyInt32 {\n     *   // must be greater than 5 [int32.gt]\n     *   int32 value = 1 [(buf.validate.field).int32.gt = 5];\n     *\n     *   // must be greater than 5 and less than 10 [int32.gt_lt]\n     *   int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];\n     *\n     *   // must be greater than 10 or less than 5 [int32.gt_lt_exclusive]\n     *   int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: int32 gt = 4;\n     */\n    value: number;\n    case: \"gt\";\n  } | {\n    /**\n     * `gte` requires the field value to be greater than or equal to the specified value\n     * (exclusive). If the value of `gte` is larger than a specified `lt` or\n     * `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyInt32 {\n     *   // must be greater than or equal to 5 [int32.gte]\n     *   int32 value = 1 [(buf.validate.field).int32.gte = 5];\n     *\n     *   // must be greater than or equal to 5 and less than 10 [int32.gte_lt]\n     *   int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];\n     *\n     *   // must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]\n     *   int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: int32 gte = 5;\n     */\n    value: number;\n    case: \"gte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * `in` requires the field value to be equal to one of the specified values.\n   * If the field value isn't one of the specified values, an error message is\n   * generated.\n   *\n   * ```proto\n   * message MyInt32 {\n   *   // must be in list [1, 2, 3]\n   *   int32 value = 1 [(buf.validate.field).int32 = { in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated int32 in = 6;\n   */\n  in: number[];\n\n  /**\n   * `not_in` requires the field value to not be equal to any of the specified\n   * values. If the field value is one of the specified values, an error message\n   * is generated.\n   *\n   * ```proto\n   * message MyInt32 {\n   *   // value must not be in list [1, 2, 3]\n   *   int32 value = 1 [(buf.validate.field).int32 = { not_in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated int32 not_in = 7;\n   */\n  notIn: number[];\n\n  /**\n   * `example` specifies values that the field may have. These values SHOULD\n   * conform to other rules. `example` values will not impact validation\n   * but may be used as helpful guidance on how to populate the given field.\n   *\n   * ```proto\n   * message MyInt32 {\n   *   int32 value = 1 [\n   *     (buf.validate.field).int32.example = 1,\n   *     (buf.validate.field).int32.example = -10\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: repeated int32 example = 8;\n   */\n  example: number[];\n};\n\n/**\n * Describes the message buf.validate.Int32Rules.\n * Use `create(Int32RulesSchema)` to create a new message.\n */\nexport const Int32RulesSchema: GenMessage<Int32Rules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 8);\n\n/**\n * Int64Rules describes the rules applied to `int64` values. These\n * rules may also be applied to the `google.protobuf.Int64Value` Well-Known-Type.\n *\n * @generated from message buf.validate.Int64Rules\n */\nexport type Int64Rules = Message<\"buf.validate.Int64Rules\"> & {\n  /**\n   * `const` requires the field value to exactly match the specified value. If\n   * the field value doesn't match, an error message is generated.\n   *\n   * ```proto\n   * message MyInt64 {\n   *   // value must equal 42\n   *   int64 value = 1 [(buf.validate.field).int64.const = 42];\n   * }\n   * ```\n   *\n   * @generated from field: optional int64 const = 1;\n   */\n  const: bigint;\n\n  /**\n   * @generated from oneof buf.validate.Int64Rules.less_than\n   */\n  lessThan: {\n    /**\n     * `lt` requires the field value to be less than the specified value (field <\n     * value). If the field value is equal to or greater than the specified value,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyInt64 {\n     *   // must be less than 10\n     *   int64 value = 1 [(buf.validate.field).int64.lt = 10];\n     * }\n     * ```\n     *\n     * @generated from field: int64 lt = 2;\n     */\n    value: bigint;\n    case: \"lt\";\n  } | {\n    /**\n     * `lte` requires the field value to be less than or equal to the specified\n     * value (field <= value). If the field value is greater than the specified\n     * value, an error message is generated.\n     *\n     * ```proto\n     * message MyInt64 {\n     *   // must be less than or equal to 10\n     *   int64 value = 1 [(buf.validate.field).int64.lte = 10];\n     * }\n     * ```\n     *\n     * @generated from field: int64 lte = 3;\n     */\n    value: bigint;\n    case: \"lte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * @generated from oneof buf.validate.Int64Rules.greater_than\n   */\n  greaterThan: {\n    /**\n     * `gt` requires the field value to be greater than the specified value\n     * (exclusive). If the value of `gt` is larger than a specified `lt` or\n     * `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyInt64 {\n     *   // must be greater than 5 [int64.gt]\n     *   int64 value = 1 [(buf.validate.field).int64.gt = 5];\n     *\n     *   // must be greater than 5 and less than 10 [int64.gt_lt]\n     *   int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];\n     *\n     *   // must be greater than 10 or less than 5 [int64.gt_lt_exclusive]\n     *   int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: int64 gt = 4;\n     */\n    value: bigint;\n    case: \"gt\";\n  } | {\n    /**\n     * `gte` requires the field value to be greater than or equal to the specified\n     * value (exclusive). If the value of `gte` is larger than a specified `lt`\n     * or `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyInt64 {\n     *   // must be greater than or equal to 5 [int64.gte]\n     *   int64 value = 1 [(buf.validate.field).int64.gte = 5];\n     *\n     *   // must be greater than or equal to 5 and less than 10 [int64.gte_lt]\n     *   int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];\n     *\n     *   // must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]\n     *   int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: int64 gte = 5;\n     */\n    value: bigint;\n    case: \"gte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * `in` requires the field value to be equal to one of the specified values.\n   * If the field value isn't one of the specified values, an error message is\n   * generated.\n   *\n   * ```proto\n   * message MyInt64 {\n   *   // must be in list [1, 2, 3]\n   *   int64 value = 1 [(buf.validate.field).int64 = { in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated int64 in = 6;\n   */\n  in: bigint[];\n\n  /**\n   * `not_in` requires the field value to not be equal to any of the specified\n   * values. If the field value is one of the specified values, an error\n   * message is generated.\n   *\n   * ```proto\n   * message MyInt64 {\n   *   // value must not be in list [1, 2, 3]\n   *   int64 value = 1 [(buf.validate.field).int64 = { not_in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated int64 not_in = 7;\n   */\n  notIn: bigint[];\n\n  /**\n   * `example` specifies values that the field may have. These values SHOULD\n   * conform to other rules. `example` values will not impact validation\n   * but may be used as helpful guidance on how to populate the given field.\n   *\n   * ```proto\n   * message MyInt64 {\n   *   int64 value = 1 [\n   *     (buf.validate.field).int64.example = 1,\n   *     (buf.validate.field).int64.example = -10\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: repeated int64 example = 9;\n   */\n  example: bigint[];\n};\n\n/**\n * Describes the message buf.validate.Int64Rules.\n * Use `create(Int64RulesSchema)` to create a new message.\n */\nexport const Int64RulesSchema: GenMessage<Int64Rules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 9);\n\n/**\n * UInt32Rules describes the rules applied to `uint32` values. These\n * rules may also be applied to the `google.protobuf.UInt32Value` Well-Known-Type.\n *\n * @generated from message buf.validate.UInt32Rules\n */\nexport type UInt32Rules = Message<\"buf.validate.UInt32Rules\"> & {\n  /**\n   * `const` requires the field value to exactly match the specified value. If\n   * the field value doesn't match, an error message is generated.\n   *\n   * ```proto\n   * message MyUInt32 {\n   *   // value must equal 42\n   *   uint32 value = 1 [(buf.validate.field).uint32.const = 42];\n   * }\n   * ```\n   *\n   * @generated from field: optional uint32 const = 1;\n   */\n  const: number;\n\n  /**\n   * @generated from oneof buf.validate.UInt32Rules.less_than\n   */\n  lessThan: {\n    /**\n     * `lt` requires the field value to be less than the specified value (field <\n     * value). If the field value is equal to or greater than the specified value,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyUInt32 {\n     *   // must be less than 10\n     *   uint32 value = 1 [(buf.validate.field).uint32.lt = 10];\n     * }\n     * ```\n     *\n     * @generated from field: uint32 lt = 2;\n     */\n    value: number;\n    case: \"lt\";\n  } | {\n    /**\n     * `lte` requires the field value to be less than or equal to the specified\n     * value (field <= value). If the field value is greater than the specified\n     * value, an error message is generated.\n     *\n     * ```proto\n     * message MyUInt32 {\n     *   // must be less than or equal to 10\n     *   uint32 value = 1 [(buf.validate.field).uint32.lte = 10];\n     * }\n     * ```\n     *\n     * @generated from field: uint32 lte = 3;\n     */\n    value: number;\n    case: \"lte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * @generated from oneof buf.validate.UInt32Rules.greater_than\n   */\n  greaterThan: {\n    /**\n     * `gt` requires the field value to be greater than the specified value\n     * (exclusive). If the value of `gt` is larger than a specified `lt` or\n     * `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyUInt32 {\n     *   // must be greater than 5 [uint32.gt]\n     *   uint32 value = 1 [(buf.validate.field).uint32.gt = 5];\n     *\n     *   // must be greater than 5 and less than 10 [uint32.gt_lt]\n     *   uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];\n     *\n     *   // must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]\n     *   uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: uint32 gt = 4;\n     */\n    value: number;\n    case: \"gt\";\n  } | {\n    /**\n     * `gte` requires the field value to be greater than or equal to the specified\n     * value (exclusive). If the value of `gte` is larger than a specified `lt`\n     * or `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyUInt32 {\n     *   // must be greater than or equal to 5 [uint32.gte]\n     *   uint32 value = 1 [(buf.validate.field).uint32.gte = 5];\n     *\n     *   // must be greater than or equal to 5 and less than 10 [uint32.gte_lt]\n     *   uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];\n     *\n     *   // must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]\n     *   uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: uint32 gte = 5;\n     */\n    value: number;\n    case: \"gte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * `in` requires the field value to be equal to one of the specified values.\n   * If the field value isn't one of the specified values, an error message is\n   * generated.\n   *\n   * ```proto\n   * message MyUInt32 {\n   *   // must be in list [1, 2, 3]\n   *   uint32 value = 1 [(buf.validate.field).uint32 = { in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated uint32 in = 6;\n   */\n  in: number[];\n\n  /**\n   * `not_in` requires the field value to not be equal to any of the specified\n   * values. If the field value is one of the specified values, an error\n   * message is generated.\n   *\n   * ```proto\n   * message MyUInt32 {\n   *   // value must not be in list [1, 2, 3]\n   *   uint32 value = 1 [(buf.validate.field).uint32 = { not_in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated uint32 not_in = 7;\n   */\n  notIn: number[];\n\n  /**\n   * `example` specifies values that the field may have. These values SHOULD\n   * conform to other rules. `example` values will not impact validation\n   * but may be used as helpful guidance on how to populate the given field.\n   *\n   * ```proto\n   * message MyUInt32 {\n   *   uint32 value = 1 [\n   *     (buf.validate.field).uint32.example = 1,\n   *     (buf.validate.field).uint32.example = 10\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: repeated uint32 example = 8;\n   */\n  example: number[];\n};\n\n/**\n * Describes the message buf.validate.UInt32Rules.\n * Use `create(UInt32RulesSchema)` to create a new message.\n */\nexport const UInt32RulesSchema: GenMessage<UInt32Rules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 10);\n\n/**\n * UInt64Rules describes the rules applied to `uint64` values. These\n * rules may also be applied to the `google.protobuf.UInt64Value` Well-Known-Type.\n *\n * @generated from message buf.validate.UInt64Rules\n */\nexport type UInt64Rules = Message<\"buf.validate.UInt64Rules\"> & {\n  /**\n   * `const` requires the field value to exactly match the specified value. If\n   * the field value doesn't match, an error message is generated.\n   *\n   * ```proto\n   * message MyUInt64 {\n   *   // value must equal 42\n   *   uint64 value = 1 [(buf.validate.field).uint64.const = 42];\n   * }\n   * ```\n   *\n   * @generated from field: optional uint64 const = 1;\n   */\n  const: bigint;\n\n  /**\n   * @generated from oneof buf.validate.UInt64Rules.less_than\n   */\n  lessThan: {\n    /**\n     * `lt` requires the field value to be less than the specified value (field <\n     * value). If the field value is equal to or greater than the specified value,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyUInt64 {\n     *   // must be less than 10\n     *   uint64 value = 1 [(buf.validate.field).uint64.lt = 10];\n     * }\n     * ```\n     *\n     * @generated from field: uint64 lt = 2;\n     */\n    value: bigint;\n    case: \"lt\";\n  } | {\n    /**\n     * `lte` requires the field value to be less than or equal to the specified\n     * value (field <= value). If the field value is greater than the specified\n     * value, an error message is generated.\n     *\n     * ```proto\n     * message MyUInt64 {\n     *   // must be less than or equal to 10\n     *   uint64 value = 1 [(buf.validate.field).uint64.lte = 10];\n     * }\n     * ```\n     *\n     * @generated from field: uint64 lte = 3;\n     */\n    value: bigint;\n    case: \"lte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * @generated from oneof buf.validate.UInt64Rules.greater_than\n   */\n  greaterThan: {\n    /**\n     * `gt` requires the field value to be greater than the specified value\n     * (exclusive). If the value of `gt` is larger than a specified `lt` or\n     * `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyUInt64 {\n     *   // must be greater than 5 [uint64.gt]\n     *   uint64 value = 1 [(buf.validate.field).uint64.gt = 5];\n     *\n     *   // must be greater than 5 and less than 10 [uint64.gt_lt]\n     *   uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];\n     *\n     *   // must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]\n     *   uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: uint64 gt = 4;\n     */\n    value: bigint;\n    case: \"gt\";\n  } | {\n    /**\n     * `gte` requires the field value to be greater than or equal to the specified\n     * value (exclusive). If the value of `gte` is larger than a specified `lt`\n     * or `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyUInt64 {\n     *   // must be greater than or equal to 5 [uint64.gte]\n     *   uint64 value = 1 [(buf.validate.field).uint64.gte = 5];\n     *\n     *   // must be greater than or equal to 5 and less than 10 [uint64.gte_lt]\n     *   uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];\n     *\n     *   // must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]\n     *   uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: uint64 gte = 5;\n     */\n    value: bigint;\n    case: \"gte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * `in` requires the field value to be equal to one of the specified values.\n   * If the field value isn't one of the specified values, an error message is\n   * generated.\n   *\n   * ```proto\n   * message MyUInt64 {\n   *   // must be in list [1, 2, 3]\n   *   uint64 value = 1 [(buf.validate.field).uint64 = { in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated uint64 in = 6;\n   */\n  in: bigint[];\n\n  /**\n   * `not_in` requires the field value to not be equal to any of the specified\n   * values. If the field value is one of the specified values, an error\n   * message is generated.\n   *\n   * ```proto\n   * message MyUInt64 {\n   *   // value must not be in list [1, 2, 3]\n   *   uint64 value = 1 [(buf.validate.field).uint64 = { not_in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated uint64 not_in = 7;\n   */\n  notIn: bigint[];\n\n  /**\n   * `example` specifies values that the field may have. These values SHOULD\n   * conform to other rules. `example` values will not impact validation\n   * but may be used as helpful guidance on how to populate the given field.\n   *\n   * ```proto\n   * message MyUInt64 {\n   *   uint64 value = 1 [\n   *     (buf.validate.field).uint64.example = 1,\n   *     (buf.validate.field).uint64.example = 10\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: repeated uint64 example = 8;\n   */\n  example: bigint[];\n};\n\n/**\n * Describes the message buf.validate.UInt64Rules.\n * Use `create(UInt64RulesSchema)` to create a new message.\n */\nexport const UInt64RulesSchema: GenMessage<UInt64Rules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 11);\n\n/**\n * SInt32Rules describes the rules applied to `sint32` values.\n *\n * @generated from message buf.validate.SInt32Rules\n */\nexport type SInt32Rules = Message<\"buf.validate.SInt32Rules\"> & {\n  /**\n   * `const` requires the field value to exactly match the specified value. If\n   * the field value doesn't match, an error message is generated.\n   *\n   * ```proto\n   * message MySInt32 {\n   *   // value must equal 42\n   *   sint32 value = 1 [(buf.validate.field).sint32.const = 42];\n   * }\n   * ```\n   *\n   * @generated from field: optional sint32 const = 1;\n   */\n  const: number;\n\n  /**\n   * @generated from oneof buf.validate.SInt32Rules.less_than\n   */\n  lessThan: {\n    /**\n     * `lt` requires the field value to be less than the specified value (field\n     * < value). If the field value is equal to or greater than the specified\n     * value, an error message is generated.\n     *\n     * ```proto\n     * message MySInt32 {\n     *   // must be less than 10\n     *   sint32 value = 1 [(buf.validate.field).sint32.lt = 10];\n     * }\n     * ```\n     *\n     * @generated from field: sint32 lt = 2;\n     */\n    value: number;\n    case: \"lt\";\n  } | {\n    /**\n     * `lte` requires the field value to be less than or equal to the specified\n     * value (field <= value). If the field value is greater than the specified\n     * value, an error message is generated.\n     *\n     * ```proto\n     * message MySInt32 {\n     *   // must be less than or equal to 10\n     *   sint32 value = 1 [(buf.validate.field).sint32.lte = 10];\n     * }\n     * ```\n     *\n     * @generated from field: sint32 lte = 3;\n     */\n    value: number;\n    case: \"lte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * @generated from oneof buf.validate.SInt32Rules.greater_than\n   */\n  greaterThan: {\n    /**\n     * `gt` requires the field value to be greater than the specified value\n     * (exclusive). If the value of `gt` is larger than a specified `lt` or\n     * `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MySInt32 {\n     *   // must be greater than 5 [sint32.gt]\n     *   sint32 value = 1 [(buf.validate.field).sint32.gt = 5];\n     *\n     *   // must be greater than 5 and less than 10 [sint32.gt_lt]\n     *   sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];\n     *\n     *   // must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]\n     *   sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: sint32 gt = 4;\n     */\n    value: number;\n    case: \"gt\";\n  } | {\n    /**\n     * `gte` requires the field value to be greater than or equal to the specified\n     * value (exclusive). If the value of `gte` is larger than a specified `lt`\n     * or `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MySInt32 {\n     *  // must be greater than or equal to 5 [sint32.gte]\n     *  sint32 value = 1 [(buf.validate.field).sint32.gte = 5];\n     *\n     *  // must be greater than or equal to 5 and less than 10 [sint32.gte_lt]\n     *  sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];\n     *\n     *  // must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]\n     *  sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: sint32 gte = 5;\n     */\n    value: number;\n    case: \"gte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * `in` requires the field value to be equal to one of the specified values.\n   * If the field value isn't one of the specified values, an error message is\n   * generated.\n   *\n   * ```proto\n   * message MySInt32 {\n   *   // must be in list [1, 2, 3]\n   *   sint32 value = 1 [(buf.validate.field).sint32 = { in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated sint32 in = 6;\n   */\n  in: number[];\n\n  /**\n   * `not_in` requires the field value to not be equal to any of the specified\n   * values. If the field value is one of the specified values, an error\n   * message is generated.\n   *\n   * ```proto\n   * message MySInt32 {\n   *   // value must not be in list [1, 2, 3]\n   *   sint32 value = 1 [(buf.validate.field).sint32 = { not_in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated sint32 not_in = 7;\n   */\n  notIn: number[];\n\n  /**\n   * `example` specifies values that the field may have. These values SHOULD\n   * conform to other rules. `example` values will not impact validation\n   * but may be used as helpful guidance on how to populate the given field.\n   *\n   * ```proto\n   * message MySInt32 {\n   *   sint32 value = 1 [\n   *     (buf.validate.field).sint32.example = 1,\n   *     (buf.validate.field).sint32.example = -10\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: repeated sint32 example = 8;\n   */\n  example: number[];\n};\n\n/**\n * Describes the message buf.validate.SInt32Rules.\n * Use `create(SInt32RulesSchema)` to create a new message.\n */\nexport const SInt32RulesSchema: GenMessage<SInt32Rules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 12);\n\n/**\n * SInt64Rules describes the rules applied to `sint64` values.\n *\n * @generated from message buf.validate.SInt64Rules\n */\nexport type SInt64Rules = Message<\"buf.validate.SInt64Rules\"> & {\n  /**\n   * `const` requires the field value to exactly match the specified value. If\n   * the field value doesn't match, an error message is generated.\n   *\n   * ```proto\n   * message MySInt64 {\n   *   // value must equal 42\n   *   sint64 value = 1 [(buf.validate.field).sint64.const = 42];\n   * }\n   * ```\n   *\n   * @generated from field: optional sint64 const = 1;\n   */\n  const: bigint;\n\n  /**\n   * @generated from oneof buf.validate.SInt64Rules.less_than\n   */\n  lessThan: {\n    /**\n     * `lt` requires the field value to be less than the specified value (field\n     * < value). If the field value is equal to or greater than the specified\n     * value, an error message is generated.\n     *\n     * ```proto\n     * message MySInt64 {\n     *   // must be less than 10\n     *   sint64 value = 1 [(buf.validate.field).sint64.lt = 10];\n     * }\n     * ```\n     *\n     * @generated from field: sint64 lt = 2;\n     */\n    value: bigint;\n    case: \"lt\";\n  } | {\n    /**\n     * `lte` requires the field value to be less than or equal to the specified\n     * value (field <= value). If the field value is greater than the specified\n     * value, an error message is generated.\n     *\n     * ```proto\n     * message MySInt64 {\n     *   // must be less than or equal to 10\n     *   sint64 value = 1 [(buf.validate.field).sint64.lte = 10];\n     * }\n     * ```\n     *\n     * @generated from field: sint64 lte = 3;\n     */\n    value: bigint;\n    case: \"lte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * @generated from oneof buf.validate.SInt64Rules.greater_than\n   */\n  greaterThan: {\n    /**\n     * `gt` requires the field value to be greater than the specified value\n     * (exclusive). If the value of `gt` is larger than a specified `lt` or\n     * `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MySInt64 {\n     *   // must be greater than 5 [sint64.gt]\n     *   sint64 value = 1 [(buf.validate.field).sint64.gt = 5];\n     *\n     *   // must be greater than 5 and less than 10 [sint64.gt_lt]\n     *   sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];\n     *\n     *   // must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]\n     *   sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: sint64 gt = 4;\n     */\n    value: bigint;\n    case: \"gt\";\n  } | {\n    /**\n     * `gte` requires the field value to be greater than or equal to the specified\n     * value (exclusive). If the value of `gte` is larger than a specified `lt`\n     * or `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MySInt64 {\n     *   // must be greater than or equal to 5 [sint64.gte]\n     *   sint64 value = 1 [(buf.validate.field).sint64.gte = 5];\n     *\n     *   // must be greater than or equal to 5 and less than 10 [sint64.gte_lt]\n     *   sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];\n     *\n     *   // must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]\n     *   sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: sint64 gte = 5;\n     */\n    value: bigint;\n    case: \"gte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * `in` requires the field value to be equal to one of the specified values.\n   * If the field value isn't one of the specified values, an error message\n   * is generated.\n   *\n   * ```proto\n   * message MySInt64 {\n   *   // must be in list [1, 2, 3]\n   *   sint64 value = 1 [(buf.validate.field).sint64 = { in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated sint64 in = 6;\n   */\n  in: bigint[];\n\n  /**\n   * `not_in` requires the field value to not be equal to any of the specified\n   * values. If the field value is one of the specified values, an error\n   * message is generated.\n   *\n   * ```proto\n   * message MySInt64 {\n   *   // value must not be in list [1, 2, 3]\n   *   sint64 value = 1 [(buf.validate.field).sint64 = { not_in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated sint64 not_in = 7;\n   */\n  notIn: bigint[];\n\n  /**\n   * `example` specifies values that the field may have. These values SHOULD\n   * conform to other rules. `example` values will not impact validation\n   * but may be used as helpful guidance on how to populate the given field.\n   *\n   * ```proto\n   * message MySInt64 {\n   *   sint64 value = 1 [\n   *     (buf.validate.field).sint64.example = 1,\n   *     (buf.validate.field).sint64.example = -10\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: repeated sint64 example = 8;\n   */\n  example: bigint[];\n};\n\n/**\n * Describes the message buf.validate.SInt64Rules.\n * Use `create(SInt64RulesSchema)` to create a new message.\n */\nexport const SInt64RulesSchema: GenMessage<SInt64Rules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 13);\n\n/**\n * Fixed32Rules describes the rules applied to `fixed32` values.\n *\n * @generated from message buf.validate.Fixed32Rules\n */\nexport type Fixed32Rules = Message<\"buf.validate.Fixed32Rules\"> & {\n  /**\n   * `const` requires the field value to exactly match the specified value.\n   * If the field value doesn't match, an error message is generated.\n   *\n   * ```proto\n   * message MyFixed32 {\n   *   // value must equal 42\n   *   fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];\n   * }\n   * ```\n   *\n   * @generated from field: optional fixed32 const = 1;\n   */\n  const: number;\n\n  /**\n   * @generated from oneof buf.validate.Fixed32Rules.less_than\n   */\n  lessThan: {\n    /**\n     * `lt` requires the field value to be less than the specified value (field <\n     * value). If the field value is equal to or greater than the specified value,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyFixed32 {\n     *   // must be less than 10\n     *   fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];\n     * }\n     * ```\n     *\n     * @generated from field: fixed32 lt = 2;\n     */\n    value: number;\n    case: \"lt\";\n  } | {\n    /**\n     * `lte` requires the field value to be less than or equal to the specified\n     * value (field <= value). If the field value is greater than the specified\n     * value, an error message is generated.\n     *\n     * ```proto\n     * message MyFixed32 {\n     *   // must be less than or equal to 10\n     *   fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];\n     * }\n     * ```\n     *\n     * @generated from field: fixed32 lte = 3;\n     */\n    value: number;\n    case: \"lte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * @generated from oneof buf.validate.Fixed32Rules.greater_than\n   */\n  greaterThan: {\n    /**\n     * `gt` requires the field value to be greater than the specified value\n     * (exclusive). If the value of `gt` is larger than a specified `lt` or\n     * `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyFixed32 {\n     *   // must be greater than 5 [fixed32.gt]\n     *   fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];\n     *\n     *   // must be greater than 5 and less than 10 [fixed32.gt_lt]\n     *   fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];\n     *\n     *   // must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]\n     *   fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: fixed32 gt = 4;\n     */\n    value: number;\n    case: \"gt\";\n  } | {\n    /**\n     * `gte` requires the field value to be greater than or equal to the specified\n     * value (exclusive). If the value of `gte` is larger than a specified `lt`\n     * or `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyFixed32 {\n     *   // must be greater than or equal to 5 [fixed32.gte]\n     *   fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];\n     *\n     *   // must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]\n     *   fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];\n     *\n     *   // must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]\n     *   fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: fixed32 gte = 5;\n     */\n    value: number;\n    case: \"gte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * `in` requires the field value to be equal to one of the specified values.\n   * If the field value isn't one of the specified values, an error message\n   * is generated.\n   *\n   * ```proto\n   * message MyFixed32 {\n   *   // must be in list [1, 2, 3]\n   *   fixed32 value = 1 [(buf.validate.field).fixed32 = { in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated fixed32 in = 6;\n   */\n  in: number[];\n\n  /**\n   * `not_in` requires the field value to not be equal to any of the specified\n   * values. If the field value is one of the specified values, an error\n   * message is generated.\n   *\n   * ```proto\n   * message MyFixed32 {\n   *   // value must not be in list [1, 2, 3]\n   *   fixed32 value = 1 [(buf.validate.field).fixed32 = { not_in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated fixed32 not_in = 7;\n   */\n  notIn: number[];\n\n  /**\n   * `example` specifies values that the field may have. These values SHOULD\n   * conform to other rules. `example` values will not impact validation\n   * but may be used as helpful guidance on how to populate the given field.\n   *\n   * ```proto\n   * message MyFixed32 {\n   *   fixed32 value = 1 [\n   *     (buf.validate.field).fixed32.example = 1,\n   *     (buf.validate.field).fixed32.example = 2\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: repeated fixed32 example = 8;\n   */\n  example: number[];\n};\n\n/**\n * Describes the message buf.validate.Fixed32Rules.\n * Use `create(Fixed32RulesSchema)` to create a new message.\n */\nexport const Fixed32RulesSchema: GenMessage<Fixed32Rules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 14);\n\n/**\n * Fixed64Rules describes the rules applied to `fixed64` values.\n *\n * @generated from message buf.validate.Fixed64Rules\n */\nexport type Fixed64Rules = Message<\"buf.validate.Fixed64Rules\"> & {\n  /**\n   * `const` requires the field value to exactly match the specified value. If\n   * the field value doesn't match, an error message is generated.\n   *\n   * ```proto\n   * message MyFixed64 {\n   *   // value must equal 42\n   *   fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];\n   * }\n   * ```\n   *\n   * @generated from field: optional fixed64 const = 1;\n   */\n  const: bigint;\n\n  /**\n   * @generated from oneof buf.validate.Fixed64Rules.less_than\n   */\n  lessThan: {\n    /**\n     * `lt` requires the field value to be less than the specified value (field <\n     * value). If the field value is equal to or greater than the specified value,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyFixed64 {\n     *   // must be less than 10\n     *   fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];\n     * }\n     * ```\n     *\n     * @generated from field: fixed64 lt = 2;\n     */\n    value: bigint;\n    case: \"lt\";\n  } | {\n    /**\n     * `lte` requires the field value to be less than or equal to the specified\n     * value (field <= value). If the field value is greater than the specified\n     * value, an error message is generated.\n     *\n     * ```proto\n     * message MyFixed64 {\n     *   // must be less than or equal to 10\n     *   fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];\n     * }\n     * ```\n     *\n     * @generated from field: fixed64 lte = 3;\n     */\n    value: bigint;\n    case: \"lte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * @generated from oneof buf.validate.Fixed64Rules.greater_than\n   */\n  greaterThan: {\n    /**\n     * `gt` requires the field value to be greater than the specified value\n     * (exclusive). If the value of `gt` is larger than a specified `lt` or\n     * `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyFixed64 {\n     *   // must be greater than 5 [fixed64.gt]\n     *   fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];\n     *\n     *   // must be greater than 5 and less than 10 [fixed64.gt_lt]\n     *   fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];\n     *\n     *   // must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]\n     *   fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: fixed64 gt = 4;\n     */\n    value: bigint;\n    case: \"gt\";\n  } | {\n    /**\n     * `gte` requires the field value to be greater than or equal to the specified\n     * value (exclusive). If the value of `gte` is larger than a specified `lt`\n     * or `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyFixed64 {\n     *   // must be greater than or equal to 5 [fixed64.gte]\n     *   fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];\n     *\n     *   // must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]\n     *   fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];\n     *\n     *   // must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]\n     *   fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: fixed64 gte = 5;\n     */\n    value: bigint;\n    case: \"gte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * `in` requires the field value to be equal to one of the specified values.\n   * If the field value isn't one of the specified values, an error message is\n   * generated.\n   *\n   * ```proto\n   * message MyFixed64 {\n   *   // must be in list [1, 2, 3]\n   *   fixed64 value = 1 [(buf.validate.field).fixed64 = { in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated fixed64 in = 6;\n   */\n  in: bigint[];\n\n  /**\n   * `not_in` requires the field value to not be equal to any of the specified\n   * values. If the field value is one of the specified values, an error\n   * message is generated.\n   *\n   * ```proto\n   * message MyFixed64 {\n   *   // value must not be in list [1, 2, 3]\n   *   fixed64 value = 1 [(buf.validate.field).fixed64 = { not_in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated fixed64 not_in = 7;\n   */\n  notIn: bigint[];\n\n  /**\n   * `example` specifies values that the field may have. These values SHOULD\n   * conform to other rules. `example` values will not impact validation\n   * but may be used as helpful guidance on how to populate the given field.\n   *\n   * ```proto\n   * message MyFixed64 {\n   *   fixed64 value = 1 [\n   *     (buf.validate.field).fixed64.example = 1,\n   *     (buf.validate.field).fixed64.example = 2\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: repeated fixed64 example = 8;\n   */\n  example: bigint[];\n};\n\n/**\n * Describes the message buf.validate.Fixed64Rules.\n * Use `create(Fixed64RulesSchema)` to create a new message.\n */\nexport const Fixed64RulesSchema: GenMessage<Fixed64Rules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 15);\n\n/**\n * SFixed32Rules describes the rules applied to `fixed32` values.\n *\n * @generated from message buf.validate.SFixed32Rules\n */\nexport type SFixed32Rules = Message<\"buf.validate.SFixed32Rules\"> & {\n  /**\n   * `const` requires the field value to exactly match the specified value. If\n   * the field value doesn't match, an error message is generated.\n   *\n   * ```proto\n   * message MySFixed32 {\n   *   // value must equal 42\n   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];\n   * }\n   * ```\n   *\n   * @generated from field: optional sfixed32 const = 1;\n   */\n  const: number;\n\n  /**\n   * @generated from oneof buf.validate.SFixed32Rules.less_than\n   */\n  lessThan: {\n    /**\n     * `lt` requires the field value to be less than the specified value (field <\n     * value). If the field value is equal to or greater than the specified value,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MySFixed32 {\n     *   // must be less than 10\n     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];\n     * }\n     * ```\n     *\n     * @generated from field: sfixed32 lt = 2;\n     */\n    value: number;\n    case: \"lt\";\n  } | {\n    /**\n     * `lte` requires the field value to be less than or equal to the specified\n     * value (field <= value). If the field value is greater than the specified\n     * value, an error message is generated.\n     *\n     * ```proto\n     * message MySFixed32 {\n     *   // must be less than or equal to 10\n     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];\n     * }\n     * ```\n     *\n     * @generated from field: sfixed32 lte = 3;\n     */\n    value: number;\n    case: \"lte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * @generated from oneof buf.validate.SFixed32Rules.greater_than\n   */\n  greaterThan: {\n    /**\n     * `gt` requires the field value to be greater than the specified value\n     * (exclusive). If the value of `gt` is larger than a specified `lt` or\n     * `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MySFixed32 {\n     *   // must be greater than 5 [sfixed32.gt]\n     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];\n     *\n     *   // must be greater than 5 and less than 10 [sfixed32.gt_lt]\n     *   sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];\n     *\n     *   // must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]\n     *   sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: sfixed32 gt = 4;\n     */\n    value: number;\n    case: \"gt\";\n  } | {\n    /**\n     * `gte` requires the field value to be greater than or equal to the specified\n     * value (exclusive). If the value of `gte` is larger than a specified `lt`\n     * or `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MySFixed32 {\n     *   // must be greater than or equal to 5 [sfixed32.gte]\n     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];\n     *\n     *   // must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]\n     *   sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];\n     *\n     *   // must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]\n     *   sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: sfixed32 gte = 5;\n     */\n    value: number;\n    case: \"gte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * `in` requires the field value to be equal to one of the specified values.\n   * If the field value isn't one of the specified values, an error message is\n   * generated.\n   *\n   * ```proto\n   * message MySFixed32 {\n   *   // must be in list [1, 2, 3]\n   *   sfixed32 value = 1 [(buf.validate.field).sfixed32 = { in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated sfixed32 in = 6;\n   */\n  in: number[];\n\n  /**\n   * `not_in` requires the field value to not be equal to any of the specified\n   * values. If the field value is one of the specified values, an error\n   * message is generated.\n   *\n   * ```proto\n   * message MySFixed32 {\n   *   // value must not be in list [1, 2, 3]\n   *   sfixed32 value = 1 [(buf.validate.field).sfixed32 = { not_in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated sfixed32 not_in = 7;\n   */\n  notIn: number[];\n\n  /**\n   * `example` specifies values that the field may have. These values SHOULD\n   * conform to other rules. `example` values will not impact validation\n   * but may be used as helpful guidance on how to populate the given field.\n   *\n   * ```proto\n   * message MySFixed32 {\n   *   sfixed32 value = 1 [\n   *     (buf.validate.field).sfixed32.example = 1,\n   *     (buf.validate.field).sfixed32.example = 2\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: repeated sfixed32 example = 8;\n   */\n  example: number[];\n};\n\n/**\n * Describes the message buf.validate.SFixed32Rules.\n * Use `create(SFixed32RulesSchema)` to create a new message.\n */\nexport const SFixed32RulesSchema: GenMessage<SFixed32Rules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 16);\n\n/**\n * SFixed64Rules describes the rules applied to `fixed64` values.\n *\n * @generated from message buf.validate.SFixed64Rules\n */\nexport type SFixed64Rules = Message<\"buf.validate.SFixed64Rules\"> & {\n  /**\n   * `const` requires the field value to exactly match the specified value. If\n   * the field value doesn't match, an error message is generated.\n   *\n   * ```proto\n   * message MySFixed64 {\n   *   // value must equal 42\n   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];\n   * }\n   * ```\n   *\n   * @generated from field: optional sfixed64 const = 1;\n   */\n  const: bigint;\n\n  /**\n   * @generated from oneof buf.validate.SFixed64Rules.less_than\n   */\n  lessThan: {\n    /**\n     * `lt` requires the field value to be less than the specified value (field <\n     * value). If the field value is equal to or greater than the specified value,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MySFixed64 {\n     *   // must be less than 10\n     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];\n     * }\n     * ```\n     *\n     * @generated from field: sfixed64 lt = 2;\n     */\n    value: bigint;\n    case: \"lt\";\n  } | {\n    /**\n     * `lte` requires the field value to be less than or equal to the specified\n     * value (field <= value). If the field value is greater than the specified\n     * value, an error message is generated.\n     *\n     * ```proto\n     * message MySFixed64 {\n     *   // must be less than or equal to 10\n     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];\n     * }\n     * ```\n     *\n     * @generated from field: sfixed64 lte = 3;\n     */\n    value: bigint;\n    case: \"lte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * @generated from oneof buf.validate.SFixed64Rules.greater_than\n   */\n  greaterThan: {\n    /**\n     * `gt` requires the field value to be greater than the specified value\n     * (exclusive). If the value of `gt` is larger than a specified `lt` or\n     * `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MySFixed64 {\n     *   // must be greater than 5 [sfixed64.gt]\n     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];\n     *\n     *   // must be greater than 5 and less than 10 [sfixed64.gt_lt]\n     *   sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];\n     *\n     *   // must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]\n     *   sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: sfixed64 gt = 4;\n     */\n    value: bigint;\n    case: \"gt\";\n  } | {\n    /**\n     * `gte` requires the field value to be greater than or equal to the specified\n     * value (exclusive). If the value of `gte` is larger than a specified `lt`\n     * or `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MySFixed64 {\n     *   // must be greater than or equal to 5 [sfixed64.gte]\n     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];\n     *\n     *   // must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]\n     *   sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];\n     *\n     *   // must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]\n     *   sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: sfixed64 gte = 5;\n     */\n    value: bigint;\n    case: \"gte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * `in` requires the field value to be equal to one of the specified values.\n   * If the field value isn't one of the specified values, an error message is\n   * generated.\n   *\n   * ```proto\n   * message MySFixed64 {\n   *   // must be in list [1, 2, 3]\n   *   sfixed64 value = 1 [(buf.validate.field).sfixed64 = { in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated sfixed64 in = 6;\n   */\n  in: bigint[];\n\n  /**\n   * `not_in` requires the field value to not be equal to any of the specified\n   * values. If the field value is one of the specified values, an error\n   * message is generated.\n   *\n   * ```proto\n   * message MySFixed64 {\n   *   // value must not be in list [1, 2, 3]\n   *   sfixed64 value = 1 [(buf.validate.field).sfixed64 = { not_in: [1, 2, 3] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated sfixed64 not_in = 7;\n   */\n  notIn: bigint[];\n\n  /**\n   * `example` specifies values that the field may have. These values SHOULD\n   * conform to other rules. `example` values will not impact validation\n   * but may be used as helpful guidance on how to populate the given field.\n   *\n   * ```proto\n   * message MySFixed64 {\n   *   sfixed64 value = 1 [\n   *     (buf.validate.field).sfixed64.example = 1,\n   *     (buf.validate.field).sfixed64.example = 2\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: repeated sfixed64 example = 8;\n   */\n  example: bigint[];\n};\n\n/**\n * Describes the message buf.validate.SFixed64Rules.\n * Use `create(SFixed64RulesSchema)` to create a new message.\n */\nexport const SFixed64RulesSchema: GenMessage<SFixed64Rules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 17);\n\n/**\n * BoolRules describes the rules applied to `bool` values. These rules\n * may also be applied to the `google.protobuf.BoolValue` Well-Known-Type.\n *\n * @generated from message buf.validate.BoolRules\n */\nexport type BoolRules = Message<\"buf.validate.BoolRules\"> & {\n  /**\n   * `const` requires the field value to exactly match the specified boolean value.\n   * If the field value doesn't match, an error message is generated.\n   *\n   * ```proto\n   * message MyBool {\n   *   // value must equal true\n   *   bool value = 1 [(buf.validate.field).bool.const = true];\n   * }\n   * ```\n   *\n   * @generated from field: optional bool const = 1;\n   */\n  const: boolean;\n\n  /**\n   * `example` specifies values that the field may have. These values SHOULD\n   * conform to other rules. `example` values will not impact validation\n   * but may be used as helpful guidance on how to populate the given field.\n   *\n   * ```proto\n   * message MyBool {\n   *   bool value = 1 [\n   *     (buf.validate.field).bool.example = true,\n   *     (buf.validate.field).bool.example = false\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: repeated bool example = 2;\n   */\n  example: boolean[];\n};\n\n/**\n * Describes the message buf.validate.BoolRules.\n * Use `create(BoolRulesSchema)` to create a new message.\n */\nexport const BoolRulesSchema: GenMessage<BoolRules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 18);\n\n/**\n * StringRules describes the rules applied to `string` values These\n * rules may also be applied to the `google.protobuf.StringValue` Well-Known-Type.\n *\n * @generated from message buf.validate.StringRules\n */\nexport type StringRules = Message<\"buf.validate.StringRules\"> & {\n  /**\n   * `const` requires the field value to exactly match the specified value. If\n   * the field value doesn't match, an error message is generated.\n   *\n   * ```proto\n   * message MyString {\n   *   // value must equal `hello`\n   *   string value = 1 [(buf.validate.field).string.const = \"hello\"];\n   * }\n   * ```\n   *\n   * @generated from field: optional string const = 1;\n   */\n  const: string;\n\n  /**\n   * `len` dictates that the field value must have the specified\n   * number of characters (Unicode code points), which may differ from the number\n   * of bytes in the string. If the field value does not meet the specified\n   * length, an error message will be generated.\n   *\n   * ```proto\n   * message MyString {\n   *   // value length must be 5 characters\n   *   string value = 1 [(buf.validate.field).string.len = 5];\n   * }\n   * ```\n   *\n   * @generated from field: optional uint64 len = 19;\n   */\n  len: bigint;\n\n  /**\n   * `min_len` specifies that the field value must have at least the specified\n   * number of characters (Unicode code points), which may differ from the number\n   * of bytes in the string. If the field value contains fewer characters, an error\n   * message will be generated.\n   *\n   * ```proto\n   * message MyString {\n   *   // value length must be at least 3 characters\n   *   string value = 1 [(buf.validate.field).string.min_len = 3];\n   * }\n   * ```\n   *\n   * @generated from field: optional uint64 min_len = 2;\n   */\n  minLen: bigint;\n\n  /**\n   * `max_len` specifies that the field value must have no more than the specified\n   * number of characters (Unicode code points), which may differ from the\n   * number of bytes in the string. If the field value contains more characters,\n   * an error message will be generated.\n   *\n   * ```proto\n   * message MyString {\n   *   // value length must be at most 10 characters\n   *   string value = 1 [(buf.validate.field).string.max_len = 10];\n   * }\n   * ```\n   *\n   * @generated from field: optional uint64 max_len = 3;\n   */\n  maxLen: bigint;\n\n  /**\n   * `len_bytes` dictates that the field value must have the specified number of\n   * bytes. If the field value does not match the specified length in bytes,\n   * an error message will be generated.\n   *\n   * ```proto\n   * message MyString {\n   *   // value length must be 6 bytes\n   *   string value = 1 [(buf.validate.field).string.len_bytes = 6];\n   * }\n   * ```\n   *\n   * @generated from field: optional uint64 len_bytes = 20;\n   */\n  lenBytes: bigint;\n\n  /**\n   * `min_bytes` specifies that the field value must have at least the specified\n   * number of bytes. If the field value contains fewer bytes, an error message\n   * will be generated.\n   *\n   * ```proto\n   * message MyString {\n   *   // value length must be at least 4 bytes\n   *   string value = 1 [(buf.validate.field).string.min_bytes = 4];\n   * }\n   *\n   * ```\n   *\n   * @generated from field: optional uint64 min_bytes = 4;\n   */\n  minBytes: bigint;\n\n  /**\n   * `max_bytes` specifies that the field value must have no more than the\n   * specified number of bytes. If the field value contains more bytes, an\n   * error message will be generated.\n   *\n   * ```proto\n   * message MyString {\n   *   // value length must be at most 8 bytes\n   *   string value = 1 [(buf.validate.field).string.max_bytes = 8];\n   * }\n   * ```\n   *\n   * @generated from field: optional uint64 max_bytes = 5;\n   */\n  maxBytes: bigint;\n\n  /**\n   * `pattern` specifies that the field value must match the specified\n   * regular expression (RE2 syntax), with the expression provided without any\n   * delimiters. If the field value doesn't match the regular expression, an\n   * error message will be generated.\n   *\n   * ```proto\n   * message MyString {\n   *   // value does not match regex pattern `^[a-zA-Z]//$`\n   *   string value = 1 [(buf.validate.field).string.pattern = \"^[a-zA-Z]//$\"];\n   * }\n   * ```\n   *\n   * @generated from field: optional string pattern = 6;\n   */\n  pattern: string;\n\n  /**\n   * `prefix` specifies that the field value must have the\n   * specified substring at the beginning of the string. If the field value\n   * doesn't start with the specified prefix, an error message will be\n   * generated.\n   *\n   * ```proto\n   * message MyString {\n   *   // value does not have prefix `pre`\n   *   string value = 1 [(buf.validate.field).string.prefix = \"pre\"];\n   * }\n   * ```\n   *\n   * @generated from field: optional string prefix = 7;\n   */\n  prefix: string;\n\n  /**\n   * `suffix` specifies that the field value must have the\n   * specified substring at the end of the string. If the field value doesn't\n   * end with the specified suffix, an error message will be generated.\n   *\n   * ```proto\n   * message MyString {\n   *   // value does not have suffix `post`\n   *   string value = 1 [(buf.validate.field).string.suffix = \"post\"];\n   * }\n   * ```\n   *\n   * @generated from field: optional string suffix = 8;\n   */\n  suffix: string;\n\n  /**\n   * `contains` specifies that the field value must have the\n   * specified substring anywhere in the string. If the field value doesn't\n   * contain the specified substring, an error message will be generated.\n   *\n   * ```proto\n   * message MyString {\n   *   // value does not contain substring `inside`.\n   *   string value = 1 [(buf.validate.field).string.contains = \"inside\"];\n   * }\n   * ```\n   *\n   * @generated from field: optional string contains = 9;\n   */\n  contains: string;\n\n  /**\n   * `not_contains` specifies that the field value must not have the\n   * specified substring anywhere in the string. If the field value contains\n   * the specified substring, an error message will be generated.\n   *\n   * ```proto\n   * message MyString {\n   *   // value contains substring `inside`.\n   *   string value = 1 [(buf.validate.field).string.not_contains = \"inside\"];\n   * }\n   * ```\n   *\n   * @generated from field: optional string not_contains = 23;\n   */\n  notContains: string;\n\n  /**\n   * `in` specifies that the field value must be equal to one of the specified\n   * values. If the field value isn't one of the specified values, an error\n   * message will be generated.\n   *\n   * ```proto\n   * message MyString {\n   *   // must be in list [\"apple\", \"banana\"]\n   *   string value = 1 [(buf.validate.field).string = { in: [\"apple\", \"banana\"] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated string in = 10;\n   */\n  in: string[];\n\n  /**\n   * `not_in` specifies that the field value cannot be equal to any\n   * of the specified values. If the field value is one of the specified values,\n   * an error message will be generated.\n   * ```proto\n   * message MyString {\n   *   // value must not be in list [\"orange\", \"grape\"]\n   *   string value = 1 [(buf.validate.field).string = { not_in: [\"orange\", \"grape\"] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated string not_in = 11;\n   */\n  notIn: string[];\n\n  /**\n   * `WellKnown` rules provide advanced rules against common string\n   * patterns.\n   *\n   * @generated from oneof buf.validate.StringRules.well_known\n   */\n  wellKnown: {\n    /**\n     * `email` specifies that the field value must be a valid email address, for\n     * example \"foo@example.com\".\n     *\n     * Conforms to the definition for a valid email address from the [HTML standard](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address).\n     * Note that this standard willfully deviates from [RFC 5322](https://datatracker.ietf.org/doc/html/rfc5322),\n     * which allows many unexpected forms of email addresses and will easily match\n     * a typographical error.\n     *\n     * If the field value isn't a valid email address, an error message will be generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // must be a valid email address\n     *   string value = 1 [(buf.validate.field).string.email = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool email = 12;\n     */\n    value: boolean;\n    case: \"email\";\n  } | {\n    /**\n     * `hostname` specifies that the field value must be a valid hostname, for\n     * example \"foo.example.com\".\n     *\n     * A valid hostname follows the rules below:\n     * - The name consists of one or more labels, separated by a dot (\".\").\n     * - Each label can be 1 to 63 alphanumeric characters.\n     * - A label can contain hyphens (\"-\"), but must not start or end with a hyphen.\n     * - The right-most label must not be digits only.\n     * - The name can have a trailing dot—for example, \"foo.example.com.\".\n     * - The name can be 253 characters at most, excluding the optional trailing dot.\n     *\n     * If the field value isn't a valid hostname, an error message will be generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // must be a valid hostname\n     *   string value = 1 [(buf.validate.field).string.hostname = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool hostname = 13;\n     */\n    value: boolean;\n    case: \"hostname\";\n  } | {\n    /**\n     * `ip` specifies that the field value must be a valid IP (v4 or v6) address.\n     *\n     * IPv4 addresses are expected in the dotted decimal format—for example, \"192.168.5.21\".\n     * IPv6 addresses are expected in their text representation—for example, \"::1\",\n     * or \"2001:0DB8:ABCD:0012::0\".\n     *\n     * Both formats are well-defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).\n     * Zone identifiers for IPv6 addresses (for example, \"fe80::a%en1\") are supported.\n     *\n     * If the field value isn't a valid IP address, an error message will be\n     * generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // must be a valid IP address\n     *   string value = 1 [(buf.validate.field).string.ip = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool ip = 14;\n     */\n    value: boolean;\n    case: \"ip\";\n  } | {\n    /**\n     * `ipv4` specifies that the field value must be a valid IPv4 address—for\n     * example \"192.168.5.21\". If the field value isn't a valid IPv4 address, an\n     * error message will be generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // must be a valid IPv4 address\n     *   string value = 1 [(buf.validate.field).string.ipv4 = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool ipv4 = 15;\n     */\n    value: boolean;\n    case: \"ipv4\";\n  } | {\n    /**\n     * `ipv6` specifies that the field value must be a valid IPv6 address—for\n     * example \"::1\", or \"d7a:115c:a1e0:ab12:4843:cd96:626b:430b\". If the field\n     * value is not a valid IPv6 address, an error message will be generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // must be a valid IPv6 address\n     *   string value = 1 [(buf.validate.field).string.ipv6 = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool ipv6 = 16;\n     */\n    value: boolean;\n    case: \"ipv6\";\n  } | {\n    /**\n     * `uri` specifies that the field value must be a valid URI, for example\n     * \"https://example.com/foo/bar?baz=quux#frag\".\n     *\n     * URI is defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).\n     * Zone Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).\n     *\n     * If the field value isn't a valid URI, an error message will be generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // must be a valid URI\n     *   string value = 1 [(buf.validate.field).string.uri = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool uri = 17;\n     */\n    value: boolean;\n    case: \"uri\";\n  } | {\n    /**\n     * `uri_ref` specifies that the field value must be a valid URI Reference—either\n     * a URI such as \"https://example.com/foo/bar?baz=quux#frag\", or a Relative\n     * Reference such as \"./foo/bar?query\".\n     *\n     * URI, URI Reference, and Relative Reference are defined in the internet\n     * standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). Zone\n     * Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).\n     *\n     * If the field value isn't a valid URI Reference, an error message will be\n     * generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // must be a valid URI Reference\n     *   string value = 1 [(buf.validate.field).string.uri_ref = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool uri_ref = 18;\n     */\n    value: boolean;\n    case: \"uriRef\";\n  } | {\n    /**\n     * `address` specifies that the field value must be either a valid hostname\n     * (for example, \"example.com\"), or a valid IP (v4 or v6) address (for example,\n     * \"192.168.0.1\", or \"::1\"). If the field value isn't a valid hostname or IP,\n     * an error message will be generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // must be a valid hostname, or ip address\n     *   string value = 1 [(buf.validate.field).string.address = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool address = 21;\n     */\n    value: boolean;\n    case: \"address\";\n  } | {\n    /**\n     * `uuid` specifies that the field value must be a valid UUID as defined by\n     * [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2). If the\n     * field value isn't a valid UUID, an error message will be generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // must be a valid UUID\n     *   string value = 1 [(buf.validate.field).string.uuid = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool uuid = 22;\n     */\n    value: boolean;\n    case: \"uuid\";\n  } | {\n    /**\n     * `tuuid` (trimmed UUID) specifies that the field value must be a valid UUID as\n     * defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2) with all dashes\n     * omitted. If the field value isn't a valid UUID without dashes, an error message\n     * will be generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // must be a valid trimmed UUID\n     *   string value = 1 [(buf.validate.field).string.tuuid = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool tuuid = 33;\n     */\n    value: boolean;\n    case: \"tuuid\";\n  } | {\n    /**\n     * `ip_with_prefixlen` specifies that the field value must be a valid IP\n     * (v4 or v6) address with prefix length—for example, \"192.168.5.21/16\" or\n     * \"2001:0DB8:ABCD:0012::F1/64\". If the field value isn't a valid IP with\n     * prefix length, an error message will be generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // must be a valid IP with prefix length\n     *    string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool ip_with_prefixlen = 26;\n     */\n    value: boolean;\n    case: \"ipWithPrefixlen\";\n  } | {\n    /**\n     * `ipv4_with_prefixlen` specifies that the field value must be a valid\n     * IPv4 address with prefix length—for example, \"192.168.5.21/16\". If the\n     * field value isn't a valid IPv4 address with prefix length, an error\n     * message will be generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // must be a valid IPv4 address with prefix length\n     *    string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool ipv4_with_prefixlen = 27;\n     */\n    value: boolean;\n    case: \"ipv4WithPrefixlen\";\n  } | {\n    /**\n     * `ipv6_with_prefixlen` specifies that the field value must be a valid\n     * IPv6 address with prefix length—for example, \"2001:0DB8:ABCD:0012::F1/64\".\n     * If the field value is not a valid IPv6 address with prefix length,\n     * an error message will be generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // must be a valid IPv6 address prefix length\n     *    string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool ipv6_with_prefixlen = 28;\n     */\n    value: boolean;\n    case: \"ipv6WithPrefixlen\";\n  } | {\n    /**\n     * `ip_prefix` specifies that the field value must be a valid IP (v4 or v6)\n     * prefix—for example, \"192.168.0.0/16\" or \"2001:0DB8:ABCD:0012::0/64\".\n     *\n     * The prefix must have all zeros for the unmasked bits. For example,\n     * \"2001:0DB8:ABCD:0012::0/64\" designates the left-most 64 bits for the\n     * prefix, and the remaining 64 bits must be zero.\n     *\n     * If the field value isn't a valid IP prefix, an error message will be\n     * generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // must be a valid IP prefix\n     *    string value = 1 [(buf.validate.field).string.ip_prefix = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool ip_prefix = 29;\n     */\n    value: boolean;\n    case: \"ipPrefix\";\n  } | {\n    /**\n     * `ipv4_prefix` specifies that the field value must be a valid IPv4\n     * prefix, for example \"192.168.0.0/16\".\n     *\n     * The prefix must have all zeros for the unmasked bits. For example,\n     * \"192.168.0.0/16\" designates the left-most 16 bits for the prefix,\n     * and the remaining 16 bits must be zero.\n     *\n     * If the field value isn't a valid IPv4 prefix, an error message\n     * will be generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // must be a valid IPv4 prefix\n     *    string value = 1 [(buf.validate.field).string.ipv4_prefix = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool ipv4_prefix = 30;\n     */\n    value: boolean;\n    case: \"ipv4Prefix\";\n  } | {\n    /**\n     * `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix—for\n     * example, \"2001:0DB8:ABCD:0012::0/64\".\n     *\n     * The prefix must have all zeros for the unmasked bits. For example,\n     * \"2001:0DB8:ABCD:0012::0/64\" designates the left-most 64 bits for the\n     * prefix, and the remaining 64 bits must be zero.\n     *\n     * If the field value is not a valid IPv6 prefix, an error message will be\n     * generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // must be a valid IPv6 prefix\n     *    string value = 1 [(buf.validate.field).string.ipv6_prefix = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool ipv6_prefix = 31;\n     */\n    value: boolean;\n    case: \"ipv6Prefix\";\n  } | {\n    /**\n     * `host_and_port` specifies that the field value must be a valid host/port\n     * pair—for example, \"example.com:8080\".\n     *\n     * The host can be one of:\n     * - An IPv4 address in dotted decimal format—for example, \"192.168.5.21\".\n     * - An IPv6 address enclosed in square brackets—for example, \"[2001:0DB8:ABCD:0012::F1]\".\n     * - A hostname—for example, \"example.com\".\n     *\n     * The port is separated by a colon. It must be non-empty, with a decimal number\n     * in the range of 0-65535, inclusive.\n     *\n     * @generated from field: bool host_and_port = 32;\n     */\n    value: boolean;\n    case: \"hostAndPort\";\n  } | {\n    /**\n     * `ulid` specifies that the field value must be a valid ULID (Universally Unique\n     * Lexicographically Sortable Identifier) as defined by the [ULID specification](https://github.com/ulid/spec).\n     * If the field value isn't a valid ULID, an error message will be generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // must be a valid ULID\n     *   string value = 1 [(buf.validate.field).string.ulid = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool ulid = 35;\n     */\n    value: boolean;\n    case: \"ulid\";\n  } | {\n    /**\n     * `protobuf_fqn` specifies that the field value must be a valid fully-qualified\n     * Protobuf name as defined by the [Protobuf Language Specification](https://protobuf.com/docs/language-spec).\n     *\n     * A fully-qualified Protobuf name is a dot-separated list of Protobuf identifiers,\n     * where each identifier starts with a letter or underscore and is followed by zero or\n     * more letters, underscores, or digits.\n     *\n     * Examples: \"buf.validate\", \"google.protobuf.Timestamp\", \"my_package.MyMessage\".\n     *\n     * Note: historically, fully-qualified Protobuf names were represented with a leading\n     * dot (for example, \".buf.validate.StringRules\"). Modern Protobuf does not use the\n     * leading dot, and most fully-qualified names are represented without it. Use\n     * `protobuf_dot_fqn` if a leading dot is required.\n     *\n     * If the field value isn't a valid fully-qualified Protobuf name, an error message\n     * will be generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // value must be a valid fully-qualified Protobuf name\n     *   string value = 1 [(buf.validate.field).string.protobuf_fqn = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool protobuf_fqn = 37;\n     */\n    value: boolean;\n    case: \"protobufFqn\";\n  } | {\n    /**\n     * `protobuf_dot_fqn` specifies that the field value must be a valid fully-qualified\n     * Protobuf name with a leading dot, as defined by the\n     * [Protobuf Language Specification](https://protobuf.com/docs/language-spec).\n     *\n     * A fully-qualified Protobuf name with a leading dot is a dot followed by a\n     * dot-separated list of Protobuf identifiers, where each identifier starts with a\n     * letter or underscore and is followed by zero or more letters, underscores, or\n     * digits.\n     *\n     * Examples: \".buf.validate\", \".google.protobuf.Timestamp\", \".my_package.MyMessage\".\n     *\n     * Note: this is the historical representation of fully-qualified Protobuf names,\n     * where a leading dot denotes an absolute reference. Modern Protobuf does not use\n     * the leading dot, and most fully-qualified names are represented without it. Most\n     * users will want to use `protobuf_fqn` instead.\n     *\n     * If the field value isn't a valid fully-qualified Protobuf name with a leading dot,\n     * an error message will be generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // value must be a valid fully-qualified Protobuf name with a leading dot\n     *   string value = 1 [(buf.validate.field).string.protobuf_dot_fqn = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool protobuf_dot_fqn = 38;\n     */\n    value: boolean;\n    case: \"protobufDotFqn\";\n  } | {\n    /**\n     * `well_known_regex` specifies a common well-known pattern\n     * defined as a regex. If the field value doesn't match the well-known\n     * regex, an error message will be generated.\n     *\n     * ```proto\n     * message MyString {\n     *   // must be a valid HTTP header value\n     *   string value = 1 [(buf.validate.field).string.well_known_regex = KNOWN_REGEX_HTTP_HEADER_VALUE];\n     * }\n     * ```\n     *\n     * #### KnownRegex\n     *\n     * `well_known_regex` contains some well-known patterns.\n     *\n     * | Name                          | Number | Description                               |\n     * |-------------------------------|--------|-------------------------------------------|\n     * | KNOWN_REGEX_UNSPECIFIED       | 0      |                                           |\n     * | KNOWN_REGEX_HTTP_HEADER_NAME  | 1      | HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2)  |\n     * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2      | HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4) |\n     *\n     * @generated from field: buf.validate.KnownRegex well_known_regex = 24;\n     */\n    value: KnownRegex;\n    case: \"wellKnownRegex\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to\n   * enable strict header validation. By default, this is true, and HTTP header\n   * validations are [RFC-compliant](https://datatracker.ietf.org/doc/html/rfc7230#section-3). Setting to false will enable looser\n   * validations that only disallow `\\r\\n\\0` characters, which can be used to\n   * bypass header matching rules.\n   *\n   * ```proto\n   * message MyString {\n   *   // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.\n   *   string value = 1 [(buf.validate.field).string.strict = false];\n   * }\n   * ```\n   *\n   * @generated from field: optional bool strict = 25;\n   */\n  strict: boolean;\n\n  /**\n   * `example` specifies values that the field may have. These values SHOULD\n   * conform to other rules. `example` values will not impact validation\n   * but may be used as helpful guidance on how to populate the given field.\n   *\n   * ```proto\n   * message MyString {\n   *   string value = 1 [\n   *     (buf.validate.field).string.example = \"hello\",\n   *     (buf.validate.field).string.example = \"world\"\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: repeated string example = 34;\n   */\n  example: string[];\n};\n\n/**\n * Describes the message buf.validate.StringRules.\n * Use `create(StringRulesSchema)` to create a new message.\n */\nexport const StringRulesSchema: GenMessage<StringRules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 19);\n\n/**\n * BytesRules describe the rules applied to `bytes` values. These rules\n * may also be applied to the `google.protobuf.BytesValue` Well-Known-Type.\n *\n * @generated from message buf.validate.BytesRules\n */\nexport type BytesRules = Message<\"buf.validate.BytesRules\"> & {\n  /**\n   * `const` requires the field value to exactly match the specified bytes\n   * value. If the field value doesn't match, an error message is generated.\n   *\n   * ```proto\n   * message MyBytes {\n   *   // must be \"\\x01\\x02\\x03\\x04\"\n   *   bytes value = 1 [(buf.validate.field).bytes.const = \"\\x01\\x02\\x03\\x04\"];\n   * }\n   * ```\n   *\n   * @generated from field: optional bytes const = 1;\n   */\n  const: Uint8Array;\n\n  /**\n   * `len` requires the field value to have the specified length in bytes.\n   * If the field value doesn't match, an error message is generated.\n   *\n   * ```proto\n   * message MyBytes {\n   *   // value length must be 4 bytes.\n   *   optional bytes value = 1 [(buf.validate.field).bytes.len = 4];\n   * }\n   * ```\n   *\n   * @generated from field: optional uint64 len = 13;\n   */\n  len: bigint;\n\n  /**\n   * `min_len` requires the field value to have at least the specified minimum\n   * length in bytes.\n   * If the field value doesn't meet the requirement, an error message is generated.\n   *\n   * ```proto\n   * message MyBytes {\n   *   // value length must be at least 2 bytes.\n   *   optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];\n   * }\n   * ```\n   *\n   * @generated from field: optional uint64 min_len = 2;\n   */\n  minLen: bigint;\n\n  /**\n   * `max_len` requires the field value to have at most the specified maximum\n   * length in bytes.\n   * If the field value exceeds the requirement, an error message is generated.\n   *\n   * ```proto\n   * message MyBytes {\n   *   // must be at most 6 bytes.\n   *   optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];\n   * }\n   * ```\n   *\n   * @generated from field: optional uint64 max_len = 3;\n   */\n  maxLen: bigint;\n\n  /**\n   * `pattern` requires the field value to match the specified regular\n   * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).\n   * The value of the field must be valid UTF-8 or validation will fail with a\n   * runtime error.\n   * If the field value doesn't match the pattern, an error message is generated.\n   *\n   * ```proto\n   * message MyBytes {\n   *   // value must match regex pattern \"^[a-zA-Z0-9]+$\".\n   *   optional bytes value = 1 [(buf.validate.field).bytes.pattern = \"^[a-zA-Z0-9]+$\"];\n   * }\n   * ```\n   *\n   * @generated from field: optional string pattern = 4;\n   */\n  pattern: string;\n\n  /**\n   * `prefix` requires the field value to have the specified bytes at the\n   * beginning of the string.\n   * If the field value doesn't meet the requirement, an error message is generated.\n   *\n   * ```proto\n   * message MyBytes {\n   *   // value does not have prefix \\x01\\x02\n   *   optional bytes value = 1 [(buf.validate.field).bytes.prefix = \"\\x01\\x02\"];\n   * }\n   * ```\n   *\n   * @generated from field: optional bytes prefix = 5;\n   */\n  prefix: Uint8Array;\n\n  /**\n   * `suffix` requires the field value to have the specified bytes at the end\n   * of the string.\n   * If the field value doesn't meet the requirement, an error message is generated.\n   *\n   * ```proto\n   * message MyBytes {\n   *   // value does not have suffix \\x03\\x04\n   *   optional bytes value = 1 [(buf.validate.field).bytes.suffix = \"\\x03\\x04\"];\n   * }\n   * ```\n   *\n   * @generated from field: optional bytes suffix = 6;\n   */\n  suffix: Uint8Array;\n\n  /**\n   * `contains` requires the field value to have the specified bytes anywhere in\n   * the string.\n   * If the field value doesn't meet the requirement, an error message is generated.\n   *\n   * ```proto\n   * message MyBytes {\n   *   // value does not contain \\x02\\x03\n   *   optional bytes value = 1 [(buf.validate.field).bytes.contains = \"\\x02\\x03\"];\n   * }\n   * ```\n   *\n   * @generated from field: optional bytes contains = 7;\n   */\n  contains: Uint8Array;\n\n  /**\n   * `in` requires the field value to be equal to one of the specified\n   * values. If the field value doesn't match any of the specified values, an\n   * error message is generated.\n   *\n   * ```proto\n   * message MyBytes {\n   *   // value must in [\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"]\n   *   optional bytes value = 1 [(buf.validate.field).bytes = { in: [\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated bytes in = 8;\n   */\n  in: Uint8Array[];\n\n  /**\n   * `not_in` requires the field value to be not equal to any of the specified\n   * values.\n   * If the field value matches any of the specified values, an error message is\n   * generated.\n   *\n   * ```proto\n   * message MyBytes {\n   *   // value must not in [\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"]\n   *   optional bytes value = 1 [(buf.validate.field).bytes = { not_in: [\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"] }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated bytes not_in = 9;\n   */\n  notIn: Uint8Array[];\n\n  /**\n   * WellKnown rules provide advanced rules against common byte\n   * patterns\n   *\n   * @generated from oneof buf.validate.BytesRules.well_known\n   */\n  wellKnown: {\n    /**\n     * `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.\n     * If the field value doesn't meet this rule, an error message is generated.\n     *\n     * ```proto\n     * message MyBytes {\n     *   // must be a valid IP address\n     *   optional bytes value = 1 [(buf.validate.field).bytes.ip = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool ip = 10;\n     */\n    value: boolean;\n    case: \"ip\";\n  } | {\n    /**\n     * `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.\n     * If the field value doesn't meet this rule, an error message is generated.\n     *\n     * ```proto\n     * message MyBytes {\n     *   // must be a valid IPv4 address\n     *   optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool ipv4 = 11;\n     */\n    value: boolean;\n    case: \"ipv4\";\n  } | {\n    /**\n     * `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.\n     * If the field value doesn't meet this rule, an error message is generated.\n     * ```proto\n     * message MyBytes {\n     *   // must be a valid IPv6 address\n     *   optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool ipv6 = 12;\n     */\n    value: boolean;\n    case: \"ipv6\";\n  } | {\n    /**\n     * `uuid` ensures that the field value encodes 128-bit UUID data as defined\n     * by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2).\n     * The field must contain exactly 16 bytes representing the UUID. If the\n     * field value isn't a valid UUID, an error message will be generated.\n     *\n     * ```proto\n     * message MyBytes {\n     *   // must be a valid UUID\n     *   optional bytes value = 1 [(buf.validate.field).bytes.uuid = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool uuid = 15;\n     */\n    value: boolean;\n    case: \"uuid\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * `example` specifies values that the field may have. These values SHOULD\n   * conform to other rules. `example` values will not impact validation\n   * but may be used as helpful guidance on how to populate the given field.\n   *\n   * ```proto\n   * message MyBytes {\n   *   bytes value = 1 [\n   *     (buf.validate.field).bytes.example = \"\\x01\\x02\",\n   *     (buf.validate.field).bytes.example = \"\\x02\\x03\"\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: repeated bytes example = 14;\n   */\n  example: Uint8Array[];\n};\n\n/**\n * Describes the message buf.validate.BytesRules.\n * Use `create(BytesRulesSchema)` to create a new message.\n */\nexport const BytesRulesSchema: GenMessage<BytesRules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 20);\n\n/**\n * EnumRules describe the rules applied to `enum` values.\n *\n * @generated from message buf.validate.EnumRules\n */\nexport type EnumRules = Message<\"buf.validate.EnumRules\"> & {\n  /**\n   * `const` requires the field value to exactly match the specified enum value.\n   * If the field value doesn't match, an error message is generated.\n   *\n   * ```proto\n   * enum MyEnum {\n   *   MY_ENUM_UNSPECIFIED = 0;\n   *   MY_ENUM_VALUE1 = 1;\n   *   MY_ENUM_VALUE2 = 2;\n   * }\n   *\n   * message MyMessage {\n   *   // The field `value` must be exactly MY_ENUM_VALUE1.\n   *   MyEnum value = 1 [(buf.validate.field).enum.const = 1];\n   * }\n   * ```\n   *\n   * @generated from field: optional int32 const = 1;\n   */\n  const: number;\n\n  /**\n   * `defined_only` requires the field value to be one of the defined values for\n   * this enum, failing on any undefined value.\n   *\n   * ```proto\n   * enum MyEnum {\n   *   MY_ENUM_UNSPECIFIED = 0;\n   *   MY_ENUM_VALUE1 = 1;\n   *   MY_ENUM_VALUE2 = 2;\n   * }\n   *\n   * message MyMessage {\n   *   // The field `value` must be a defined value of MyEnum.\n   *   MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];\n   * }\n   * ```\n   *\n   * @generated from field: optional bool defined_only = 2;\n   */\n  definedOnly: boolean;\n\n  /**\n   * `in` requires the field value to be equal to one of the\n   * specified enum values. If the field value doesn't match any of the\n   * specified values, an error message is generated.\n   *\n   * ```proto\n   * enum MyEnum {\n   *   MY_ENUM_UNSPECIFIED = 0;\n   *   MY_ENUM_VALUE1 = 1;\n   *   MY_ENUM_VALUE2 = 2;\n   * }\n   *\n   * message MyMessage {\n   *   // The field `value` must be equal to one of the specified values.\n   *   MyEnum value = 1 [(buf.validate.field).enum = { in: [1, 2]}];\n   * }\n   * ```\n   *\n   * @generated from field: repeated int32 in = 3;\n   */\n  in: number[];\n\n  /**\n   * `not_in` requires the field value to be not equal to any of the\n   * specified enum values. If the field value matches one of the specified\n   * values, an error message is generated.\n   *\n   * ```proto\n   * enum MyEnum {\n   *   MY_ENUM_UNSPECIFIED = 0;\n   *   MY_ENUM_VALUE1 = 1;\n   *   MY_ENUM_VALUE2 = 2;\n   * }\n   *\n   * message MyMessage {\n   *   // The field `value` must not be equal to any of the specified values.\n   *   MyEnum value = 1 [(buf.validate.field).enum = { not_in: [1, 2]}];\n   * }\n   * ```\n   *\n   * @generated from field: repeated int32 not_in = 4;\n   */\n  notIn: number[];\n\n  /**\n   * `example` specifies values that the field may have. These values SHOULD\n   * conform to other rules. `example` values will not impact validation\n   * but may be used as helpful guidance on how to populate the given field.\n   *\n   * ```proto\n   * enum MyEnum {\n   *   MY_ENUM_UNSPECIFIED = 0;\n   *   MY_ENUM_VALUE1 = 1;\n   *   MY_ENUM_VALUE2 = 2;\n   * }\n   *\n   * message MyMessage {\n   *   MyEnum value = 1 [\n   *     (buf.validate.field).enum.example = 1,\n   *     (buf.validate.field).enum.example = 2\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: repeated int32 example = 5;\n   */\n  example: number[];\n};\n\n/**\n * Describes the message buf.validate.EnumRules.\n * Use `create(EnumRulesSchema)` to create a new message.\n */\nexport const EnumRulesSchema: GenMessage<EnumRules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 21);\n\n/**\n * RepeatedRules describe the rules applied to `repeated` values.\n *\n * @generated from message buf.validate.RepeatedRules\n */\nexport type RepeatedRules = Message<\"buf.validate.RepeatedRules\"> & {\n  /**\n   * `min_items` requires that this field must contain at least the specified\n   * minimum number of items.\n   *\n   * Note that `min_items = 1` is equivalent to setting a field as `required`.\n   *\n   * ```proto\n   * message MyRepeated {\n   *   // value must contain at least  2 items\n   *   repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];\n   * }\n   * ```\n   *\n   * @generated from field: optional uint64 min_items = 1;\n   */\n  minItems: bigint;\n\n  /**\n   * `max_items` denotes that this field must not exceed a\n   * certain number of items as the upper limit. If the field contains more\n   * items than specified, an error message will be generated, requiring the\n   * field to maintain no more than the specified number of items.\n   *\n   * ```proto\n   * message MyRepeated {\n   *   // value must contain no more than 3 item(s)\n   *   repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];\n   * }\n   * ```\n   *\n   * @generated from field: optional uint64 max_items = 2;\n   */\n  maxItems: bigint;\n\n  /**\n   * `unique` indicates that all elements in this field must\n   * be unique. This rule is strictly applicable to scalar and enum\n   * types, with message types not being supported.\n   *\n   * ```proto\n   * message MyRepeated {\n   *   // repeated value must contain unique items\n   *   repeated string value = 1 [(buf.validate.field).repeated.unique = true];\n   * }\n   * ```\n   *\n   * @generated from field: optional bool unique = 3;\n   */\n  unique: boolean;\n\n  /**\n   * `items` details the rules to be applied to each item\n   * in the field. Even for repeated message fields, validation is executed\n   * against each item unless `ignore` is specified.\n   *\n   * ```proto\n   * message MyRepeated {\n   *   // The items in the field `value` must follow the specified rules.\n   *   repeated string value = 1 [(buf.validate.field).repeated.items = {\n   *     string: {\n   *       min_len: 3\n   *       max_len: 10\n   *     }\n   *   }];\n   * }\n   * ```\n   *\n   * Note that the `required` rule does not apply. Repeated items\n   * cannot be unset.\n   *\n   * @generated from field: optional buf.validate.FieldRules items = 4;\n   */\n  items?: FieldRules | undefined;\n};\n\n/**\n * Describes the message buf.validate.RepeatedRules.\n * Use `create(RepeatedRulesSchema)` to create a new message.\n */\nexport const RepeatedRulesSchema: GenMessage<RepeatedRules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 22);\n\n/**\n * MapRules describe the rules applied to `map` values.\n *\n * @generated from message buf.validate.MapRules\n */\nexport type MapRules = Message<\"buf.validate.MapRules\"> & {\n  /**\n   * Specifies the minimum number of key-value pairs allowed. If the field has\n   * fewer key-value pairs than specified, an error message is generated.\n   *\n   * ```proto\n   * message MyMap {\n   *   // The field `value` must have at least 2 key-value pairs.\n   *   map<string, string> value = 1 [(buf.validate.field).map.min_pairs = 2];\n   * }\n   * ```\n   *\n   * @generated from field: optional uint64 min_pairs = 1;\n   */\n  minPairs: bigint;\n\n  /**\n   * Specifies the maximum number of key-value pairs allowed. If the field has\n   * more key-value pairs than specified, an error message is generated.\n   *\n   * ```proto\n   * message MyMap {\n   *   // The field `value` must have at most 3 key-value pairs.\n   *   map<string, string> value = 1 [(buf.validate.field).map.max_pairs = 3];\n   * }\n   * ```\n   *\n   * @generated from field: optional uint64 max_pairs = 2;\n   */\n  maxPairs: bigint;\n\n  /**\n   * Specifies the rules to be applied to each key in the field.\n   *\n   * ```proto\n   * message MyMap {\n   *   // The keys in the field `value` must follow the specified rules.\n   *   map<string, string> value = 1 [(buf.validate.field).map.keys = {\n   *     string: {\n   *       min_len: 3\n   *       max_len: 10\n   *     }\n   *   }];\n   * }\n   * ```\n   *\n   * Note that the `required` rule does not apply. Map keys cannot be unset.\n   *\n   * @generated from field: optional buf.validate.FieldRules keys = 4;\n   */\n  keys?: FieldRules | undefined;\n\n  /**\n   * Specifies the rules to be applied to the value of each key in the\n   * field. Message values will still have their validations evaluated unless\n   * `ignore` is specified.\n   *\n   * ```proto\n   * message MyMap {\n   *   // The values in the field `value` must follow the specified rules.\n   *   map<string, string> value = 1 [(buf.validate.field).map.values = {\n   *     string: {\n   *       min_len: 5\n   *       max_len: 20\n   *     }\n   *   }];\n   * }\n   * ```\n   * Note that the `required` rule does not apply. Map values cannot be unset.\n   *\n   * @generated from field: optional buf.validate.FieldRules values = 5;\n   */\n  values?: FieldRules | undefined;\n};\n\n/**\n * Describes the message buf.validate.MapRules.\n * Use `create(MapRulesSchema)` to create a new message.\n */\nexport const MapRulesSchema: GenMessage<MapRules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 23);\n\n/**\n * AnyRules describe rules applied exclusively to the `google.protobuf.Any` well-known type.\n *\n * @generated from message buf.validate.AnyRules\n */\nexport type AnyRules = Message<\"buf.validate.AnyRules\"> & {\n  /**\n   * `in` requires the field's `type_url` to be equal to one of the\n   * specified values. If it doesn't match any of the specified values, an error\n   * message is generated.\n   *\n   * ```proto\n   * message MyAny {\n   *   //  The `value` field must have a `type_url` equal to one of the specified values.\n   *   google.protobuf.Any value = 1 [(buf.validate.field).any = {\n   *       in: [\"type.googleapis.com/MyType1\", \"type.googleapis.com/MyType2\"]\n   *   }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated string in = 2;\n   */\n  in: string[];\n\n  /**\n   * `not_in` requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.\n   *\n   * ```proto\n   * message MyAny {\n   *   //  The `value` field must not have a `type_url` equal to any of the specified values.\n   *   google.protobuf.Any value = 1 [(buf.validate.field).any = {\n   *       not_in: [\"type.googleapis.com/ForbiddenType1\", \"type.googleapis.com/ForbiddenType2\"]\n   *   }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated string not_in = 3;\n   */\n  notIn: string[];\n};\n\n/**\n * Describes the message buf.validate.AnyRules.\n * Use `create(AnyRulesSchema)` to create a new message.\n */\nexport const AnyRulesSchema: GenMessage<AnyRules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 24);\n\n/**\n * DurationRules describe the rules applied exclusively to the `google.protobuf.Duration` well-known type.\n *\n * @generated from message buf.validate.DurationRules\n */\nexport type DurationRules = Message<\"buf.validate.DurationRules\"> & {\n  /**\n   * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.\n   * If the field's value deviates from the specified value, an error message\n   * will be generated.\n   *\n   * ```proto\n   * message MyDuration {\n   *   // value must equal 5s\n   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = { seconds: 5 }];\n   * }\n   * ```\n   *\n   * @generated from field: optional google.protobuf.Duration const = 2;\n   */\n  const?: Duration | undefined;\n\n  /**\n   * @generated from oneof buf.validate.DurationRules.less_than\n   */\n  lessThan: {\n    /**\n     * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,\n     * exclusive. If the field's value is greater than or equal to the specified\n     * value, an error message will be generated.\n     *\n     * ```proto\n     * message MyDuration {\n     *   // must be less than 5s\n     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 5 }];\n     * }\n     * ```\n     *\n     * @generated from field: google.protobuf.Duration lt = 3;\n     */\n    value: Duration;\n    case: \"lt\";\n  } | {\n    /**\n     * `lte` indicates that the field must be less than or equal to the specified\n     * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,\n     * an error message will be generated.\n     *\n     * ```proto\n     * message MyDuration {\n     *   // must be less than or equal to 10s\n     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = { seconds: 10 }];\n     * }\n     * ```\n     *\n     * @generated from field: google.protobuf.Duration lte = 4;\n     */\n    value: Duration;\n    case: \"lte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * @generated from oneof buf.validate.DurationRules.greater_than\n   */\n  greaterThan: {\n    /**\n     * `gt` requires the duration field value to be greater than the specified\n     * value (exclusive). If the value of `gt` is larger than a specified `lt`\n     * or `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyDuration {\n     *   // duration must be greater than 5s [duration.gt]\n     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];\n     *\n     *   // duration must be greater than 5s and less than 10s [duration.gt_lt]\n     *   google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];\n     *\n     *   // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]\n     *   google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];\n     * }\n     * ```\n     *\n     * @generated from field: google.protobuf.Duration gt = 5;\n     */\n    value: Duration;\n    case: \"gt\";\n  } | {\n    /**\n     * `gte` requires the duration field value to be greater than or equal to the\n     * specified value (exclusive). If the value of `gte` is larger than a\n     * specified `lt` or `lte`, the range is reversed, and the field value must\n     * be outside the specified range. If the field value doesn't meet the\n     * required conditions, an error message is generated.\n     *\n     * ```proto\n     * message MyDuration {\n     *  // duration must be greater than or equal to 5s [duration.gte]\n     *  google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];\n     *\n     *  // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]\n     *  google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];\n     *\n     *  // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]\n     *  google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];\n     * }\n     * ```\n     *\n     * @generated from field: google.protobuf.Duration gte = 6;\n     */\n    value: Duration;\n    case: \"gte\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.\n   * If the field's value doesn't correspond to any of the specified values,\n   * an error message will be generated.\n   *\n   * ```proto\n   * message MyDuration {\n   *   // must be in list [1s, 2s, 3s]\n   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration = {\n   *     in: [{ seconds: 1 }, { seconds: 2 }, { seconds: 3 }]\n   *   }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated google.protobuf.Duration in = 7;\n   */\n  in: Duration[];\n\n  /**\n   * `not_in` denotes that the field must not be equal to\n   * any of the specified values of the `google.protobuf.Duration` type.\n   * If the field's value matches any of these values, an error message will be\n   * generated.\n   *\n   * ```proto\n   * message MyDuration {\n   *   // value must not be in list [1s, 2s, 3s]\n   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration = {\n   *     not_in: [{ seconds: 1 }, { seconds: 2 }, { seconds: 3 }]\n   *   }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated google.protobuf.Duration not_in = 8;\n   */\n  notIn: Duration[];\n\n  /**\n   * `example` specifies values that the field may have. These values SHOULD\n   * conform to other rules. `example` values will not impact validation\n   * but may be used as helpful guidance on how to populate the given field.\n   *\n   * ```proto\n   * message MyDuration {\n   *   google.protobuf.Duration value = 1 [\n   *     (buf.validate.field).duration.example = { seconds: 1 },\n   *     (buf.validate.field).duration.example = { seconds: 2 }\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: repeated google.protobuf.Duration example = 9;\n   */\n  example: Duration[];\n};\n\n/**\n * Describes the message buf.validate.DurationRules.\n * Use `create(DurationRulesSchema)` to create a new message.\n */\nexport const DurationRulesSchema: GenMessage<DurationRules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 25);\n\n/**\n * FieldMaskRules describe rules applied exclusively to the `google.protobuf.FieldMask` well-known type.\n *\n * @generated from message buf.validate.FieldMaskRules\n */\nexport type FieldMaskRules = Message<\"buf.validate.FieldMaskRules\"> & {\n  /**\n   * `const` dictates that the field must match the specified value of the `google.protobuf.FieldMask` type exactly.\n   * If the field's value deviates from the specified value, an error message\n   * will be generated.\n   *\n   * ```proto\n   * message MyFieldMask {\n   *   // value must equal [\"a\"]\n   *   google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask.const = {\n   *       paths: [\"a\"]\n   *   }];\n   * }\n   * ```\n   *\n   * @generated from field: optional google.protobuf.FieldMask const = 1;\n   */\n  const?: FieldMask | undefined;\n\n  /**\n   * `in` requires the field value to only contain paths matching specified\n   * values or their subpaths.\n   * If any of the field value's paths doesn't match the rule,\n   * an error message is generated.\n   * See: https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask\n   *\n   * ```proto\n   * message MyFieldMask {\n   *   //  The `value` FieldMask must only contain paths listed in `in`.\n   *   google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask = {\n   *       in: [\"a\", \"b\", \"c.a\"]\n   *   }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated string in = 2;\n   */\n  in: string[];\n\n  /**\n   * `not_in` requires the field value to not contain paths matching specified\n   * values or their subpaths.\n   * If any of the field value's paths matches the rule,\n   * an error message is generated.\n   * See: https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask\n   *\n   * ```proto\n   * message MyFieldMask {\n   *   //  The `value` FieldMask shall not contain paths listed in `not_in`.\n   *   google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask = {\n   *       not_in: [\"forbidden\", \"immutable\", \"c.a\"]\n   *   }];\n   * }\n   * ```\n   *\n   * @generated from field: repeated string not_in = 3;\n   */\n  notIn: string[];\n\n  /**\n   * `example` specifies values that the field may have. These values SHOULD\n   * conform to other rules. `example` values will not impact validation\n   * but may be used as helpful guidance on how to populate the given field.\n   *\n   * ```proto\n   * message MyFieldMask {\n   *   google.protobuf.FieldMask value = 1 [\n   *     (buf.validate.field).field_mask.example = { paths: [\"a\", \"b\"] },\n   *     (buf.validate.field).field_mask.example = { paths: [\"c.a\", \"d\"] }\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: repeated google.protobuf.FieldMask example = 4;\n   */\n  example: FieldMask[];\n};\n\n/**\n * Describes the message buf.validate.FieldMaskRules.\n * Use `create(FieldMaskRulesSchema)` to create a new message.\n */\nexport const FieldMaskRulesSchema: GenMessage<FieldMaskRules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 26);\n\n/**\n * TimestampRules describe the rules applied exclusively to the `google.protobuf.Timestamp` well-known type.\n *\n * @generated from message buf.validate.TimestampRules\n */\nexport type TimestampRules = Message<\"buf.validate.TimestampRules\"> & {\n  /**\n   * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.\n   *\n   * ```proto\n   * message MyTimestamp {\n   *   // value must equal 2023-05-03T10:00:00Z\n   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];\n   * }\n   * ```\n   *\n   * @generated from field: optional google.protobuf.Timestamp const = 2;\n   */\n  const?: Timestamp | undefined;\n\n  /**\n   * @generated from oneof buf.validate.TimestampRules.less_than\n   */\n  lessThan: {\n    /**\n     * `lt` requires the timestamp field value to be less than the specified value (field < value). If the field value doesn't meet the required conditions, an error message is generated.\n     *\n     * ```proto\n     * message MyTimestamp {\n     *   // timestamp must be less than '2023-01-01T00:00:00Z' [timestamp.lt]\n     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lt = { seconds: 1672444800 }];\n     * }\n     * ```\n     *\n     * @generated from field: google.protobuf.Timestamp lt = 3;\n     */\n    value: Timestamp;\n    case: \"lt\";\n  } | {\n    /**\n     * `lte` requires the timestamp field value to be less than or equal to the specified value (field <= value). If the field value doesn't meet the required conditions, an error message is generated.\n     *\n     * ```proto\n     * message MyTimestamp {\n     *   // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]\n     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];\n     * }\n     * ```\n     *\n     * @generated from field: google.protobuf.Timestamp lte = 4;\n     */\n    value: Timestamp;\n    case: \"lte\";\n  } | {\n    /**\n     * `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.\n     *\n     * ```proto\n     * message MyTimestamp {\n     *  // must be less than now\n     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool lt_now = 7;\n     */\n    value: boolean;\n    case: \"ltNow\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * @generated from oneof buf.validate.TimestampRules.greater_than\n   */\n  greaterThan: {\n    /**\n     * `gt` requires the timestamp field value to be greater than the specified\n     * value (exclusive). If the value of `gt` is larger than a specified `lt`\n     * or `lte`, the range is reversed, and the field value must be outside the\n     * specified range. If the field value doesn't meet the required conditions,\n     * an error message is generated.\n     *\n     * ```proto\n     * message MyTimestamp {\n     *   // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]\n     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];\n     *\n     *   // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]\n     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];\n     *\n     *   // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]\n     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];\n     * }\n     * ```\n     *\n     * @generated from field: google.protobuf.Timestamp gt = 5;\n     */\n    value: Timestamp;\n    case: \"gt\";\n  } | {\n    /**\n     * `gte` requires the timestamp field value to be greater than or equal to the\n     * specified value (exclusive). If the value of `gte` is larger than a\n     * specified `lt` or `lte`, the range is reversed, and the field value\n     * must be outside the specified range. If the field value doesn't meet\n     * the required conditions, an error message is generated.\n     *\n     * ```proto\n     * message MyTimestamp {\n     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]\n     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];\n     *\n     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]\n     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];\n     *\n     *   // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]\n     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];\n     * }\n     * ```\n     *\n     * @generated from field: google.protobuf.Timestamp gte = 6;\n     */\n    value: Timestamp;\n    case: \"gte\";\n  } | {\n    /**\n     * `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.\n     *\n     * ```proto\n     * message MyTimestamp {\n     *   // must be greater than now\n     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];\n     * }\n     * ```\n     *\n     * @generated from field: bool gt_now = 8;\n     */\n    value: boolean;\n    case: \"gtNow\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.\n   *\n   * ```proto\n   * message MyTimestamp {\n   *   // must be within 1 hour of now\n   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];\n   * }\n   * ```\n   *\n   * @generated from field: optional google.protobuf.Duration within = 9;\n   */\n  within?: Duration | undefined;\n\n  /**\n   * `example` specifies values that the field may have. These values SHOULD\n   * conform to other rules. `example` values will not impact validation\n   * but may be used as helpful guidance on how to populate the given field.\n   *\n   * ```proto\n   * message MyTimestamp {\n   *   google.protobuf.Timestamp value = 1 [\n   *     (buf.validate.field).timestamp.example = { seconds: 1672444800 },\n   *     (buf.validate.field).timestamp.example = { seconds: 1672531200 }\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from field: repeated google.protobuf.Timestamp example = 10;\n   */\n  example: Timestamp[];\n};\n\n/**\n * Describes the message buf.validate.TimestampRules.\n * Use `create(TimestampRulesSchema)` to create a new message.\n */\nexport const TimestampRulesSchema: GenMessage<TimestampRules> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 27);\n\n/**\n * `Violations` is a collection of `Violation` messages. This message type is returned by\n * Protovalidate when a proto message fails to meet the requirements set by the `Rule` validation rules.\n * Each individual violation is represented by a `Violation` message.\n *\n * @generated from message buf.validate.Violations\n */\nexport type Violations = Message<\"buf.validate.Violations\"> & {\n  /**\n   * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.\n   *\n   * @generated from field: repeated buf.validate.Violation violations = 1;\n   */\n  violations: Violation[];\n};\n\n/**\n * Describes the message buf.validate.Violations.\n * Use `create(ViolationsSchema)` to create a new message.\n */\nexport const ViolationsSchema: GenMessage<Violations> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 28);\n\n/**\n * `Violation` represents a single instance where a validation rule, expressed\n * as a `Rule`, was not met. It provides information about the field that\n * caused the violation, the specific rule that wasn't fulfilled, and a\n * human-readable error message.\n *\n * For example, consider the following message:\n *\n * ```proto\n * message User {\n *     int32 age = 1 [(buf.validate.field).cel = {\n *         id: \"user.age\",\n *         expression: \"this < 18 ? 'User must be at least 18 years old' : ''\",\n *     }];\n * }\n * ```\n *\n * It could produce the following violation:\n *\n * ```json\n * {\n *   \"ruleId\": \"user.age\",\n *   \"message\": \"User must be at least 18 years old\",\n *   \"field\": {\n *     \"elements\": [\n *       {\n *         \"fieldNumber\": 1,\n *         \"fieldName\": \"age\",\n *         \"fieldType\": \"TYPE_INT32\"\n *       }\n *     ]\n *   },\n *   \"rule\": {\n *     \"elements\": [\n *       {\n *         \"fieldNumber\": 23,\n *         \"fieldName\": \"cel\",\n *         \"fieldType\": \"TYPE_MESSAGE\",\n *         \"index\": \"0\"\n *       }\n *     ]\n *   }\n * }\n * ```\n *\n * @generated from message buf.validate.Violation\n */\nexport type Violation = Message<\"buf.validate.Violation\"> & {\n  /**\n   * `field` is a machine-readable path to the field that failed validation.\n   * This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.\n   *\n   * For example, consider the following message:\n   *\n   * ```proto\n   * message Message {\n   *   bool a = 1 [(buf.validate.field).required = true];\n   * }\n   * ```\n   *\n   * It could produce the following violation:\n   *\n   * ```textproto\n   * violation {\n   *   field { element { field_number: 1, field_name: \"a\", field_type: 8 } }\n   *   ...\n   * }\n   * ```\n   *\n   * @generated from field: optional buf.validate.FieldPath field = 5;\n   */\n  field?: FieldPath | undefined;\n\n  /**\n   * `rule` is a machine-readable path that points to the specific rule that failed validation.\n   * This will be a nested field starting from the FieldRules of the field that failed validation.\n   * For custom rules, this will provide the path of the rule, e.g. `cel[0]`.\n   *\n   * For example, consider the following message:\n   *\n   * ```proto\n   * message Message {\n   *   bool a = 1 [(buf.validate.field).required = true];\n   *   bool b = 2 [(buf.validate.field).cel = {\n   *     id: \"custom_rule\",\n   *     expression: \"!this ? 'b must be true': ''\"\n   *   }];\n   * }\n   * ```\n   *\n   * It could produce the following violations:\n   *\n   * ```textproto\n   * violation {\n   *   rule { element { field_number: 25, field_name: \"required\", field_type: 8 } }\n   *   ...\n   * }\n   * violation {\n   *   rule { element { field_number: 23, field_name: \"cel\", field_type: 11, index: 0 } }\n   *   ...\n   * }\n   * ```\n   *\n   * @generated from field: optional buf.validate.FieldPath rule = 6;\n   */\n  rule?: FieldPath | undefined;\n\n  /**\n   * `rule_id` is the unique identifier of the `Rule` that was not fulfilled.\n   * This is the same `id` that was specified in the `Rule` message, allowing easy tracing of which rule was violated.\n   *\n   * @generated from field: optional string rule_id = 2;\n   */\n  ruleId: string;\n\n  /**\n   * `message` is a human-readable error message that describes the nature of the violation.\n   * This can be the default error message from the violated `Rule`, or it can be a custom message that gives more context about the violation.\n   *\n   * @generated from field: optional string message = 3;\n   */\n  message: string;\n\n  /**\n   * `for_key` indicates whether the violation was caused by a map key, rather than a value.\n   *\n   * @generated from field: optional bool for_key = 4;\n   */\n  forKey: boolean;\n};\n\n/**\n * Describes the message buf.validate.Violation.\n * Use `create(ViolationSchema)` to create a new message.\n */\nexport const ViolationSchema: GenMessage<Violation> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 29);\n\n/**\n * `FieldPath` provides a path to a nested protobuf field.\n *\n * This message provides enough information to render a dotted field path even without protobuf descriptors.\n * It also provides enough information to resolve a nested field through unknown wire data.\n *\n * @generated from message buf.validate.FieldPath\n */\nexport type FieldPath = Message<\"buf.validate.FieldPath\"> & {\n  /**\n   * `elements` contains each element of the path, starting from the root and recursing downward.\n   *\n   * @generated from field: repeated buf.validate.FieldPathElement elements = 1;\n   */\n  elements: FieldPathElement[];\n};\n\n/**\n * Describes the message buf.validate.FieldPath.\n * Use `create(FieldPathSchema)` to create a new message.\n */\nexport const FieldPathSchema: GenMessage<FieldPath> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 30);\n\n/**\n * `FieldPathElement` provides enough information to nest through a single protobuf field.\n *\n * If the selected field is a map or repeated field, the `subscript` value selects a specific element from it.\n * A path that refers to a value nested under a map key or repeated field index will have a `subscript` value.\n * The `field_type` field allows unambiguous resolution of a field even if descriptors are not available.\n *\n * @generated from message buf.validate.FieldPathElement\n */\nexport type FieldPathElement = Message<\"buf.validate.FieldPathElement\"> & {\n  /**\n   * `field_number` is the field number this path element refers to.\n   *\n   * @generated from field: optional int32 field_number = 1;\n   */\n  fieldNumber: number;\n\n  /**\n   * `field_name` contains the field name this path element refers to.\n   * This can be used to display a human-readable path even if the field number is unknown.\n   *\n   * @generated from field: optional string field_name = 2;\n   */\n  fieldName: string;\n\n  /**\n   * `field_type` specifies the type of this field. When using reflection, this value is not needed.\n   *\n   * This value is provided to make it possible to traverse unknown fields through wire data.\n   * When traversing wire data, be mindful of both packed[1] and delimited[2] encoding schemes.\n   *\n   * [1]: https://protobuf.dev/programming-guides/encoding/#packed\n   * [2]: https://protobuf.dev/programming-guides/encoding/#groups\n   *\n   * N.B.: Although groups are deprecated, the corresponding delimited encoding scheme is not, and\n   * can be explicitly used in Protocol Buffers 2023 Edition.\n   *\n   * @generated from field: optional google.protobuf.FieldDescriptorProto.Type field_type = 3;\n   */\n  fieldType: FieldDescriptorProto_Type;\n\n  /**\n   * `key_type` specifies the map key type of this field. This value is useful when traversing\n   * unknown fields through wire data: specifically, it allows handling the differences between\n   * different integer encodings.\n   *\n   * @generated from field: optional google.protobuf.FieldDescriptorProto.Type key_type = 4;\n   */\n  keyType: FieldDescriptorProto_Type;\n\n  /**\n   * `value_type` specifies map value type of this field. This is useful if you want to display a\n   * value inside unknown fields through wire data.\n   *\n   * @generated from field: optional google.protobuf.FieldDescriptorProto.Type value_type = 5;\n   */\n  valueType: FieldDescriptorProto_Type;\n\n  /**\n   * `subscript` contains a repeated index or map key, if this path element nests into a repeated or map field.\n   *\n   * @generated from oneof buf.validate.FieldPathElement.subscript\n   */\n  subscript: {\n    /**\n     * `index` specifies a 0-based index into a repeated field.\n     *\n     * @generated from field: uint64 index = 6;\n     */\n    value: bigint;\n    case: \"index\";\n  } | {\n    /**\n     * `bool_key` specifies a map key of type bool.\n     *\n     * @generated from field: bool bool_key = 7;\n     */\n    value: boolean;\n    case: \"boolKey\";\n  } | {\n    /**\n     * `int_key` specifies a map key of type int32, int64, sint32, sint64, sfixed32 or sfixed64.\n     *\n     * @generated from field: int64 int_key = 8;\n     */\n    value: bigint;\n    case: \"intKey\";\n  } | {\n    /**\n     * `uint_key` specifies a map key of type uint32, uint64, fixed32 or fixed64.\n     *\n     * @generated from field: uint64 uint_key = 9;\n     */\n    value: bigint;\n    case: \"uintKey\";\n  } | {\n    /**\n     * `string_key` specifies a map key of type string.\n     *\n     * @generated from field: string string_key = 10;\n     */\n    value: string;\n    case: \"stringKey\";\n  } | { case: undefined; value?: undefined };\n};\n\n/**\n * Describes the message buf.validate.FieldPathElement.\n * Use `create(FieldPathElementSchema)` to create a new message.\n */\nexport const FieldPathElementSchema: GenMessage<FieldPathElement> = /*@__PURE__*/\n  messageDesc(file_buf_validate_validate, 31);\n\n/**\n * Specifies how `FieldRules.ignore` behaves, depending on the field's value, and\n * whether the field tracks presence.\n *\n * @generated from enum buf.validate.Ignore\n */\nexport enum Ignore {\n  /**\n   * Ignore rules if the field tracks presence and is unset. This is the default\n   * behavior.\n   *\n   * In proto3, only message fields, members of a Protobuf `oneof`, and fields\n   * with the `optional` label track presence. Consequently, the following fields\n   * are always validated, whether a value is set or not:\n   *\n   * ```proto\n   * syntax=\"proto3\";\n   *\n   * message RulesApply {\n   *   string email = 1 [\n   *     (buf.validate.field).string.email = true\n   *   ];\n   *   int32 age = 2 [\n   *     (buf.validate.field).int32.gt = 0\n   *   ];\n   *   repeated string labels = 3 [\n   *     (buf.validate.field).repeated.min_items = 1\n   *   ];\n   * }\n   * ```\n   *\n   * In contrast, the following fields track presence, and are only validated if\n   * a value is set:\n   *\n   * ```proto\n   * syntax=\"proto3\";\n   *\n   * message RulesApplyIfSet {\n   *   optional string email = 1 [\n   *     (buf.validate.field).string.email = true\n   *   ];\n   *   oneof ref {\n   *     string reference = 2 [\n   *       (buf.validate.field).string.uuid = true\n   *     ];\n   *     string name = 3 [\n   *       (buf.validate.field).string.min_len = 4\n   *     ];\n   *   }\n   *   SomeMessage msg = 4 [\n   *     (buf.validate.field).cel = {/* ... *\\/}\n   *   ];\n   * }\n   * ```\n   *\n   * To ensure that such a field is set, add the `required` rule.\n   *\n   * To learn which fields track presence, see the\n   * [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat).\n   *\n   * @generated from enum value: IGNORE_UNSPECIFIED = 0;\n   */\n  UNSPECIFIED = 0,\n\n  /**\n   * Ignore rules if the field is unset, or set to the zero value.\n   *\n   * The zero value depends on the field type:\n   * - For strings, the zero value is the empty string.\n   * - For bytes, the zero value is empty bytes.\n   * - For bool, the zero value is false.\n   * - For numeric types, the zero value is zero.\n   * - For enums, the zero value is the first defined enum value.\n   * - For repeated fields, the zero is an empty list.\n   * - For map fields, the zero is an empty map.\n   * - For message fields, absence of the message (typically a null-value) is considered zero value.\n   *\n   * For fields that track presence (e.g. adding the `optional` label in proto3),\n   * this a no-op and behavior is the same as the default `IGNORE_UNSPECIFIED`.\n   *\n   * @generated from enum value: IGNORE_IF_ZERO_VALUE = 1;\n   */\n  IF_ZERO_VALUE = 1,\n\n  /**\n   * Always ignore rules, including the `required` rule.\n   *\n   * This is useful for ignoring the rules of a referenced message, or to\n   * temporarily ignore rules during development.\n   *\n   * ```proto\n   * message MyMessage {\n   *   // The field's rules will always be ignored, including any validations\n   *   // on value's fields.\n   *   MyOtherMessage value = 1 [\n   *     (buf.validate.field).ignore = IGNORE_ALWAYS\n   *   ];\n   * }\n   * ```\n   *\n   * @generated from enum value: IGNORE_ALWAYS = 3;\n   */\n  ALWAYS = 3,\n}\n\n/**\n * Describes the enum buf.validate.Ignore.\n */\nexport const IgnoreSchema: GenEnum<Ignore> = /*@__PURE__*/\n  enumDesc(file_buf_validate_validate, 0);\n\n/**\n * KnownRegex contains some well-known patterns.\n *\n * @generated from enum buf.validate.KnownRegex\n */\nexport enum KnownRegex {\n  /**\n   * @generated from enum value: KNOWN_REGEX_UNSPECIFIED = 0;\n   */\n  UNSPECIFIED = 0,\n\n  /**\n   * HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2).\n   *\n   * @generated from enum value: KNOWN_REGEX_HTTP_HEADER_NAME = 1;\n   */\n  HTTP_HEADER_NAME = 1,\n\n  /**\n   * HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4).\n   *\n   * @generated from enum value: KNOWN_REGEX_HTTP_HEADER_VALUE = 2;\n   */\n  HTTP_HEADER_VALUE = 2,\n}\n\n/**\n * Describes the enum buf.validate.KnownRegex.\n */\nexport const KnownRegexSchema: GenEnum<KnownRegex> = /*@__PURE__*/\n  enumDesc(file_buf_validate_validate, 1);\n\n/**\n * Rules specify the validations to be performed on this message. By default,\n * no validation is performed against a message.\n *\n * @generated from extension: optional buf.validate.MessageRules message = 1159;\n */\nexport const message: GenExtension<MessageOptions, MessageRules> = /*@__PURE__*/\n  extDesc(file_buf_validate_validate, 0);\n\n/**\n * Rules specify the validations to be performed on this oneof. By default,\n * no validation is performed against a oneof.\n *\n * @generated from extension: optional buf.validate.OneofRules oneof = 1159;\n */\nexport const oneof: GenExtension<OneofOptions, OneofRules> = /*@__PURE__*/\n  extDesc(file_buf_validate_validate, 1);\n\n/**\n * Rules specify the validations to be performed on this field. By default,\n * no validation is performed against a field.\n *\n * @generated from extension: optional buf.validate.FieldRules field = 1159;\n */\nexport const field: GenExtension<FieldOptions, FieldRules> = /*@__PURE__*/\n  extDesc(file_buf_validate_validate, 2);\n\n/**\n * Specifies predefined rules. When extending a standard rule message,\n * this adds additional CEL expressions that apply when the extension is used.\n *\n * ```proto\n * extend buf.validate.Int32Rules {\n *   bool is_zero = 1001 [(buf.validate.predefined).cel = {\n *     id: \"int32.is_zero\",\n *     message: \"must be zero\",\n *     expression: \"!rule || this == 0\",\n *   }];\n * }\n *\n * message Foo {\n *   int32 reserved = 1 [(buf.validate.field).int32.(is_zero) = true];\n * }\n * ```\n *\n * @generated from extension: optional buf.validate.PredefinedRules predefined = 1160;\n */\nexport const predefined: GenExtension<FieldOptions, PredefinedRules> = /*@__PURE__*/\n  extDesc(file_buf_validate_validate, 3);\n\n","// Copyright 2026 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file google/api/field_behavior.proto (package google.api, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenExtension, GenFile } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, extDesc, fileDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { FieldOptions } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_descriptor } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file google/api/field_behavior.proto.\n */\nexport const file_google_api_field_behavior: GenFile = /*@__PURE__*/\n  fileDesc(\"Ch9nb29nbGUvYXBpL2ZpZWxkX2JlaGF2aW9yLnByb3RvEgpnb29nbGUuYXBpKrYBCg1GaWVsZEJlaGF2aW9yEh4KGkZJRUxEX0JFSEFWSU9SX1VOU1BFQ0lGSUVEEAASDAoIT1BUSU9OQUwQARIMCghSRVFVSVJFRBACEg8KC09VVFBVVF9PTkxZEAMSDgoKSU5QVVRfT05MWRAEEg0KCUlNTVVUQUJMRRAFEhIKDlVOT1JERVJFRF9MSVNUEAYSFQoRTk9OX0VNUFRZX0RFRkFVTFQQBxIOCgpJREVOVElGSUVSEAg6ZAoOZmllbGRfYmVoYXZpb3ISHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGJwIIAMoDjIZLmdvb2dsZS5hcGkuRmllbGRCZWhhdmlvckICEABSDWZpZWxkQmVoYXZpb3JCsAEKDmNvbS5nb29nbGUuYXBpQhJGaWVsZEJlaGF2aW9yUHJvdG9QAVpBZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9hcGkvYW5ub3RhdGlvbnM7YW5ub3RhdGlvbnOiAgNHQViqAgpHb29nbGUuQXBpygIKR29vZ2xlXEFwaeICFkdvb2dsZVxBcGlcR1BCTWV0YWRhdGHqAgtHb29nbGU6OkFwaWIGcHJvdG8z\", [file_google_protobuf_descriptor]);\n\n/**\n * An indicator of the behavior of a given field (for example, that a field\n * is required in requests, or given as output but ignored as input).\n * This **does not** change the behavior in protocol buffers itself; it only\n * denotes the behavior and may affect how API tooling handles the field.\n *\n * Note: This enum **may** receive new values in the future.\n *\n * @generated from enum google.api.FieldBehavior\n */\nexport enum FieldBehavior {\n  /**\n   * Conventional default for enums. Do not use this.\n   *\n   * @generated from enum value: FIELD_BEHAVIOR_UNSPECIFIED = 0;\n   */\n  FIELD_BEHAVIOR_UNSPECIFIED = 0,\n\n  /**\n   * Specifically denotes a field as optional.\n   * While all fields in protocol buffers are optional, this may be specified\n   * for emphasis if appropriate.\n   *\n   * @generated from enum value: OPTIONAL = 1;\n   */\n  OPTIONAL = 1,\n\n  /**\n   * Denotes a field as required.\n   * This indicates that the field **must** be provided as part of the request,\n   * and failure to do so will cause an error (usually `INVALID_ARGUMENT`).\n   *\n   * @generated from enum value: REQUIRED = 2;\n   */\n  REQUIRED = 2,\n\n  /**\n   * Denotes a field as output only.\n   * This indicates that the field is provided in responses, but including the\n   * field in a request does nothing (the server *must* ignore it and\n   * *must not* throw an error as a result of the field's presence).\n   *\n   * @generated from enum value: OUTPUT_ONLY = 3;\n   */\n  OUTPUT_ONLY = 3,\n\n  /**\n   * Denotes a field as input only.\n   * This indicates that the field is provided in requests, and the\n   * corresponding field is not included in output.\n   *\n   * @generated from enum value: INPUT_ONLY = 4;\n   */\n  INPUT_ONLY = 4,\n\n  /**\n   * Denotes a field as immutable.\n   * This indicates that the field may be set once in a request to create a\n   * resource, but may not be changed thereafter.\n   *\n   * @generated from enum value: IMMUTABLE = 5;\n   */\n  IMMUTABLE = 5,\n\n  /**\n   * Denotes that a (repeated) field is an unordered list.\n   * This indicates that the service may provide the elements of the list\n   * in any arbitrary  order, rather than the order the user originally\n   * provided. Additionally, the list's order may or may not be stable.\n   *\n   * @generated from enum value: UNORDERED_LIST = 6;\n   */\n  UNORDERED_LIST = 6,\n\n  /**\n   * Denotes that this field returns a non-empty default value if not set.\n   * This indicates that if the user provides the empty value in a request,\n   * a non-empty value will be returned. The user will not be aware of what\n   * non-empty value to expect.\n   *\n   * @generated from enum value: NON_EMPTY_DEFAULT = 7;\n   */\n  NON_EMPTY_DEFAULT = 7,\n\n  /**\n   * Denotes that the field in a resource (a message annotated with\n   * google.api.resource) is used in the resource name to uniquely identify the\n   * resource. For AIP-compliant APIs, this should only be applied to the\n   * `name` field on the resource.\n   *\n   * This behavior should not be applied to references to other resources within\n   * the message.\n   *\n   * The identifier field of resources often have different field behavior\n   * depending on the request it is embedded in (e.g. for Create methods name\n   * is optional and unused, while for Update methods it is required). Instead\n   * of method-specific annotations, only `IDENTIFIER` is required.\n   *\n   * @generated from enum value: IDENTIFIER = 8;\n   */\n  IDENTIFIER = 8,\n}\n\n/**\n * Describes the enum google.api.FieldBehavior.\n */\nexport const FieldBehaviorSchema: GenEnum<FieldBehavior> = /*@__PURE__*/\n  enumDesc(file_google_api_field_behavior, 0);\n\n/**\n * A designation of a specific field behavior (required, output only, etc.)\n * in protobuf messages.\n *\n * Examples:\n *\n *   string name = 1 [(google.api.field_behavior) = REQUIRED];\n *   State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY];\n *   google.protobuf.Duration ttl = 1\n *     [(google.api.field_behavior) = INPUT_ONLY];\n *   google.protobuf.Timestamp expire_time = 1\n *     [(google.api.field_behavior) = OUTPUT_ONLY,\n *      (google.api.field_behavior) = IMMUTABLE];\n *\n * @generated from extension: repeated google.api.FieldBehavior field_behavior = 1052 [packed = false];\n */\nexport const field_behavior: GenExtension<FieldOptions, FieldBehavior[]> = /*@__PURE__*/\n  extDesc(file_google_api_field_behavior, 0);\n\n","// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file thru/common/v1/consensus.proto (package thru.common.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { Timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/common/v1/consensus.proto.\n */\nexport const file_thru_common_v1_consensus: GenFile = /*@__PURE__*/\n  fileDesc(\"Ch50aHJ1L2NvbW1vbi92MS9jb25zZW5zdXMucHJvdG8SDnRocnUuY29tbW9uLnYxIooECg5WZXJzaW9uQ29udGV4dBI2CgdjdXJyZW50GAEgASgLMh4udGhydS5jb21tb24udjEuQ3VycmVudFZlcnNpb25CA+BBAUgAEk4KE2N1cnJlbnRPckhpc3RvcmljYWwYAiABKAsyKi50aHJ1LmNvbW1vbi52MS5DdXJyZW50T3JIaXN0b3JpY2FsVmVyc2lvbkID4EEBSAASEwoEc2xvdBgDIAEoBEID4EEBSAASNAoJdGltZXN0YW1wGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEBSAASMAoIc2xvdF9zZXEYBSABKAsyFy50aHJ1LmNvbW1vbi52MS5TbG90U2VxQgPgQQFIADrnAbpI4wEa4AEKHHZlcnNpb25fY29udGV4dF9oYXNfc2VsZWN0b3ISTW9uZSBvZiBjdXJyZW50LCBjdXJyZW50T3JIaXN0b3JpY2FsLCBzbG90LCB0aW1lc3RhbXAsIG9yIHNsb3Rfc2VxIG11c3QgYmUgc2V0GnFoYXModGhpcy5jdXJyZW50KSB8fCBoYXModGhpcy5jdXJyZW50T3JIaXN0b3JpY2FsKSB8fCBoYXModGhpcy5zbG90KSB8fCBoYXModGhpcy50aW1lc3RhbXApIHx8IGhhcyh0aGlzLnNsb3Rfc2VxKUIJCgd2ZXJzaW9uIhAKDkN1cnJlbnRWZXJzaW9uIhwKGkN1cnJlbnRPckhpc3RvcmljYWxWZXJzaW9uIi4KB1Nsb3RTZXESEQoEc2xvdBgBIAEoBEID4EECEhAKA3NlcRgCIAEoBEID4EECKt8BCg9Db25zZW5zdXNTdGF0dXMSIAocQ09OU0VOU1VTX1NUQVRVU19VTlNQRUNJRklFRBAAEh0KGUNPTlNFTlNVU19TVEFUVVNfT0JTRVJWRUQQARIdChlDT05TRU5TVVNfU1RBVFVTX0lOQ0xVREVEEAISHgoaQ09OU0VOU1VTX1NUQVRVU19GSU5BTElaRUQQAxIlCiFDT05TRU5TVVNfU1RBVFVTX0xPQ0FMTFlfRVhFQ1VURUQQBBIlCiFDT05TRU5TVVNfU1RBVFVTX0NMVVNURVJfRVhFQ1VURUQQBULKAQoSY29tLnRocnUuY29tbW9uLnYxQg5Db25zZW5zdXNQcm90b1ABWkRnaXRodWIuY29tL1VudG8tTGFicy90aHJ1LW5ldC9ncnBjL3BrZy9wcm90by90aHJ1L2NvbW1vbi92MTtjb21tb252MaICA1RDWKoCDlRocnUuQ29tbW9uLlYxugIDVEhVygIOVGhydVxDb21tb25cVjHiAhpUaHJ1XENvbW1vblxWMVxHUEJNZXRhZGF0YeoCEFRocnU6OkNvbW1vbjo6VjFiBnByb3RvMw\", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_timestamp]);\n\n/**\n * VersionContext selects which logical version of a resource should be\n * returned. At least one field must be set.\n *\n * @generated from message thru.common.v1.VersionContext\n */\nexport type VersionContext = Message<\"thru.common.v1.VersionContext\"> & {\n  /**\n   * Specifies the desired version semantics.\n   *\n   * @generated from oneof thru.common.v1.VersionContext.version\n   */\n  version: {\n    /**\n     * Request the latest version available at request time.\n     *\n     * @generated from field: thru.common.v1.CurrentVersion current = 1;\n     */\n    value: CurrentVersion;\n    case: \"current\";\n  } | {\n    /**\n     * Request the latest version, or historical on.\n     *\n     * @generated from field: thru.common.v1.CurrentOrHistoricalVersion currentOrHistorical = 2;\n     */\n    value: CurrentOrHistoricalVersion;\n    case: \"currentOrHistorical\";\n  } | {\n    /**\n     * Request the version for a specific slot number.\n     *\n     * @generated from field: uint64 slot = 3;\n     */\n    value: bigint;\n    case: \"slot\";\n  } | {\n    /**\n     * Request the version nearest to the provided block timestamp.\n     *\n     * @generated from field: google.protobuf.Timestamp timestamp = 4;\n     */\n    value: Timestamp;\n    case: \"timestamp\";\n  } | {\n    /**\n     * Request the account version written at an exact (slot, seq) point.\n     * Relevant only for GetAccount and GetRawAccount requests.\n     *\n     * @generated from field: thru.common.v1.SlotSeq slot_seq = 5;\n     */\n    value: SlotSeq;\n    case: \"slotSeq\";\n  } | { case: undefined; value?: undefined };\n};\n\n/**\n * Describes the message thru.common.v1.VersionContext.\n * Use `create(VersionContextSchema)` to create a new message.\n */\nexport const VersionContextSchema: GenMessage<VersionContext> = /*@__PURE__*/\n  messageDesc(file_thru_common_v1_consensus, 0);\n\n/**\n * CurrentVersion is an empty marker message for VersionContext.current.\n *\n * @generated from message thru.common.v1.CurrentVersion\n */\nexport type CurrentVersion = Message<\"thru.common.v1.CurrentVersion\"> & {\n};\n\n/**\n * Describes the message thru.common.v1.CurrentVersion.\n * Use `create(CurrentVersionSchema)` to create a new message.\n */\nexport const CurrentVersionSchema: GenMessage<CurrentVersion> = /*@__PURE__*/\n  messageDesc(file_thru_common_v1_consensus, 1);\n\n/**\n * CurrentOrHistoricalVersion is an empty marker message for VersionContext.current.\n *\n * @generated from message thru.common.v1.CurrentOrHistoricalVersion\n */\nexport type CurrentOrHistoricalVersion = Message<\"thru.common.v1.CurrentOrHistoricalVersion\"> & {\n};\n\n/**\n * Describes the message thru.common.v1.CurrentOrHistoricalVersion.\n * Use `create(CurrentOrHistoricalVersionSchema)` to create a new message.\n */\nexport const CurrentOrHistoricalVersionSchema: GenMessage<CurrentOrHistoricalVersion> = /*@__PURE__*/\n  messageDesc(file_thru_common_v1_consensus, 2);\n\n/**\n * SlotSeq identifies an exact account version: the row written in `slot`\n * carrying per-account sequence number `seq`.  A bare seq is not a version\n * key -- it restarts across account incarnations -- so it is only\n * meaningful scoped to a slot.\n *\n * @generated from message thru.common.v1.SlotSeq\n */\nexport type SlotSeq = Message<\"thru.common.v1.SlotSeq\"> & {\n  /**\n   * @generated from field: uint64 slot = 1;\n   */\n  slot: bigint;\n\n  /**\n   * @generated from field: uint64 seq = 2;\n   */\n  seq: bigint;\n};\n\n/**\n * Describes the message thru.common.v1.SlotSeq.\n * Use `create(SlotSeqSchema)` to create a new message.\n */\nexport const SlotSeqSchema: GenMessage<SlotSeq> = /*@__PURE__*/\n  messageDesc(file_thru_common_v1_consensus, 3);\n\n/**\n * ConsensusStatus represents the minimum consensus level a resource has\n * achieved when returned by the service.\n *\n * @generated from enum thru.common.v1.ConsensusStatus\n */\nexport enum ConsensusStatus {\n  /**\n   * CONSENSUS_STATUS_UNSPECIFIED indicates the consensus status is unknown.\n   *\n   * @generated from enum value: CONSENSUS_STATUS_UNSPECIFIED = 0;\n   */\n  UNSPECIFIED = 0,\n\n  /**\n   * CONSENSUS_STATUS_OBSERVED indicates the resource has been observed but\n   * not yet confirmed in a finalized block.\n   *\n   * @generated from enum value: CONSENSUS_STATUS_OBSERVED = 1;\n   */\n  OBSERVED = 1,\n\n  /**\n   * CONSENSUS_STATUS_INCLUDED indicates the resource has been included in the\n   * ledger but may not be finalized.\n   *\n   * @generated from enum value: CONSENSUS_STATUS_INCLUDED = 2;\n   */\n  INCLUDED = 2,\n\n  /**\n   * CONSENSUS_STATUS_FINALIZED indicates the resource is finalized for a slot.\n   *\n   * @generated from enum value: CONSENSUS_STATUS_FINALIZED = 3;\n   */\n  FINALIZED = 3,\n\n  /**\n   * CONSENSUS_STATUS_LOCALLY_EXECUTED indicates the local node executed the\n   * resource but broader cluster finality may not have been achieved.\n   *\n   * @generated from enum value: CONSENSUS_STATUS_LOCALLY_EXECUTED = 4;\n   */\n  LOCALLY_EXECUTED = 4,\n\n  /**\n   * CONSENSUS_STATUS_CLUSTER_EXECUTED indicates the entire cluster has\n   * executed and agreed on the resource.\n   *\n   * @generated from enum value: CONSENSUS_STATUS_CLUSTER_EXECUTED = 5;\n   */\n  CLUSTER_EXECUTED = 5,\n}\n\n/**\n * Describes the enum thru.common.v1.ConsensusStatus.\n */\nexport const ConsensusStatusSchema: GenEnum<ConsensusStatus> = /*@__PURE__*/\n  enumDesc(file_thru_common_v1_consensus, 0);\n\n","// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file thru/common/v1/errors.proto (package thru.common.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { Timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/common/v1/errors.proto.\n */\nexport const file_thru_common_v1_errors: GenFile = /*@__PURE__*/\n  fileDesc(\"Cht0aHJ1L2NvbW1vbi92MS9lcnJvcnMucHJvdG8SDnRocnUuY29tbW9uLnYxIq4CCgtFcnJvckRldGFpbBIyCgplcnJvcl90eXBlGAEgASgOMhkudGhydS5jb21tb24udjEuRXJyb3JUeXBlQgPgQQISHAoHbWVzc2FnZRgCIAEoCUIL4EECukgFcgMYgAgSKAoWcmV0ZW50aW9uX3dpbmRvd19zbG90cxgDIAEoBEID4EEBSACIAQESPgoQcmV0ZW50aW9uX2N1dG9mZhgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAUgBiAEBEiQKCmZpZWxkX25hbWUYBSABKAlCC+BBAbpIBXIDGIABSAKIAQFCGQoXX3JldGVudGlvbl93aW5kb3dfc2xvdHNCEwoRX3JldGVudGlvbl9jdXRvZmZCDQoLX2ZpZWxkX25hbWUq7QEKCUVycm9yVHlwZRIaChZFUlJPUl9UWVBFX1VOU1BFQ0lGSUVEEAASGAoURVJST1JfVFlQRV9OT1RfRk9VTkQQARIbChdFUlJPUl9UWVBFX05PVF9SRVRBSU5FRBACEigKJEVSUk9SX1RZUEVfTk9UX0ZPVU5EX09SX05PVF9SRVRBSU5FRBADEh4KGkVSUk9SX1RZUEVfSU5WQUxJRF9SRVFVRVNUEAQSJAogRVJST1JfVFlQRV9DRUxfVkFMSURBVElPTl9GQUlMRUQQBRIdChlFUlJPUl9UWVBFX0lOVEVSTkFMX0VSUk9SEAZCxwEKEmNvbS50aHJ1LmNvbW1vbi52MUILRXJyb3JzUHJvdG9QAVpEZ2l0aHViLmNvbS9VbnRvLUxhYnMvdGhydS1uZXQvZ3JwYy9wa2cvcHJvdG8vdGhydS9jb21tb24vdjE7Y29tbW9udjGiAgNUQ1iqAg5UaHJ1LkNvbW1vbi5WMboCA1RIVcoCDlRocnVcQ29tbW9uXFYx4gIaVGhydVxDb21tb25cVjFcR1BCTWV0YWRhdGHqAhBUaHJ1OjpDb21tb246OlYxYgZwcm90bzM\", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_timestamp]);\n\n/**\n * ErrorDetail provides structured error metadata attached to gRPC errors.\n *\n * @generated from message thru.common.v1.ErrorDetail\n */\nexport type ErrorDetail = Message<\"thru.common.v1.ErrorDetail\"> & {\n  /**\n   * High-level error category.\n   *\n   * @generated from field: thru.common.v1.ErrorType error_type = 1;\n   */\n  errorType: ErrorType;\n\n  /**\n   * Human-readable error summary.\n   *\n   * @generated from field: string message = 2;\n   */\n  message: string;\n\n  /**\n   * Optional retention window expressed in slots when applicable.\n   *\n   * @generated from field: optional uint64 retention_window_slots = 3;\n   */\n  retentionWindowSlots?: bigint | undefined;\n\n  /**\n   * Optional retention cutoff timestamp when applicable.\n   *\n   * @generated from field: optional google.protobuf.Timestamp retention_cutoff = 4;\n   */\n  retentionCutoff?: Timestamp | undefined;\n\n  /**\n   * Optional name of the field associated with the error.\n   *\n   * @generated from field: optional string field_name = 5;\n   */\n  fieldName?: string | undefined;\n};\n\n/**\n * Describes the message thru.common.v1.ErrorDetail.\n * Use `create(ErrorDetailSchema)` to create a new message.\n */\nexport const ErrorDetailSchema: GenMessage<ErrorDetail> = /*@__PURE__*/\n  messageDesc(file_thru_common_v1_errors, 0);\n\n/**\n * ErrorType captures structured error categories returned by the services.\n *\n * @generated from enum thru.common.v1.ErrorType\n */\nexport enum ErrorType {\n  /**\n   * ERROR_TYPE_UNSPECIFIED is an unknown error condition.\n   *\n   * @generated from enum value: ERROR_TYPE_UNSPECIFIED = 0;\n   */\n  UNSPECIFIED = 0,\n\n  /**\n   * ERROR_TYPE_NOT_FOUND indicates requested data does not exist.\n   *\n   * @generated from enum value: ERROR_TYPE_NOT_FOUND = 1;\n   */\n  NOT_FOUND = 1,\n\n  /**\n   * ERROR_TYPE_NOT_RETAINED indicates requested data was not retained under TTL.\n   *\n   * @generated from enum value: ERROR_TYPE_NOT_RETAINED = 2;\n   */\n  NOT_RETAINED = 2,\n\n  /**\n   * ERROR_TYPE_NOT_FOUND_OR_NOT_RETAINED indicates an ambiguous not found vs TTL case.\n   *\n   * @generated from enum value: ERROR_TYPE_NOT_FOUND_OR_NOT_RETAINED = 3;\n   */\n  NOT_FOUND_OR_NOT_RETAINED = 3,\n\n  /**\n   * ERROR_TYPE_INVALID_REQUEST indicates the request failed validation.\n   *\n   * @generated from enum value: ERROR_TYPE_INVALID_REQUEST = 4;\n   */\n  INVALID_REQUEST = 4,\n\n  /**\n   * ERROR_TYPE_CEL_VALIDATION_FAILED indicates a CEL filter failed validation.\n   *\n   * @generated from enum value: ERROR_TYPE_CEL_VALIDATION_FAILED = 5;\n   */\n  CEL_VALIDATION_FAILED = 5,\n\n  /**\n   * ERROR_TYPE_INTERNAL_ERROR indicates an internal server error occurred.\n   *\n   * @generated from enum value: ERROR_TYPE_INTERNAL_ERROR = 6;\n   */\n  INTERNAL_ERROR = 6,\n}\n\n/**\n * Describes the enum thru.common.v1.ErrorType.\n */\nexport const ErrorTypeSchema: GenEnum<ErrorType> = /*@__PURE__*/\n  enumDesc(file_thru_common_v1_errors, 0);\n\n","// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file thru/common/v1/primitives.proto (package thru.common.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/common/v1/primitives.proto.\n */\nexport const file_thru_common_v1_primitives: GenFile = /*@__PURE__*/\n  fileDesc(\"Ch90aHJ1L2NvbW1vbi92MS9wcmltaXRpdmVzLnByb3RvEg50aHJ1LmNvbW1vbi52MSIjCgZQdWJrZXkSGQoFdmFsdWUYASABKAxCCuBBArpIBHoCaCAiJgoJU2lnbmF0dXJlEhkKBXZhbHVlGAEgASgMQgrgQQK6SAR6AmhAIiYKCFRhUHVia2V5EhoKBXZhbHVlGAEgASgJQgvgQQK6SAVyA5gBLiIpCgtUc1NpZ25hdHVyZRIaCgV2YWx1ZRgBIAEoCUIL4EECukgFcgOYAVpCywEKEmNvbS50aHJ1LmNvbW1vbi52MUIPUHJpbWl0aXZlc1Byb3RvUAFaRGdpdGh1Yi5jb20vVW50by1MYWJzL3RocnUtbmV0L2dycGMvcGtnL3Byb3RvL3RocnUvY29tbW9uL3YxO2NvbW1vbnYxogIDVENYqgIOVGhydS5Db21tb24uVjG6AgNUSFXKAg5UaHJ1XENvbW1vblxWMeICGlRocnVcQ29tbW9uXFYxXEdQQk1ldGFkYXRh6gIQVGhydTo6Q29tbW9uOjpWMWIGcHJvdG8z\", [file_buf_validate_validate, file_google_api_field_behavior]);\n\n/**\n * Pubkey represents a 32-byte public key value.\n *\n * @generated from message thru.common.v1.Pubkey\n */\nexport type Pubkey = Message<\"thru.common.v1.Pubkey\"> & {\n  /**\n   * 32-byte public key buffer.\n   *\n   * @generated from field: bytes value = 1;\n   */\n  value: Uint8Array;\n};\n\n/**\n * Describes the message thru.common.v1.Pubkey.\n * Use `create(PubkeySchema)` to create a new message.\n */\nexport const PubkeySchema: GenMessage<Pubkey> = /*@__PURE__*/\n  messageDesc(file_thru_common_v1_primitives, 0);\n\n/**\n * Signature represents a 64-byte signature value.\n *\n * @generated from message thru.common.v1.Signature\n */\nexport type Signature = Message<\"thru.common.v1.Signature\"> & {\n  /**\n   * 64-byte signature buffer.\n   *\n   * @generated from field: bytes value = 1;\n   */\n  value: Uint8Array;\n};\n\n/**\n * Describes the message thru.common.v1.Signature.\n * Use `create(SignatureSchema)` to create a new message.\n */\nexport const SignatureSchema: GenMessage<Signature> = /*@__PURE__*/\n  messageDesc(file_thru_common_v1_primitives, 1);\n\n/**\n * TaPubkey represents a ta-encoded public key string (46 characters).\n *\n * @generated from message thru.common.v1.TaPubkey\n */\nexport type TaPubkey = Message<\"thru.common.v1.TaPubkey\"> & {\n  /**\n   * 46-character ta-encoded public key string.\n   *\n   * @generated from field: string value = 1;\n   */\n  value: string;\n};\n\n/**\n * Describes the message thru.common.v1.TaPubkey.\n * Use `create(TaPubkeySchema)` to create a new message.\n */\nexport const TaPubkeySchema: GenMessage<TaPubkey> = /*@__PURE__*/\n  messageDesc(file_thru_common_v1_primitives, 2);\n\n/**\n * TsSignature represents a ts-encoded signature string (90 characters).\n *\n * @generated from message thru.common.v1.TsSignature\n */\nexport type TsSignature = Message<\"thru.common.v1.TsSignature\"> & {\n  /**\n   * 90-character ts-encoded signature string.\n   *\n   * @generated from field: string value = 1;\n   */\n  value: string;\n};\n\n/**\n * Describes the message thru.common.v1.TsSignature.\n * Use `create(TsSignatureSchema)` to create a new message.\n */\nexport const TsSignatureSchema: GenMessage<TsSignature> = /*@__PURE__*/\n  messageDesc(file_thru_common_v1_primitives, 3);\n\n","// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file thru/common/v1/filters.proto (package thru.common.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { Pubkey, Signature, TaPubkey, TsSignature } from \"./primitives_pb\";\nimport { file_thru_common_v1_primitives } from \"./primitives_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/common/v1/filters.proto.\n */\nexport const file_thru_common_v1_filters: GenFile = /*@__PURE__*/\n  fileDesc(\"Chx0aHJ1L2NvbW1vbi92MS9maWx0ZXJzLnByb3RvEg50aHJ1LmNvbW1vbi52MSLHAQoGRmlsdGVyEiQKCmV4cHJlc3Npb24YASABKAlCC+BBAbpIBXIDGIAgSACIAQESNwoGcGFyYW1zGAIgAygLMiIudGhydS5jb21tb24udjEuRmlsdGVyLlBhcmFtc0VudHJ5QgPgQQEaTwoLUGFyYW1zRW50cnkSCwoDa2V5GAEgASgJEi8KBXZhbHVlGAIgASgLMiAudGhydS5jb21tb24udjEuRmlsdGVyUGFyYW1WYWx1ZToCOAFCDQoLX2V4cHJlc3Npb24ipAQKEEZpbHRlclBhcmFtVmFsdWUSGwoMc3RyaW5nX3ZhbHVlGAEgASgJQgPgQQFIABIaCgtieXRlc192YWx1ZRgCIAEoDEID4EEBSAASGQoKYm9vbF92YWx1ZRgDIAEoCEID4EEBSAASGAoJaW50X3ZhbHVlGAQgASgSQgPgQQFIABIZCgp1aW50X3ZhbHVlGAUgASgEQgPgQQFIABIbCgxkb3VibGVfdmFsdWUYBiABKAFCA+BBAUgAEjMKDHB1YmtleV92YWx1ZRgHIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EEBSAASOQoPc2lnbmF0dXJlX3ZhbHVlGAggASgLMhkudGhydS5jb21tb24udjEuU2lnbmF0dXJlQgPgQQFIABI4Cg90YV9wdWJrZXlfdmFsdWUYCSABKAsyGC50aHJ1LmNvbW1vbi52MS5UYVB1YmtleUID4EEBSAASPgoSdHNfc2lnbmF0dXJlX3ZhbHVlGAogASgLMhsudGhydS5jb21tb24udjEuVHNTaWduYXR1cmVCA+BBAUgAEjoKEGJ5dGVzX2xpc3RfdmFsdWUYCyABKAsyGS50aHJ1LmNvbW1vbi52MS5CeXRlc0xpc3RCA+BBAUgAEjwKEXB1YmtleV9saXN0X3ZhbHVlGAwgASgLMhoudGhydS5jb21tb24udjEuUHVia2V5TGlzdEID4EEBSABCBgoEa2luZCIgCglCeXRlc0xpc3QSEwoGdmFsdWVzGAEgAygMQgPgQQEiOQoKUHVia2V5TGlzdBIrCgZ2YWx1ZXMYASADKAsyFi50aHJ1LmNvbW1vbi52MS5QdWJrZXlCA+BBASKhAQoTQ2VsRmlsdGVyVmFsaWRhdGlvbhInChFhbGxvd2VkX2Z1bmN0aW9ucxgBIAMoCUIM4EEBukgGkgEDEIABEiQKDmFsbG93ZWRfZmllbGRzGAIgAygJQgzgQQG6SAaSAQMQgAISKAoObWF4X2NvbXBsZXhpdHkYAyABKA1CC+BBAbpIBSoDGOgHSACIAQFCEQoPX21heF9jb21wbGV4aXR5QsgBChJjb20udGhydS5jb21tb24udjFCDEZpbHRlcnNQcm90b1ABWkRnaXRodWIuY29tL1VudG8tTGFicy90aHJ1LW5ldC9ncnBjL3BrZy9wcm90by90aHJ1L2NvbW1vbi92MTtjb21tb252MaICA1RDWKoCDlRocnUuQ29tbW9uLlYxugIDVEhVygIOVGhydVxDb21tb25cVjHiAhpUaHJ1XENvbW1vblxWMVxHUEJNZXRhZGF0YeoCEFRocnU6OkNvbW1vbjo6VjFiBnByb3RvMw\", [file_buf_validate_validate, file_google_api_field_behavior, file_thru_common_v1_primitives]);\n\n/**\n * Filter represents a CEL-based expression applied to query or stream results.\n *\n * @generated from message thru.common.v1.Filter\n */\nexport type Filter = Message<\"thru.common.v1.Filter\"> & {\n  /**\n   * CEL expression applied server-side. Empty expressions are treated as no-op.\n   *\n   * @generated from field: optional string expression = 1;\n   */\n  expression?: string | undefined;\n\n  /**\n   * Named parameter bindings for expression parameterization.\n   *\n   * @generated from field: map<string, thru.common.v1.FilterParamValue> params = 2;\n   */\n  params: { [key: string]: FilterParamValue };\n};\n\n/**\n * Describes the message thru.common.v1.Filter.\n * Use `create(FilterSchema)` to create a new message.\n */\nexport const FilterSchema: GenMessage<Filter> = /*@__PURE__*/\n  messageDesc(file_thru_common_v1_filters, 0);\n\n/**\n * FilterParamValue carries strongly-typed CEL parameter bindings.\n *\n * @generated from message thru.common.v1.FilterParamValue\n */\nexport type FilterParamValue = Message<\"thru.common.v1.FilterParamValue\"> & {\n  /**\n   * @generated from oneof thru.common.v1.FilterParamValue.kind\n   */\n  kind: {\n    /**\n     * @generated from field: string string_value = 1;\n     */\n    value: string;\n    case: \"stringValue\";\n  } | {\n    /**\n     * @generated from field: bytes bytes_value = 2;\n     */\n    value: Uint8Array;\n    case: \"bytesValue\";\n  } | {\n    /**\n     * @generated from field: bool bool_value = 3;\n     */\n    value: boolean;\n    case: \"boolValue\";\n  } | {\n    /**\n     * @generated from field: sint64 int_value = 4;\n     */\n    value: bigint;\n    case: \"intValue\";\n  } | {\n    /**\n     * @generated from field: uint64 uint_value = 5;\n     */\n    value: bigint;\n    case: \"uintValue\";\n  } | {\n    /**\n     * @generated from field: double double_value = 6;\n     */\n    value: number;\n    case: \"doubleValue\";\n  } | {\n    /**\n     * @generated from field: thru.common.v1.Pubkey pubkey_value = 7;\n     */\n    value: Pubkey;\n    case: \"pubkeyValue\";\n  } | {\n    /**\n     * @generated from field: thru.common.v1.Signature signature_value = 8;\n     */\n    value: Signature;\n    case: \"signatureValue\";\n  } | {\n    /**\n     * @generated from field: thru.common.v1.TaPubkey ta_pubkey_value = 9;\n     */\n    value: TaPubkey;\n    case: \"taPubkeyValue\";\n  } | {\n    /**\n     * @generated from field: thru.common.v1.TsSignature ts_signature_value = 10;\n     */\n    value: TsSignature;\n    case: \"tsSignatureValue\";\n  } | {\n    /**\n     * @generated from field: thru.common.v1.BytesList bytes_list_value = 11;\n     */\n    value: BytesList;\n    case: \"bytesListValue\";\n  } | {\n    /**\n     * @generated from field: thru.common.v1.PubkeyList pubkey_list_value = 12;\n     */\n    value: PubkeyList;\n    case: \"pubkeyListValue\";\n  } | { case: undefined; value?: undefined };\n};\n\n/**\n * Describes the message thru.common.v1.FilterParamValue.\n * Use `create(FilterParamValueSchema)` to create a new message.\n */\nexport const FilterParamValueSchema: GenMessage<FilterParamValue> = /*@__PURE__*/\n  messageDesc(file_thru_common_v1_filters, 1);\n\n/**\n * BytesList holds a list of byte arrays for multi-value CEL filtering.\n *\n * @generated from message thru.common.v1.BytesList\n */\nexport type BytesList = Message<\"thru.common.v1.BytesList\"> & {\n  /**\n   * @generated from field: repeated bytes values = 1;\n   */\n  values: Uint8Array[];\n};\n\n/**\n * Describes the message thru.common.v1.BytesList.\n * Use `create(BytesListSchema)` to create a new message.\n */\nexport const BytesListSchema: GenMessage<BytesList> = /*@__PURE__*/\n  messageDesc(file_thru_common_v1_filters, 2);\n\n/**\n * PubkeyList holds a list of pubkeys for multi-value CEL filtering.\n *\n * @generated from message thru.common.v1.PubkeyList\n */\nexport type PubkeyList = Message<\"thru.common.v1.PubkeyList\"> & {\n  /**\n   * @generated from field: repeated thru.common.v1.Pubkey values = 1;\n   */\n  values: Pubkey[];\n};\n\n/**\n * Describes the message thru.common.v1.PubkeyList.\n * Use `create(PubkeyListSchema)` to create a new message.\n */\nexport const PubkeyListSchema: GenMessage<PubkeyList> = /*@__PURE__*/\n  messageDesc(file_thru_common_v1_filters, 3);\n\n/**\n * CelFilterValidation describes the validation configuration returned to\n * clients to help them build safe filter expressions.\n *\n * @generated from message thru.common.v1.CelFilterValidation\n */\nexport type CelFilterValidation = Message<\"thru.common.v1.CelFilterValidation\"> & {\n  /**\n   * List of allowed CEL function names for a specific request type.\n   *\n   * @generated from field: repeated string allowed_functions = 1;\n   */\n  allowedFunctions: string[];\n\n  /**\n   * List of allowed field names accessible to the CEL expression.\n   *\n   * @generated from field: repeated string allowed_fields = 2;\n   */\n  allowedFields: string[];\n\n  /**\n   * Maximum AST node count permitted for a CEL expression.\n   *\n   * @generated from field: optional uint32 max_complexity = 3;\n   */\n  maxComplexity?: number | undefined;\n};\n\n/**\n * Describes the message thru.common.v1.CelFilterValidation.\n * Use `create(CelFilterValidationSchema)` to create a new message.\n */\nexport const CelFilterValidationSchema: GenMessage<CelFilterValidation> = /*@__PURE__*/\n  messageDesc(file_thru_common_v1_filters, 4);\n\n","// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file thru/common/v1/pagination.proto (package thru.common.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/common/v1/pagination.proto.\n */\nexport const file_thru_common_v1_pagination: GenFile = /*@__PURE__*/\n  fileDesc(\"Ch90aHJ1L2NvbW1vbi92MS9wYWdpbmF0aW9uLnByb3RvEg50aHJ1LmNvbW1vbi52MSKoAQoLUGFnZVJlcXVlc3QSJQoJcGFnZV9zaXplGAEgASgNQg3gQQG6SAcqBRjoBygBSACIAQESJAoKcGFnZV90b2tlbhgCIAEoCUIL4EEBukgFcgMYgARIAYgBARIiCghvcmRlcl9ieRgDIAEoCUIL4EEBukgFcgMYgAJIAogBAUIMCgpfcGFnZV9zaXplQg0KC19wYWdlX3Rva2VuQgsKCV9vcmRlcl9ieSJyCgxQYWdlUmVzcG9uc2USIQoPbmV4dF9wYWdlX3Rva2VuGAEgASgJQgPgQQFIAIgBARIcCgp0b3RhbF9zaXplGAIgASgEQgPgQQFIAYgBAUISChBfbmV4dF9wYWdlX3Rva2VuQg0KC190b3RhbF9zaXplQssBChJjb20udGhydS5jb21tb24udjFCD1BhZ2luYXRpb25Qcm90b1ABWkRnaXRodWIuY29tL1VudG8tTGFicy90aHJ1LW5ldC9ncnBjL3BrZy9wcm90by90aHJ1L2NvbW1vbi92MTtjb21tb252MaICA1RDWKoCDlRocnUuQ29tbW9uLlYxugIDVEhVygIOVGhydVxDb21tb25cVjHiAhpUaHJ1XENvbW1vblxWMVxHUEJNZXRhZGF0YeoCEFRocnU6OkNvbW1vbjo6VjFiBnByb3RvMw\", [file_buf_validate_validate, file_google_api_field_behavior]);\n\n/**\n * PageRequest contains pagination parameters for listing RPCs.\n *\n * @generated from message thru.common.v1.PageRequest\n */\nexport type PageRequest = Message<\"thru.common.v1.PageRequest\"> & {\n  /**\n   * Maximum number of items to return in a single response.\n   *\n   * @generated from field: optional uint32 page_size = 1;\n   */\n  pageSize?: number | undefined;\n\n  /**\n   * Token identifying the position to resume from.\n   *\n   * @generated from field: optional string page_token = 2;\n   */\n  pageToken?: string | undefined;\n\n  /**\n   * Optional ordering specification in \"field [asc|desc]\" form.\n   *\n   * @generated from field: optional string order_by = 3;\n   */\n  orderBy?: string | undefined;\n};\n\n/**\n * Describes the message thru.common.v1.PageRequest.\n * Use `create(PageRequestSchema)` to create a new message.\n */\nexport const PageRequestSchema: GenMessage<PageRequest> = /*@__PURE__*/\n  messageDesc(file_thru_common_v1_pagination, 0);\n\n/**\n * PageResponse captures pagination metadata returned with list results.\n *\n * @generated from message thru.common.v1.PageResponse\n */\nexport type PageResponse = Message<\"thru.common.v1.PageResponse\"> & {\n  /**\n   * Token to retrieve the next page of results, if any.\n   *\n   * @generated from field: optional string next_page_token = 1;\n   */\n  nextPageToken?: string | undefined;\n\n  /**\n   * Total number of items available when known.\n   *\n   * @generated from field: optional uint64 total_size = 2;\n   */\n  totalSize?: bigint | undefined;\n};\n\n/**\n * Describes the message thru.common.v1.PageResponse.\n * Use `create(PageResponseSchema)` to create a new message.\n */\nexport const PageResponseSchema: GenMessage<PageResponse> = /*@__PURE__*/\n  messageDesc(file_thru_common_v1_pagination, 1);\n\n","// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file thru/core/v1/types.proto (package thru.core.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport { file_thru_common_v1_primitives } from \"../../common/v1/primitives_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/core/v1/types.proto.\n */\nexport const file_thru_core_v1_types: GenFile = /*@__PURE__*/\n  fileDesc(\"Chh0aHJ1L2NvcmUvdjEvdHlwZXMucHJvdG8SDHRocnUuY29yZS52MSIhCgRIYXNoEhkKBXZhbHVlGAEgASgMQgrgQQK6SAR6AmggIiYKCUJsb2NrSGFzaBIZCgV2YWx1ZRgBIAEoDEIK4EECukgEegJoIEK5AQoQY29tLnRocnUuY29yZS52MUIKVHlwZXNQcm90b1ABWkBnaXRodWIuY29tL1VudG8tTGFicy90aHJ1LW5ldC9ncnBjL3BrZy9wcm90by90aHJ1L2NvcmUvdjE7Y29yZXYxogIDVENYqgIMVGhydS5Db3JlLlYxugIEVEhVQ8oCDFRocnVcQ29yZVxWMeICGFRocnVcQ29yZVxWMVxHUEJNZXRhZGF0YeoCDlRocnU6OkNvcmU6OlYxYgZwcm90bzM\", [file_buf_validate_validate, file_google_api_field_behavior, file_thru_common_v1_primitives]);\n\n/**\n * Hash represents a 32-byte hash value.\n *\n * @generated from message thru.core.v1.Hash\n */\nexport type Hash = Message<\"thru.core.v1.Hash\"> & {\n  /**\n   * 32-byte hash buffer.\n   *\n   * @generated from field: bytes value = 1;\n   */\n  value: Uint8Array;\n};\n\n/**\n * Describes the message thru.core.v1.Hash.\n * Use `create(HashSchema)` to create a new message.\n */\nexport const HashSchema: GenMessage<Hash> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_types, 0);\n\n/**\n * BlockHash represents a 32-byte hash for block identifiers.\n *\n * @generated from message thru.core.v1.BlockHash\n */\nexport type BlockHash = Message<\"thru.core.v1.BlockHash\"> & {\n  /**\n   * 32-byte block hash buffer.\n   *\n   * @generated from field: bytes value = 1;\n   */\n  value: Uint8Array;\n};\n\n/**\n * Describes the message thru.core.v1.BlockHash.\n * Use `create(BlockHashSchema)` to create a new message.\n */\nexport const BlockHashSchema: GenMessage<BlockHash> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_types, 1);\n\n","// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file thru/core/v1/account.proto (package thru.core.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { Timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { ConsensusStatus } from \"../../common/v1/consensus_pb\";\nimport { file_thru_common_v1_consensus } from \"../../common/v1/consensus_pb\";\nimport type { Pubkey } from \"../../common/v1/primitives_pb\";\nimport { file_thru_common_v1_primitives } from \"../../common/v1/primitives_pb\";\nimport { file_thru_core_v1_types } from \"./types_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/core/v1/account.proto.\n */\nexport const file_thru_core_v1_account: GenFile = /*@__PURE__*/\n  fileDesc(\"Chp0aHJ1L2NvcmUvdjEvYWNjb3VudC5wcm90bxIMdGhydS5jb3JlLnYxIsgBCgxBY2NvdW50RmxhZ3MSFwoKaXNfcHJvZ3JhbRgBIAEoCEID4EECEhoKDWlzX3ByaXZpbGVnZWQYAiABKAhCA+BBAhIeChFpc191bmNvbXByZXNzYWJsZRgDIAEoCEID4EECEhkKDGlzX2VwaGVtZXJhbBgEIAEoCEID4EECEhcKCmlzX2RlbGV0ZWQYBSABKAhCA+BBAhITCgZpc19uZXcYBiABKAhCA+BBAhIaCg1pc19jb21wcmVzc2VkGAcgASgIQgPgQQIilQIKC0FjY291bnRNZXRhEhsKB3ZlcnNpb24YASABKA1CCuBBArpIBCoCKAESLgoFZmxhZ3MYAiABKAsyGi50aHJ1LmNvcmUudjEuQWNjb3VudEZsYWdzQgPgQQISFgoJZGF0YV9zaXplGAMgASgNQgPgQQISEAoDc2VxGAQgASgEQgPgQQISKgoFb3duZXIYBSABKAsyFi50aHJ1LmNvbW1vbi52MS5QdWJrZXlCA+BBAhIUCgdiYWxhbmNlGAYgASgEQgPgQQISEgoFbm9uY2UYByABKARCA+BBAhIjChFsYXN0X3VwZGF0ZWRfc2xvdBgIIAEoBEID4EEBSACIAQFCFAoSX2xhc3RfdXBkYXRlZF9zbG90Iq8BCgtBY2NvdW50RGF0YRIgCgRkYXRhGAEgASgMQg3gQQG6SAd6BRiAgIAISACIAQESHAoKY29tcHJlc3NlZBgCIAEoCEID4EEBSAGIAQESLgoVY29tcHJlc3Npb25fYWxnb3JpdGhtGAMgASgJQgrgQQG6SARyAhhASAKIAQFCBwoFX2RhdGFCDQoLX2NvbXByZXNzZWRCGAoWX2NvbXByZXNzaW9uX2FsZ29yaXRobSJJCglEYXRhU2xpY2USHQoGb2Zmc2V0GAEgASgNQg3gQQK6SAcyBRiAgIAIEh0KBmxlbmd0aBgCIAEoDUIN4EECukgHMgUYgICACCLbAQoLQWNjb3VudFBhZ2USFQoIcGFnZV9pZHgYASABKA1CA+BBAhIeCglwYWdlX3NpemUYAiABKA1CC+BBArpIBSoDGIAgEh4KCXBhZ2VfZGF0YRgDIAEoDEIL4EECukgFegMYgCASHAoKY29tcHJlc3NlZBgEIAEoCEID4EEBSACIAQESLgoVY29tcHJlc3Npb25fYWxnb3JpdGhtGAUgASgJQgrgQQG6SARyAhhASAGIAQFCDQoLX2NvbXByZXNzZWRCGAoWX2NvbXByZXNzaW9uX2FsZ29yaXRobSLcAQoWVmVyc2lvbkNvbnRleHRNZXRhZGF0YRIWCgRzbG90GAEgASgEQgPgQQFIAIgBARI9Cg9ibG9ja190aW1lc3RhbXAYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQFIAYgBARIVCgNzZXEYAyABKARCA+BBAUgCiAEBEh4KDGJsb2NrX29mZnNldBgEIAEoDUID4EEBSAOIAQFCBwoFX3Nsb3RCEgoQX2Jsb2NrX3RpbWVzdGFtcEIGCgRfc2VxQg8KDV9ibG9ja19vZmZzZXQi5gIKB0FjY291bnQSLAoHYWRkcmVzcxgBIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEjEKBG1ldGEYAiABKAsyGS50aHJ1LmNvcmUudjEuQWNjb3VudE1ldGFCA+BBAUgAiAEBEjEKBGRhdGEYAyABKAsyGS50aHJ1LmNvcmUudjEuQWNjb3VudERhdGFCA+BBAUgBiAEBEkcKD3ZlcnNpb25fY29udGV4dBgEIAEoCzIkLnRocnUuY29yZS52MS5WZXJzaW9uQ29udGV4dE1ldGFkYXRhQgPgQQFIAogBARJDChBjb25zZW5zdXNfc3RhdHVzGAUgASgOMh8udGhydS5jb21tb24udjEuQ29uc2Vuc3VzU3RhdHVzQgPgQQFIA4gBAUIHCgVfbWV0YUIHCgVfZGF0YUISChBfdmVyc2lvbl9jb250ZXh0QhMKEV9jb25zZW5zdXNfc3RhdHVzIukBCgpSYXdBY2NvdW50EiwKB2FkZHJlc3MYASABKAsyFi50aHJ1LmNvbW1vbi52MS5QdWJrZXlCA+BBAhIdCghyYXdfbWV0YRgCIAEoDEIL4EECukgFegMYgCASJAoIcmF3X2RhdGEYAyABKAxCDeBBAbpIB3oFGICAgAhIAIgBARJHCg92ZXJzaW9uX2NvbnRleHQYBCABKAsyJC50aHJ1LmNvcmUudjEuVmVyc2lvbkNvbnRleHRNZXRhZGF0YUID4EEBSAGIAQFCCwoJX3Jhd19kYXRhQhIKEF92ZXJzaW9uX2NvbnRleHQqmAEKC0FjY291bnRWaWV3EhwKGEFDQ09VTlRfVklFV19VTlNQRUNJRklFRBAAEhwKGEFDQ09VTlRfVklFV19QVUJLRVlfT05MWRABEhoKFkFDQ09VTlRfVklFV19NRVRBX09OTFkQAhIaChZBQ0NPVU5UX1ZJRVdfREFUQV9PTkxZEAMSFQoRQUNDT1VOVF9WSUVXX0ZVTEwQBEK7AQoQY29tLnRocnUuY29yZS52MUIMQWNjb3VudFByb3RvUAFaQGdpdGh1Yi5jb20vVW50by1MYWJzL3RocnUtbmV0L2dycGMvcGtnL3Byb3RvL3RocnUvY29yZS92MTtjb3JldjGiAgNUQ1iqAgxUaHJ1LkNvcmUuVjG6AgRUSFVDygIMVGhydVxDb3JlXFYx4gIYVGhydVxDb3JlXFYxXEdQQk1ldGFkYXRh6gIOVGhydTo6Q29yZTo6VjFiBnByb3RvMw\", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_timestamp, file_thru_common_v1_consensus, file_thru_common_v1_primitives, file_thru_core_v1_types]);\n\n/**\n * AccountFlags enumerates boolean account capability flags.\n *\n * @generated from message thru.core.v1.AccountFlags\n */\nexport type AccountFlags = Message<\"thru.core.v1.AccountFlags\"> & {\n  /**\n   * @generated from field: bool is_program = 1;\n   */\n  isProgram: boolean;\n\n  /**\n   * @generated from field: bool is_privileged = 2;\n   */\n  isPrivileged: boolean;\n\n  /**\n   * @generated from field: bool is_uncompressable = 3;\n   */\n  isUncompressable: boolean;\n\n  /**\n   * @generated from field: bool is_ephemeral = 4;\n   */\n  isEphemeral: boolean;\n\n  /**\n   * @generated from field: bool is_deleted = 5;\n   */\n  isDeleted: boolean;\n\n  /**\n   * @generated from field: bool is_new = 6;\n   */\n  isNew: boolean;\n\n  /**\n   * @generated from field: bool is_compressed = 7;\n   */\n  isCompressed: boolean;\n};\n\n/**\n * Describes the message thru.core.v1.AccountFlags.\n * Use `create(AccountFlagsSchema)` to create a new message.\n */\nexport const AccountFlagsSchema: GenMessage<AccountFlags> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_account, 0);\n\n/**\n * AccountMeta captures metadata associated with an account.\n *\n * @generated from message thru.core.v1.AccountMeta\n */\nexport type AccountMeta = Message<\"thru.core.v1.AccountMeta\"> & {\n  /**\n   * @generated from field: uint32 version = 1;\n   */\n  version: number;\n\n  /**\n   * @generated from field: thru.core.v1.AccountFlags flags = 2;\n   */\n  flags?: AccountFlags | undefined;\n\n  /**\n   * @generated from field: uint32 data_size = 3;\n   */\n  dataSize: number;\n\n  /**\n   * Account sequence number\n   *\n   * @generated from field: uint64 seq = 4;\n   */\n  seq: bigint;\n\n  /**\n   * @generated from field: thru.common.v1.Pubkey owner = 5;\n   */\n  owner?: Pubkey | undefined;\n\n  /**\n   * @generated from field: uint64 balance = 6;\n   */\n  balance: bigint;\n\n  /**\n   * @generated from field: uint64 nonce = 7;\n   */\n  nonce: bigint;\n\n  /**\n   * The slot in which this account was last updated.\n   *\n   * @generated from field: optional uint64 last_updated_slot = 8;\n   */\n  lastUpdatedSlot?: bigint | undefined;\n};\n\n/**\n * Describes the message thru.core.v1.AccountMeta.\n * Use `create(AccountMetaSchema)` to create a new message.\n */\nexport const AccountMetaSchema: GenMessage<AccountMeta> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_account, 1);\n\n/**\n * AccountData contains account data payloads.\n *\n * @generated from message thru.core.v1.AccountData\n */\nexport type AccountData = Message<\"thru.core.v1.AccountData\"> & {\n  /**\n   * @generated from field: optional bytes data = 1;\n   */\n  data?: Uint8Array | undefined;\n\n  /**\n   * @generated from field: optional bool compressed = 2;\n   */\n  compressed?: boolean | undefined;\n\n  /**\n   * @generated from field: optional string compression_algorithm = 3;\n   */\n  compressionAlgorithm?: string | undefined;\n};\n\n/**\n * Describes the message thru.core.v1.AccountData.\n * Use `create(AccountDataSchema)` to create a new message.\n */\nexport const AccountDataSchema: GenMessage<AccountData> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_account, 2);\n\n/**\n * DataSlice describes a contiguous range of account data to return.\n *\n * @generated from message thru.core.v1.DataSlice\n */\nexport type DataSlice = Message<\"thru.core.v1.DataSlice\"> & {\n  /**\n   * @generated from field: uint32 offset = 1;\n   */\n  offset: number;\n\n  /**\n   * @generated from field: uint32 length = 2;\n   */\n  length: number;\n};\n\n/**\n * Describes the message thru.core.v1.DataSlice.\n * Use `create(DataSliceSchema)` to create a new message.\n */\nexport const DataSliceSchema: GenMessage<DataSlice> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_account, 3);\n\n/**\n * AccountPage represents a 4KB chunk for streaming account data.\n *\n * @generated from message thru.core.v1.AccountPage\n */\nexport type AccountPage = Message<\"thru.core.v1.AccountPage\"> & {\n  /**\n   * @generated from field: uint32 page_idx = 1;\n   */\n  pageIdx: number;\n\n  /**\n   * @generated from field: uint32 page_size = 2;\n   */\n  pageSize: number;\n\n  /**\n   * @generated from field: bytes page_data = 3;\n   */\n  pageData: Uint8Array;\n\n  /**\n   * @generated from field: optional bool compressed = 4;\n   */\n  compressed?: boolean | undefined;\n\n  /**\n   * @generated from field: optional string compression_algorithm = 5;\n   */\n  compressionAlgorithm?: string | undefined;\n};\n\n/**\n * Describes the message thru.core.v1.AccountPage.\n * Use `create(AccountPageSchema)` to create a new message.\n */\nexport const AccountPageSchema: GenMessage<AccountPage> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_account, 4);\n\n/**\n * VersionContextMetadata captures context for a returned account state.\n *\n * @generated from message thru.core.v1.VersionContextMetadata\n */\nexport type VersionContextMetadata = Message<\"thru.core.v1.VersionContextMetadata\"> & {\n  /**\n   * @generated from field: optional uint64 slot = 1;\n   */\n  slot?: bigint | undefined;\n\n  /**\n   * @generated from field: optional google.protobuf.Timestamp block_timestamp = 2;\n   */\n  blockTimestamp?: Timestamp | undefined;\n\n  /**\n   * Per-account sequence number of the returned version.\n   *\n   * @generated from field: optional uint64 seq = 3;\n   */\n  seq?: bigint | undefined;\n\n  /**\n   * Block offset of the transaction that wrote the returned version.\n   *\n   * @generated from field: optional uint32 block_offset = 4;\n   */\n  blockOffset?: number | undefined;\n};\n\n/**\n * Describes the message thru.core.v1.VersionContextMetadata.\n * Use `create(VersionContextMetadataSchema)` to create a new message.\n */\nexport const VersionContextMetadataSchema: GenMessage<VersionContextMetadata> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_account, 5);\n\n/**\n * Account models a fully decoded account resource.\n *\n * @generated from message thru.core.v1.Account\n */\nexport type Account = Message<\"thru.core.v1.Account\"> & {\n  /**\n   * @generated from field: thru.common.v1.Pubkey address = 1;\n   */\n  address?: Pubkey | undefined;\n\n  /**\n   * @generated from field: optional thru.core.v1.AccountMeta meta = 2;\n   */\n  meta?: AccountMeta | undefined;\n\n  /**\n   * @generated from field: optional thru.core.v1.AccountData data = 3;\n   */\n  data?: AccountData | undefined;\n\n  /**\n   * @generated from field: optional thru.core.v1.VersionContextMetadata version_context = 4;\n   */\n  versionContext?: VersionContextMetadata | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.ConsensusStatus consensus_status = 5;\n   */\n  consensusStatus?: ConsensusStatus | undefined;\n};\n\n/**\n * Describes the message thru.core.v1.Account.\n * Use `create(AccountSchema)` to create a new message.\n */\nexport const AccountSchema: GenMessage<Account> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_account, 6);\n\n/**\n * RawAccount captures raw serialized account bytes.\n *\n * @generated from message thru.core.v1.RawAccount\n */\nexport type RawAccount = Message<\"thru.core.v1.RawAccount\"> & {\n  /**\n   * @generated from field: thru.common.v1.Pubkey address = 1;\n   */\n  address?: Pubkey | undefined;\n\n  /**\n   * @generated from field: bytes raw_meta = 2;\n   */\n  rawMeta: Uint8Array;\n\n  /**\n   * @generated from field: optional bytes raw_data = 3;\n   */\n  rawData?: Uint8Array | undefined;\n\n  /**\n   * @generated from field: optional thru.core.v1.VersionContextMetadata version_context = 4;\n   */\n  versionContext?: VersionContextMetadata | undefined;\n};\n\n/**\n * Describes the message thru.core.v1.RawAccount.\n * Use `create(RawAccountSchema)` to create a new message.\n */\nexport const RawAccountSchema: GenMessage<RawAccount> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_account, 7);\n\n/**\n * AccountView controls which sections of account resources are returned.\n *\n * @generated from enum thru.core.v1.AccountView\n */\nexport enum AccountView {\n  /**\n   * ACCOUNT_VIEW_UNSPECIFIED uses service defaults.\n   *\n   * @generated from enum value: ACCOUNT_VIEW_UNSPECIFIED = 0;\n   */\n  UNSPECIFIED = 0,\n\n  /**\n   * ACCOUNT_VIEW_PUBKEY_ONLY returns only the account address.\n   *\n   * @generated from enum value: ACCOUNT_VIEW_PUBKEY_ONLY = 1;\n   */\n  PUBKEY_ONLY = 1,\n\n  /**\n   * ACCOUNT_VIEW_META_ONLY returns only account metadata.\n   *\n   * @generated from enum value: ACCOUNT_VIEW_META_ONLY = 2;\n   */\n  META_ONLY = 2,\n\n  /**\n   * ACCOUNT_VIEW_DATA_ONLY returns only account data.\n   *\n   * @generated from enum value: ACCOUNT_VIEW_DATA_ONLY = 3;\n   */\n  DATA_ONLY = 3,\n\n  /**\n   * ACCOUNT_VIEW_FULL returns address, metadata, and data.\n   *\n   * @generated from enum value: ACCOUNT_VIEW_FULL = 4;\n   */\n  FULL = 4,\n}\n\n/**\n * Describes the enum thru.core.v1.AccountView.\n */\nexport const AccountViewSchema: GenEnum<AccountView> = /*@__PURE__*/\n  enumDesc(file_thru_core_v1_account, 0);\n\n","// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file thru/core/v1/block.proto (package thru.core.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { Timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { Pubkey, Signature } from \"../../common/v1/primitives_pb\";\nimport { file_thru_common_v1_primitives } from \"../../common/v1/primitives_pb\";\nimport type { ConsensusStatus } from \"../../common/v1/consensus_pb\";\nimport { file_thru_common_v1_consensus } from \"../../common/v1/consensus_pb\";\nimport type { BlockHash } from \"./types_pb\";\nimport { file_thru_core_v1_types } from \"./types_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/core/v1/block.proto.\n */\nexport const file_thru_core_v1_block: GenFile = /*@__PURE__*/\n  fileDesc(\"Chh0aHJ1L2NvcmUvdjEvYmxvY2sucHJvdG8SDHRocnUuY29yZS52MSKjBAoLQmxvY2tIZWFkZXISEQoEc2xvdBgBIAEoBEID4EECEjAKCmJsb2NrX2hhc2gYAiABKAsyFy50aHJ1LmNvcmUudjEuQmxvY2tIYXNoQgPgQQISOAoQaGVhZGVyX3NpZ25hdHVyZRgDIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEhQKB3ZlcnNpb24YBCABKA1CA+BBAhItCghwcm9kdWNlchgFIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEjkKEGV4cGlyeV90aW1lc3RhbXAYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQISFwoKc3RhcnRfc2xvdBgHIAEoBEID4EECEhkKDGV4cGlyeV9hZnRlchgIIAEoDUID4EECEhsKDm1heF9ibG9ja19zaXplGAkgASgNQgPgQQISHgoRbWF4X2NvbXB1dGVfdW5pdHMYCiABKARCA+BBAhIcCg9tYXhfc3RhdGVfdW5pdHMYCyABKA1CA+BBAhIgChNib25kX2Ftb3VudF9sb2NrX3VwGAwgASgEQgPgQQISMwoKYmxvY2tfdGltZRgNIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAhIYCgt3ZWlnaHRfc2xvdBgOIAEoBEID4EECEhUKCGNoYWluX2lkGA8gASgNQgPgQQIi2wEKC0Jsb2NrRm9vdGVyEjEKCXNpZ25hdHVyZRgBIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEjIKBnN0YXR1cxgCIAEoDjIdLnRocnUuY29yZS52MS5FeGVjdXRpb25TdGF0dXNCA+BBAhIjChZjb25zdW1lZF9jb21wdXRlX3VuaXRzGAMgASgEQgPgQQISIQoUY29uc3VtZWRfc3RhdGVfdW5pdHMYBCABKA1CA+BBAhIdChBhdHRlc3Rvcl9wYXltZW50GAUgASgEQgPgQQIi/AEKBUJsb2NrEi4KBmhlYWRlchgBIAEoCzIZLnRocnUuY29yZS52MS5CbG9ja0hlYWRlckID4EECEjMKBmZvb3RlchgCIAEoCzIZLnRocnUuY29yZS52MS5CbG9ja0Zvb3RlckID4EEBSACIAQESIAoEYm9keRgDIAEoDEIN4EEBukgHegUYgICAEEgBiAEBEkMKEGNvbnNlbnN1c19zdGF0dXMYBCABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgCiAEBQgkKB19mb290ZXJCBwoFX2JvZHlCEwoRX2NvbnNlbnN1c19zdGF0dXMiPwoIUmF3QmxvY2sSEQoEc2xvdBgBIAEoBEID4EECEiAKCXJhd19ibG9jaxgCIAEoDEIN4EECukgHegUYgICAECqUAQoJQmxvY2tWaWV3EhoKFkJMT0NLX1ZJRVdfVU5TUEVDSUZJRUQQABIaChZCTE9DS19WSUVXX0hFQURFUl9PTkxZEAESIAocQkxPQ0tfVklFV19IRUFERVJfQU5EX0ZPT1RFUhACEhgKFEJMT0NLX1ZJRVdfQk9EWV9PTkxZEAMSEwoPQkxPQ0tfVklFV19GVUxMEAQqjQEKD0V4ZWN1dGlvblN0YXR1cxIgChxFWEVDVVRJT05fU1RBVFVTX1VOU1BFQ0lGSUVEEAASHAoYRVhFQ1VUSU9OX1NUQVRVU19QRU5ESU5HEAESHQoZRVhFQ1VUSU9OX1NUQVRVU19FWEVDVVRFRBACEhsKF0VYRUNVVElPTl9TVEFUVVNfRkFJTEVEEANCuQEKEGNvbS50aHJ1LmNvcmUudjFCCkJsb2NrUHJvdG9QAVpAZ2l0aHViLmNvbS9VbnRvLUxhYnMvdGhydS1uZXQvZ3JwYy9wa2cvcHJvdG8vdGhydS9jb3JlL3YxO2NvcmV2MaICA1RDWKoCDFRocnUuQ29yZS5WMboCBFRIVUPKAgxUaHJ1XENvcmVcVjHiAhhUaHJ1XENvcmVcVjFcR1BCTWV0YWRhdGHqAg5UaHJ1OjpDb3JlOjpWMWIGcHJvdG8z\", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_timestamp, file_thru_common_v1_primitives, file_thru_common_v1_consensus, file_thru_core_v1_types]);\n\n/**\n * BlockHeader describes metadata about a block.\n *\n * @generated from message thru.core.v1.BlockHeader\n */\nexport type BlockHeader = Message<\"thru.core.v1.BlockHeader\"> & {\n  /**\n   * @generated from field: uint64 slot = 1;\n   */\n  slot: bigint;\n\n  /**\n   * @generated from field: thru.core.v1.BlockHash block_hash = 2;\n   */\n  blockHash?: BlockHash | undefined;\n\n  /**\n   * @generated from field: thru.common.v1.Signature header_signature = 3;\n   */\n  headerSignature?: Signature | undefined;\n\n  /**\n   * @generated from field: uint32 version = 4;\n   */\n  version: number;\n\n  /**\n   * @generated from field: thru.common.v1.Pubkey producer = 5;\n   */\n  producer?: Pubkey | undefined;\n\n  /**\n   * @generated from field: google.protobuf.Timestamp expiry_timestamp = 6;\n   */\n  expiryTimestamp?: Timestamp | undefined;\n\n  /**\n   * @generated from field: uint64 start_slot = 7;\n   */\n  startSlot: bigint;\n\n  /**\n   * @generated from field: uint32 expiry_after = 8;\n   */\n  expiryAfter: number;\n\n  /**\n   * @generated from field: uint32 max_block_size = 9;\n   */\n  maxBlockSize: number;\n\n  /**\n   * @generated from field: uint64 max_compute_units = 10;\n   */\n  maxComputeUnits: bigint;\n\n  /**\n   * @generated from field: uint32 max_state_units = 11;\n   */\n  maxStateUnits: number;\n\n  /**\n   * @generated from field: uint64 bond_amount_lock_up = 12;\n   */\n  bondAmountLockUp: bigint;\n\n  /**\n   * @generated from field: google.protobuf.Timestamp block_time = 13;\n   */\n  blockTime?: Timestamp | undefined;\n\n  /**\n   * @generated from field: uint64 weight_slot = 14;\n   */\n  weightSlot: bigint;\n\n  /**\n   * @generated from field: uint32 chain_id = 15;\n   */\n  chainId: number;\n};\n\n/**\n * Describes the message thru.core.v1.BlockHeader.\n * Use `create(BlockHeaderSchema)` to create a new message.\n */\nexport const BlockHeaderSchema: GenMessage<BlockHeader> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_block, 0);\n\n/**\n * BlockFooter captures execution result metadata for a block.\n *\n * @generated from message thru.core.v1.BlockFooter\n */\nexport type BlockFooter = Message<\"thru.core.v1.BlockFooter\"> & {\n  /**\n   * @generated from field: thru.common.v1.Signature signature = 1;\n   */\n  signature?: Signature | undefined;\n\n  /**\n   * @generated from field: thru.core.v1.ExecutionStatus status = 2;\n   */\n  status: ExecutionStatus;\n\n  /**\n   * @generated from field: uint64 consumed_compute_units = 3;\n   */\n  consumedComputeUnits: bigint;\n\n  /**\n   * @generated from field: uint32 consumed_state_units = 4;\n   */\n  consumedStateUnits: number;\n\n  /**\n   * @generated from field: uint64 attestor_payment = 5;\n   */\n  attestorPayment: bigint;\n};\n\n/**\n * Describes the message thru.core.v1.BlockFooter.\n * Use `create(BlockFooterSchema)` to create a new message.\n */\nexport const BlockFooterSchema: GenMessage<BlockFooter> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_block, 1);\n\n/**\n * Block represents a fully decoded block resource.\n *\n * @generated from message thru.core.v1.Block\n */\nexport type Block = Message<\"thru.core.v1.Block\"> & {\n  /**\n   * @generated from field: thru.core.v1.BlockHeader header = 1;\n   */\n  header?: BlockHeader | undefined;\n\n  /**\n   * @generated from field: optional thru.core.v1.BlockFooter footer = 2;\n   */\n  footer?: BlockFooter | undefined;\n\n  /**\n   * @generated from field: optional bytes body = 3;\n   */\n  body?: Uint8Array | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.ConsensusStatus consensus_status = 4;\n   */\n  consensusStatus?: ConsensusStatus | undefined;\n};\n\n/**\n * Describes the message thru.core.v1.Block.\n * Use `create(BlockSchema)` to create a new message.\n */\nexport const BlockSchema: GenMessage<Block> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_block, 2);\n\n/**\n * RawBlock captures raw block bytes for direct access.\n *\n * @generated from message thru.core.v1.RawBlock\n */\nexport type RawBlock = Message<\"thru.core.v1.RawBlock\"> & {\n  /**\n   * @generated from field: uint64 slot = 1;\n   */\n  slot: bigint;\n\n  /**\n   * @generated from field: bytes raw_block = 2;\n   */\n  rawBlock: Uint8Array;\n};\n\n/**\n * Describes the message thru.core.v1.RawBlock.\n * Use `create(RawBlockSchema)` to create a new message.\n */\nexport const RawBlockSchema: GenMessage<RawBlock> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_block, 3);\n\n/**\n * BlockView controls how much of a block resource is returned.\n *\n * @generated from enum thru.core.v1.BlockView\n */\nexport enum BlockView {\n  /**\n   * @generated from enum value: BLOCK_VIEW_UNSPECIFIED = 0;\n   */\n  UNSPECIFIED = 0,\n\n  /**\n   * @generated from enum value: BLOCK_VIEW_HEADER_ONLY = 1;\n   */\n  HEADER_ONLY = 1,\n\n  /**\n   * @generated from enum value: BLOCK_VIEW_HEADER_AND_FOOTER = 2;\n   */\n  HEADER_AND_FOOTER = 2,\n\n  /**\n   * @generated from enum value: BLOCK_VIEW_BODY_ONLY = 3;\n   */\n  BODY_ONLY = 3,\n\n  /**\n   * @generated from enum value: BLOCK_VIEW_FULL = 4;\n   */\n  FULL = 4,\n}\n\n/**\n * Describes the enum thru.core.v1.BlockView.\n */\nexport const BlockViewSchema: GenEnum<BlockView> = /*@__PURE__*/\n  enumDesc(file_thru_core_v1_block, 0);\n\n/**\n * ExecutionStatus enumerates block execution results.\n *\n * @generated from enum thru.core.v1.ExecutionStatus\n */\nexport enum ExecutionStatus {\n  /**\n   * @generated from enum value: EXECUTION_STATUS_UNSPECIFIED = 0;\n   */\n  UNSPECIFIED = 0,\n\n  /**\n   * @generated from enum value: EXECUTION_STATUS_PENDING = 1;\n   */\n  PENDING = 1,\n\n  /**\n   * @generated from enum value: EXECUTION_STATUS_EXECUTED = 2;\n   */\n  EXECUTED = 2,\n\n  /**\n   * @generated from enum value: EXECUTION_STATUS_FAILED = 3;\n   */\n  FAILED = 3,\n}\n\n/**\n * Describes the enum thru.core.v1.ExecutionStatus.\n */\nexport const ExecutionStatusSchema: GenEnum<ExecutionStatus> = /*@__PURE__*/\n  enumDesc(file_thru_core_v1_block, 1);\n\n","// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file thru/core/v1/node.proto (package thru.core.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { Pubkey } from \"../../common/v1/primitives_pb\";\nimport { file_thru_common_v1_primitives } from \"../../common/v1/primitives_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/core/v1/node.proto.\n */\nexport const file_thru_core_v1_node: GenFile = /*@__PURE__*/\n  fileDesc(\"Chd0aHJ1L2NvcmUvdjEvbm9kZS5wcm90bxIMdGhydS5jb3JlLnYxIjcKC05vZGVDb250YWN0EhUKCGlwNF9hZGRyGAEgASgNQgPgQQISEQoEcG9ydBgCIAEoDUID4EECIkIKDE5vZGVQcm90b2NvbBIYCgtjb250YWN0X2lkeBgBIAEoDUID4EECEhgKC3Byb3RvY29sX2lkGAIgASgNQgPgQQIijgIKCk5vZGVSZWNvcmQSFAoHdmVyc2lvbhgBIAEoDUID4EECEhUKCGNoYWluX2lkGAIgASgNQgPgQQISEwoGc2VxbnVtGAMgASgEQgPgQQISKwoGcHVia2V5GAQgASgLMhYudGhydS5jb21tb24udjEuUHVia2V5QgPgQQISMAoIY29udGFjdHMYBSADKAsyGS50aHJ1LmNvcmUudjEuTm9kZUNvbnRhY3RCA+BBARIyCglwcm90b2NvbHMYBiADKAsyGi50aHJ1LmNvcmUudjEuTm9kZVByb3RvY29sQgPgQQESFgoJc2lnbmF0dXJlGAcgASgMQgPgQQISEwoGaXNfb3duGAggASgIQgPgQQJCuAEKEGNvbS50aHJ1LmNvcmUudjFCCU5vZGVQcm90b1ABWkBnaXRodWIuY29tL1VudG8tTGFicy90aHJ1LW5ldC9ncnBjL3BrZy9wcm90by90aHJ1L2NvcmUvdjE7Y29yZXYxogIDVENYqgIMVGhydS5Db3JlLlYxugIEVEhVQ8oCDFRocnVcQ29yZVxWMeICGFRocnVcQ29yZVxWMVxHUEJNZXRhZGF0YeoCDlRocnU6OkNvcmU6OlYxYgZwcm90bzM\", [file_google_api_field_behavior, file_thru_common_v1_primitives]);\n\n/**\n * NodeContact represents a network contact address for a node.\n *\n * @generated from message thru.core.v1.NodeContact\n */\nexport type NodeContact = Message<\"thru.core.v1.NodeContact\"> & {\n  /**\n   * IPv4 address as 32-bit integer (network byte order).\n   *\n   * @generated from field: uint32 ip4_addr = 1;\n   */\n  ip4Addr: number;\n\n  /**\n   * Port number.\n   *\n   * @generated from field: uint32 port = 2;\n   */\n  port: number;\n};\n\n/**\n * Describes the message thru.core.v1.NodeContact.\n * Use `create(NodeContactSchema)` to create a new message.\n */\nexport const NodeContactSchema: GenMessage<NodeContact> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_node, 0);\n\n/**\n * NodeProtocol represents a protocol supported by a node contact.\n *\n * @generated from message thru.core.v1.NodeProtocol\n */\nexport type NodeProtocol = Message<\"thru.core.v1.NodeProtocol\"> & {\n  /**\n   * Index into the contacts array.\n   *\n   * @generated from field: uint32 contact_idx = 1;\n   */\n  contactIdx: number;\n\n  /**\n   * Protocol identifier (discovery=1, block_dissem=2, consensus=3, snapshot=4, repair=5, transaction=6).\n   *\n   * @generated from field: uint32 protocol_id = 2;\n   */\n  protocolId: number;\n};\n\n/**\n * Describes the message thru.core.v1.NodeProtocol.\n * Use `create(NodeProtocolSchema)` to create a new message.\n */\nexport const NodeProtocolSchema: GenMessage<NodeProtocol> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_node, 1);\n\n/**\n * NodeRecord represents a node's signed identity and network information.\n *\n * @generated from message thru.core.v1.NodeRecord\n */\nexport type NodeRecord = Message<\"thru.core.v1.NodeRecord\"> & {\n  /**\n   * Record version.\n   *\n   * @generated from field: uint32 version = 1;\n   */\n  version: number;\n\n  /**\n   * Chain identifier.\n   *\n   * @generated from field: uint32 chain_id = 2;\n   */\n  chainId: number;\n\n  /**\n   * Sequence number (incremented on each record update).\n   *\n   * @generated from field: uint64 seqnum = 3;\n   */\n  seqnum: bigint;\n\n  /**\n   * Node's ED25519 public key.\n   *\n   * @generated from field: thru.common.v1.Pubkey pubkey = 4;\n   */\n  pubkey?: Pubkey | undefined;\n\n  /**\n   * Network contact addresses.\n   *\n   * @generated from field: repeated thru.core.v1.NodeContact contacts = 5;\n   */\n  contacts: NodeContact[];\n\n  /**\n   * Protocols supported at each contact.\n   *\n   * @generated from field: repeated thru.core.v1.NodeProtocol protocols = 6;\n   */\n  protocols: NodeProtocol[];\n\n  /**\n   * ED25519 signature over the record.\n   *\n   * @generated from field: bytes signature = 7;\n   */\n  signature: Uint8Array;\n\n  /**\n   * True if this is the responding node's own record.\n   *\n   * @generated from field: bool is_own = 8;\n   */\n  isOwn: boolean;\n};\n\n/**\n * Describes the message thru.core.v1.NodeRecord.\n * Use `create(NodeRecordSchema)` to create a new message.\n */\nexport const NodeRecordSchema: GenMessage<NodeRecord> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_node, 2);\n\n","// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file thru/core/v1/state.proto (package thru.core.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport { file_thru_core_v1_types } from \"./types_pb\";\nimport type { Pubkey } from \"../../common/v1/primitives_pb\";\nimport { file_thru_common_v1_primitives } from \"../../common/v1/primitives_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/core/v1/state.proto.\n */\nexport const file_thru_core_v1_state: GenFile = /*@__PURE__*/\n  fileDesc(\"Chh0aHJ1L2NvcmUvdjEvc3RhdGUucHJvdG8SDHRocnUuY29yZS52MSKnAQoRU3RhdGVQcm9vZlJlcXVlc3QSLAoHYWRkcmVzcxgBIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEjUKCnByb29mX3R5cGUYAiABKA4yHC50aHJ1LmNvcmUudjEuU3RhdGVQcm9vZlR5cGVCA+BBAhIdCgt0YXJnZXRfc2xvdBgDIAEoBEID4EEBSACIAQFCDgoMX3RhcmdldF9zbG90IjMKClN0YXRlUHJvb2YSEgoFcHJvb2YYASABKAxCA+BBAhIRCgRzbG90GAIgASgEQgPgQQIqjwEKDlN0YXRlUHJvb2ZUeXBlEiAKHFNUQVRFX1BST09GX1RZUEVfVU5TUEVDSUZJRUQQABIdChlTVEFURV9QUk9PRl9UWVBFX0NSRUFUSU5HEAESHQoZU1RBVEVfUFJPT0ZfVFlQRV9VUERBVElORxACEh0KGVNUQVRFX1BST09GX1RZUEVfRVhJU1RJTkcQA0K5AQoQY29tLnRocnUuY29yZS52MUIKU3RhdGVQcm90b1ABWkBnaXRodWIuY29tL1VudG8tTGFicy90aHJ1LW5ldC9ncnBjL3BrZy9wcm90by90aHJ1L2NvcmUvdjE7Y29yZXYxogIDVENYqgIMVGhydS5Db3JlLlYxugIEVEhVQ8oCDFRocnVcQ29yZVxWMeICGFRocnVcQ29yZVxWMVxHUEJNZXRhZGF0YeoCDlRocnU6OkNvcmU6OlYxYgZwcm90bzM\", [file_google_api_field_behavior, file_thru_core_v1_types, file_thru_common_v1_primitives]);\n\n/**\n * StateProofRequest describes a request to generate an account state proof.\n *\n * @generated from message thru.core.v1.StateProofRequest\n */\nexport type StateProofRequest = Message<\"thru.core.v1.StateProofRequest\"> & {\n  /**\n   * @generated from field: thru.common.v1.Pubkey address = 1;\n   */\n  address?: Pubkey | undefined;\n\n  /**\n   * @generated from field: thru.core.v1.StateProofType proof_type = 2;\n   */\n  proofType: StateProofType;\n\n  /**\n   * @generated from field: optional uint64 target_slot = 3;\n   */\n  targetSlot?: bigint | undefined;\n};\n\n/**\n * Describes the message thru.core.v1.StateProofRequest.\n * Use `create(StateProofRequestSchema)` to create a new message.\n */\nexport const StateProofRequestSchema: GenMessage<StateProofRequest> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_state, 0);\n\n/**\n * StateProof returns binary proof data along with context.\n *\n * @generated from message thru.core.v1.StateProof\n */\nexport type StateProof = Message<\"thru.core.v1.StateProof\"> & {\n  /**\n   * @generated from field: bytes proof = 1;\n   */\n  proof: Uint8Array;\n\n  /**\n   * @generated from field: uint64 slot = 2;\n   */\n  slot: bigint;\n};\n\n/**\n * Describes the message thru.core.v1.StateProof.\n * Use `create(StateProofSchema)` to create a new message.\n */\nexport const StateProofSchema: GenMessage<StateProof> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_state, 1);\n\n/**\n * StateProofType selects the type of state proof to generate.\n *\n * @generated from enum thru.core.v1.StateProofType\n */\nexport enum StateProofType {\n  /**\n   * @generated from enum value: STATE_PROOF_TYPE_UNSPECIFIED = 0;\n   */\n  UNSPECIFIED = 0,\n\n  /**\n   * @generated from enum value: STATE_PROOF_TYPE_CREATING = 1;\n   */\n  CREATING = 1,\n\n  /**\n   * @generated from enum value: STATE_PROOF_TYPE_UPDATING = 2;\n   */\n  UPDATING = 2,\n\n  /**\n   * @generated from enum value: STATE_PROOF_TYPE_EXISTING = 3;\n   */\n  EXISTING = 3,\n}\n\n/**\n * Describes the enum thru.core.v1.StateProofType.\n */\nexport const StateProofTypeSchema: GenEnum<StateProofType> = /*@__PURE__*/\n  enumDesc(file_thru_core_v1_state, 0);\n\n","// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file thru/core/v1/transaction.proto (package thru.core.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport { file_thru_core_v1_types } from \"./types_pb\";\nimport type { Pubkey, Signature } from \"../../common/v1/primitives_pb\";\nimport { file_thru_common_v1_primitives } from \"../../common/v1/primitives_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/core/v1/transaction.proto.\n */\nexport const file_thru_core_v1_transaction: GenFile = /*@__PURE__*/\n  fileDesc(\"Ch50aHJ1L2NvcmUvdjEvdHJhbnNhY3Rpb24ucHJvdG8SDHRocnUuY29yZS52MSK3BAoRVHJhbnNhY3Rpb25IZWFkZXISOwoTZmVlX3BheWVyX3NpZ25hdHVyZRgBIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEhQKB3ZlcnNpb24YAiABKA1CA+BBAhISCgVmbGFncxgDIAEoDUID4EECEiUKGHJlYWR3cml0ZV9hY2NvdW50c19jb3VudBgEIAEoDUID4EECEiQKF3JlYWRvbmx5X2FjY291bnRzX2NvdW50GAUgASgNQgPgQQISIgoVaW5zdHJ1Y3Rpb25fZGF0YV9zaXplGAYgASgNQgPgQQISJAoXcmVxdWVzdGVkX2NvbXB1dGVfdW5pdHMYByABKA1CA+BBAhIiChVyZXF1ZXN0ZWRfc3RhdGVfdW5pdHMYCCABKA1CA+BBAhIjChZyZXF1ZXN0ZWRfbWVtb3J5X3VuaXRzGAkgASgNQgPgQQISGQoMZXhwaXJ5X2FmdGVyGAogASgNQgPgQQISEAoDZmVlGAsgASgEQgPgQQISEgoFbm9uY2UYDCABKARCA+BBAhIXCgpzdGFydF9zbG90GA0gASgEQgPgQQISNQoQZmVlX3BheWVyX3B1YmtleRgOIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEjMKDnByb2dyYW1fcHVia2V5GA8gASgLMhYudGhydS5jb21tb24udjEuUHVia2V5QgPgQQISFQoIY2hhaW5faWQYECABKA1CA+BBAiLfBAoaVHJhbnNhY3Rpb25FeGVjdXRpb25SZXN1bHQSIwoWY29uc3VtZWRfY29tcHV0ZV91bml0cxgBIAEoDUID4EECEiIKFWNvbnN1bWVkX21lbW9yeV91bml0cxgCIAEoDUID4EECEiEKFGNvbnN1bWVkX3N0YXRlX3VuaXRzGAMgASgNQgPgQQISHAoPdXNlcl9lcnJvcl9jb2RlGAQgASgEQgPgQQISNwoIdm1fZXJyb3IYBSABKA4yIC50aHJ1LmNvcmUudjEuVHJhbnNhY3Rpb25WbUVycm9yQgPgQQISHQoQZXhlY3V0aW9uX3Jlc3VsdBgGIAEoBEID4EECEhcKCnBhZ2VzX3VzZWQYByABKA1CA+BBAhIZCgxldmVudHNfY291bnQYCCABKA1CA+BBAhIYCgtldmVudHNfc2l6ZRgJIAEoDUID4EECEjcKEnJlYWR3cml0ZV9hY2NvdW50cxgKIAMoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EEBEjYKEXJlYWRvbmx5X2FjY291bnRzGAsgAygLMhYudGhydS5jb21tb24udjEuUHVia2V5QgPgQQESMwoGZXZlbnRzGAwgAygLMh4udGhydS5jb3JlLnYxLlRyYW5zYWN0aW9uRXZlbnRCA+BBARIiChVlcnJvcl9wcm9ncmFtX2FjY19pZHgYDSABKA1CA+BBARIqChhmZWVfcGF5ZXJfZXhwZWN0ZWRfbm9uY2UYDiABKARCA+BBAUgAiAEBQhsKGV9mZWVfcGF5ZXJfZXhwZWN0ZWRfbm9uY2UingEKEFRyYW5zYWN0aW9uRXZlbnQSFQoIZXZlbnRfaWQYASABKAlCA+BBAhIVCghjYWxsX2lkeBgCIAEoDUID4EECEhgKC3Byb2dyYW1faWR4GAMgASgNQgPgQQISLAoHcHJvZ3JhbRgEIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEhQKB3BheWxvYWQYBSABKAxCA+BBAiLWAgoLVHJhbnNhY3Rpb24SMQoJc2lnbmF0dXJlGAEgASgLMhkudGhydS5jb21tb24udjEuU2lnbmF0dXJlQgPgQQISNAoGaGVhZGVyGAIgASgLMh8udGhydS5jb3JlLnYxLlRyYW5zYWN0aW9uSGVhZGVyQgPgQQISIAoEYm9keRgDIAEoDEIN4EEBukgHegUYgICACEgAiAEBEkwKEGV4ZWN1dGlvbl9yZXN1bHQYBCABKAsyKC50aHJ1LmNvcmUudjEuVHJhbnNhY3Rpb25FeGVjdXRpb25SZXN1bHRCA+BBAUgBiAEBEhYKBHNsb3QYBSABKARCA+BBAUgCiAEBEh4KDGJsb2NrX29mZnNldBgGIAEoDUID4EEBSAOIAQFCBwoFX2JvZHlCEwoRX2V4ZWN1dGlvbl9yZXN1bHRCBwoFX3Nsb3RCDwoNX2Jsb2NrX29mZnNldCJrCg5SYXdUcmFuc2FjdGlvbhIxCglzaWduYXR1cmUYASABKAsyGS50aHJ1LmNvbW1vbi52MS5TaWduYXR1cmVCA+BBAhImCg9yYXdfdHJhbnNhY3Rpb24YAiABKAxCDeBBArpIB3oFGICAgAgquwEKD1RyYW5zYWN0aW9uVmlldxIgChxUUkFOU0FDVElPTl9WSUVXX1VOU1BFQ0lGSUVEEAASIwofVFJBTlNBQ1RJT05fVklFV19TSUdOQVRVUkVfT05MWRABEiAKHFRSQU5TQUNUSU9OX1ZJRVdfSEVBREVSX09OTFkQAhIkCiBUUkFOU0FDVElPTl9WSUVXX0hFQURFUl9BTkRfQk9EWRADEhkKFVRSQU5TQUNUSU9OX1ZJRVdfRlVMTBAEKqMNChJUcmFuc2FjdGlvblZtRXJyb3ISIgoeVFJBTlNBQ1RJT05fVk1fRVhFQ1VURV9TVUNDRVNTEAASMAojVFJBTlNBQ1RJT05fVk1fRVJST1JfSU5WQUxJRF9GT1JNQVQQgf7/////////ARIxCiRUUkFOU0FDVElPTl9WTV9FUlJPUl9JTlZBTElEX1ZFUlNJT04Qgv7/////////ARIvCiJUUkFOU0FDVElPTl9WTV9FUlJPUl9JTlZBTElEX0ZMQUdTEIP+/////////wESMwomVFJBTlNBQ1RJT05fVk1fRVJST1JfSU5WQUxJRF9TSUdOQVRVUkUQhP7/////////ARIzCiZUUkFOU0FDVElPTl9WTV9FUlJPUl9EVVBMSUNBVEVfQUNDT1VOVBCF/v////////8BEjMKJlRSQU5TQUNUSU9OX1ZNX0VSUk9SX1VOU09SVEVEX0FDQ09VTlRTEIb+/////////wESPQowVFJBTlNBQ1RJT05fVk1fRVJST1JfVU5TT1JURURfUkVBRFdSSVRFX0FDQ09VTlRTEIf+/////////wESPAovVFJBTlNBQ1RJT05fVk1fRVJST1JfVU5TT1JURURfUkVBRE9OTFlfQUNDT1VOVFMQiP7/////////ARI+CjFUUkFOU0FDVElPTl9WTV9FUlJPUl9BQ0NPVU5UX0NPVU5UX0xJTUlUX0VYQ0VFREVEEIn+/////////wESLwoiVFJBTlNBQ1RJT05fVk1fRVJST1JfTk9OQ0VfVE9PX0xPVxCB/P////////8BEjAKI1RSQU5TQUNUSU9OX1ZNX0VSUk9SX05PTkNFX1RPT19ISUdIEIL8/////////wESQAozVFJBTlNBQ1RJT05fVk1fRVJST1JfSU5TVUZGSUNJRU5UX0ZFRV9QQVlFUl9CQUxBTkNFEIP8/////////wESQgo1VFJBTlNBQ1RJT05fVk1fRVJST1JfRkVFX1BBWUVSX0FDQ09VTlRfRE9FU19OT1RfRVhJU1QQhPz/////////ARIuCiFUUkFOU0FDVElPTl9WTV9FUlJPUl9OT1RfTElWRV9ZRVQQhfz/////////ARIpChxUUkFOU0FDVElPTl9WTV9FUlJPUl9FWFBJUkVEEIb8/////////wESPwoyVFJBTlNBQ1RJT05fVk1fRVJST1JfSU5WQUxJRF9GRUVfUEFZRVJfU1RBVEVfUFJPT0YQh/z/////////ARJECjdUUkFOU0FDVElPTl9WTV9FUlJPUl9JTlZBTElEX0ZFRV9QQVlFUl9TVEFURV9QUk9PRl9UWVBFEIj8/////////wESRAo3VFJBTlNBQ1RJT05fVk1fRVJST1JfSU5WQUxJRF9GRUVfUEFZRVJfU1RBVEVfUFJPT0ZfU0xPVBCJ/P////////8BEkEKNFRSQU5TQUNUSU9OX1ZNX0VSUk9SX0lOVkFMSURfRkVFX1BBWUVSX0FDQ09VTlRfT1dORVIQivz/////////ARJNCkBUUkFOU0FDVElPTl9WTV9FUlJPUl9JTlZBTElEX0ZFRV9QQVlFUl9TVEFURV9QUk9PRl9BQ0NPVU5UX09XTkVSEIv8/////////wESVApHVFJBTlNBQ1RJT05fVk1fRVJST1JfSU5WQUxJRF9GRUVfUEFZRVJfU1RBVEVfUFJPT0ZfQUNDT1VOVF9NRVRBX0RBVEFfU1oQjPz/////////ARJKCj1UUkFOU0FDVElPTl9WTV9FUlJPUl9GRUVfUEFZRVJfQUNUSVZBVElPTl9SRVFVSVJFU19TVEFURV9VTklUEI/8/////////wESPQowVFJBTlNBQ1RJT05fVk1fRVJST1JfQkxPQ0tfU1RBVEVfQlVER0VUX0VYQ0VFREVEEJD8/////////wESKwoeVFJBTlNBQ1RJT05fVk1fRVJST1JfVk1fRkFJTEVEEIH6/////////wESOQosVFJBTlNBQ1RJT05fVk1fRVJST1JfSU5WQUxJRF9QUk9HUkFNX0FDQ09VTlQQgvr/////////ARIrCh5UUkFOU0FDVElPTl9WTV9FUlJPUl9WTV9SRVZFUlQQg/r/////////ARIuCiFUUkFOU0FDVElPTl9WTV9FUlJPUl9DVV9FWEhBVVNURUQQhPr/////////ARIuCiFUUkFOU0FDVElPTl9WTV9FUlJPUl9TVV9FWEhBVVNURUQQhfr/////////AUK/AQoQY29tLnRocnUuY29yZS52MUIQVHJhbnNhY3Rpb25Qcm90b1ABWkBnaXRodWIuY29tL1VudG8tTGFicy90aHJ1LW5ldC9ncnBjL3BrZy9wcm90by90aHJ1L2NvcmUvdjE7Y29yZXYxogIDVENYqgIMVGhydS5Db3JlLlYxugIEVEhVQ8oCDFRocnVcQ29yZVxWMeICGFRocnVcQ29yZVxWMVxHUEJNZXRhZGF0YeoCDlRocnU6OkNvcmU6OlYxYgZwcm90bzM\", [file_buf_validate_validate, file_google_api_field_behavior, file_thru_core_v1_types, file_thru_common_v1_primitives]);\n\n/**\n * TransactionHeader carries structured metadata for a transaction.\n *\n * @generated from message thru.core.v1.TransactionHeader\n */\nexport type TransactionHeader = Message<\"thru.core.v1.TransactionHeader\"> & {\n  /**\n   * @generated from field: thru.common.v1.Signature fee_payer_signature = 1;\n   */\n  feePayerSignature?: Signature | undefined;\n\n  /**\n   * @generated from field: uint32 version = 2;\n   */\n  version: number;\n\n  /**\n   * @generated from field: uint32 flags = 3;\n   */\n  flags: number;\n\n  /**\n   * @generated from field: uint32 readwrite_accounts_count = 4;\n   */\n  readwriteAccountsCount: number;\n\n  /**\n   * @generated from field: uint32 readonly_accounts_count = 5;\n   */\n  readonlyAccountsCount: number;\n\n  /**\n   * @generated from field: uint32 instruction_data_size = 6;\n   */\n  instructionDataSize: number;\n\n  /**\n   * @generated from field: uint32 requested_compute_units = 7;\n   */\n  requestedComputeUnits: number;\n\n  /**\n   * @generated from field: uint32 requested_state_units = 8;\n   */\n  requestedStateUnits: number;\n\n  /**\n   * @generated from field: uint32 requested_memory_units = 9;\n   */\n  requestedMemoryUnits: number;\n\n  /**\n   * @generated from field: uint32 expiry_after = 10;\n   */\n  expiryAfter: number;\n\n  /**\n   * @generated from field: uint64 fee = 11;\n   */\n  fee: bigint;\n\n  /**\n   * @generated from field: uint64 nonce = 12;\n   */\n  nonce: bigint;\n\n  /**\n   * @generated from field: uint64 start_slot = 13;\n   */\n  startSlot: bigint;\n\n  /**\n   * @generated from field: thru.common.v1.Pubkey fee_payer_pubkey = 14;\n   */\n  feePayerPubkey?: Pubkey | undefined;\n\n  /**\n   * @generated from field: thru.common.v1.Pubkey program_pubkey = 15;\n   */\n  programPubkey?: Pubkey | undefined;\n\n  /**\n   * Chain identifier to prevent transaction replay across different chains.\n   *\n   * @generated from field: uint32 chain_id = 16;\n   */\n  chainId: number;\n};\n\n/**\n * Describes the message thru.core.v1.TransactionHeader.\n * Use `create(TransactionHeaderSchema)` to create a new message.\n */\nexport const TransactionHeaderSchema: GenMessage<TransactionHeader> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_transaction, 0);\n\n/**\n * TransactionExecutionResult captures execution outcomes.\n *\n * @generated from message thru.core.v1.TransactionExecutionResult\n */\nexport type TransactionExecutionResult = Message<\"thru.core.v1.TransactionExecutionResult\"> & {\n  /**\n   * @generated from field: uint32 consumed_compute_units = 1;\n   */\n  consumedComputeUnits: number;\n\n  /**\n   * @generated from field: uint32 consumed_memory_units = 2;\n   */\n  consumedMemoryUnits: number;\n\n  /**\n   * @generated from field: uint32 consumed_state_units = 3;\n   */\n  consumedStateUnits: number;\n\n  /**\n   * @generated from field: uint64 user_error_code = 4;\n   */\n  userErrorCode: bigint;\n\n  /**\n   * @generated from field: thru.core.v1.TransactionVmError vm_error = 5;\n   */\n  vmError: TransactionVmError;\n\n  /**\n   * @generated from field: uint64 execution_result = 6;\n   */\n  executionResult: bigint;\n\n  /**\n   * @generated from field: uint32 pages_used = 7;\n   */\n  pagesUsed: number;\n\n  /**\n   * @generated from field: uint32 events_count = 8;\n   */\n  eventsCount: number;\n\n  /**\n   * @generated from field: uint32 events_size = 9;\n   */\n  eventsSize: number;\n\n  /**\n   * @generated from field: repeated thru.common.v1.Pubkey readwrite_accounts = 10;\n   */\n  readwriteAccounts: Pubkey[];\n\n  /**\n   * @generated from field: repeated thru.common.v1.Pubkey readonly_accounts = 11;\n   */\n  readonlyAccounts: Pubkey[];\n\n  /**\n   * @generated from field: repeated thru.core.v1.TransactionEvent events = 12;\n   */\n  events: TransactionEvent[];\n\n  /**\n   * Account index of the program that caused the error (revert, fault, etc.).\n   * Only meaningful when vm_error indicates a failure.\n   *\n   * @generated from field: uint32 error_program_acc_idx = 13;\n   */\n  errorProgramAccIdx: number;\n\n  /**\n   * The nonce the runtime requires for the next transaction from this fee\n   * payer, as of this transaction's execution. Populated ONLY when vm_error is\n   * TRANSACTION_VM_ERROR_NONCE_TOO_LOW or TRANSACTION_VM_ERROR_NONCE_TOO_HIGH;\n   * absent otherwise. A nonce reject does not advance the nonce, so retrying\n   * with this value is correct.\n   *\n   * This is not necessarily the account's live nonce by the time you read it:\n   * another transaction from the same fee payer may have landed since. Treat it\n   * as a correction to retry against, not a reservation. For a fee payer\n   * restored by a creation state proof it is 0, and no account exists yet.\n   *\n   * @generated from field: optional uint64 fee_payer_expected_nonce = 14;\n   */\n  feePayerExpectedNonce?: bigint | undefined;\n};\n\n/**\n * Describes the message thru.core.v1.TransactionExecutionResult.\n * Use `create(TransactionExecutionResultSchema)` to create a new message.\n */\nexport const TransactionExecutionResultSchema: GenMessage<TransactionExecutionResult> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_transaction, 1);\n\n/**\n * TransactionEvent describes an event emitted during transaction execution.\n *\n * @generated from message thru.core.v1.TransactionEvent\n */\nexport type TransactionEvent = Message<\"thru.core.v1.TransactionEvent\"> & {\n  /**\n   * @generated from field: string event_id = 1;\n   */\n  eventId: string;\n\n  /**\n   * @generated from field: uint32 call_idx = 2;\n   */\n  callIdx: number;\n\n  /**\n   * @generated from field: uint32 program_idx = 3;\n   */\n  programIdx: number;\n\n  /**\n   * @generated from field: thru.common.v1.Pubkey program = 4;\n   */\n  program?: Pubkey | undefined;\n\n  /**\n   * @generated from field: bytes payload = 5;\n   */\n  payload: Uint8Array;\n};\n\n/**\n * Describes the message thru.core.v1.TransactionEvent.\n * Use `create(TransactionEventSchema)` to create a new message.\n */\nexport const TransactionEventSchema: GenMessage<TransactionEvent> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_transaction, 2);\n\n/**\n * Transaction describes a fully decoded transaction resource.\n *\n * @generated from message thru.core.v1.Transaction\n */\nexport type Transaction = Message<\"thru.core.v1.Transaction\"> & {\n  /**\n   * @generated from field: thru.common.v1.Signature signature = 1;\n   */\n  signature?: Signature | undefined;\n\n  /**\n   * @generated from field: thru.core.v1.TransactionHeader header = 2;\n   */\n  header?: TransactionHeader | undefined;\n\n  /**\n   * @generated from field: optional bytes body = 3;\n   */\n  body?: Uint8Array | undefined;\n\n  /**\n   * @generated from field: optional thru.core.v1.TransactionExecutionResult execution_result = 4;\n   */\n  executionResult?: TransactionExecutionResult | undefined;\n\n  /**\n   * @generated from field: optional uint64 slot = 5;\n   */\n  slot?: bigint | undefined;\n\n  /**\n   * @generated from field: optional uint32 block_offset = 6;\n   */\n  blockOffset?: number | undefined;\n};\n\n/**\n * Describes the message thru.core.v1.Transaction.\n * Use `create(TransactionSchema)` to create a new message.\n */\nexport const TransactionSchema: GenMessage<Transaction> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_transaction, 3);\n\n/**\n * RawTransaction provides direct access to serialized transaction bytes.\n *\n * @generated from message thru.core.v1.RawTransaction\n */\nexport type RawTransaction = Message<\"thru.core.v1.RawTransaction\"> & {\n  /**\n   * @generated from field: thru.common.v1.Signature signature = 1;\n   */\n  signature?: Signature | undefined;\n\n  /**\n   * @generated from field: bytes raw_transaction = 2;\n   */\n  rawTransaction: Uint8Array;\n};\n\n/**\n * Describes the message thru.core.v1.RawTransaction.\n * Use `create(RawTransactionSchema)` to create a new message.\n */\nexport const RawTransactionSchema: GenMessage<RawTransaction> = /*@__PURE__*/\n  messageDesc(file_thru_core_v1_transaction, 4);\n\n/**\n * TransactionView controls how transactions are materialized in responses.\n *\n * @generated from enum thru.core.v1.TransactionView\n */\nexport enum TransactionView {\n  /**\n   * @generated from enum value: TRANSACTION_VIEW_UNSPECIFIED = 0;\n   */\n  UNSPECIFIED = 0,\n\n  /**\n   * @generated from enum value: TRANSACTION_VIEW_SIGNATURE_ONLY = 1;\n   */\n  SIGNATURE_ONLY = 1,\n\n  /**\n   * @generated from enum value: TRANSACTION_VIEW_HEADER_ONLY = 2;\n   */\n  HEADER_ONLY = 2,\n\n  /**\n   * @generated from enum value: TRANSACTION_VIEW_HEADER_AND_BODY = 3;\n   */\n  HEADER_AND_BODY = 3,\n\n  /**\n   * @generated from enum value: TRANSACTION_VIEW_FULL = 4;\n   */\n  FULL = 4,\n}\n\n/**\n * Describes the enum thru.core.v1.TransactionView.\n */\nexport const TransactionViewSchema: GenEnum<TransactionView> = /*@__PURE__*/\n  enumDesc(file_thru_core_v1_transaction, 0);\n\n/**\n * TransactionVmError enumerates runtime error codes returned by the executor.\n *\n * @generated from enum thru.core.v1.TransactionVmError\n */\nexport enum TransactionVmError {\n  /**\n   * TN_RUNTIME_TXN_EXECUTE_SUCCESS\n   *\n   * @generated from enum value: TRANSACTION_VM_EXECUTE_SUCCESS = 0;\n   */\n  TRANSACTION_VM_EXECUTE_SUCCESS = 0,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_INVALID_FORMAT\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_FORMAT = -255;\n   */\n  TRANSACTION_VM_ERROR_INVALID_FORMAT = -255,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_INVALID_VERSION\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_VERSION = -254;\n   */\n  TRANSACTION_VM_ERROR_INVALID_VERSION = -254,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_INVALID_FLAGS\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_FLAGS = -253;\n   */\n  TRANSACTION_VM_ERROR_INVALID_FLAGS = -253,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_INVALID_SIGNATURE\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_SIGNATURE = -252;\n   */\n  TRANSACTION_VM_ERROR_INVALID_SIGNATURE = -252,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_DUPLICATE_ACCOUNT\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_DUPLICATE_ACCOUNT = -251;\n   */\n  TRANSACTION_VM_ERROR_DUPLICATE_ACCOUNT = -251,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_UNSORTED_ACCOUNTS\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_UNSORTED_ACCOUNTS = -250;\n   */\n  TRANSACTION_VM_ERROR_UNSORTED_ACCOUNTS = -250,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_UNSORTED_READWRITE_ACCOUNTS\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_UNSORTED_READWRITE_ACCOUNTS = -249;\n   */\n  TRANSACTION_VM_ERROR_UNSORTED_READWRITE_ACCOUNTS = -249,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_UNSORTED_READONLY_ACCOUNTS\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_UNSORTED_READONLY_ACCOUNTS = -248;\n   */\n  TRANSACTION_VM_ERROR_UNSORTED_READONLY_ACCOUNTS = -248,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_ACCOUNT_COUNT_LIMIT_EXCEEDED\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_ACCOUNT_COUNT_LIMIT_EXCEEDED = -247;\n   */\n  TRANSACTION_VM_ERROR_ACCOUNT_COUNT_LIMIT_EXCEEDED = -247,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_NONCE_TOO_LOW\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_NONCE_TOO_LOW = -511;\n   */\n  TRANSACTION_VM_ERROR_NONCE_TOO_LOW = -511,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_NONCE_TOO_HIGH\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_NONCE_TOO_HIGH = -510;\n   */\n  TRANSACTION_VM_ERROR_NONCE_TOO_HIGH = -510,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_INSUFFICIENT_FEE_PAYER_BALANCE\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE = -509;\n   */\n  TRANSACTION_VM_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE = -509,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_FEE_PAYER_ACCOUNT_DOES_NOT_EXIST\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_FEE_PAYER_ACCOUNT_DOES_NOT_EXIST = -508;\n   */\n  TRANSACTION_VM_ERROR_FEE_PAYER_ACCOUNT_DOES_NOT_EXIST = -508,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_NOT_LIVE_YET\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_NOT_LIVE_YET = -507;\n   */\n  TRANSACTION_VM_ERROR_NOT_LIVE_YET = -507,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_EXPIRED\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_EXPIRED = -506;\n   */\n  TRANSACTION_VM_ERROR_EXPIRED = -506,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_INVALID_FEE_PAYER_STATE_PROOF\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF = -505;\n   */\n  TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF = -505,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_INVALID_FEE_PAYER_STATE_PROOF_TYPE\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF_TYPE = -504;\n   */\n  TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF_TYPE = -504,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_INVALID_FEE_PAYER_STATE_PROOF_SLOT\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF_SLOT = -503;\n   */\n  TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF_SLOT = -503,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_INVALID_FEE_PAYER_ACCOUNT_OWNER\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_ACCOUNT_OWNER = -502;\n   */\n  TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_ACCOUNT_OWNER = -502,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_INVALID_FEE_PAYER_STATE_PROOF_ACCOUNT_OWNER\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF_ACCOUNT_OWNER = -501;\n   */\n  TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF_ACCOUNT_OWNER = -501,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_INVALID_FEE_PAYER_STATE_PROOF_ACCOUNT_META_DATA_SZ\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF_ACCOUNT_META_DATA_SZ = -500;\n   */\n  TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF_ACCOUNT_META_DATA_SZ = -500,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_FEE_PAYER_ACTIVATION_REQUIRES_STATE_UNIT\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_FEE_PAYER_ACTIVATION_REQUIRES_STATE_UNIT = -497;\n   */\n  TRANSACTION_VM_ERROR_FEE_PAYER_ACTIVATION_REQUIRES_STATE_UNIT = -497,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_BLOCK_STATE_BUDGET_EXCEEDED\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_BLOCK_STATE_BUDGET_EXCEEDED = -496;\n   */\n  TRANSACTION_VM_ERROR_BLOCK_STATE_BUDGET_EXCEEDED = -496,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_VM_FAILED\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_VM_FAILED = -767;\n   */\n  TRANSACTION_VM_ERROR_VM_FAILED = -767,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_INVALID_PROGRAM_ACCOUNT\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_PROGRAM_ACCOUNT = -766;\n   */\n  TRANSACTION_VM_ERROR_INVALID_PROGRAM_ACCOUNT = -766,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_VM_REVERT\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_VM_REVERT = -765;\n   */\n  TRANSACTION_VM_ERROR_VM_REVERT = -765,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_CU_EXHAUSTED\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_CU_EXHAUSTED = -764;\n   */\n  TRANSACTION_VM_ERROR_CU_EXHAUSTED = -764,\n\n  /**\n   * TN_RUNTIME_TXN_ERR_SU_EXHAUSTED\n   *\n   * @generated from enum value: TRANSACTION_VM_ERROR_SU_EXHAUSTED = -763;\n   */\n  TRANSACTION_VM_ERROR_SU_EXHAUSTED = -763,\n}\n\n/**\n * Describes the enum thru.core.v1.TransactionVmError.\n */\nexport const TransactionVmErrorSchema: GenEnum<TransactionVmError> = /*@__PURE__*/\n  enumDesc(file_thru_core_v1_transaction, 1);\n\n","// Copyright 2026 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file google/api/http.proto (package google.api, syntax proto3)\n/* eslint-disable */\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file google/api/http.proto.\n */\nexport const file_google_api_http: GenFile = /*@__PURE__*/\n  fileDesc(\"ChVnb29nbGUvYXBpL2h0dHAucHJvdG8SCmdvb2dsZS5hcGkiVAoESHR0cBIjCgVydWxlcxgBIAMoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGUSJwofZnVsbHlfZGVjb2RlX3Jlc2VydmVkX2V4cGFuc2lvbhgCIAEoCCKBAgoISHR0cFJ1bGUSEAoIc2VsZWN0b3IYASABKAkSDQoDZ2V0GAIgASgJSAASDQoDcHV0GAMgASgJSAASDgoEcG9zdBgEIAEoCUgAEhAKBmRlbGV0ZRgFIAEoCUgAEg8KBXBhdGNoGAYgASgJSAASLwoGY3VzdG9tGAggASgLMh0uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybkgAEgwKBGJvZHkYByABKAkSFQoNcmVzcG9uc2VfYm9keRgMIAEoCRIxChNhZGRpdGlvbmFsX2JpbmRpbmdzGAsgAygLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZUIJCgdwYXR0ZXJuIi8KEUN1c3RvbUh0dHBQYXR0ZXJuEgwKBGtpbmQYASABKAkSDAoEcGF0aBgCIAEoCUKnAQoOY29tLmdvb2dsZS5hcGlCCUh0dHBQcm90b1ABWkFnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL2FwaS9hbm5vdGF0aW9uczthbm5vdGF0aW9uc6ICA0dBWKoCCkdvb2dsZS5BcGnKAgpHb29nbGVcQXBp4gIWR29vZ2xlXEFwaVxHUEJNZXRhZGF0YeoCC0dvb2dsZTo6QXBpYgZwcm90bzM\");\n\n/**\n * Defines the HTTP configuration for an API service. It contains a list of\n * [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method\n * to one or more HTTP REST API methods.\n *\n * @generated from message google.api.Http\n */\nexport type Http = Message<\"google.api.Http\"> & {\n  /**\n   * A list of HTTP configuration rules that apply to individual API methods.\n   *\n   * **NOTE:** All service configuration rules follow \"last one wins\" order.\n   *\n   * @generated from field: repeated google.api.HttpRule rules = 1;\n   */\n  rules: HttpRule[];\n\n  /**\n   * When set to true, URL path parameters will be fully URI-decoded except in\n   * cases of single segment matches in reserved expansion, where \"%2F\" will be\n   * left encoded.\n   *\n   * The default behavior is to not decode RFC 6570 reserved characters in multi\n   * segment matches.\n   *\n   * @generated from field: bool fully_decode_reserved_expansion = 2;\n   */\n  fullyDecodeReservedExpansion: boolean;\n};\n\n/**\n * Describes the message google.api.Http.\n * Use `create(HttpSchema)` to create a new message.\n */\nexport const HttpSchema: GenMessage<Http> = /*@__PURE__*/\n  messageDesc(file_google_api_http, 0);\n\n/**\n * gRPC Transcoding\n *\n * gRPC Transcoding is a feature for mapping between a gRPC method and one or\n * more HTTP REST endpoints. It allows developers to build a single API service\n * that supports both gRPC APIs and REST APIs. Many systems, including [Google\n * APIs](https://github.com/googleapis/googleapis),\n * [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC\n * Gateway](https://github.com/grpc-ecosystem/grpc-gateway),\n * and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature\n * and use it for large scale production services.\n *\n * `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies\n * how different portions of the gRPC request message are mapped to the URL\n * path, URL query parameters, and HTTP request body. It also controls how the\n * gRPC response message is mapped to the HTTP response body. `HttpRule` is\n * typically specified as an `google.api.http` annotation on the gRPC method.\n *\n * Each mapping specifies a URL path template and an HTTP method. The path\n * template may refer to one or more fields in the gRPC request message, as long\n * as each field is a non-repeated field with a primitive (non-message) type.\n * The path template controls how fields of the request message are mapped to\n * the URL path.\n *\n * Example:\n *\n *     service Messaging {\n *       rpc GetMessage(GetMessageRequest) returns (Message) {\n *         option (google.api.http) = {\n *             get: \"/v1/{name=messages/*}\"\n *         };\n *       }\n *     }\n *     message GetMessageRequest {\n *       string name = 1; // Mapped to URL path.\n *     }\n *     message Message {\n *       string text = 1; // The resource content.\n *     }\n *\n * This enables an HTTP REST to gRPC mapping as below:\n *\n * - HTTP: `GET /v1/messages/123456`\n * - gRPC: `GetMessage(name: \"messages/123456\")`\n *\n * Any fields in the request message which are not bound by the path template\n * automatically become HTTP query parameters if there is no HTTP request body.\n * For example:\n *\n *     service Messaging {\n *       rpc GetMessage(GetMessageRequest) returns (Message) {\n *         option (google.api.http) = {\n *             get:\"/v1/messages/{message_id}\"\n *         };\n *       }\n *     }\n *     message GetMessageRequest {\n *       message SubMessage {\n *         string subfield = 1;\n *       }\n *       string message_id = 1; // Mapped to URL path.\n *       int64 revision = 2;    // Mapped to URL query parameter `revision`.\n *       SubMessage sub = 3;    // Mapped to URL query parameter `sub.subfield`.\n *     }\n *\n * This enables a HTTP JSON to RPC mapping as below:\n *\n * - HTTP: `GET /v1/messages/123456?revision=2&sub.subfield=foo`\n * - gRPC: `GetMessage(message_id: \"123456\" revision: 2 sub:\n * SubMessage(subfield: \"foo\"))`\n *\n * Note that fields which are mapped to URL query parameters must have a\n * primitive type or a repeated primitive type or a non-repeated message type.\n * In the case of a repeated type, the parameter can be repeated in the URL\n * as `...?param=A&param=B`. In the case of a message type, each field of the\n * message is mapped to a separate parameter, such as\n * `...?foo.a=A&foo.b=B&foo.c=C`.\n *\n * For HTTP methods that allow a request body, the `body` field\n * specifies the mapping. Consider a REST update method on the\n * message resource collection:\n *\n *     service Messaging {\n *       rpc UpdateMessage(UpdateMessageRequest) returns (Message) {\n *         option (google.api.http) = {\n *           patch: \"/v1/messages/{message_id}\"\n *           body: \"message\"\n *         };\n *       }\n *     }\n *     message UpdateMessageRequest {\n *       string message_id = 1; // mapped to the URL\n *       Message message = 2;   // mapped to the body\n *     }\n *\n * The following HTTP JSON to RPC mapping is enabled, where the\n * representation of the JSON in the request body is determined by\n * protos JSON encoding:\n *\n * - HTTP: `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }`\n * - gRPC: `UpdateMessage(message_id: \"123456\" message { text: \"Hi!\" })`\n *\n * The special name `*` can be used in the body mapping to define that\n * every field not bound by the path template should be mapped to the\n * request body.  This enables the following alternative definition of\n * the update method:\n *\n *     service Messaging {\n *       rpc UpdateMessage(Message) returns (Message) {\n *         option (google.api.http) = {\n *           patch: \"/v1/messages/{message_id}\"\n *           body: \"*\"\n *         };\n *       }\n *     }\n *     message Message {\n *       string message_id = 1;\n *       string text = 2;\n *     }\n *\n *\n * The following HTTP JSON to RPC mapping is enabled:\n *\n * - HTTP: `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }`\n * - gRPC: `UpdateMessage(message_id: \"123456\" text: \"Hi!\")`\n *\n * Note that when using `*` in the body mapping, it is not possible to\n * have HTTP parameters, as all fields not bound by the path end in\n * the body. This makes this option more rarely used in practice when\n * defining REST APIs. The common usage of `*` is in custom methods\n * which don't use the URL at all for transferring data.\n *\n * It is possible to define multiple HTTP methods for one RPC by using\n * the `additional_bindings` option. Example:\n *\n *     service Messaging {\n *       rpc GetMessage(GetMessageRequest) returns (Message) {\n *         option (google.api.http) = {\n *           get: \"/v1/messages/{message_id}\"\n *           additional_bindings {\n *             get: \"/v1/users/{user_id}/messages/{message_id}\"\n *           }\n *         };\n *       }\n *     }\n *     message GetMessageRequest {\n *       string message_id = 1;\n *       string user_id = 2;\n *     }\n *\n * This enables the following two alternative HTTP JSON to RPC mappings:\n *\n * - HTTP: `GET /v1/messages/123456`\n * - gRPC: `GetMessage(message_id: \"123456\")`\n *\n * - HTTP: `GET /v1/users/me/messages/123456`\n * - gRPC: `GetMessage(user_id: \"me\" message_id: \"123456\")`\n *\n * Rules for HTTP mapping\n *\n * 1. Leaf request fields (recursive expansion nested messages in the request\n *    message) are classified into three categories:\n *    - Fields referred by the path template. They are passed via the URL path.\n *    - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They\n *    are passed via the HTTP\n *      request body.\n *    - All other fields are passed via the URL query parameters, and the\n *      parameter name is the field path in the request message. A repeated\n *      field can be represented as multiple query parameters under the same\n *      name.\n *  2. If [HttpRule.body][google.api.HttpRule.body] is \"*\", there is no URL\n *  query parameter, all fields\n *     are passed via URL path and HTTP request body.\n *  3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP\n *  request body, all\n *     fields are passed via URL path and URL query parameters.\n *\n * Path template syntax\n *\n *     Template = \"/\" Segments [ Verb ] ;\n *     Segments = Segment { \"/\" Segment } ;\n *     Segment  = \"*\" | \"**\" | LITERAL | Variable ;\n *     Variable = \"{\" FieldPath [ \"=\" Segments ] \"}\" ;\n *     FieldPath = IDENT { \".\" IDENT } ;\n *     Verb     = \":\" LITERAL ;\n *\n * The syntax `*` matches a single URL path segment. The syntax `**` matches\n * zero or more URL path segments, which must be the last part of the URL path\n * except the `Verb`.\n *\n * The syntax `Variable` matches part of the URL path as specified by its\n * template. A variable template must not contain other variables. If a variable\n * matches a single path segment, its template may be omitted, e.g. `{var}`\n * is equivalent to `{var=*}`.\n *\n * The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL`\n * contains any reserved character, such characters should be percent-encoded\n * before the matching.\n *\n * If a variable contains exactly one path segment, such as `\"{var}\"` or\n * `\"{var=*}\"`, when such a variable is expanded into a URL path on the client\n * side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The\n * server side does the reverse decoding. Such variables show up in the\n * [Discovery\n * Document](https://developers.google.com/discovery/v1/reference/apis) as\n * `{var}`.\n *\n * If a variable contains multiple path segments, such as `\"{var=foo/*}\"`\n * or `\"{var=**}\"`, when such a variable is expanded into a URL path on the\n * client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded.\n * The server side does the reverse decoding, except \"%2F\" and \"%2f\" are left\n * unchanged. Such variables show up in the\n * [Discovery\n * Document](https://developers.google.com/discovery/v1/reference/apis) as\n * `{+var}`.\n *\n * Using gRPC API Service Configuration\n *\n * gRPC API Service Configuration (service config) is a configuration language\n * for configuring a gRPC service to become a user-facing product. The\n * service config is simply the YAML representation of the `google.api.Service`\n * proto message.\n *\n * As an alternative to annotating your proto file, you can configure gRPC\n * transcoding in your service config YAML files. You do this by specifying a\n * `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same\n * effect as the proto annotation. This can be particularly useful if you\n * have a proto that is reused in multiple services. Note that any transcoding\n * specified in the service config will override any matching transcoding\n * configuration in the proto.\n *\n * The following example selects a gRPC method and applies an `HttpRule` to it:\n *\n *     http:\n *       rules:\n *         - selector: example.v1.Messaging.GetMessage\n *           get: /v1/messages/{message_id}/{sub.subfield}\n *\n * Special notes\n *\n * When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the\n * proto to JSON conversion must follow the [proto3\n * specification](https://developers.google.com/protocol-buffers/docs/proto3#json).\n *\n * While the single segment variable follows the semantics of\n * [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String\n * Expansion, the multi segment variable **does not** follow RFC 6570 Section\n * 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion\n * does not expand special characters like `?` and `#`, which would lead\n * to invalid URLs. As the result, gRPC Transcoding uses a custom encoding\n * for multi segment variables.\n *\n * The path variables **must not** refer to any repeated or mapped field,\n * because client libraries are not capable of handling such variable expansion.\n *\n * The path variables **must not** capture the leading \"/\" character. The reason\n * is that the most common use case \"{var}\" does not capture the leading \"/\"\n * character. For consistency, all path variables must share the same behavior.\n *\n * Repeated message fields must not be mapped to URL query parameters, because\n * no client library can support such complicated mapping.\n *\n * If an API needs to use a JSON array for request or response body, it can map\n * the request or response body to a repeated field. However, some gRPC\n * Transcoding implementations may not support this feature.\n *\n * @generated from message google.api.HttpRule\n */\nexport type HttpRule = Message<\"google.api.HttpRule\"> & {\n  /**\n   * Selects a method to which this rule applies.\n   *\n   * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n   * details.\n   *\n   * @generated from field: string selector = 1;\n   */\n  selector: string;\n\n  /**\n   * Determines the URL pattern is matched by this rules. This pattern can be\n   * used with any of the {get|put|post|delete|patch} methods. A custom method\n   * can be defined using the 'custom' field.\n   *\n   * @generated from oneof google.api.HttpRule.pattern\n   */\n  pattern: {\n    /**\n     * Maps to HTTP GET. Used for listing and getting information about\n     * resources.\n     *\n     * @generated from field: string get = 2;\n     */\n    value: string;\n    case: \"get\";\n  } | {\n    /**\n     * Maps to HTTP PUT. Used for replacing a resource.\n     *\n     * @generated from field: string put = 3;\n     */\n    value: string;\n    case: \"put\";\n  } | {\n    /**\n     * Maps to HTTP POST. Used for creating a resource or performing an action.\n     *\n     * @generated from field: string post = 4;\n     */\n    value: string;\n    case: \"post\";\n  } | {\n    /**\n     * Maps to HTTP DELETE. Used for deleting a resource.\n     *\n     * @generated from field: string delete = 5;\n     */\n    value: string;\n    case: \"delete\";\n  } | {\n    /**\n     * Maps to HTTP PATCH. Used for updating a resource.\n     *\n     * @generated from field: string patch = 6;\n     */\n    value: string;\n    case: \"patch\";\n  } | {\n    /**\n     * The custom pattern is used for specifying an HTTP method that is not\n     * included in the `pattern` field, such as HEAD, or \"*\" to leave the\n     * HTTP method unspecified for this rule. The wild-card rule is useful\n     * for services that provide content to Web (HTML) clients.\n     *\n     * @generated from field: google.api.CustomHttpPattern custom = 8;\n     */\n    value: CustomHttpPattern;\n    case: \"custom\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * The name of the request field whose value is mapped to the HTTP request\n   * body, or `*` for mapping all request fields not captured by the path\n   * pattern to the HTTP body, or omitted for not having any HTTP request body.\n   *\n   * NOTE: the referred field must be present at the top-level of the request\n   * message type.\n   *\n   * @generated from field: string body = 7;\n   */\n  body: string;\n\n  /**\n   * Optional. The name of the response field whose value is mapped to the HTTP\n   * response body. When omitted, the entire response message will be used\n   * as the HTTP response body.\n   *\n   * NOTE: The referred field must be present at the top-level of the response\n   * message type.\n   *\n   * @generated from field: string response_body = 12;\n   */\n  responseBody: string;\n\n  /**\n   * Additional HTTP bindings for the selector. Nested bindings must\n   * not contain an `additional_bindings` field themselves (that is,\n   * the nesting may only be one level deep).\n   *\n   * @generated from field: repeated google.api.HttpRule additional_bindings = 11;\n   */\n  additionalBindings: HttpRule[];\n};\n\n/**\n * Describes the message google.api.HttpRule.\n * Use `create(HttpRuleSchema)` to create a new message.\n */\nexport const HttpRuleSchema: GenMessage<HttpRule> = /*@__PURE__*/\n  messageDesc(file_google_api_http, 1);\n\n/**\n * A custom pattern is used for defining custom HTTP verb.\n *\n * @generated from message google.api.CustomHttpPattern\n */\nexport type CustomHttpPattern = Message<\"google.api.CustomHttpPattern\"> & {\n  /**\n   * The name of this custom HTTP verb.\n   *\n   * @generated from field: string kind = 1;\n   */\n  kind: string;\n\n  /**\n   * The path matched by this custom verb.\n   *\n   * @generated from field: string path = 2;\n   */\n  path: string;\n};\n\n/**\n * Describes the message google.api.CustomHttpPattern.\n * Use `create(CustomHttpPatternSchema)` to create a new message.\n */\nexport const CustomHttpPatternSchema: GenMessage<CustomHttpPattern> = /*@__PURE__*/\n  messageDesc(file_google_api_http, 2);\n\n","// Copyright 2025 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file google/api/annotations.proto (package google.api, syntax proto3)\n/* eslint-disable */\n\nimport type { GenExtension, GenFile } from \"@bufbuild/protobuf/codegenv2\";\nimport { extDesc, fileDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { HttpRule } from \"./http_pb\";\nimport { file_google_api_http } from \"./http_pb\";\nimport type { MethodOptions } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_descriptor } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file google/api/annotations.proto.\n */\nexport const file_google_api_annotations: GenFile = /*@__PURE__*/\n  fileDesc(\"Chxnb29nbGUvYXBpL2Fubm90YXRpb25zLnByb3RvEgpnb29nbGUuYXBpOksKBGh0dHASHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxiwyrwiIAEoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSBGh0dHBCrgEKDmNvbS5nb29nbGUuYXBpQhBBbm5vdGF0aW9uc1Byb3RvUAFaQWdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpL2Fubm90YXRpb25zO2Fubm90YXRpb25zogIDR0FYqgIKR29vZ2xlLkFwacoCCkdvb2dsZVxBcGniAhZHb29nbGVcQXBpXEdQQk1ldGFkYXRh6gILR29vZ2xlOjpBcGliBnByb3RvMw\", [file_google_api_http, file_google_protobuf_descriptor]);\n\n/**\n * See `HttpRule`.\n *\n * @generated from extension: google.api.HttpRule http = 72295728;\n */\nexport const http: GenExtension<MethodOptions, HttpRule> = /*@__PURE__*/\n  extDesc(file_google_api_annotations, 0);\n\n","// Copyright 2026 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file google/api/launch_stage.proto (package google.api, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc } from \"@bufbuild/protobuf/codegenv2\";\n\n/**\n * Describes the file google/api/launch_stage.proto.\n */\nexport const file_google_api_launch_stage: GenFile = /*@__PURE__*/\n  fileDesc(\"Ch1nb29nbGUvYXBpL2xhdW5jaF9zdGFnZS5wcm90bxIKZ29vZ2xlLmFwaSqMAQoLTGF1bmNoU3RhZ2USHAoYTEFVTkNIX1NUQUdFX1VOU1BFQ0lGSUVEEAASEQoNVU5JTVBMRU1FTlRFRBAGEg0KCVBSRUxBVU5DSBAHEhAKDEVBUkxZX0FDQ0VTUxABEgkKBUFMUEhBEAISCAoEQkVUQRADEgYKAkdBEAQSDgoKREVQUkVDQVRFRBAFQpoBCg5jb20uZ29vZ2xlLmFwaUIQTGF1bmNoU3RhZ2VQcm90b1ABWi1nb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL2FwaTthcGmiAgNHQViqAgpHb29nbGUuQXBpygIKR29vZ2xlXEFwaeICFkdvb2dsZVxBcGlcR1BCTWV0YWRhdGHqAgtHb29nbGU6OkFwaWIGcHJvdG8z\");\n\n/**\n * The launch stage as defined by [Google Cloud Platform\n * Launch Stages](https://cloud.google.com/terms/launch-stages).\n *\n * @generated from enum google.api.LaunchStage\n */\nexport enum LaunchStage {\n  /**\n   * Do not use this default value.\n   *\n   * @generated from enum value: LAUNCH_STAGE_UNSPECIFIED = 0;\n   */\n  LAUNCH_STAGE_UNSPECIFIED = 0,\n\n  /**\n   * The feature is not yet implemented. Users can not use it.\n   *\n   * @generated from enum value: UNIMPLEMENTED = 6;\n   */\n  UNIMPLEMENTED = 6,\n\n  /**\n   * Prelaunch features are hidden from users and are only visible internally.\n   *\n   * @generated from enum value: PRELAUNCH = 7;\n   */\n  PRELAUNCH = 7,\n\n  /**\n   * Early Access features are limited to a closed group of testers. To use\n   * these features, you must sign up in advance and sign a Trusted Tester\n   * agreement (which includes confidentiality provisions). These features may\n   * be unstable, changed in backward-incompatible ways, and are not\n   * guaranteed to be released.\n   *\n   * @generated from enum value: EARLY_ACCESS = 1;\n   */\n  EARLY_ACCESS = 1,\n\n  /**\n   * Alpha is a limited availability test for releases before they are cleared\n   * for widespread use. By Alpha, all significant design issues are resolved\n   * and we are in the process of verifying functionality. Alpha customers\n   * need to apply for access, agree to applicable terms, and have their\n   * projects allowlisted. Alpha releases don't have to be feature complete,\n   * no SLAs are provided, and there are no technical support obligations, but\n   * they will be far enough along that customers can actually use them in\n   * test environments or for limited-use tests -- just like they would in\n   * normal production cases.\n   *\n   * @generated from enum value: ALPHA = 2;\n   */\n  ALPHA = 2,\n\n  /**\n   * Beta is the point at which we are ready to open a release for any\n   * customer to use. There are no SLA or technical support obligations in a\n   * Beta release. Products will be complete from a feature perspective, but\n   * may have some open outstanding issues. Beta releases are suitable for\n   * limited production use cases.\n   *\n   * @generated from enum value: BETA = 3;\n   */\n  BETA = 3,\n\n  /**\n   * GA features are open to all developers and are considered stable and\n   * fully qualified for production use.\n   *\n   * @generated from enum value: GA = 4;\n   */\n  GA = 4,\n\n  /**\n   * Deprecated features are scheduled to be shut down and removed. For more\n   * information, see the \"Deprecation Policy\" section of our [Terms of\n   * Service](https://cloud.google.com/terms/)\n   * and the [Google Cloud Platform Subject to the Deprecation\n   * Policy](https://cloud.google.com/terms/deprecation) documentation.\n   *\n   * @generated from enum value: DEPRECATED = 5;\n   */\n  DEPRECATED = 5,\n}\n\n/**\n * Describes the enum google.api.LaunchStage.\n */\nexport const LaunchStageSchema: GenEnum<LaunchStage> = /*@__PURE__*/\n  enumDesc(file_google_api_launch_stage, 0);\n\n","// Copyright 2026 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file google/api/client.proto (package google.api, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenExtension, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, extDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { LaunchStage } from \"./launch_stage_pb\";\nimport { file_google_api_launch_stage } from \"./launch_stage_pb\";\nimport type { Duration, MethodOptions, ServiceOptions } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_descriptor, file_google_protobuf_duration } from \"@bufbuild/protobuf/wkt\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file google/api/client.proto.\n */\nexport const file_google_api_client: GenFile = /*@__PURE__*/\n  fileDesc(\"Chdnb29nbGUvYXBpL2NsaWVudC5wcm90bxIKZ29vZ2xlLmFwaSK+AQoWQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxIeChJyZWZlcmVuY2VfZG9jc191cmkYASABKAlCAhgBEjoKDGRlc3RpbmF0aW9ucxgCIAMoDjIkLmdvb2dsZS5hcGkuQ2xpZW50TGlicmFyeURlc3RpbmF0aW9uEkgKGnNlbGVjdGl2ZV9nYXBpY19nZW5lcmF0aW9uGAMgASgLMiQuZ29vZ2xlLmFwaS5TZWxlY3RpdmVHYXBpY0dlbmVyYXRpb24i+wMKFUNsaWVudExpYnJhcnlTZXR0aW5ncxIPCgd2ZXJzaW9uGAEgASgJEi0KDGxhdW5jaF9zdGFnZRgCIAEoDjIXLmdvb2dsZS5hcGkuTGF1bmNoU3RhZ2USGgoScmVzdF9udW1lcmljX2VudW1zGAMgASgIEi8KDWphdmFfc2V0dGluZ3MYFSABKAsyGC5nb29nbGUuYXBpLkphdmFTZXR0aW5ncxItCgxjcHBfc2V0dGluZ3MYFiABKAsyFy5nb29nbGUuYXBpLkNwcFNldHRpbmdzEi0KDHBocF9zZXR0aW5ncxgXIAEoCzIXLmdvb2dsZS5hcGkuUGhwU2V0dGluZ3MSMwoPcHl0aG9uX3NldHRpbmdzGBggASgLMhouZ29vZ2xlLmFwaS5QeXRob25TZXR0aW5ncxIvCg1ub2RlX3NldHRpbmdzGBkgASgLMhguZ29vZ2xlLmFwaS5Ob2RlU2V0dGluZ3MSMwoPZG90bmV0X3NldHRpbmdzGBogASgLMhouZ29vZ2xlLmFwaS5Eb3RuZXRTZXR0aW5ncxIvCg1ydWJ5X3NldHRpbmdzGBsgASgLMhguZ29vZ2xlLmFwaS5SdWJ5U2V0dGluZ3MSKwoLZ29fc2V0dGluZ3MYHCABKAsyFi5nb29nbGUuYXBpLkdvU2V0dGluZ3MiqAMKClB1Ymxpc2hpbmcSMwoPbWV0aG9kX3NldHRpbmdzGAIgAygLMhouZ29vZ2xlLmFwaS5NZXRob2RTZXR0aW5ncxIVCg1uZXdfaXNzdWVfdXJpGGUgASgJEhkKEWRvY3VtZW50YXRpb25fdXJpGGYgASgJEhYKDmFwaV9zaG9ydF9uYW1lGGcgASgJEhQKDGdpdGh1Yl9sYWJlbBhoIAEoCRIeChZjb2Rlb3duZXJfZ2l0aHViX3RlYW1zGGkgAygJEhYKDmRvY190YWdfcHJlZml4GGogASgJEjsKDG9yZ2FuaXphdGlvbhhrIAEoDjIlLmdvb2dsZS5hcGkuQ2xpZW50TGlicmFyeU9yZ2FuaXphdGlvbhI7ChBsaWJyYXJ5X3NldHRpbmdzGG0gAygLMiEuZ29vZ2xlLmFwaS5DbGllbnRMaWJyYXJ5U2V0dGluZ3MSKQohcHJvdG9fcmVmZXJlbmNlX2RvY3VtZW50YXRpb25fdXJpGG4gASgJEigKIHJlc3RfcmVmZXJlbmNlX2RvY3VtZW50YXRpb25fdXJpGG8gASgJIuMBCgxKYXZhU2V0dGluZ3MSFwoPbGlicmFyeV9wYWNrYWdlGAEgASgJEkwKE3NlcnZpY2VfY2xhc3NfbmFtZXMYAiADKAsyLy5nb29nbGUuYXBpLkphdmFTZXR0aW5ncy5TZXJ2aWNlQ2xhc3NOYW1lc0VudHJ5EjIKBmNvbW1vbhgDIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxo4ChZTZXJ2aWNlQ2xhc3NOYW1lc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiQQoLQ3BwU2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzIloKC1BocFNldHRpbmdzEjIKBmNvbW1vbhgBIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxIXCg9saWJyYXJ5X3BhY2thZ2UYAiABKAkimwIKDlB5dGhvblNldHRpbmdzEjIKBmNvbW1vbhgBIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxJOChVleHBlcmltZW50YWxfZmVhdHVyZXMYAiABKAsyLy5nb29nbGUuYXBpLlB5dGhvblNldHRpbmdzLkV4cGVyaW1lbnRhbEZlYXR1cmVzGoQBChRFeHBlcmltZW50YWxGZWF0dXJlcxIdChVyZXN0X2FzeW5jX2lvX2VuYWJsZWQYASABKAgSJwofcHJvdG9idWZfcHl0aG9uaWNfdHlwZXNfZW5hYmxlZBgCIAEoCBIkChx1bnZlcnNpb25lZF9wYWNrYWdlX2Rpc2FibGVkGAMgASgIIkIKDE5vZGVTZXR0aW5ncxIyCgZjb21tb24YASABKAsyIi5nb29nbGUuYXBpLkNvbW1vbkxhbmd1YWdlU2V0dGluZ3MiqgMKDkRvdG5ldFNldHRpbmdzEjIKBmNvbW1vbhgBIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxJJChByZW5hbWVkX3NlcnZpY2VzGAIgAygLMi8uZ29vZ2xlLmFwaS5Eb3RuZXRTZXR0aW5ncy5SZW5hbWVkU2VydmljZXNFbnRyeRJLChFyZW5hbWVkX3Jlc291cmNlcxgDIAMoCzIwLmdvb2dsZS5hcGkuRG90bmV0U2V0dGluZ3MuUmVuYW1lZFJlc291cmNlc0VudHJ5EhkKEWlnbm9yZWRfcmVzb3VyY2VzGAQgAygJEiAKGGZvcmNlZF9uYW1lc3BhY2VfYWxpYXNlcxgFIAMoCRIeChZoYW5kd3JpdHRlbl9zaWduYXR1cmVzGAYgAygJGjYKFFJlbmFtZWRTZXJ2aWNlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEaNwoVUmVuYW1lZFJlc291cmNlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiQgoMUnVieVNldHRpbmdzEjIKBmNvbW1vbhgBIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncyK/AQoKR29TZXR0aW5ncxIyCgZjb21tb24YASABKAsyIi5nb29nbGUuYXBpLkNvbW1vbkxhbmd1YWdlU2V0dGluZ3MSRQoQcmVuYW1lZF9zZXJ2aWNlcxgCIAMoCzIrLmdvb2dsZS5hcGkuR29TZXR0aW5ncy5SZW5hbWVkU2VydmljZXNFbnRyeRo2ChRSZW5hbWVkU2VydmljZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIoIDCg5NZXRob2RTZXR0aW5ncxIQCghzZWxlY3RvchgBIAEoCRI8Cgxsb25nX3J1bm5pbmcYAiABKAsyJi5nb29nbGUuYXBpLk1ldGhvZFNldHRpbmdzLkxvbmdSdW5uaW5nEh0KFWF1dG9fcG9wdWxhdGVkX2ZpZWxkcxgDIAMoCRIxCghiYXRjaGluZxgEIAEoCzIfLmdvb2dsZS5hcGkuQmF0Y2hpbmdDb25maWdQcm90bxrNAQoLTG9uZ1J1bm5pbmcSNQoSaW5pdGlhbF9wb2xsX2RlbGF5GAEgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uEh0KFXBvbGxfZGVsYXlfbXVsdGlwbGllchgCIAEoAhIxCg5tYXhfcG9sbF9kZWxheRgDIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbhI1ChJ0b3RhbF9wb2xsX3RpbWVvdXQYBCABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb24iUQoYU2VsZWN0aXZlR2FwaWNHZW5lcmF0aW9uEg8KB21ldGhvZHMYASADKAkSJAocZ2VuZXJhdGVfb21pdHRlZF9hc19pbnRlcm5hbBgCIAEoCCKLAQoTQmF0Y2hpbmdDb25maWdQcm90bxI1Cgp0aHJlc2hvbGRzGAEgASgLMiEuZ29vZ2xlLmFwaS5CYXRjaGluZ1NldHRpbmdzUHJvdG8SPQoQYmF0Y2hfZGVzY3JpcHRvchgCIAEoCzIjLmdvb2dsZS5hcGkuQmF0Y2hpbmdEZXNjcmlwdG9yUHJvdG8i6wIKFUJhdGNoaW5nU2V0dGluZ3NQcm90bxIfChdlbGVtZW50X2NvdW50X3RocmVzaG9sZBgBIAEoBRIeChZyZXF1ZXN0X2J5dGVfdGhyZXNob2xkGAIgASgDEjIKD2RlbGF5X3RocmVzaG9sZBgDIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbhIbChNlbGVtZW50X2NvdW50X2xpbWl0GAQgASgFEhoKEnJlcXVlc3RfYnl0ZV9saW1pdBgFIAEoBRIiChpmbG93X2NvbnRyb2xfZWxlbWVudF9saW1pdBgGIAEoBRIfChdmbG93X2NvbnRyb2xfYnl0ZV9saW1pdBgHIAEoBRJfCiRmbG93X2NvbnRyb2xfbGltaXRfZXhjZWVkZWRfYmVoYXZpb3IYCCABKA4yMS5nb29nbGUuYXBpLkZsb3dDb250cm9sTGltaXRFeGNlZWRlZEJlaGF2aW9yUHJvdG8iaQoXQmF0Y2hpbmdEZXNjcmlwdG9yUHJvdG8SFQoNYmF0Y2hlZF9maWVsZBgBIAEoCRIcChRkaXNjcmltaW5hdG9yX2ZpZWxkcxgCIAMoCRIZChFzdWJyZXNwb25zZV9maWVsZBgDIAEoCSqjAQoZQ2xpZW50TGlicmFyeU9yZ2FuaXphdGlvbhIrCidDTElFTlRfTElCUkFSWV9PUkdBTklaQVRJT05fVU5TUEVDSUZJRUQQABIJCgVDTE9VRBABEgcKA0FEUxACEgoKBlBIT1RPUxADEg8KC1NUUkVFVF9WSUVXEAQSDAoIU0hPUFBJTkcQBRIHCgNHRU8QBhIRCg1HRU5FUkFUSVZFX0FJEAcqZwoYQ2xpZW50TGlicmFyeURlc3RpbmF0aW9uEioKJkNMSUVOVF9MSUJSQVJZX0RFU1RJTkFUSU9OX1VOU1BFQ0lGSUVEEAASCgoGR0lUSFVCEAoSEwoPUEFDS0FHRV9NQU5BR0VSEBQqZwolRmxvd0NvbnRyb2xMaW1pdEV4Y2VlZGVkQmVoYXZpb3JQcm90bxISCg5VTlNFVF9CRUhBVklPUhAAEhMKD1RIUk9XX0VYQ0VQVElPThABEgkKBUJMT0NLEAISCgoGSUdOT1JFEAM6SgoQbWV0aG9kX3NpZ25hdHVyZRIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zGJsIIAMoCVIPbWV0aG9kU2lnbmF0dXJlOkMKDGRlZmF1bHRfaG9zdBIfLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucxiZCCABKAlSC2RlZmF1bHRIb3N0OkMKDG9hdXRoX3Njb3BlcxIfLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucxiaCCABKAlSC29hdXRoU2NvcGVzOkQKC2FwaV92ZXJzaW9uEh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zGMG6q/oBIAEoCVIKYXBpVmVyc2lvbkKpAQoOY29tLmdvb2dsZS5hcGlCC0NsaWVudFByb3RvUAFaQWdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpL2Fubm90YXRpb25zO2Fubm90YXRpb25zogIDR0FYqgIKR29vZ2xlLkFwacoCCkdvb2dsZVxBcGniAhZHb29nbGVcQXBpXEdQQk1ldGFkYXRh6gILR29vZ2xlOjpBcGliBnByb3RvMw\", [file_google_api_launch_stage, file_google_protobuf_descriptor, file_google_protobuf_duration]);\n\n/**\n * Required information for every language.\n *\n * @generated from message google.api.CommonLanguageSettings\n */\nexport type CommonLanguageSettings = Message<\"google.api.CommonLanguageSettings\"> & {\n  /**\n   * Link to automatically generated reference documentation.  Example:\n   * https://cloud.google.com/nodejs/docs/reference/asset/latest\n   *\n   * @generated from field: string reference_docs_uri = 1 [deprecated = true];\n   * @deprecated\n   */\n  referenceDocsUri: string;\n\n  /**\n   * The destination where API teams want this client library to be published.\n   *\n   * @generated from field: repeated google.api.ClientLibraryDestination destinations = 2;\n   */\n  destinations: ClientLibraryDestination[];\n\n  /**\n   * Configuration for which RPCs should be generated in the GAPIC client.\n   *\n   * Note: This field should not be used in most cases.\n   *\n   * @generated from field: google.api.SelectiveGapicGeneration selective_gapic_generation = 3;\n   */\n  selectiveGapicGeneration?: SelectiveGapicGeneration | undefined;\n};\n\n/**\n * Describes the message google.api.CommonLanguageSettings.\n * Use `create(CommonLanguageSettingsSchema)` to create a new message.\n */\nexport const CommonLanguageSettingsSchema: GenMessage<CommonLanguageSettings> = /*@__PURE__*/\n  messageDesc(file_google_api_client, 0);\n\n/**\n * Details about how and where to publish client libraries.\n *\n * @generated from message google.api.ClientLibrarySettings\n */\nexport type ClientLibrarySettings = Message<\"google.api.ClientLibrarySettings\"> & {\n  /**\n   * Version of the API to apply these settings to. This is the full protobuf\n   * package for the API, ending in the version element.\n   * Examples: \"google.cloud.speech.v1\" and \"google.spanner.admin.database.v1\".\n   *\n   * @generated from field: string version = 1;\n   */\n  version: string;\n\n  /**\n   * Launch stage of this version of the API.\n   *\n   * @generated from field: google.api.LaunchStage launch_stage = 2;\n   */\n  launchStage: LaunchStage;\n\n  /**\n   * When using transport=rest, the client request will encode enums as\n   * numbers rather than strings.\n   *\n   * @generated from field: bool rest_numeric_enums = 3;\n   */\n  restNumericEnums: boolean;\n\n  /**\n   * Settings for legacy Java features, supported in the Service YAML.\n   *\n   * @generated from field: google.api.JavaSettings java_settings = 21;\n   */\n  javaSettings?: JavaSettings | undefined;\n\n  /**\n   * Settings for C++ client libraries.\n   *\n   * @generated from field: google.api.CppSettings cpp_settings = 22;\n   */\n  cppSettings?: CppSettings | undefined;\n\n  /**\n   * Settings for PHP client libraries.\n   *\n   * @generated from field: google.api.PhpSettings php_settings = 23;\n   */\n  phpSettings?: PhpSettings | undefined;\n\n  /**\n   * Settings for Python client libraries.\n   *\n   * @generated from field: google.api.PythonSettings python_settings = 24;\n   */\n  pythonSettings?: PythonSettings | undefined;\n\n  /**\n   * Settings for Node client libraries.\n   *\n   * @generated from field: google.api.NodeSettings node_settings = 25;\n   */\n  nodeSettings?: NodeSettings | undefined;\n\n  /**\n   * Settings for .NET client libraries.\n   *\n   * @generated from field: google.api.DotnetSettings dotnet_settings = 26;\n   */\n  dotnetSettings?: DotnetSettings | undefined;\n\n  /**\n   * Settings for Ruby client libraries.\n   *\n   * @generated from field: google.api.RubySettings ruby_settings = 27;\n   */\n  rubySettings?: RubySettings | undefined;\n\n  /**\n   * Settings for Go client libraries.\n   *\n   * @generated from field: google.api.GoSettings go_settings = 28;\n   */\n  goSettings?: GoSettings | undefined;\n};\n\n/**\n * Describes the message google.api.ClientLibrarySettings.\n * Use `create(ClientLibrarySettingsSchema)` to create a new message.\n */\nexport const ClientLibrarySettingsSchema: GenMessage<ClientLibrarySettings> = /*@__PURE__*/\n  messageDesc(file_google_api_client, 1);\n\n/**\n * This message configures the settings for publishing [Google Cloud Client\n * libraries](https://cloud.google.com/apis/docs/cloud-client-libraries)\n * generated from the service config.\n *\n * @generated from message google.api.Publishing\n */\nexport type Publishing = Message<\"google.api.Publishing\"> & {\n  /**\n   * A list of API method settings, e.g. the behavior for methods that use the\n   * long-running operation pattern.\n   *\n   * @generated from field: repeated google.api.MethodSettings method_settings = 2;\n   */\n  methodSettings: MethodSettings[];\n\n  /**\n   * Link to a *public* URI where users can report issues.  Example:\n   * https://issuetracker.google.com/issues/new?component=190865&template=1161103\n   *\n   * @generated from field: string new_issue_uri = 101;\n   */\n  newIssueUri: string;\n\n  /**\n   * Link to product home page.  Example:\n   * https://cloud.google.com/asset-inventory/docs/overview\n   *\n   * @generated from field: string documentation_uri = 102;\n   */\n  documentationUri: string;\n\n  /**\n   * Used as a tracking tag when collecting data about the APIs developer\n   * relations artifacts like docs, packages delivered to package managers,\n   * etc.  Example: \"speech\".\n   *\n   * @generated from field: string api_short_name = 103;\n   */\n  apiShortName: string;\n\n  /**\n   * GitHub label to apply to issues and pull requests opened for this API.\n   *\n   * @generated from field: string github_label = 104;\n   */\n  githubLabel: string;\n\n  /**\n   * GitHub teams to be added to CODEOWNERS in the directory in GitHub\n   * containing source code for the client libraries for this API.\n   *\n   * @generated from field: repeated string codeowner_github_teams = 105;\n   */\n  codeownerGithubTeams: string[];\n\n  /**\n   * A prefix used in sample code when demarking regions to be included in\n   * documentation.\n   *\n   * @generated from field: string doc_tag_prefix = 106;\n   */\n  docTagPrefix: string;\n\n  /**\n   * For whom the client library is being published.\n   *\n   * @generated from field: google.api.ClientLibraryOrganization organization = 107;\n   */\n  organization: ClientLibraryOrganization;\n\n  /**\n   * Client library settings.  If the same version string appears multiple\n   * times in this list, then the last one wins.  Settings from earlier\n   * settings with the same version string are discarded.\n   *\n   * @generated from field: repeated google.api.ClientLibrarySettings library_settings = 109;\n   */\n  librarySettings: ClientLibrarySettings[];\n\n  /**\n   * Optional link to proto reference documentation.  Example:\n   * https://cloud.google.com/pubsub/lite/docs/reference/rpc\n   *\n   * @generated from field: string proto_reference_documentation_uri = 110;\n   */\n  protoReferenceDocumentationUri: string;\n\n  /**\n   * Optional link to REST reference documentation.  Example:\n   * https://cloud.google.com/pubsub/lite/docs/reference/rest\n   *\n   * @generated from field: string rest_reference_documentation_uri = 111;\n   */\n  restReferenceDocumentationUri: string;\n};\n\n/**\n * Describes the message google.api.Publishing.\n * Use `create(PublishingSchema)` to create a new message.\n */\nexport const PublishingSchema: GenMessage<Publishing> = /*@__PURE__*/\n  messageDesc(file_google_api_client, 2);\n\n/**\n * Settings for Java client libraries.\n *\n * @generated from message google.api.JavaSettings\n */\nexport type JavaSettings = Message<\"google.api.JavaSettings\"> & {\n  /**\n   * The package name to use in Java. Clobbers the java_package option\n   * set in the protobuf. This should be used **only** by APIs\n   * who have already set the language_settings.java.package_name\" field\n   * in gapic.yaml. API teams should use the protobuf java_package option\n   * where possible.\n   *\n   * Example of a YAML configuration::\n   *\n   *     publishing:\n   *       library_settings:\n   *         java_settings:\n   *           library_package: com.google.cloud.pubsub.v1\n   *\n   * @generated from field: string library_package = 1;\n   */\n  libraryPackage: string;\n\n  /**\n   * Configure the Java class name to use instead of the service's for its\n   * corresponding generated GAPIC client. Keys are fully-qualified\n   * service names as they appear in the protobuf (including the full\n   * the language_settings.java.interface_names\" field in gapic.yaml. API\n   * teams should otherwise use the service name as it appears in the\n   * protobuf.\n   *\n   * Example of a YAML configuration::\n   *\n   *     publishing:\n   *       java_settings:\n   *         service_class_names:\n   *           - google.pubsub.v1.Publisher: TopicAdmin\n   *           - google.pubsub.v1.Subscriber: SubscriptionAdmin\n   *\n   * @generated from field: map<string, string> service_class_names = 2;\n   */\n  serviceClassNames: { [key: string]: string };\n\n  /**\n   * Some settings.\n   *\n   * @generated from field: google.api.CommonLanguageSettings common = 3;\n   */\n  common?: CommonLanguageSettings | undefined;\n};\n\n/**\n * Describes the message google.api.JavaSettings.\n * Use `create(JavaSettingsSchema)` to create a new message.\n */\nexport const JavaSettingsSchema: GenMessage<JavaSettings> = /*@__PURE__*/\n  messageDesc(file_google_api_client, 3);\n\n/**\n * Settings for C++ client libraries.\n *\n * @generated from message google.api.CppSettings\n */\nexport type CppSettings = Message<\"google.api.CppSettings\"> & {\n  /**\n   * Some settings.\n   *\n   * @generated from field: google.api.CommonLanguageSettings common = 1;\n   */\n  common?: CommonLanguageSettings | undefined;\n};\n\n/**\n * Describes the message google.api.CppSettings.\n * Use `create(CppSettingsSchema)` to create a new message.\n */\nexport const CppSettingsSchema: GenMessage<CppSettings> = /*@__PURE__*/\n  messageDesc(file_google_api_client, 4);\n\n/**\n * Settings for Php client libraries.\n *\n * @generated from message google.api.PhpSettings\n */\nexport type PhpSettings = Message<\"google.api.PhpSettings\"> & {\n  /**\n   * Some settings.\n   *\n   * @generated from field: google.api.CommonLanguageSettings common = 1;\n   */\n  common?: CommonLanguageSettings | undefined;\n\n  /**\n   * The package name to use in Php. Clobbers the php_namespace option\n   * set in the protobuf. This should be used **only** by APIs\n   * who have already set the language_settings.php.package_name\" field\n   * in gapic.yaml. API teams should use the protobuf php_namespace option\n   * where possible.\n   *\n   * Example of a YAML configuration::\n   *\n   *     publishing:\n   *       library_settings:\n   *         php_settings:\n   *           library_package: Google\\Cloud\\PubSub\\V1\n   *\n   * @generated from field: string library_package = 2;\n   */\n  libraryPackage: string;\n};\n\n/**\n * Describes the message google.api.PhpSettings.\n * Use `create(PhpSettingsSchema)` to create a new message.\n */\nexport const PhpSettingsSchema: GenMessage<PhpSettings> = /*@__PURE__*/\n  messageDesc(file_google_api_client, 5);\n\n/**\n * Settings for Python client libraries.\n *\n * @generated from message google.api.PythonSettings\n */\nexport type PythonSettings = Message<\"google.api.PythonSettings\"> & {\n  /**\n   * Some settings.\n   *\n   * @generated from field: google.api.CommonLanguageSettings common = 1;\n   */\n  common?: CommonLanguageSettings | undefined;\n\n  /**\n   * Experimental features to be included during client library generation.\n   *\n   * @generated from field: google.api.PythonSettings.ExperimentalFeatures experimental_features = 2;\n   */\n  experimentalFeatures?: PythonSettings_ExperimentalFeatures | undefined;\n};\n\n/**\n * Describes the message google.api.PythonSettings.\n * Use `create(PythonSettingsSchema)` to create a new message.\n */\nexport const PythonSettingsSchema: GenMessage<PythonSettings> = /*@__PURE__*/\n  messageDesc(file_google_api_client, 6);\n\n/**\n * Experimental features to be included during client library generation.\n * These fields will be deprecated once the feature graduates and is enabled\n * by default.\n *\n * @generated from message google.api.PythonSettings.ExperimentalFeatures\n */\nexport type PythonSettings_ExperimentalFeatures = Message<\"google.api.PythonSettings.ExperimentalFeatures\"> & {\n  /**\n   * Enables generation of asynchronous REST clients if `rest` transport is\n   * enabled. By default, asynchronous REST clients will not be generated.\n   * This feature will be enabled by default 1 month after launching the\n   * feature in preview packages.\n   *\n   * @generated from field: bool rest_async_io_enabled = 1;\n   */\n  restAsyncIoEnabled: boolean;\n\n  /**\n   * Enables generation of protobuf code using new types that are more\n   * Pythonic which are included in `protobuf>=5.29.x`. This feature will be\n   * enabled by default 1 month after launching the feature in preview\n   * packages.\n   *\n   * @generated from field: bool protobuf_pythonic_types_enabled = 2;\n   */\n  protobufPythonicTypesEnabled: boolean;\n\n  /**\n   * Disables generation of an unversioned Python package for this client\n   * library. This means that the module names will need to be versioned in\n   * import statements. For example `import google.cloud.library_v2` instead\n   * of `import google.cloud.library`.\n   *\n   * @generated from field: bool unversioned_package_disabled = 3;\n   */\n  unversionedPackageDisabled: boolean;\n};\n\n/**\n * Describes the message google.api.PythonSettings.ExperimentalFeatures.\n * Use `create(PythonSettings_ExperimentalFeaturesSchema)` to create a new message.\n */\nexport const PythonSettings_ExperimentalFeaturesSchema: GenMessage<PythonSettings_ExperimentalFeatures> = /*@__PURE__*/\n  messageDesc(file_google_api_client, 6, 0);\n\n/**\n * Settings for Node client libraries.\n *\n * @generated from message google.api.NodeSettings\n */\nexport type NodeSettings = Message<\"google.api.NodeSettings\"> & {\n  /**\n   * Some settings.\n   *\n   * @generated from field: google.api.CommonLanguageSettings common = 1;\n   */\n  common?: CommonLanguageSettings | undefined;\n};\n\n/**\n * Describes the message google.api.NodeSettings.\n * Use `create(NodeSettingsSchema)` to create a new message.\n */\nexport const NodeSettingsSchema: GenMessage<NodeSettings> = /*@__PURE__*/\n  messageDesc(file_google_api_client, 7);\n\n/**\n * Settings for Dotnet client libraries.\n *\n * @generated from message google.api.DotnetSettings\n */\nexport type DotnetSettings = Message<\"google.api.DotnetSettings\"> & {\n  /**\n   * Some settings.\n   *\n   * @generated from field: google.api.CommonLanguageSettings common = 1;\n   */\n  common?: CommonLanguageSettings | undefined;\n\n  /**\n   * Map from original service names to renamed versions.\n   * This is used when the default generated types\n   * would cause a naming conflict. (Neither name is\n   * fully-qualified.)\n   * Example: Subscriber to SubscriberServiceApi.\n   *\n   * @generated from field: map<string, string> renamed_services = 2;\n   */\n  renamedServices: { [key: string]: string };\n\n  /**\n   * Map from full resource types to the effective short name\n   * for the resource. This is used when otherwise resource\n   * named from different services would cause naming collisions.\n   * Example entry:\n   * \"datalabeling.googleapis.com/Dataset\": \"DataLabelingDataset\"\n   *\n   * @generated from field: map<string, string> renamed_resources = 3;\n   */\n  renamedResources: { [key: string]: string };\n\n  /**\n   * List of full resource types to ignore during generation.\n   * This is typically used for API-specific Location resources,\n   * which should be handled by the generator as if they were actually\n   * the common Location resources.\n   * Example entry: \"documentai.googleapis.com/Location\"\n   *\n   * @generated from field: repeated string ignored_resources = 4;\n   */\n  ignoredResources: string[];\n\n  /**\n   * Namespaces which must be aliased in snippets due to\n   * a known (but non-generator-predictable) naming collision\n   *\n   * @generated from field: repeated string forced_namespace_aliases = 5;\n   */\n  forcedNamespaceAliases: string[];\n\n  /**\n   * Method signatures (in the form \"service.method(signature)\")\n   * which are provided separately, so shouldn't be generated.\n   * Snippets *calling* these methods are still generated, however.\n   *\n   * @generated from field: repeated string handwritten_signatures = 6;\n   */\n  handwrittenSignatures: string[];\n};\n\n/**\n * Describes the message google.api.DotnetSettings.\n * Use `create(DotnetSettingsSchema)` to create a new message.\n */\nexport const DotnetSettingsSchema: GenMessage<DotnetSettings> = /*@__PURE__*/\n  messageDesc(file_google_api_client, 8);\n\n/**\n * Settings for Ruby client libraries.\n *\n * @generated from message google.api.RubySettings\n */\nexport type RubySettings = Message<\"google.api.RubySettings\"> & {\n  /**\n   * Some settings.\n   *\n   * @generated from field: google.api.CommonLanguageSettings common = 1;\n   */\n  common?: CommonLanguageSettings | undefined;\n};\n\n/**\n * Describes the message google.api.RubySettings.\n * Use `create(RubySettingsSchema)` to create a new message.\n */\nexport const RubySettingsSchema: GenMessage<RubySettings> = /*@__PURE__*/\n  messageDesc(file_google_api_client, 9);\n\n/**\n * Settings for Go client libraries.\n *\n * @generated from message google.api.GoSettings\n */\nexport type GoSettings = Message<\"google.api.GoSettings\"> & {\n  /**\n   * Some settings.\n   *\n   * @generated from field: google.api.CommonLanguageSettings common = 1;\n   */\n  common?: CommonLanguageSettings | undefined;\n\n  /**\n   * Map of service names to renamed services. Keys are the package relative\n   * service names and values are the name to be used for the service client\n   * and call options.\n   *\n   * Example:\n   *\n   *     publishing:\n   *       go_settings:\n   *         renamed_services:\n   *           Publisher: TopicAdmin\n   *\n   * @generated from field: map<string, string> renamed_services = 2;\n   */\n  renamedServices: { [key: string]: string };\n};\n\n/**\n * Describes the message google.api.GoSettings.\n * Use `create(GoSettingsSchema)` to create a new message.\n */\nexport const GoSettingsSchema: GenMessage<GoSettings> = /*@__PURE__*/\n  messageDesc(file_google_api_client, 10);\n\n/**\n * Describes the generator configuration for a method.\n *\n * @generated from message google.api.MethodSettings\n */\nexport type MethodSettings = Message<\"google.api.MethodSettings\"> & {\n  /**\n   * The fully qualified name of the method, for which the options below apply.\n   * This is used to find the method to apply the options.\n   *\n   * Example:\n   *\n   *     publishing:\n   *       method_settings:\n   *       - selector: google.storage.control.v2.StorageControl.CreateFolder\n   *         # method settings for CreateFolder...\n   *\n   * @generated from field: string selector = 1;\n   */\n  selector: string;\n\n  /**\n   * Describes settings to use for long-running operations when generating\n   * API methods for RPCs. Complements RPCs that use the annotations in\n   * google/longrunning/operations.proto.\n   *\n   * Example of a YAML configuration::\n   *\n   *     publishing:\n   *       method_settings:\n   *       - selector: google.cloud.speech.v2.Speech.BatchRecognize\n   *         long_running:\n   *           initial_poll_delay: 60s # 1 minute\n   *           poll_delay_multiplier: 1.5\n   *           max_poll_delay: 360s # 6 minutes\n   *           total_poll_timeout: 54000s # 90 minutes\n   *\n   * @generated from field: google.api.MethodSettings.LongRunning long_running = 2;\n   */\n  longRunning?: MethodSettings_LongRunning | undefined;\n\n  /**\n   * List of top-level fields of the request message, that should be\n   * automatically populated by the client libraries based on their\n   * (google.api.field_info).format. Currently supported format: UUID4.\n   *\n   * Example of a YAML configuration:\n   *\n   *     publishing:\n   *       method_settings:\n   *       - selector: google.example.v1.ExampleService.CreateExample\n   *         auto_populated_fields:\n   *         - request_id\n   *\n   * @generated from field: repeated string auto_populated_fields = 3;\n   */\n  autoPopulatedFields: string[];\n\n  /**\n   * Batching configuration for an API method in client libraries.\n   *\n   * Example of a YAML configuration:\n   *\n   *     publishing:\n   *       method_settings:\n   *       - selector: google.example.v1.ExampleService.BatchCreateExample\n   *         batching:\n   *           element_count_threshold: 1000\n   *           request_byte_threshold: 100000000\n   *           delay_threshold_millis: 10\n   *\n   * @generated from field: google.api.BatchingConfigProto batching = 4;\n   */\n  batching?: BatchingConfigProto | undefined;\n};\n\n/**\n * Describes the message google.api.MethodSettings.\n * Use `create(MethodSettingsSchema)` to create a new message.\n */\nexport const MethodSettingsSchema: GenMessage<MethodSettings> = /*@__PURE__*/\n  messageDesc(file_google_api_client, 11);\n\n/**\n * Describes settings to use when generating API methods that use the\n * long-running operation pattern.\n * All default values below are from those used in the client library\n * generators (e.g.\n * [Java](https://github.com/googleapis/gapic-generator-java/blob/04c2faa191a9b5a10b92392fe8482279c4404803/src/main/java/com/google/api/generator/gapic/composer/common/RetrySettingsComposer.java)).\n *\n * @generated from message google.api.MethodSettings.LongRunning\n */\nexport type MethodSettings_LongRunning = Message<\"google.api.MethodSettings.LongRunning\"> & {\n  /**\n   * Initial delay after which the first poll request will be made.\n   * Default value: 5 seconds.\n   *\n   * @generated from field: google.protobuf.Duration initial_poll_delay = 1;\n   */\n  initialPollDelay?: Duration | undefined;\n\n  /**\n   * Multiplier to gradually increase delay between subsequent polls until it\n   * reaches max_poll_delay.\n   * Default value: 1.5.\n   *\n   * @generated from field: float poll_delay_multiplier = 2;\n   */\n  pollDelayMultiplier: number;\n\n  /**\n   * Maximum time between two subsequent poll requests.\n   * Default value: 45 seconds.\n   *\n   * @generated from field: google.protobuf.Duration max_poll_delay = 3;\n   */\n  maxPollDelay?: Duration | undefined;\n\n  /**\n   * Total polling timeout.\n   * Default value: 5 minutes.\n   *\n   * @generated from field: google.protobuf.Duration total_poll_timeout = 4;\n   */\n  totalPollTimeout?: Duration | undefined;\n};\n\n/**\n * Describes the message google.api.MethodSettings.LongRunning.\n * Use `create(MethodSettings_LongRunningSchema)` to create a new message.\n */\nexport const MethodSettings_LongRunningSchema: GenMessage<MethodSettings_LongRunning> = /*@__PURE__*/\n  messageDesc(file_google_api_client, 11, 0);\n\n/**\n * This message is used to configure the generation of a subset of the RPCs in\n * a service for client libraries.\n *\n * Note: This feature should not be used in most cases.\n *\n * @generated from message google.api.SelectiveGapicGeneration\n */\nexport type SelectiveGapicGeneration = Message<\"google.api.SelectiveGapicGeneration\"> & {\n  /**\n   * An allowlist of the fully qualified names of RPCs that should be included\n   * on public client surfaces.\n   *\n   * @generated from field: repeated string methods = 1;\n   */\n  methods: string[];\n\n  /**\n   * Setting this to true indicates to the client generators that methods\n   * that would be excluded from the generation should instead be generated\n   * in a way that indicates these methods should not be consumed by\n   * end users. How this is expressed is up to individual language\n   * implementations to decide. Some examples may be: added annotations,\n   * obfuscated identifiers, or other language idiomatic patterns.\n   *\n   * @generated from field: bool generate_omitted_as_internal = 2;\n   */\n  generateOmittedAsInternal: boolean;\n};\n\n/**\n * Describes the message google.api.SelectiveGapicGeneration.\n * Use `create(SelectiveGapicGenerationSchema)` to create a new message.\n */\nexport const SelectiveGapicGenerationSchema: GenMessage<SelectiveGapicGeneration> = /*@__PURE__*/\n  messageDesc(file_google_api_client, 12);\n\n/**\n * `BatchingConfigProto` defines the batching configuration for an API method.\n *\n * @generated from message google.api.BatchingConfigProto\n */\nexport type BatchingConfigProto = Message<\"google.api.BatchingConfigProto\"> & {\n  /**\n   * The thresholds which trigger a batched request to be sent.\n   *\n   * @generated from field: google.api.BatchingSettingsProto thresholds = 1;\n   */\n  thresholds?: BatchingSettingsProto | undefined;\n\n  /**\n   * The request and response fields used in batching.\n   *\n   * @generated from field: google.api.BatchingDescriptorProto batch_descriptor = 2;\n   */\n  batchDescriptor?: BatchingDescriptorProto | undefined;\n};\n\n/**\n * Describes the message google.api.BatchingConfigProto.\n * Use `create(BatchingConfigProtoSchema)` to create a new message.\n */\nexport const BatchingConfigProtoSchema: GenMessage<BatchingConfigProto> = /*@__PURE__*/\n  messageDesc(file_google_api_client, 13);\n\n/**\n * `BatchingSettingsProto` specifies a set of batching thresholds, each of\n * which acts as a trigger to send a batch of messages as a request. At least\n * one threshold must be positive nonzero.\n *\n * @generated from message google.api.BatchingSettingsProto\n */\nexport type BatchingSettingsProto = Message<\"google.api.BatchingSettingsProto\"> & {\n  /**\n   * The number of elements of a field collected into a batch which, if\n   * exceeded, causes the batch to be sent.\n   *\n   * @generated from field: int32 element_count_threshold = 1;\n   */\n  elementCountThreshold: number;\n\n  /**\n   * The aggregated size of the batched field which, if exceeded, causes the\n   * batch to be sent. This size is computed by aggregating the sizes of the\n   * request field to be batched, not of the entire request message.\n   *\n   * @generated from field: int64 request_byte_threshold = 2;\n   */\n  requestByteThreshold: bigint;\n\n  /**\n   * The duration after which a batch should be sent, starting from the addition\n   * of the first message to that batch.\n   *\n   * @generated from field: google.protobuf.Duration delay_threshold = 3;\n   */\n  delayThreshold?: Duration | undefined;\n\n  /**\n   * The maximum number of elements collected in a batch that could be accepted\n   * by server.\n   *\n   * @generated from field: int32 element_count_limit = 4;\n   */\n  elementCountLimit: number;\n\n  /**\n   * The maximum size of the request that could be accepted by server.\n   *\n   * @generated from field: int32 request_byte_limit = 5;\n   */\n  requestByteLimit: number;\n\n  /**\n   * The maximum number of elements allowed by flow control.\n   *\n   * @generated from field: int32 flow_control_element_limit = 6;\n   */\n  flowControlElementLimit: number;\n\n  /**\n   * The maximum size of data allowed by flow control.\n   *\n   * @generated from field: int32 flow_control_byte_limit = 7;\n   */\n  flowControlByteLimit: number;\n\n  /**\n   * The behavior to take when the flow control limit is exceeded.\n   *\n   * @generated from field: google.api.FlowControlLimitExceededBehaviorProto flow_control_limit_exceeded_behavior = 8;\n   */\n  flowControlLimitExceededBehavior: FlowControlLimitExceededBehaviorProto;\n};\n\n/**\n * Describes the message google.api.BatchingSettingsProto.\n * Use `create(BatchingSettingsProtoSchema)` to create a new message.\n */\nexport const BatchingSettingsProtoSchema: GenMessage<BatchingSettingsProto> = /*@__PURE__*/\n  messageDesc(file_google_api_client, 14);\n\n/**\n * `BatchingDescriptorProto` specifies the fields of the request message to be\n * used for batching, and, optionally, the fields of the response message to be\n * used for demultiplexing.\n *\n * @generated from message google.api.BatchingDescriptorProto\n */\nexport type BatchingDescriptorProto = Message<\"google.api.BatchingDescriptorProto\"> & {\n  /**\n   * The repeated field in the request message to be aggregated by batching.\n   *\n   * @generated from field: string batched_field = 1;\n   */\n  batchedField: string;\n\n  /**\n   * A list of the fields in the request message. Two requests will be batched\n   * together only if the values of every field specified in\n   * `request_discriminator_fields` is equal between the two requests.\n   *\n   * @generated from field: repeated string discriminator_fields = 2;\n   */\n  discriminatorFields: string[];\n\n  /**\n   * Optional. When present, indicates the field in the response message to be\n   * used to demultiplex the response into multiple response messages, in\n   * correspondence with the multiple request messages originally batched\n   * together.\n   *\n   * @generated from field: string subresponse_field = 3;\n   */\n  subresponseField: string;\n};\n\n/**\n * Describes the message google.api.BatchingDescriptorProto.\n * Use `create(BatchingDescriptorProtoSchema)` to create a new message.\n */\nexport const BatchingDescriptorProtoSchema: GenMessage<BatchingDescriptorProto> = /*@__PURE__*/\n  messageDesc(file_google_api_client, 15);\n\n/**\n * The organization for which the client libraries are being published.\n * Affects the url where generated docs are published, etc.\n *\n * @generated from enum google.api.ClientLibraryOrganization\n */\nexport enum ClientLibraryOrganization {\n  /**\n   * Not useful.\n   *\n   * @generated from enum value: CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED = 0;\n   */\n  CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED = 0,\n\n  /**\n   * Google Cloud Platform Org.\n   *\n   * @generated from enum value: CLOUD = 1;\n   */\n  CLOUD = 1,\n\n  /**\n   * Ads (Advertising) Org.\n   *\n   * @generated from enum value: ADS = 2;\n   */\n  ADS = 2,\n\n  /**\n   * Photos Org.\n   *\n   * @generated from enum value: PHOTOS = 3;\n   */\n  PHOTOS = 3,\n\n  /**\n   * Street View Org.\n   *\n   * @generated from enum value: STREET_VIEW = 4;\n   */\n  STREET_VIEW = 4,\n\n  /**\n   * Shopping Org.\n   *\n   * @generated from enum value: SHOPPING = 5;\n   */\n  SHOPPING = 5,\n\n  /**\n   * Geo Org.\n   *\n   * @generated from enum value: GEO = 6;\n   */\n  GEO = 6,\n\n  /**\n   * Generative AI - https://developers.generativeai.google\n   *\n   * @generated from enum value: GENERATIVE_AI = 7;\n   */\n  GENERATIVE_AI = 7,\n}\n\n/**\n * Describes the enum google.api.ClientLibraryOrganization.\n */\nexport const ClientLibraryOrganizationSchema: GenEnum<ClientLibraryOrganization> = /*@__PURE__*/\n  enumDesc(file_google_api_client, 0);\n\n/**\n * To where should client libraries be published?\n *\n * @generated from enum google.api.ClientLibraryDestination\n */\nexport enum ClientLibraryDestination {\n  /**\n   * Client libraries will neither be generated nor published to package\n   * managers.\n   *\n   * @generated from enum value: CLIENT_LIBRARY_DESTINATION_UNSPECIFIED = 0;\n   */\n  CLIENT_LIBRARY_DESTINATION_UNSPECIFIED = 0,\n\n  /**\n   * Generate the client library in a repo under github.com/googleapis,\n   * but don't publish it to package managers.\n   *\n   * @generated from enum value: GITHUB = 10;\n   */\n  GITHUB = 10,\n\n  /**\n   * Publish the library to package managers like nuget.org and npmjs.com.\n   *\n   * @generated from enum value: PACKAGE_MANAGER = 20;\n   */\n  PACKAGE_MANAGER = 20,\n}\n\n/**\n * Describes the enum google.api.ClientLibraryDestination.\n */\nexport const ClientLibraryDestinationSchema: GenEnum<ClientLibraryDestination> = /*@__PURE__*/\n  enumDesc(file_google_api_client, 1);\n\n/**\n * The behavior to take when the flow control limit is exceeded.\n *\n * @generated from enum google.api.FlowControlLimitExceededBehaviorProto\n */\nexport enum FlowControlLimitExceededBehaviorProto {\n  /**\n   * Default behavior, system-defined.\n   *\n   * @generated from enum value: UNSET_BEHAVIOR = 0;\n   */\n  UNSET_BEHAVIOR = 0,\n\n  /**\n   * Stop operation, raise error.\n   *\n   * @generated from enum value: THROW_EXCEPTION = 1;\n   */\n  THROW_EXCEPTION = 1,\n\n  /**\n   * Pause operation until limit clears.\n   *\n   * @generated from enum value: BLOCK = 2;\n   */\n  BLOCK = 2,\n\n  /**\n   * Continue operation, disregard limit.\n   *\n   * @generated from enum value: IGNORE = 3;\n   */\n  IGNORE = 3,\n}\n\n/**\n * Describes the enum google.api.FlowControlLimitExceededBehaviorProto.\n */\nexport const FlowControlLimitExceededBehaviorProtoSchema: GenEnum<FlowControlLimitExceededBehaviorProto> = /*@__PURE__*/\n  enumDesc(file_google_api_client, 2);\n\n/**\n * A definition of a client library method signature.\n *\n * In client libraries, each proto RPC corresponds to one or more methods\n * which the end user is able to call, and calls the underlying RPC.\n * Normally, this method receives a single argument (a struct or instance\n * corresponding to the RPC request object). Defining this field will\n * add one or more overloads providing flattened or simpler method signatures\n * in some languages.\n *\n * The fields on the method signature are provided as a comma-separated\n * string.\n *\n * For example, the proto RPC and annotation:\n *\n *     rpc CreateSubscription(CreateSubscriptionRequest)\n *         returns (Subscription) {\n *       option (google.api.method_signature) = \"name,topic\";\n *     }\n *\n * Would add the following Java overload (in addition to the method accepting\n * the request object):\n *\n *     public final Subscription createSubscription(String name, String topic)\n *\n * The following backwards-compatibility guidelines apply:\n *\n *   * Adding this annotation to an unannotated method is backwards\n *     compatible.\n *   * Adding this annotation to a method which already has existing\n *     method signature annotations is backwards compatible if and only if\n *     the new method signature annotation is last in the sequence.\n *   * Modifying or removing an existing method signature annotation is\n *     a breaking change.\n *   * Re-ordering existing method signature annotations is a breaking\n *     change.\n *\n * @generated from extension: repeated string method_signature = 1051;\n */\nexport const method_signature: GenExtension<MethodOptions, string[]> = /*@__PURE__*/\n  extDesc(file_google_api_client, 0);\n\n/**\n * The hostname for this service.\n * This should be specified with no prefix or protocol.\n *\n * Example:\n *\n *     service Foo {\n *       option (google.api.default_host) = \"foo.googleapi.com\";\n *       ...\n *     }\n *\n * @generated from extension: string default_host = 1049;\n */\nexport const default_host: GenExtension<ServiceOptions, string> = /*@__PURE__*/\n  extDesc(file_google_api_client, 1);\n\n/**\n * OAuth scopes needed for the client.\n *\n * Example:\n *\n *     service Foo {\n *       option (google.api.oauth_scopes) = \\\n *         \"https://www.googleapis.com/auth/cloud-platform\";\n *       ...\n *     }\n *\n * If there is more than one scope, use a comma-separated string:\n *\n * Example:\n *\n *     service Foo {\n *       option (google.api.oauth_scopes) = \\\n *         \"https://www.googleapis.com/auth/cloud-platform,\"\n *         \"https://www.googleapis.com/auth/monitoring\";\n *       ...\n *     }\n *\n * @generated from extension: string oauth_scopes = 1050;\n */\nexport const oauth_scopes: GenExtension<ServiceOptions, string> = /*@__PURE__*/\n  extDesc(file_google_api_client, 2);\n\n/**\n * The API version of this service, which should be sent by version-aware\n * clients to the service. This allows services to abide by the schema and\n * behavior of the service at the time this API version was deployed.\n * The format of the API version must be treated as opaque by clients.\n * Services may use a format with an apparent structure, but clients must\n * not rely on this to determine components within an API version, or attempt\n * to construct other valid API versions. Note that this is for upcoming\n * functionality and may not be implemented for all services.\n *\n * Example:\n *\n *     service Foo {\n *       option (google.api.api_version) = \"v1_20230821_preview\";\n *     }\n *\n * @generated from extension: string api_version = 525000001;\n */\nexport const api_version: GenExtension<ServiceOptions, string> = /*@__PURE__*/\n  extDesc(file_google_api_client, 3);\n\n","// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file thru/services/v1/command_service.proto (package thru.services.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile, GenMessage, GenService } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc, serviceDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_google_api_annotations } from \"../../../google/api/annotations_pb\";\nimport { file_google_api_client } from \"../../../google/api/client_pb\";\nimport type { Signature } from \"../../common/v1/primitives_pb\";\nimport { file_thru_common_v1_primitives } from \"../../common/v1/primitives_pb\";\nimport type { ConsensusStatus } from \"../../common/v1/consensus_pb\";\nimport { file_thru_common_v1_consensus } from \"../../common/v1/consensus_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { TransactionExecutionResult } from \"../../core/v1/transaction_pb\";\nimport { file_thru_core_v1_transaction } from \"../../core/v1/transaction_pb\";\nimport { file_thru_core_v1_types } from \"../../core/v1/types_pb\";\nimport type { Duration } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_duration } from \"@bufbuild/protobuf/wkt\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/services/v1/command_service.proto.\n */\nexport const file_thru_services_v1_command_service: GenFile = /*@__PURE__*/\n  fileDesc(\"CiZ0aHJ1L3NlcnZpY2VzL3YxL2NvbW1hbmRfc2VydmljZS5wcm90bxIQdGhydS5zZXJ2aWNlcy52MSI2ChZTZW5kVHJhbnNhY3Rpb25SZXF1ZXN0EhwKD3Jhd190cmFuc2FjdGlvbhgBIAEoDEID4EECIkwKF1NlbmRUcmFuc2FjdGlvblJlc3BvbnNlEjEKCXNpZ25hdHVyZRgBIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECIlIKHEJhdGNoU2VuZFRyYW5zYWN0aW9uc1JlcXVlc3QSHQoQcmF3X3RyYW5zYWN0aW9ucxgBIAMoDEID4EECEhMKC251bV9yZXRyaWVzGAIgASgFImoKHUJhdGNoU2VuZFRyYW5zYWN0aW9uc1Jlc3BvbnNlEjIKCnNpZ25hdHVyZXMYASADKAsyGS50aHJ1LmNvbW1vbi52MS5TaWduYXR1cmVCA+BBAhIVCghhY2NlcHRlZBgCIAMoCEID4EECIl4KFlNlbmRBbmRUcmFja1R4blJlcXVlc3QSGAoLdHJhbnNhY3Rpb24YASABKAxCA+BBAhIqCgd0aW1lb3V0GAIgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uIv8BChdTZW5kQW5kVHJhY2tUeG5SZXNwb25zZRI3CgZzdGF0dXMYASABKA4yIi50aHJ1LnNlcnZpY2VzLnYxLlN1Ym1pc3Npb25TdGF0dXNCA+BBAhIsCglzaWduYXR1cmUYAiABKAsyGS50aHJ1LmNvbW1vbi52MS5TaWduYXR1cmUSOQoQY29uc2Vuc3VzX3N0YXR1cxgDIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1cxJCChBleGVjdXRpb25fcmVzdWx0GAQgASgLMigudGhydS5jb3JlLnYxLlRyYW5zYWN0aW9uRXhlY3V0aW9uUmVzdWx0KnUKEFN1Ym1pc3Npb25TdGF0dXMSIQodU1VCTUlTU0lPTl9TVEFUVVNfVU5TUEVDSUZJRUQQABIeChpTVUJNSVNTSU9OX1NUQVRVU19SRUNFSVZFRBABEh4KGlNVQk1JU1NJT05fU1RBVFVTX0FDQ0VQVEVEEAIy1wMKDkNvbW1hbmRTZXJ2aWNlEoMBCg9TZW5kVHJhbnNhY3Rpb24SKC50aHJ1LnNlcnZpY2VzLnYxLlNlbmRUcmFuc2FjdGlvblJlcXVlc3QaKS50aHJ1LnNlcnZpY2VzLnYxLlNlbmRUcmFuc2FjdGlvblJlc3BvbnNlIhuC0+STAhU6ASoiEC92MS90cmFuc2FjdGlvbnMSmwEKFUJhdGNoU2VuZFRyYW5zYWN0aW9ucxIuLnRocnUuc2VydmljZXMudjEuQmF0Y2hTZW5kVHJhbnNhY3Rpb25zUmVxdWVzdBovLnRocnUuc2VydmljZXMudjEuQmF0Y2hTZW5kVHJhbnNhY3Rpb25zUmVzcG9uc2UiIYLT5JMCGzoBKiIWL3YxL3RyYW5zYWN0aW9ucy9iYXRjaBKLAQoPU2VuZEFuZFRyYWNrVHhuEigudGhydS5zZXJ2aWNlcy52MS5TZW5kQW5kVHJhY2tUeG5SZXF1ZXN0GikudGhydS5zZXJ2aWNlcy52MS5TZW5kQW5kVHJhY2tUeG5SZXNwb25zZSIhgtPkkwIbOgEqIhYvdjEvdHJhbnNhY3Rpb25zL3RyYWNrMAEaE8pBEGFwaS50aHJ1Lm5ldHdvcmtC3gEKFGNvbS50aHJ1LnNlcnZpY2VzLnYxQhNDb21tYW5kU2VydmljZVByb3RvUAFaSGdpdGh1Yi5jb20vVW50by1MYWJzL3RocnUtbmV0L2dycGMvcGtnL3Byb3RvL3RocnUvc2VydmljZXMvdjE7c2VydmljZXN2MaICA1RTWKoCEFRocnUuU2VydmljZXMuVjG6AgRUSFVTygIQVGhydVxTZXJ2aWNlc1xWMeICHFRocnVcU2VydmljZXNcVjFcR1BCTWV0YWRhdGHqAhJUaHJ1OjpTZXJ2aWNlczo6VjFiBnByb3RvMw\", [file_google_api_annotations, file_google_api_client, file_thru_common_v1_primitives, file_thru_common_v1_consensus, file_google_api_field_behavior, file_thru_core_v1_transaction, file_thru_core_v1_types, file_google_protobuf_duration]);\n\n/**\n * SendTransactionRequest submits a transaction to the cluster.\n *\n * @generated from message thru.services.v1.SendTransactionRequest\n */\nexport type SendTransactionRequest = Message<\"thru.services.v1.SendTransactionRequest\"> & {\n  /**\n   * Raw transaction bytes encoded according to chain specification.\n   *\n   * @generated from field: bytes raw_transaction = 1;\n   */\n  rawTransaction: Uint8Array;\n};\n\n/**\n * Describes the message thru.services.v1.SendTransactionRequest.\n * Use `create(SendTransactionRequestSchema)` to create a new message.\n */\nexport const SendTransactionRequestSchema: GenMessage<SendTransactionRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_command_service, 0);\n\n/**\n * SendTransactionResponse echoes submission metadata.\n *\n * @generated from message thru.services.v1.SendTransactionResponse\n */\nexport type SendTransactionResponse = Message<\"thru.services.v1.SendTransactionResponse\"> & {\n  /**\n   * @generated from field: thru.common.v1.Signature signature = 1;\n   */\n  signature?: Signature | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.SendTransactionResponse.\n * Use `create(SendTransactionResponseSchema)` to create a new message.\n */\nexport const SendTransactionResponseSchema: GenMessage<SendTransactionResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_command_service, 1);\n\n/**\n * BatchSendTransactionsRequest submits multiple transactions to the cluster.\n *\n * @generated from message thru.services.v1.BatchSendTransactionsRequest\n */\nexport type BatchSendTransactionsRequest = Message<\"thru.services.v1.BatchSendTransactionsRequest\"> & {\n  /**\n   * List of raw transaction bytes encoded according to chain specification.\n   *\n   * @generated from field: repeated bytes raw_transactions = 1;\n   */\n  rawTransactions: Uint8Array[];\n\n  /**\n   * Number of retries for each transaction if not accepted by UDS (defaults to 0).\n   *\n   * @generated from field: int32 num_retries = 2;\n   */\n  numRetries: number;\n};\n\n/**\n * Describes the message thru.services.v1.BatchSendTransactionsRequest.\n * Use `create(BatchSendTransactionsRequestSchema)` to create a new message.\n */\nexport const BatchSendTransactionsRequestSchema: GenMessage<BatchSendTransactionsRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_command_service, 2);\n\n/**\n * BatchSendTransactionsResponse returns submission results for each transaction.\n *\n * @generated from message thru.services.v1.BatchSendTransactionsResponse\n */\nexport type BatchSendTransactionsResponse = Message<\"thru.services.v1.BatchSendTransactionsResponse\"> & {\n  /**\n   * Signatures for each transaction (in same order as request).\n   *\n   * @generated from field: repeated thru.common.v1.Signature signatures = 1;\n   */\n  signatures: Signature[];\n\n  /**\n   * Acceptance status for each transaction (true if accepted, false if not).\n   *\n   * @generated from field: repeated bool accepted = 2;\n   */\n  accepted: boolean[];\n};\n\n/**\n * Describes the message thru.services.v1.BatchSendTransactionsResponse.\n * Use `create(BatchSendTransactionsResponseSchema)` to create a new message.\n */\nexport const BatchSendTransactionsResponseSchema: GenMessage<BatchSendTransactionsResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_command_service, 3);\n\n/**\n * SendAndTrackTxnRequest submits a transaction and tracks its execution.\n *\n * @generated from message thru.services.v1.SendAndTrackTxnRequest\n */\nexport type SendAndTrackTxnRequest = Message<\"thru.services.v1.SendAndTrackTxnRequest\"> & {\n  /**\n   * Raw transaction bytes encoded according to chain specification.\n   *\n   * @generated from field: bytes transaction = 1;\n   */\n  transaction: Uint8Array;\n\n  /**\n   * Optional timeout for tracking the transaction execution.\n   * If not specified, the stream will remain open until the transaction is executed or the client cancels.\n   *\n   * @generated from field: google.protobuf.Duration timeout = 2;\n   */\n  timeout?: Duration | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.SendAndTrackTxnRequest.\n * Use `create(SendAndTrackTxnRequestSchema)` to create a new message.\n */\nexport const SendAndTrackTxnRequestSchema: GenMessage<SendAndTrackTxnRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_command_service, 4);\n\n/**\n * SendAndTrackTxnResponse streams transaction status updates.\n *\n * @generated from message thru.services.v1.SendAndTrackTxnResponse\n */\nexport type SendAndTrackTxnResponse = Message<\"thru.services.v1.SendAndTrackTxnResponse\"> & {\n  /**\n   * Current submission status of the transaction.\n   *\n   * @generated from field: thru.services.v1.SubmissionStatus status = 1;\n   */\n  status: SubmissionStatus;\n\n  /**\n   * Transaction signature (populated for tracking messages).\n   *\n   * @generated from field: thru.common.v1.Signature signature = 2;\n   */\n  signature?: Signature | undefined;\n\n  /**\n   * Consensus status (populated for tracking messages).\n   *\n   * @generated from field: thru.common.v1.ConsensusStatus consensus_status = 3;\n   */\n  consensusStatus: ConsensusStatus;\n\n  /**\n   * Execution result (populated for tracking messages when execution completes).\n   *\n   * @generated from field: thru.core.v1.TransactionExecutionResult execution_result = 4;\n   */\n  executionResult?: TransactionExecutionResult | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.SendAndTrackTxnResponse.\n * Use `create(SendAndTrackTxnResponseSchema)` to create a new message.\n */\nexport const SendAndTrackTxnResponseSchema: GenMessage<SendAndTrackTxnResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_command_service, 5);\n\n/**\n * SubmissionStatus represents the status of a transaction in the submission pipeline.\n *\n * @generated from enum thru.services.v1.SubmissionStatus\n */\nexport enum SubmissionStatus {\n  /**\n   * Submission status is unspecified (default value).\n   *\n   * @generated from enum value: SUBMISSION_STATUS_UNSPECIFIED = 0;\n   */\n  UNSPECIFIED = 0,\n\n  /**\n   * Transaction has been received by the gRPC server.\n   *\n   * @generated from enum value: SUBMISSION_STATUS_RECEIVED = 1;\n   */\n  RECEIVED = 1,\n\n  /**\n   * Transaction has been accepted by the forwarder via UDS.\n   *\n   * @generated from enum value: SUBMISSION_STATUS_ACCEPTED = 2;\n   */\n  ACCEPTED = 2,\n}\n\n/**\n * Describes the enum thru.services.v1.SubmissionStatus.\n */\nexport const SubmissionStatusSchema: GenEnum<SubmissionStatus> = /*@__PURE__*/\n  enumDesc(file_thru_services_v1_command_service, 0);\n\n/**\n * CommandService defines transactional RPCs that mutate state or perform\n * expensive computations.\n *\n * @generated from service thru.services.v1.CommandService\n */\nexport const CommandService: GenService<{\n  /**\n   * Submit a new transaction to the cluster.\n   *\n   * @generated from rpc thru.services.v1.CommandService.SendTransaction\n   */\n  sendTransaction: {\n    methodKind: \"unary\";\n    input: typeof SendTransactionRequestSchema;\n    output: typeof SendTransactionResponseSchema;\n  },\n  /**\n   * Submit multiple transactions to the cluster in batch.\n   *\n   * @generated from rpc thru.services.v1.CommandService.BatchSendTransactions\n   */\n  batchSendTransactions: {\n    methodKind: \"unary\";\n    input: typeof BatchSendTransactionsRequestSchema;\n    output: typeof BatchSendTransactionsResponseSchema;\n  },\n  /**\n   * Submit a transaction and track its execution status.\n   * Returns a stream of status updates starting with RECEIVED, then ACCEPTED,\n   * followed by consensus and execution updates, closing after the transaction is executed.\n   *\n   * @generated from rpc thru.services.v1.CommandService.SendAndTrackTxn\n   */\n  sendAndTrackTxn: {\n    methodKind: \"server_streaming\";\n    input: typeof SendAndTrackTxnRequestSchema;\n    output: typeof SendAndTrackTxnResponseSchema;\n  },\n}> = /*@__PURE__*/\n  serviceDesc(file_thru_services_v1_command_service, 0);\n\n","// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file thru/services/v1/debug_service.proto (package thru.services.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile, GenMessage, GenService } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc, serviceDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_annotations } from \"../../../google/api/annotations_pb\";\nimport { file_google_api_client } from \"../../../google/api/client_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_thru_common_v1_consensus } from \"../../common/v1/consensus_pb\";\nimport { file_thru_common_v1_filters } from \"../../common/v1/filters_pb\";\nimport { file_thru_common_v1_pagination } from \"../../common/v1/pagination_pb\";\nimport type { Pubkey, Signature } from \"../../common/v1/primitives_pb\";\nimport { file_thru_common_v1_primitives } from \"../../common/v1/primitives_pb\";\nimport type { AccountMeta } from \"../../core/v1/account_pb\";\nimport { file_thru_core_v1_account } from \"../../core/v1/account_pb\";\nimport { file_thru_core_v1_block } from \"../../core/v1/block_pb\";\nimport { file_thru_core_v1_state } from \"../../core/v1/state_pb\";\nimport type { Transaction } from \"../../core/v1/transaction_pb\";\nimport { file_thru_core_v1_transaction } from \"../../core/v1/transaction_pb\";\nimport { file_thru_core_v1_types } from \"../../core/v1/types_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/services/v1/debug_service.proto.\n */\nexport const file_thru_services_v1_debug_service: GenFile = /*@__PURE__*/\n  fileDesc(\"CiR0aHJ1L3NlcnZpY2VzL3YxL2RlYnVnX3NlcnZpY2UucHJvdG8SEHRocnUuc2VydmljZXMudjEingEKCUNhbGxGcmFtZRIXCg9wcm9ncmFtX2FjY19pZHgYASABKA0SFwoPcHJvZ3JhbV9jb3VudGVyGAIgASgEEhUKDXN0YWNrX3BvaW50ZXIYAyABKAQSFwoPc2F2ZWRfcmVnaXN0ZXJzGAQgAygEEhQKDHN0YWNrX3dpbmRvdxgFIAEoDBIZChFzdGFja193aW5kb3dfYmFzZRgGIAEoBCIuCgpNZW1vcnlQYWdlEhIKCnBhZ2VfaW5kZXgYASABKA0SDAoEZGF0YRgCIAEoDCJoCg1NZW1vcnlTZWdtZW50EhQKDHNlZ21lbnRfdHlwZRgBIAEoDRIUCgxzZWdtZW50X3NpemUYAiABKAQSKwoFcGFnZXMYAyADKAsyHC50aHJ1LnNlcnZpY2VzLnYxLk1lbW9yeVBhZ2UirAMKElZtRXhlY3V0aW9uRGV0YWlscxIWCg5leGVjdXRpb25fY29kZRgBIAEoBBIXCg91c2VyX2Vycm9yX2NvZGUYAiABKAQSHgoWY29tcHV0ZV91bml0c19jb25zdW1lZBgDIAEoBBIcChRzdGF0ZV91bml0c19jb25zdW1lZBgEIAEoBBISCgpwYWdlc191c2VkGAUgASgEEhcKD3Byb2dyYW1fY291bnRlchgGIAEoBBIbChNpbnN0cnVjdGlvbl9jb3VudGVyGAcgASgEEjEKCmZhdWx0X2NvZGUYCCABKA4yHS50aHJ1LnNlcnZpY2VzLnYxLlZtRmF1bHRDb2RlEhIKCnNlZ3ZfdmFkZHIYCSABKAQSEQoJc2Vndl9zaXplGAogASgEEhIKCnNlZ3Zfd3JpdGUYCyABKAgSEQoJcmVnaXN0ZXJzGAwgAygEEhIKCmNhbGxfZGVwdGgYDSABKAQSFgoObWF4X2NhbGxfZGVwdGgYDiABKAQSMAoLY2FsbF9mcmFtZXMYDyADKAsyGy50aHJ1LnNlcnZpY2VzLnYxLkNhbGxGcmFtZSKPAQoPQWNjb3VudFNuYXBzaG90EicKB2FkZHJlc3MYASABKAsyFi50aHJ1LmNvbW1vbi52MS5QdWJrZXkSJwoEbWV0YRgCIAEoCzIZLnRocnUuY29yZS52MS5BY2NvdW50TWV0YRIRCgRkYXRhGAMgASgMSACIAQESDgoGZXhpc3RzGAQgASgIQgcKBV9kYXRhIsABChVEZWJ1Z1JlRXhlY3V0ZVJlcXVlc3QSMQoJc2lnbmF0dXJlGAEgASgLMhkudGhydS5jb21tb24udjEuU2lnbmF0dXJlQgPgQQISHAoUaW5jbHVkZV9zdGF0ZV9iZWZvcmUYAiABKAgSGwoTaW5jbHVkZV9zdGF0ZV9hZnRlchgDIAEoCBIcChRpbmNsdWRlX2FjY291bnRfZGF0YRgEIAEoCBIbChNpbmNsdWRlX21lbW9yeV9kdW1wGAUgASgIIvQCChZEZWJ1Z1JlRXhlY3V0ZVJlc3BvbnNlEjMKC3RyYW5zYWN0aW9uGAEgASgLMhkudGhydS5jb3JlLnYxLlRyYW5zYWN0aW9uQgPgQQISEwoGc3Rkb3V0GAIgASgJQgPgQQISEAoDbG9nGAMgASgJQgPgQQISEgoFdHJhY2UYBCABKAlCA+BBAhI/ChFleGVjdXRpb25fZGV0YWlscxgFIAEoCzIkLnRocnUuc2VydmljZXMudjEuVm1FeGVjdXRpb25EZXRhaWxzEjcKDHN0YXRlX2JlZm9yZRgGIAMoCzIhLnRocnUuc2VydmljZXMudjEuQWNjb3VudFNuYXBzaG90EjYKC3N0YXRlX2FmdGVyGAcgAygLMiEudGhydS5zZXJ2aWNlcy52MS5BY2NvdW50U25hcHNob3QSOAoPbWVtb3J5X3NlZ21lbnRzGAggAygLMh8udGhydS5zZXJ2aWNlcy52MS5NZW1vcnlTZWdtZW50Kl0KC1ZtRmF1bHRDb2RlEhEKDVZNX0ZBVUxUX05PTkUQABITCg9WTV9GQVVMVF9SRVZFUlQQARISCg5WTV9GQVVMVF9TSUdDVRACEhIKDlZNX0ZBVUxUX1NJR1NVEAMyqgEKDERlYnVnU2VydmljZRKEAQoORGVidWdSZUV4ZWN1dGUSJy50aHJ1LnNlcnZpY2VzLnYxLkRlYnVnUmVFeGVjdXRlUmVxdWVzdBooLnRocnUuc2VydmljZXMudjEuRGVidWdSZUV4ZWN1dGVSZXNwb25zZSIfgtPkkwIZOgEqIhQvdjEvZGVidWcvcmUtZXhlY3V0ZRoTykEQYXBpLnRocnUubmV0d29ya0LVAQoUY29tLnRocnUuc2VydmljZXMudjFCEURlYnVnU2VydmljZVByb3RvUAFaSGdpdGh1Yi5jb20vVW50by1MYWJzL3RocnUtbmV0L2dycGMvcGtnL3Byb3RvL3RocnUvc2VydmljZXMvdjE7c2VydmljZXN2MaICA1RTWKoCEFRocnUuU2VydmljZXMuVjHKAhBUaHJ1XFNlcnZpY2VzXFYx4gIcVGhydVxTZXJ2aWNlc1xWMVxHUEJNZXRhZGF0YeoCElRocnU6OlNlcnZpY2VzOjpWMWIGcHJvdG8z\", [file_buf_validate_validate, file_google_api_annotations, file_google_api_client, file_google_api_field_behavior, file_google_protobuf_timestamp, file_thru_common_v1_consensus, file_thru_common_v1_filters, file_thru_common_v1_pagination, file_thru_common_v1_primitives, file_thru_core_v1_account, file_thru_core_v1_block, file_thru_core_v1_state, file_thru_core_v1_transaction, file_thru_core_v1_types]);\n\n/**\n * CallFrame represents a single shadow stack frame from the VM.\n *\n * @generated from message thru.services.v1.CallFrame\n */\nexport type CallFrame = Message<\"thru.services.v1.CallFrame\"> & {\n  /**\n   * @generated from field: uint32 program_acc_idx = 1;\n   */\n  programAccIdx: number;\n\n  /**\n   * @generated from field: uint64 program_counter = 2;\n   */\n  programCounter: bigint;\n\n  /**\n   * @generated from field: uint64 stack_pointer = 3;\n   */\n  stackPointer: bigint;\n\n  /**\n   * @generated from field: repeated uint64 saved_registers = 4;\n   */\n  savedRegisters: bigint[];\n\n  /**\n   * Up to 1024 bytes above sp\n   *\n   * @generated from field: bytes stack_window = 5;\n   */\n  stackWindow: Uint8Array;\n\n  /**\n   * Virtual address of first byte (== stack_pointer)\n   *\n   * @generated from field: uint64 stack_window_base = 6;\n   */\n  stackWindowBase: bigint;\n};\n\n/**\n * Describes the message thru.services.v1.CallFrame.\n * Use `create(CallFrameSchema)` to create a new message.\n */\nexport const CallFrameSchema: GenMessage<CallFrame> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_debug_service, 0);\n\n/**\n * MemoryPage represents a single allocated page of VM memory.\n *\n * @generated from message thru.services.v1.MemoryPage\n */\nexport type MemoryPage = Message<\"thru.services.v1.MemoryPage\"> & {\n  /**\n   * Index within the segment's page array\n   *\n   * @generated from field: uint32 page_index = 1;\n   */\n  pageIndex: number;\n\n  /**\n   * Page contents (4096 bytes)\n   *\n   * @generated from field: bytes data = 2;\n   */\n  data: Uint8Array;\n};\n\n/**\n * Describes the message thru.services.v1.MemoryPage.\n * Use `create(MemoryPageSchema)` to create a new message.\n */\nexport const MemoryPageSchema: GenMessage<MemoryPage> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_debug_service, 1);\n\n/**\n * MemorySegment represents all allocated pages of a VM memory segment.\n *\n * @generated from message thru.services.v1.MemorySegment\n */\nexport type MemorySegment = Message<\"thru.services.v1.MemorySegment\"> & {\n  /**\n   * VM segment type (5=stack, 7=heap)\n   *\n   * @generated from field: uint32 segment_type = 1;\n   */\n  segmentType: number;\n\n  /**\n   * Total virtual size of segment in bytes\n   *\n   * @generated from field: uint64 segment_size = 2;\n   */\n  segmentSize: bigint;\n\n  /**\n   * @generated from field: repeated thru.services.v1.MemoryPage pages = 3;\n   */\n  pages: MemoryPage[];\n};\n\n/**\n * Describes the message thru.services.v1.MemorySegment.\n * Use `create(MemorySegmentSchema)` to create a new message.\n */\nexport const MemorySegmentSchema: GenMessage<MemorySegment> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_debug_service, 2);\n\n/**\n * VmExecutionDetails contains detailed VM state after execution.\n *\n * @generated from message thru.services.v1.VmExecutionDetails\n */\nexport type VmExecutionDetails = Message<\"thru.services.v1.VmExecutionDetails\"> & {\n  /**\n   * @generated from field: uint64 execution_code = 1;\n   */\n  executionCode: bigint;\n\n  /**\n   * @generated from field: uint64 user_error_code = 2;\n   */\n  userErrorCode: bigint;\n\n  /**\n   * @generated from field: uint64 compute_units_consumed = 3;\n   */\n  computeUnitsConsumed: bigint;\n\n  /**\n   * @generated from field: uint64 state_units_consumed = 4;\n   */\n  stateUnitsConsumed: bigint;\n\n  /**\n   * @generated from field: uint64 pages_used = 5;\n   */\n  pagesUsed: bigint;\n\n  /**\n   * @generated from field: uint64 program_counter = 6;\n   */\n  programCounter: bigint;\n\n  /**\n   * @generated from field: uint64 instruction_counter = 7;\n   */\n  instructionCounter: bigint;\n\n  /**\n   * @generated from field: thru.services.v1.VmFaultCode fault_code = 8;\n   */\n  faultCode: VmFaultCode;\n\n  /**\n   * @generated from field: uint64 segv_vaddr = 9;\n   */\n  segvVaddr: bigint;\n\n  /**\n   * @generated from field: uint64 segv_size = 10;\n   */\n  segvSize: bigint;\n\n  /**\n   * @generated from field: bool segv_write = 11;\n   */\n  segvWrite: boolean;\n\n  /**\n   * @generated from field: repeated uint64 registers = 12;\n   */\n  registers: bigint[];\n\n  /**\n   * @generated from field: uint64 call_depth = 13;\n   */\n  callDepth: bigint;\n\n  /**\n   * @generated from field: uint64 max_call_depth = 14;\n   */\n  maxCallDepth: bigint;\n\n  /**\n   * @generated from field: repeated thru.services.v1.CallFrame call_frames = 15;\n   */\n  callFrames: CallFrame[];\n};\n\n/**\n * Describes the message thru.services.v1.VmExecutionDetails.\n * Use `create(VmExecutionDetailsSchema)` to create a new message.\n */\nexport const VmExecutionDetailsSchema: GenMessage<VmExecutionDetails> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_debug_service, 3);\n\n/**\n * AccountSnapshot represents the state of an account at a point in time.\n *\n * @generated from message thru.services.v1.AccountSnapshot\n */\nexport type AccountSnapshot = Message<\"thru.services.v1.AccountSnapshot\"> & {\n  /**\n   * @generated from field: thru.common.v1.Pubkey address = 1;\n   */\n  address?: Pubkey | undefined;\n\n  /**\n   * @generated from field: thru.core.v1.AccountMeta meta = 2;\n   */\n  meta?: AccountMeta | undefined;\n\n  /**\n   * @generated from field: optional bytes data = 3;\n   */\n  data?: Uint8Array | undefined;\n\n  /**\n   * @generated from field: bool exists = 4;\n   */\n  exists: boolean;\n};\n\n/**\n * Describes the message thru.services.v1.AccountSnapshot.\n * Use `create(AccountSnapshotSchema)` to create a new message.\n */\nexport const AccountSnapshotSchema: GenMessage<AccountSnapshot> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_debug_service, 4);\n\n/**\n * DebugReExecuteRequest is a request to re-execute a transaction in simulated environment.\n *\n * @generated from message thru.services.v1.DebugReExecuteRequest\n */\nexport type DebugReExecuteRequest = Message<\"thru.services.v1.DebugReExecuteRequest\"> & {\n  /**\n   * @generated from field: thru.common.v1.Signature signature = 1;\n   */\n  signature?: Signature | undefined;\n\n  /**\n   * @generated from field: bool include_state_before = 2;\n   */\n  includeStateBefore: boolean;\n\n  /**\n   * @generated from field: bool include_state_after = 3;\n   */\n  includeStateAfter: boolean;\n\n  /**\n   * @generated from field: bool include_account_data = 4;\n   */\n  includeAccountData: boolean;\n\n  /**\n   * Return all allocated stack+heap pages\n   *\n   * @generated from field: bool include_memory_dump = 5;\n   */\n  includeMemoryDump: boolean;\n};\n\n/**\n * Describes the message thru.services.v1.DebugReExecuteRequest.\n * Use `create(DebugReExecuteRequestSchema)` to create a new message.\n */\nexport const DebugReExecuteRequestSchema: GenMessage<DebugReExecuteRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_debug_service, 5);\n\n/**\n * DebugReExecuteResponse is a response from the debug service.\n *\n * @generated from message thru.services.v1.DebugReExecuteResponse\n */\nexport type DebugReExecuteResponse = Message<\"thru.services.v1.DebugReExecuteResponse\"> & {\n  /**\n   * @generated from field: thru.core.v1.Transaction transaction = 1;\n   */\n  transaction?: Transaction | undefined;\n\n  /**\n   * @generated from field: string stdout = 2;\n   */\n  stdout: string;\n\n  /**\n   * @generated from field: string log = 3;\n   */\n  log: string;\n\n  /**\n   * @generated from field: string trace = 4;\n   */\n  trace: string;\n\n  /**\n   * @generated from field: thru.services.v1.VmExecutionDetails execution_details = 5;\n   */\n  executionDetails?: VmExecutionDetails | undefined;\n\n  /**\n   * @generated from field: repeated thru.services.v1.AccountSnapshot state_before = 6;\n   */\n  stateBefore: AccountSnapshot[];\n\n  /**\n   * @generated from field: repeated thru.services.v1.AccountSnapshot state_after = 7;\n   */\n  stateAfter: AccountSnapshot[];\n\n  /**\n   * @generated from field: repeated thru.services.v1.MemorySegment memory_segments = 8;\n   */\n  memorySegments: MemorySegment[];\n};\n\n/**\n * Describes the message thru.services.v1.DebugReExecuteResponse.\n * Use `create(DebugReExecuteResponseSchema)` to create a new message.\n */\nexport const DebugReExecuteResponseSchema: GenMessage<DebugReExecuteResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_debug_service, 6);\n\n/**\n * VmFaultCode enumerates VM halt conditions.\n *\n * @generated from enum thru.services.v1.VmFaultCode\n */\nexport enum VmFaultCode {\n  /**\n   * No fault\n   *\n   * @generated from enum value: VM_FAULT_NONE = 0;\n   */\n  VM_FAULT_NONE = 0,\n\n  /**\n   * TN_VM_FAULT_REVERT — explicit revert by program\n   *\n   * @generated from enum value: VM_FAULT_REVERT = 1;\n   */\n  VM_FAULT_REVERT = 1,\n\n  /**\n   * TN_VM_FAULT_SIGCU  — compute units exhausted\n   *\n   * @generated from enum value: VM_FAULT_SIGCU = 2;\n   */\n  VM_FAULT_SIGCU = 2,\n\n  /**\n   * TN_VM_FAULT_SIGSU  — state units exhausted\n   *\n   * @generated from enum value: VM_FAULT_SIGSU = 3;\n   */\n  VM_FAULT_SIGSU = 3,\n}\n\n/**\n * Describes the enum thru.services.v1.VmFaultCode.\n */\nexport const VmFaultCodeSchema: GenEnum<VmFaultCode> = /*@__PURE__*/\n  enumDesc(file_thru_services_v1_debug_service, 0);\n\n/**\n * DebugService defines unary RPCs helpful for debugging.\n *\n * @generated from service thru.services.v1.DebugService\n */\nexport const DebugService: GenService<{\n  /**\n   * DebugReExecute executes a transaction in simulated environment.\n   *\n   * @generated from rpc thru.services.v1.DebugService.DebugReExecute\n   */\n  debugReExecute: {\n    methodKind: \"unary\";\n    input: typeof DebugReExecuteRequestSchema;\n    output: typeof DebugReExecuteResponseSchema;\n  },\n}> = /*@__PURE__*/\n  serviceDesc(file_thru_services_v1_debug_service, 0);\n\n","// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file thru/services/v1/query_service.proto (package thru.services.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile, GenMessage, GenService } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc, serviceDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_annotations } from \"../../../google/api/annotations_pb\";\nimport { file_google_api_client } from \"../../../google/api/client_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { Timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { ConsensusStatus, VersionContext } from \"../../common/v1/consensus_pb\";\nimport { file_thru_common_v1_consensus } from \"../../common/v1/consensus_pb\";\nimport type { Filter } from \"../../common/v1/filters_pb\";\nimport { file_thru_common_v1_filters } from \"../../common/v1/filters_pb\";\nimport type { PageRequest, PageResponse } from \"../../common/v1/pagination_pb\";\nimport { file_thru_common_v1_pagination } from \"../../common/v1/pagination_pb\";\nimport type { Pubkey, Signature } from \"../../common/v1/primitives_pb\";\nimport { file_thru_common_v1_primitives } from \"../../common/v1/primitives_pb\";\nimport type { Account, AccountSchema, AccountView, DataSlice, RawAccount, RawAccountSchema } from \"../../core/v1/account_pb\";\nimport { file_thru_core_v1_account } from \"../../core/v1/account_pb\";\nimport type { Block, BlockSchema, BlockView, RawBlockSchema } from \"../../core/v1/block_pb\";\nimport { file_thru_core_v1_block } from \"../../core/v1/block_pb\";\nimport type { StateProof, StateProofRequest } from \"../../core/v1/state_pb\";\nimport { file_thru_core_v1_state } from \"../../core/v1/state_pb\";\nimport type { RawTransactionSchema, Transaction, TransactionExecutionResult, TransactionSchema, TransactionView } from \"../../core/v1/transaction_pb\";\nimport { file_thru_core_v1_transaction } from \"../../core/v1/transaction_pb\";\nimport type { BlockHash } from \"../../core/v1/types_pb\";\nimport { file_thru_core_v1_types } from \"../../core/v1/types_pb\";\nimport type { NodeRecord } from \"../../core/v1/node_pb\";\nimport { file_thru_core_v1_node } from \"../../core/v1/node_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/services/v1/query_service.proto.\n */\nexport const file_thru_services_v1_query_service: GenFile = /*@__PURE__*/\n  fileDesc(\"CiR0aHJ1L3NlcnZpY2VzL3YxL3F1ZXJ5X3NlcnZpY2UucHJvdG8SEHRocnUuc2VydmljZXMudjEigQIKEUdldEFjY291bnRSZXF1ZXN0EiwKB2FkZHJlc3MYASABKAsyFi50aHJ1LmNvbW1vbi52MS5QdWJrZXlCA+BBAhIxCgR2aWV3GAIgASgOMhkudGhydS5jb3JlLnYxLkFjY291bnRWaWV3QgPgQQFIAIgBARI8Cg92ZXJzaW9uX2NvbnRleHQYAyABKAsyHi50aHJ1LmNvbW1vbi52MS5WZXJzaW9uQ29udGV4dEID4EECEjUKCmRhdGFfc2xpY2UYBSABKAsyFy50aHJ1LmNvcmUudjEuRGF0YVNsaWNlQgPgQQFIAYgBAUIHCgVfdmlld0INCgtfZGF0YV9zbGljZSK+AQoUR2V0UmF3QWNjb3VudFJlcXVlc3QSLAoHYWRkcmVzcxgBIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEjEKBHZpZXcYAiABKA4yGS50aHJ1LmNvcmUudjEuQWNjb3VudFZpZXdCA+BBAUgAiAEBEjwKD3ZlcnNpb25fY29udGV4dBgDIAEoCzIeLnRocnUuY29tbW9uLnYxLlZlcnNpb25Db250ZXh0QgPgQQJCBwoFX3ZpZXcinAIKFUdldFRyYW5zYWN0aW9uUmVxdWVzdBIxCglzaWduYXR1cmUYASABKAsyGS50aHJ1LmNvbW1vbi52MS5TaWduYXR1cmVCA+BBAhI1CgR2aWV3GAIgASgOMh0udGhydS5jb3JlLnYxLlRyYW5zYWN0aW9uVmlld0ID4EEBSACIAQESPAoPdmVyc2lvbl9jb250ZXh0GAMgASgLMh4udGhydS5jb21tb24udjEuVmVyc2lvbkNvbnRleHRCA+BBAhJACg1taW5fY29uc2Vuc3VzGAQgASgOMh8udGhydS5jb21tb24udjEuQ29uc2Vuc3VzU3RhdHVzQgPgQQFIAYgBAUIHCgVfdmlld0IQCg5fbWluX2NvbnNlbnN1cyLfAQoYR2V0UmF3VHJhbnNhY3Rpb25SZXF1ZXN0EjEKCXNpZ25hdHVyZRgBIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEjwKD3ZlcnNpb25fY29udGV4dBgCIAEoCzIeLnRocnUuY29tbW9uLnYxLlZlcnNpb25Db250ZXh0QgPgQQISQAoNbWluX2NvbnNlbnN1cxgDIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1c0ID4EEBSACIAQFCEAoOX21pbl9jb25zZW5zdXMiUgoZR2VuZXJhdGVTdGF0ZVByb29mUmVxdWVzdBI1CgdyZXF1ZXN0GAEgASgLMh8udGhydS5jb3JlLnYxLlN0YXRlUHJvb2ZSZXF1ZXN0QgPgQQIiSgoaR2VuZXJhdGVTdGF0ZVByb29mUmVzcG9uc2USLAoFcHJvb2YYASABKAsyGC50aHJ1LmNvcmUudjEuU3RhdGVQcm9vZkID4EECIt4CCg9HZXRCbG9ja1JlcXVlc3QSEwoEc2xvdBgBIAEoBEID4EEBSAASMgoKYmxvY2tfaGFzaBgCIAEoCzIXLnRocnUuY29yZS52MS5CbG9ja0hhc2hCA+BBAUgAEi8KBHZpZXcYAyABKA4yFy50aHJ1LmNvcmUudjEuQmxvY2tWaWV3QgPgQQFIAYgBARJACg1taW5fY29uc2Vuc3VzGAQgASgOMh8udGhydS5jb21tb24udjEuQ29uc2Vuc3VzU3RhdHVzQgPgQQFIAogBATpoukhlGmMKEmJsb2NrX3NlbGVjdG9yX3NldBIlZWl0aGVyIHNsb3Qgb3IgYmxvY2tfaGFzaCBtdXN0IGJlIHNldBomaGFzKHRoaXMuc2xvdCkgfHwgaGFzKHRoaXMuYmxvY2tfaGFzaClCCgoIc2VsZWN0b3JCBwoFX3ZpZXdCEAoOX21pbl9jb25zZW5zdXMiqwIKEkdldFJhd0Jsb2NrUmVxdWVzdBITCgRzbG90GAEgASgEQgPgQQFIABIyCgpibG9ja19oYXNoGAIgASgLMhcudGhydS5jb3JlLnYxLkJsb2NrSGFzaEID4EEBSAASQAoNbWluX2NvbnNlbnN1cxgDIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1c0ID4EEBSAGIAQE6bLpIaRpnChZyYXdfYmxvY2tfc2VsZWN0b3Jfc2V0EiVlaXRoZXIgc2xvdCBvciBibG9ja19oYXNoIG11c3QgYmUgc2V0GiZoYXModGhpcy5zbG90KSB8fCBoYXModGhpcy5ibG9ja19oYXNoKUIKCghzZWxlY3RvckIQCg5fbWluX2NvbnNlbnN1cyL3AgoTTGlzdEFjY291bnRzUmVxdWVzdBIxCgR2aWV3GAEgASgOMhkudGhydS5jb3JlLnYxLkFjY291bnRWaWV3QgPgQQFIAIgBARJBCg92ZXJzaW9uX2NvbnRleHQYAiABKAsyHi50aHJ1LmNvbW1vbi52MS5WZXJzaW9uQ29udGV4dEID4EEBSAGIAQESMAoGZmlsdGVyGAMgASgLMhYudGhydS5jb21tb24udjEuRmlsdGVyQgPgQQFIAogBARIzCgRwYWdlGAQgASgLMhsudGhydS5jb21tb24udjEuUGFnZVJlcXVlc3RCA+BBAUgDiAEBEkAKDW1pbl9jb25zZW5zdXMYBSABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgEiAEBQgcKBV92aWV3QhIKEF92ZXJzaW9uX2NvbnRleHRCCQoHX2ZpbHRlckIHCgVfcGFnZUIQCg5fbWluX2NvbnNlbnN1cyKDAQoUTGlzdEFjY291bnRzUmVzcG9uc2USLAoIYWNjb3VudHMYASADKAsyFS50aHJ1LmNvcmUudjEuQWNjb3VudEID4EEBEjQKBHBhZ2UYAiABKAsyHC50aHJ1LmNvbW1vbi52MS5QYWdlUmVzcG9uc2VCA+BBAUgAiAEBQgcKBV9wYWdlIpwCChFMaXN0QmxvY2tzUmVxdWVzdBIwCgZmaWx0ZXIYASABKAsyFi50aHJ1LmNvbW1vbi52MS5GaWx0ZXJCA+BBAUgAiAEBEjMKBHBhZ2UYAiABKAsyGy50aHJ1LmNvbW1vbi52MS5QYWdlUmVxdWVzdEID4EEBSAGIAQESLwoEdmlldxgDIAEoDjIXLnRocnUuY29yZS52MS5CbG9ja1ZpZXdCA+BBAUgCiAEBEkAKDW1pbl9jb25zZW5zdXMYBCABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgDiAEBQgkKB19maWx0ZXJCBwoFX3BhZ2VCBwoFX3ZpZXdCEAoOX21pbl9jb25zZW5zdXMifQoSTGlzdEJsb2Nrc1Jlc3BvbnNlEigKBmJsb2NrcxgBIAMoCzITLnRocnUuY29yZS52MS5CbG9ja0ID4EEBEjQKBHBhZ2UYAiABKAsyHC50aHJ1LmNvbW1vbi52MS5QYWdlUmVzcG9uc2VCA+BBAUgAiAEBQgcKBV9wYWdlIswBCiFMaXN0VHJhbnNhY3Rpb25zRm9yQWNjb3VudFJlcXVlc3QSLAoHYWNjb3VudBgBIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEjMKBHBhZ2UYAiABKAsyGy50aHJ1LmNvbW1vbi52MS5QYWdlUmVxdWVzdEID4EEBSACIAQESMAoGZmlsdGVyGAMgASgLMhYudGhydS5jb21tb24udjEuRmlsdGVyQgPgQQFIAYgBAUIHCgVfcGFnZUIJCgdfZmlsdGVyIpkBCiJMaXN0VHJhbnNhY3Rpb25zRm9yQWNjb3VudFJlc3BvbnNlEjQKBHBhZ2UYASABKAsyHC50aHJ1LmNvbW1vbi52MS5QYWdlUmVzcG9uc2VCA+BBAUgAiAEBEjQKDHRyYW5zYWN0aW9ucxgCIAMoCzIZLnRocnUuY29yZS52MS5UcmFuc2FjdGlvbkID4EEBQgcKBV9wYWdlIhMKEUdldFZlcnNpb25SZXF1ZXN0IpABChJHZXRWZXJzaW9uUmVzcG9uc2USSQoIdmVyc2lvbnMYASADKAsyMi50aHJ1LnNlcnZpY2VzLnYxLkdldFZlcnNpb25SZXNwb25zZS5WZXJzaW9uc0VudHJ5QgPgQQIaLwoNVmVyc2lvbnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIocBCg9HZXRFdmVudFJlcXVlc3QSHQoIZXZlbnRfaWQYASABKAlCC+BBArpIBXIDGIABEkEKD3ZlcnNpb25fY29udGV4dBgCIAEoCzIeLnRocnUuY29tbW9uLnYxLlZlcnNpb25Db250ZXh0QgPgQQFIAIgBAUISChBfdmVyc2lvbl9jb250ZXh0IqgECgVFdmVudBIVCghldmVudF9pZBgBIAEoCUID4EECEj0KFXRyYW5zYWN0aW9uX3NpZ25hdHVyZRgCIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEjEKB3Byb2dyYW0YAyABKAsyFi50aHJ1LmNvbW1vbi52MS5QdWJrZXlCA+BBAUgAiAEBEhkKB3BheWxvYWQYBCABKAxCA+BBAUgBiAEBEhYKBHNsb3QYBSABKARCA+BBAUgCiAEBEhoKCGNhbGxfaWR4GAYgASgNQgPgQQFIA4gBARIdCgtwcm9ncmFtX2lkeBgHIAEoDUID4EEBSASIAQESHgoMcGF5bG9hZF9zaXplGAggASgNQgPgQQFIBYgBARIeCgxibG9ja19vZmZzZXQYCSABKA1CA+BBAUgGiAEBEjcKCXRpbWVzdGFtcBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAUgHiAEBEjMKCWZlZV9wYXllchgLIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EEBSAiIAQFCCgoIX3Byb2dyYW1CCgoIX3BheWxvYWRCBwoFX3Nsb3RCCwoJX2NhbGxfaWR4Qg4KDF9wcm9ncmFtX2lkeEIPCg1fcGF5bG9hZF9zaXplQg8KDV9ibG9ja19vZmZzZXRCDAoKX3RpbWVzdGFtcEIMCgpfZmVlX3BheWVyIrkCChFMaXN0RXZlbnRzUmVxdWVzdBIwCgZmaWx0ZXIYASABKAsyFi50aHJ1LmNvbW1vbi52MS5GaWx0ZXJCA+BBAUgAiAEBEjMKBHBhZ2UYAiABKAsyGy50aHJ1LmNvbW1vbi52MS5QYWdlUmVxdWVzdEID4EEBSAGIAQESQQoPdmVyc2lvbl9jb250ZXh0GAMgASgLMh4udGhydS5jb21tb24udjEuVmVyc2lvbkNvbnRleHRCA+BBAUgCiAEBEkAKDW1pbl9jb25zZW5zdXMYBCABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgDiAEBQgkKB19maWx0ZXJCBwoFX3BhZ2VCEgoQX3ZlcnNpb25fY29udGV4dEIQCg5fbWluX2NvbnNlbnN1cyKBAQoSTGlzdEV2ZW50c1Jlc3BvbnNlEiwKBmV2ZW50cxgBIAMoCzIXLnRocnUuc2VydmljZXMudjEuRXZlbnRCA+BBARI0CgRwYWdlGAIgASgLMhwudGhydS5jb21tb24udjEuUGFnZVJlc3BvbnNlQgPgQQFIAIgBAUIHCgVfcGFnZSLyAgoXTGlzdFRyYW5zYWN0aW9uc1JlcXVlc3QSMAoGZmlsdGVyGAEgASgLMhYudGhydS5jb21tb24udjEuRmlsdGVyQgPgQQFIAIgBARIzCgRwYWdlGAIgASgLMhsudGhydS5jb21tb24udjEuUGFnZVJlcXVlc3RCA+BBAUgBiAEBEh8KDXJldHVybl9ldmVudHMYAyABKAhCA+BBAUgCiAEBEkEKD3ZlcnNpb25fY29udGV4dBgEIAEoCzIeLnRocnUuY29tbW9uLnYxLlZlcnNpb25Db250ZXh0QgPgQQFIA4gBARJACg1taW5fY29uc2Vuc3VzGAUgASgOMh8udGhydS5jb21tb24udjEuQ29uc2Vuc3VzU3RhdHVzQgPgQQFIBIgBAUIJCgdfZmlsdGVyQgcKBV9wYWdlQhAKDl9yZXR1cm5fZXZlbnRzQhIKEF92ZXJzaW9uX2NvbnRleHRCEAoOX21pbl9jb25zZW5zdXMijwEKGExpc3RUcmFuc2FjdGlvbnNSZXNwb25zZRI0Cgx0cmFuc2FjdGlvbnMYASADKAsyGS50aHJ1LmNvcmUudjEuVHJhbnNhY3Rpb25CA+BBARI0CgRwYWdlGAIgASgLMhwudGhydS5jb21tb24udjEuUGFnZVJlc3BvbnNlQgPgQQFIAIgBAUIHCgVfcGFnZSJQChtHZXRUcmFuc2FjdGlvblN0YXR1c1JlcXVlc3QSMQoJc2lnbmF0dXJlGAEgASgLMhkudGhydS5jb21tb24udjEuU2lnbmF0dXJlQgPgQQIigwIKEVRyYW5zYWN0aW9uU3RhdHVzEjEKCXNpZ25hdHVyZRgBIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEkMKEGNvbnNlbnN1c19zdGF0dXMYAiABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgAiAEBEkwKEGV4ZWN1dGlvbl9yZXN1bHQYAyABKAsyKC50aHJ1LmNvcmUudjEuVHJhbnNhY3Rpb25FeGVjdXRpb25SZXN1bHRCA+BBAUgBiAEBQhMKEV9jb25zZW5zdXNfc3RhdHVzQhMKEV9leGVjdXRpb25fcmVzdWx0IhIKEEdldEhlaWdodFJlcXVlc3QiaQoRR2V0SGVpZ2h0UmVzcG9uc2USFgoJZmluYWxpemVkGAEgASgEQgPgQQISHQoQbG9jYWxseV9leGVjdXRlZBgCIAEoBEID4EECEh0KEGNsdXN0ZXJfZXhlY3V0ZWQYAyABKARCA+BBAiIVChNHZXRDaGFpbkluZm9SZXF1ZXN0IkkKFEdldENoYWluSW5mb1Jlc3BvbnNlEhUKCGNoYWluX2lkGAEgASgNQgPgQQISGgoNbWluX2xvY2tfdGltZRgCIAEoBEID4EEBIjcKFEdldFN0YXRlUm9vdHNSZXF1ZXN0EhYKBHNsb3QYASABKARCA+BBAUgAiAEBQgcKBV9zbG90IjwKDlN0YXRlUm9vdEVudHJ5EhEKBHNsb3QYASABKARCA+BBAhIXCgpzdGF0ZV9yb290GAIgASgMQgPgQQIiUwoVR2V0U3RhdGVSb290c1Jlc3BvbnNlEjoKC3N0YXRlX3Jvb3RzGAEgAygLMiAudGhydS5zZXJ2aWNlcy52MS5TdGF0ZVJvb3RFbnRyeUID4EECInMKG0dldEFjdGl2ZVN0YXRlSGFzaGVzUmVxdWVzdBIaCghlbmRfc2xvdBgBIAEoBEID4EEBSACIAQESHAoKc3RhcnRfc2xvdBgCIAEoBEID4EEBSAGIAQFCCwoJX2VuZF9zbG90Qg0KC19zdGFydF9zbG90IkkKFEFjdGl2ZVN0YXRlSGFzaEVudHJ5EhEKBHNsb3QYASABKARCA+BBAhIeChFhY3RpdmVfc3RhdGVfaGFzaBgCIAEoDEID4EECImgKHEdldEFjdGl2ZVN0YXRlSGFzaGVzUmVzcG9uc2USSAoTYWN0aXZlX3N0YXRlX2hhc2hlcxgBIAMoCzImLnRocnUuc2VydmljZXMudjEuQWN0aXZlU3RhdGVIYXNoRW50cnlCA+BBAiIqChVHZXRTbG90TWV0cmljc1JlcXVlc3QSEQoEc2xvdBgBIAEoBEID4EECIp4CChZHZXRTbG90TWV0cmljc1Jlc3BvbnNlEhEKBHNsb3QYASABKARCA+BBAhIrCh5nbG9iYWxfYWN0aXZhdGVkX3N0YXRlX2NvdW50ZXIYAiABKARCA+BBAhItCiBnbG9iYWxfZGVhY3RpdmF0ZWRfc3RhdGVfY291bnRlchgDIAEoBEID4EECEicKGmFic2VudF9ibG9ja19wcm9kdWNlcl9mZWVzGAQgASgEQgPgQQISPQoPYmxvY2tfdGltZXN0YW1wGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEBSACIAQESGQoMY2xhaW1lZF9mZWVzGAYgASgEQgPgQQJCEgoQX2Jsb2NrX3RpbWVzdGFtcCJ9ChZMaXN0U2xvdE1ldHJpY3NSZXF1ZXN0EhcKCnN0YXJ0X3Nsb3QYASABKARCA+BBAhIaCghlbmRfc2xvdBgCIAEoBEID4EEBSACIAQESFwoFbGltaXQYAyABKA1CA+BBAUgBiAEBQgsKCV9lbmRfc2xvdEIICgZfbGltaXQiWQoXTGlzdFNsb3RNZXRyaWNzUmVzcG9uc2USPgoHbWV0cmljcxgBIAMoCzIoLnRocnUuc2VydmljZXMudjEuR2V0U2xvdE1ldHJpY3NSZXNwb25zZUID4EECIhYKFEdldE5vZGVQdWJrZXlSZXF1ZXN0IkQKFUdldE5vZGVQdWJrZXlSZXNwb25zZRIrCgZwdWJrZXkYASABKAsyFi50aHJ1LmNvbW1vbi52MS5QdWJrZXlCA+BBAiIXChVHZXROb2RlUmVjb3Jkc1JlcXVlc3QiSAoWR2V0Tm9kZVJlY29yZHNSZXNwb25zZRIuCgdyZWNvcmRzGAEgAygLMhgudGhydS5jb3JlLnYxLk5vZGVSZWNvcmRCA+BBASIWChRHZXROb2RlU3RhdHVzUmVxdWVzdCLLAQoVR2V0Tm9kZVN0YXR1c1Jlc3BvbnNlEg0KBXJlYWR5GAEgASgIEjgKCWNvbnNlbnN1cxgCIAEoCzIlLnRocnUuc2VydmljZXMudjEuTm9kZUNvbnNlbnN1c1N0YXR1cxIyCgZyZXBhaXIYAyABKAsyIi50aHJ1LnNlcnZpY2VzLnYxLk5vZGVSZXBhaXJTdGF0dXMSFgoOZmluYWxpemVkX3Nsb3QYBCABKAQSHQoVbG9jYWxseV9leGVjdXRlZF9zbG90GAUgASgEImEKE05vZGVDb25zZW5zdXNTdGF0dXMSDgoGYWN0aXZlGAEgASgIEigKBG1vZGUYAiABKA4yGi50aHJ1LnNlcnZpY2VzLnYxLk5vZGVNb2RlEhAKCGZyb250aWVyGAMgASgEIiIKEE5vZGVSZXBhaXJTdGF0dXMSDgoGYWN0aXZlGAEgASgIIsICChpCYXRjaEdldFJhd0FjY291bnRzUmVxdWVzdBI9CgVpdGVtcxgBIAMoCzIpLnRocnUuc2VydmljZXMudjEuQmF0Y2hHZXRSYXdBY2NvdW50c0l0ZW1CA+BBAhJBCg92ZXJzaW9uX2NvbnRleHQYAiABKAsyHi50aHJ1LmNvbW1vbi52MS5WZXJzaW9uQ29udGV4dEID4EEBSACIAQESQAoNbWluX2NvbnNlbnN1cxgDIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1c0ID4EEBSAGIAQESMQoEdmlldxgEIAEoDjIZLnRocnUuY29yZS52MS5BY2NvdW50Vmlld0ID4EEBSAKIAQFCEgoQX3ZlcnNpb25fY29udGV4dEIQCg5fbWluX2NvbnNlbnN1c0IHCgVfdmlldyKeAQoXQmF0Y2hHZXRSYXdBY2NvdW50c0l0ZW0SLAoHYWRkcmVzcxgBIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEkEKD3ZlcnNpb25fY29udGV4dBgCIAEoCzIeLnRocnUuY29tbW9uLnYxLlZlcnNpb25Db250ZXh0QgPgQQFIAIgBAUISChBfdmVyc2lvbl9jb250ZXh0IrwBChtCYXRjaEdldFJhd0FjY291bnRzUmVzcG9uc2USUgoIYWNjb3VudHMYASADKAsyOy50aHJ1LnNlcnZpY2VzLnYxLkJhdGNoR2V0UmF3QWNjb3VudHNSZXNwb25zZS5BY2NvdW50c0VudHJ5QgPgQQEaSQoNQWNjb3VudHNFbnRyeRILCgNrZXkYASABKAkSJwoFdmFsdWUYAiABKAsyGC50aHJ1LmNvcmUudjEuUmF3QWNjb3VudDoCOAEivAIKG0JhdGNoR2V0VHJhbnNhY3Rpb25zUmVxdWVzdBIyCgpzaWduYXR1cmVzGAEgAygLMhkudGhydS5jb21tb24udjEuU2lnbmF0dXJlQgPgQQISQQoPdmVyc2lvbl9jb250ZXh0GAIgASgLMh4udGhydS5jb21tb24udjEuVmVyc2lvbkNvbnRleHRCA+BBAUgAiAEBEkAKDW1pbl9jb25zZW5zdXMYAyABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgBiAEBEjUKBHZpZXcYBCABKA4yHS50aHJ1LmNvcmUudjEuVHJhbnNhY3Rpb25WaWV3QgPgQQFIAogBAUISChBfdmVyc2lvbl9jb250ZXh0QhAKDl9taW5fY29uc2Vuc3VzQgcKBV92aWV3IssBChxCYXRjaEdldFRyYW5zYWN0aW9uc1Jlc3BvbnNlElsKDHRyYW5zYWN0aW9ucxgBIAMoCzJALnRocnUuc2VydmljZXMudjEuQmF0Y2hHZXRUcmFuc2FjdGlvbnNSZXNwb25zZS5UcmFuc2FjdGlvbnNFbnRyeUID4EEBGk4KEVRyYW5zYWN0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRIoCgV2YWx1ZRgCIAEoCzIZLnRocnUuY29yZS52MS5UcmFuc2FjdGlvbjoCOAEiiAEKH0JhdGNoR2VuZXJhdGVTdGF0ZVByb29mc1JlcXVlc3QSNgoIcmVxdWVzdHMYASADKAsyHy50aHJ1LmNvcmUudjEuU3RhdGVQcm9vZlJlcXVlc3RCA+BBAhIdCgt0YXJnZXRfc2xvdBgCIAEoBEID4EEBSACIAQFCDgoMX3RhcmdldF9zbG90IlwKIEJhdGNoR2VuZXJhdGVTdGF0ZVByb29mc1Jlc3BvbnNlEjgKB3Jlc3VsdHMYASADKAsyIi50aHJ1LnNlcnZpY2VzLnYxLlN0YXRlUHJvb2ZSZXN1bHRCA+BBASKvAQoQU3RhdGVQcm9vZlJlc3VsdBIxCgVwcm9vZhgBIAEoCzIYLnRocnUuY29yZS52MS5TdGF0ZVByb29mQgPgQQFIAIgBARIcCgplcnJvcl9jb2RlGAIgASgFQgPgQQFIAYgBARIfCg1lcnJvcl9tZXNzYWdlGAMgASgJQgPgQQFIAogBAUIICgZfcHJvb2ZCDQoLX2Vycm9yX2NvZGVCEAoOX2Vycm9yX21lc3NhZ2UiHQobR2V0Q29tcHJlc3Npb25Db25maWdSZXF1ZXN0Iv4BChFDb21wcmVzc2lvbkNvbmZpZxIRCgRzbG90GAEgASgEQgPgQQMSGAoLc3RhdGVfY2xvY2sYAiABKARCA+BBAxIfChJhY3RpdmVfc3RhdGVfdW5pdHMYAyABKARCA+BBAxImChltYXhfc3RhdGVfdW5pdHNfcGVyX2Jsb2NrGAQgASgEQgPgQQMSIwoWbWF4X2FjdGl2ZV9zdGF0ZV91bml0cxgFIAEoBEID4EEDEiQKF2NvbXByZXNzX2Jhc2VsaW5lX3VuaXRzGAYgASgEQgPgQQMSKAobY29tcHJlc3NfaGFsdmluZ19zdGVwX3VuaXRzGAcgASgEQgPgQQMiQgoSQ2FuQ29tcHJlc3NSZXF1ZXN0EiwKB2FkZHJlc3MYASABKAsyFi50aHJ1LmNvbW1vbi52MS5QdWJrZXlCA+BBAiKCAQoTQ2FuQ29tcHJlc3NSZXNwb25zZRIZCgxjYW5fY29tcHJlc3MYASABKAhCA+BBAxIWCglsYXN0X3VzZWQYAiABKARCA+BBAxI4CgZjb25maWcYAyABKAsyIy50aHJ1LnNlcnZpY2VzLnYxLkNvbXByZXNzaW9uQ29uZmlnQgPgQQMqVAoITm9kZU1vZGUSFQoRTk9ERV9NT0RFX1VOS05PV04QABIVChFOT0RFX01PREVfUkVHVUxBUhABEhoKFk5PREVfTU9ERV9DQVRBU1RST1BISUMQAjK0HwoMUXVlcnlTZXJ2aWNlEooBChRHZXRDb21wcmVzc2lvbkNvbmZpZxItLnRocnUuc2VydmljZXMudjEuR2V0Q29tcHJlc3Npb25Db25maWdSZXF1ZXN0GiMudGhydS5zZXJ2aWNlcy52MS5Db21wcmVzc2lvbkNvbmZpZyIegtPkkwIYEhYvdjEvY29tcHJlc3Npb24tY29uZmlnEpYBCgtDYW5Db21wcmVzcxIkLnRocnUuc2VydmljZXMudjEuQ2FuQ29tcHJlc3NSZXF1ZXN0GiUudGhydS5zZXJ2aWNlcy52MS5DYW5Db21wcmVzc1Jlc3BvbnNlIjraQQdhZGRyZXNzgtPkkwIqEigvdjEvYWNjb3VudHMve2FkZHJlc3MudmFsdWV9OmNhbkNvbXByZXNzEmgKCUdldEhlaWdodBIiLnRocnUuc2VydmljZXMudjEuR2V0SGVpZ2h0UmVxdWVzdBojLnRocnUuc2VydmljZXMudjEuR2V0SGVpZ2h0UmVzcG9uc2UiEoLT5JMCDBIKL3YxL2hlaWdodBJ1CgxHZXRDaGFpbkluZm8SJS50aHJ1LnNlcnZpY2VzLnYxLkdldENoYWluSW5mb1JlcXVlc3QaJi50aHJ1LnNlcnZpY2VzLnYxLkdldENoYWluSW5mb1Jlc3BvbnNlIhaC0+STAhASDi92MS9jaGFpbi1pbmZvEngKCkdldEFjY291bnQSIy50aHJ1LnNlcnZpY2VzLnYxLkdldEFjY291bnRSZXF1ZXN0GhUudGhydS5jb3JlLnYxLkFjY291bnQiLtpBB2FkZHJlc3OC0+STAh4SHC92MS9hY2NvdW50cy97YWRkcmVzcy52YWx1ZX0ShQEKDUdldFJhd0FjY291bnQSJi50aHJ1LnNlcnZpY2VzLnYxLkdldFJhd0FjY291bnRSZXF1ZXN0GhgudGhydS5jb3JlLnYxLlJhd0FjY291bnQiMtpBB2FkZHJlc3OC0+STAiISIC92MS9hY2NvdW50cy97YWRkcmVzcy52YWx1ZX06cmF3EpcBChNCYXRjaEdldFJhd0FjY291bnRzEiwudGhydS5zZXJ2aWNlcy52MS5CYXRjaEdldFJhd0FjY291bnRzUmVxdWVzdBotLnRocnUuc2VydmljZXMudjEuQmF0Y2hHZXRSYXdBY2NvdW50c1Jlc3BvbnNlIiOC0+STAh06ASoiGC92MS9hY2NvdW50czpiYXRjaEdldFJhdxKbAQoUQmF0Y2hHZXRUcmFuc2FjdGlvbnMSLS50aHJ1LnNlcnZpY2VzLnYxLkJhdGNoR2V0VHJhbnNhY3Rpb25zUmVxdWVzdBouLnRocnUuc2VydmljZXMudjEuQmF0Y2hHZXRUcmFuc2FjdGlvbnNSZXNwb25zZSIkgtPkkwIeOgEqIhkvdjEvdHJhbnNhY3Rpb25zOmJhdGNoR2V0EowBCg5HZXRUcmFuc2FjdGlvbhInLnRocnUuc2VydmljZXMudjEuR2V0VHJhbnNhY3Rpb25SZXF1ZXN0GhkudGhydS5jb3JlLnYxLlRyYW5zYWN0aW9uIjbaQQlzaWduYXR1cmWC0+STAiQSIi92MS90cmFuc2FjdGlvbnMve3NpZ25hdHVyZS52YWx1ZX0SmQEKEUdldFJhd1RyYW5zYWN0aW9uEioudGhydS5zZXJ2aWNlcy52MS5HZXRSYXdUcmFuc2FjdGlvblJlcXVlc3QaHC50aHJ1LmNvcmUudjEuUmF3VHJhbnNhY3Rpb24iOtpBCXNpZ25hdHVyZYLT5JMCKBImL3YxL3RyYW5zYWN0aW9ucy97c2lnbmF0dXJlLnZhbHVlfTpyYXcShgEKCEdldEJsb2NrEiEudGhydS5zZXJ2aWNlcy52MS5HZXRCbG9ja1JlcXVlc3QaEy50aHJ1LmNvcmUudjEuQmxvY2siQoLT5JMCPFonEiUvdjEvYmxvY2tzL2J5LWhhc2gve2Jsb2NrX2hhc2gudmFsdWV9EhEvdjEvYmxvY2tzL3tzbG90fRKXAQoLR2V0UmF3QmxvY2sSJC50aHJ1LnNlcnZpY2VzLnYxLkdldFJhd0Jsb2NrUmVxdWVzdBoWLnRocnUuY29yZS52MS5SYXdCbG9jayJKgtPkkwJEWisSKS92MS9ibG9ja3MvYnktaGFzaC97YmxvY2tfaGFzaC52YWx1ZX06cmF3EhUvdjEvYmxvY2tzL3tzbG90fTpyYXcScwoMTGlzdEFjY291bnRzEiUudGhydS5zZXJ2aWNlcy52MS5MaXN0QWNjb3VudHNSZXF1ZXN0GiYudGhydS5zZXJ2aWNlcy52MS5MaXN0QWNjb3VudHNSZXNwb25zZSIUgtPkkwIOEgwvdjEvYWNjb3VudHMSawoKTGlzdEJsb2NrcxIjLnRocnUuc2VydmljZXMudjEuTGlzdEJsb2Nrc1JlcXVlc3QaJC50aHJ1LnNlcnZpY2VzLnYxLkxpc3RCbG9ja3NSZXNwb25zZSISgtPkkwIMEgovdjEvYmxvY2tzEsQBChpMaXN0VHJhbnNhY3Rpb25zRm9yQWNjb3VudBIzLnRocnUuc2VydmljZXMudjEuTGlzdFRyYW5zYWN0aW9uc0ZvckFjY291bnRSZXF1ZXN0GjQudGhydS5zZXJ2aWNlcy52MS5MaXN0VHJhbnNhY3Rpb25zRm9yQWNjb3VudFJlc3BvbnNlIjvaQQdhY2NvdW50gtPkkwIrEikvdjEvYWNjb3VudHMve2FjY291bnQudmFsdWV9L3RyYW5zYWN0aW9ucxJwCghHZXRFdmVudBIhLnRocnUuc2VydmljZXMudjEuR2V0RXZlbnRSZXF1ZXN0GhcudGhydS5zZXJ2aWNlcy52MS5FdmVudCIo2kEIZXZlbnRfaWSC0+STAhcSFS92MS9ldmVudHMve2V2ZW50X2lkfRJrCgpMaXN0RXZlbnRzEiMudGhydS5zZXJ2aWNlcy52MS5MaXN0RXZlbnRzUmVxdWVzdBokLnRocnUuc2VydmljZXMudjEuTGlzdEV2ZW50c1Jlc3BvbnNlIhKC0+STAgwSCi92MS9ldmVudHMSgwEKEExpc3RUcmFuc2FjdGlvbnMSKS50aHJ1LnNlcnZpY2VzLnYxLkxpc3RUcmFuc2FjdGlvbnNSZXF1ZXN0GioudGhydS5zZXJ2aWNlcy52MS5MaXN0VHJhbnNhY3Rpb25zUmVzcG9uc2UiGILT5JMCEhIQL3YxL3RyYW5zYWN0aW9ucxKpAQoUR2V0VHJhbnNhY3Rpb25TdGF0dXMSLS50aHJ1LnNlcnZpY2VzLnYxLkdldFRyYW5zYWN0aW9uU3RhdHVzUmVxdWVzdBojLnRocnUuc2VydmljZXMudjEuVHJhbnNhY3Rpb25TdGF0dXMiPdpBCXNpZ25hdHVyZYLT5JMCKxIpL3YxL3RyYW5zYWN0aW9ucy97c2lnbmF0dXJlLnZhbHVlfTpzdGF0dXMSrAEKGEJhdGNoR2VuZXJhdGVTdGF0ZVByb29mcxIxLnRocnUuc2VydmljZXMudjEuQmF0Y2hHZW5lcmF0ZVN0YXRlUHJvb2ZzUmVxdWVzdBoyLnRocnUuc2VydmljZXMudjEuQmF0Y2hHZW5lcmF0ZVN0YXRlUHJvb2ZzUmVzcG9uc2UiKYLT5JMCIzoBKiIeL3YxL3N0YXRlLXByb29mczpiYXRjaEdlbmVyYXRlEpQBChJHZW5lcmF0ZVN0YXRlUHJvb2YSKy50aHJ1LnNlcnZpY2VzLnYxLkdlbmVyYXRlU3RhdGVQcm9vZlJlcXVlc3QaLC50aHJ1LnNlcnZpY2VzLnYxLkdlbmVyYXRlU3RhdGVQcm9vZlJlc3BvbnNlIiOC0+STAh06ASoiGC92MS9zdGF0ZXByb29mczpnZW5lcmF0ZRJsCgpHZXRWZXJzaW9uEiMudGhydS5zZXJ2aWNlcy52MS5HZXRWZXJzaW9uUmVxdWVzdBokLnRocnUuc2VydmljZXMudjEuR2V0VmVyc2lvblJlc3BvbnNlIhOC0+STAg0SCy92MS92ZXJzaW9uEngKDUdldFN0YXRlUm9vdHMSJi50aHJ1LnNlcnZpY2VzLnYxLkdldFN0YXRlUm9vdHNSZXF1ZXN0GicudGhydS5zZXJ2aWNlcy52MS5HZXRTdGF0ZVJvb3RzUmVzcG9uc2UiFoLT5JMCEBIOL3YxL3N0YXRlcm9vdHMSlgEKFEdldEFjdGl2ZVN0YXRlSGFzaGVzEi0udGhydS5zZXJ2aWNlcy52MS5HZXRBY3RpdmVTdGF0ZUhhc2hlc1JlcXVlc3QaLi50aHJ1LnNlcnZpY2VzLnYxLkdldEFjdGl2ZVN0YXRlSGFzaGVzUmVzcG9uc2UiH4LT5JMCGRIXL3YxL2FjdGl2ZS1zdGF0ZS1oYXNoZXMShQEKDkdldFNsb3RNZXRyaWNzEicudGhydS5zZXJ2aWNlcy52MS5HZXRTbG90TWV0cmljc1JlcXVlc3QaKC50aHJ1LnNlcnZpY2VzLnYxLkdldFNsb3RNZXRyaWNzUmVzcG9uc2UiIILT5JMCGhIYL3YxL3Nsb3RzL3tzbG90fS9tZXRyaWNzEoEBCg9MaXN0U2xvdE1ldHJpY3MSKC50aHJ1LnNlcnZpY2VzLnYxLkxpc3RTbG90TWV0cmljc1JlcXVlc3QaKS50aHJ1LnNlcnZpY2VzLnYxLkxpc3RTbG90TWV0cmljc1Jlc3BvbnNlIhmC0+STAhMSES92MS9zbG90cy9tZXRyaWNzEnkKDUdldE5vZGVQdWJrZXkSJi50aHJ1LnNlcnZpY2VzLnYxLkdldE5vZGVQdWJrZXlSZXF1ZXN0GicudGhydS5zZXJ2aWNlcy52MS5HZXROb2RlUHVia2V5UmVzcG9uc2UiF4LT5JMCERIPL3YxL25vZGUvcHVia2V5En0KDkdldE5vZGVSZWNvcmRzEicudGhydS5zZXJ2aWNlcy52MS5HZXROb2RlUmVjb3Jkc1JlcXVlc3QaKC50aHJ1LnNlcnZpY2VzLnYxLkdldE5vZGVSZWNvcmRzUmVzcG9uc2UiGILT5JMCEhIQL3YxL25vZGUvcmVjb3JkcxJ5Cg1HZXROb2RlU3RhdHVzEiYudGhydS5zZXJ2aWNlcy52MS5HZXROb2RlU3RhdHVzUmVxdWVzdBonLnRocnUuc2VydmljZXMudjEuR2V0Tm9kZVN0YXR1c1Jlc3BvbnNlIheC0+STAhESDy92MS9ub2RlL3N0YXR1cxoTykEQYXBpLnRocnUubmV0d29ya0LcAQoUY29tLnRocnUuc2VydmljZXMudjFCEVF1ZXJ5U2VydmljZVByb3RvUAFaSGdpdGh1Yi5jb20vVW50by1MYWJzL3RocnUtbmV0L2dycGMvcGtnL3Byb3RvL3RocnUvc2VydmljZXMvdjE7c2VydmljZXN2MaICA1RTWKoCEFRocnUuU2VydmljZXMuVjG6AgRUSFVTygIQVGhydVxTZXJ2aWNlc1xWMeICHFRocnVcU2VydmljZXNcVjFcR1BCTWV0YWRhdGHqAhJUaHJ1OjpTZXJ2aWNlczo6VjFiBnByb3RvMw\", [file_buf_validate_validate, file_google_api_annotations, file_google_api_client, file_google_api_field_behavior, file_google_protobuf_timestamp, file_thru_common_v1_consensus, file_thru_common_v1_filters, file_thru_common_v1_pagination, file_thru_common_v1_primitives, file_thru_core_v1_account, file_thru_core_v1_block, file_thru_core_v1_state, file_thru_core_v1_transaction, file_thru_core_v1_types, file_thru_core_v1_node]);\n\n/**\n * GetAccountRequest retrieves a decoded account by public key.\n *\n * @generated from message thru.services.v1.GetAccountRequest\n */\nexport type GetAccountRequest = Message<\"thru.services.v1.GetAccountRequest\"> & {\n  /**\n   * @generated from field: thru.common.v1.Pubkey address = 1;\n   */\n  address?: Pubkey | undefined;\n\n  /**\n   * @generated from field: optional thru.core.v1.AccountView view = 2;\n   */\n  view?: AccountView | undefined;\n\n  /**\n   * @generated from field: thru.common.v1.VersionContext version_context = 3;\n   */\n  versionContext?: VersionContext | undefined;\n\n  /**\n   * @generated from field: optional thru.core.v1.DataSlice data_slice = 5;\n   */\n  dataSlice?: DataSlice | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.GetAccountRequest.\n * Use `create(GetAccountRequestSchema)` to create a new message.\n */\nexport const GetAccountRequestSchema: GenMessage<GetAccountRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 0);\n\n/**\n * GetRawAccountRequest retrieves raw account bytes by public key.\n *\n * @generated from message thru.services.v1.GetRawAccountRequest\n */\nexport type GetRawAccountRequest = Message<\"thru.services.v1.GetRawAccountRequest\"> & {\n  /**\n   * @generated from field: thru.common.v1.Pubkey address = 1;\n   */\n  address?: Pubkey | undefined;\n\n  /**\n   * Controls which sections of the raw response are returned.\n   * ACCOUNT_VIEW_UNSPECIFIED and ACCOUNT_VIEW_FULL (default) return both\n   * raw_meta and raw_data. ACCOUNT_VIEW_META_ONLY skips the data fetch\n   * entirely and omits raw_data from the response. ACCOUNT_VIEW_DATA_ONLY\n   * and ACCOUNT_VIEW_PUBKEY_ONLY are rejected with InvalidArgument: raw_meta\n   * is a REQUIRED field on RawAccount, so a raw response without it has no\n   * honest encoding, and a raw response of only an address is meaningless.\n   *\n   * @generated from field: optional thru.core.v1.AccountView view = 2;\n   */\n  view?: AccountView | undefined;\n\n  /**\n   * @generated from field: thru.common.v1.VersionContext version_context = 3;\n   */\n  versionContext?: VersionContext | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.GetRawAccountRequest.\n * Use `create(GetRawAccountRequestSchema)` to create a new message.\n */\nexport const GetRawAccountRequestSchema: GenMessage<GetRawAccountRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 1);\n\n/**\n * GetTransactionRequest retrieves a decoded transaction by signature.\n *\n * @generated from message thru.services.v1.GetTransactionRequest\n */\nexport type GetTransactionRequest = Message<\"thru.services.v1.GetTransactionRequest\"> & {\n  /**\n   * @generated from field: thru.common.v1.Signature signature = 1;\n   */\n  signature?: Signature | undefined;\n\n  /**\n   * @generated from field: optional thru.core.v1.TransactionView view = 2;\n   */\n  view?: TransactionView | undefined;\n\n  /**\n   * @generated from field: thru.common.v1.VersionContext version_context = 3;\n   */\n  versionContext?: VersionContext | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 4;\n   */\n  minConsensus?: ConsensusStatus | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.GetTransactionRequest.\n * Use `create(GetTransactionRequestSchema)` to create a new message.\n */\nexport const GetTransactionRequestSchema: GenMessage<GetTransactionRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 2);\n\n/**\n * GetRawTransactionRequest retrieves raw transaction bytes by signature.\n *\n * @generated from message thru.services.v1.GetRawTransactionRequest\n */\nexport type GetRawTransactionRequest = Message<\"thru.services.v1.GetRawTransactionRequest\"> & {\n  /**\n   * @generated from field: thru.common.v1.Signature signature = 1;\n   */\n  signature?: Signature | undefined;\n\n  /**\n   * @generated from field: thru.common.v1.VersionContext version_context = 2;\n   */\n  versionContext?: VersionContext | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 3;\n   */\n  minConsensus?: ConsensusStatus | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.GetRawTransactionRequest.\n * Use `create(GetRawTransactionRequestSchema)` to create a new message.\n */\nexport const GetRawTransactionRequestSchema: GenMessage<GetRawTransactionRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 3);\n\n/**\n * GenerateStateProofRequest requests an account state proof.\n *\n * @generated from message thru.services.v1.GenerateStateProofRequest\n */\nexport type GenerateStateProofRequest = Message<\"thru.services.v1.GenerateStateProofRequest\"> & {\n  /**\n   * @generated from field: thru.core.v1.StateProofRequest request = 1;\n   */\n  request?: StateProofRequest | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.GenerateStateProofRequest.\n * Use `create(GenerateStateProofRequestSchema)` to create a new message.\n */\nexport const GenerateStateProofRequestSchema: GenMessage<GenerateStateProofRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 4);\n\n/**\n * GenerateStateProofResponse contains the generated proof.\n *\n * @generated from message thru.services.v1.GenerateStateProofResponse\n */\nexport type GenerateStateProofResponse = Message<\"thru.services.v1.GenerateStateProofResponse\"> & {\n  /**\n   * @generated from field: thru.core.v1.StateProof proof = 1;\n   */\n  proof?: StateProof | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.GenerateStateProofResponse.\n * Use `create(GenerateStateProofResponseSchema)` to create a new message.\n */\nexport const GenerateStateProofResponseSchema: GenMessage<GenerateStateProofResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 5);\n\n/**\n * GetBlockRequest retrieves decoded block information by slot or hash.\n *\n * @generated from message thru.services.v1.GetBlockRequest\n */\nexport type GetBlockRequest = Message<\"thru.services.v1.GetBlockRequest\"> & {\n  /**\n   * @generated from oneof thru.services.v1.GetBlockRequest.selector\n   */\n  selector: {\n    /**\n     * @generated from field: uint64 slot = 1;\n     */\n    value: bigint;\n    case: \"slot\";\n  } | {\n    /**\n     * @generated from field: thru.core.v1.BlockHash block_hash = 2;\n     */\n    value: BlockHash;\n    case: \"blockHash\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * @generated from field: optional thru.core.v1.BlockView view = 3;\n   */\n  view?: BlockView | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 4;\n   */\n  minConsensus?: ConsensusStatus | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.GetBlockRequest.\n * Use `create(GetBlockRequestSchema)` to create a new message.\n */\nexport const GetBlockRequestSchema: GenMessage<GetBlockRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 6);\n\n/**\n * GetRawBlockRequest retrieves raw block bytes by slot or hash.\n *\n * @generated from message thru.services.v1.GetRawBlockRequest\n */\nexport type GetRawBlockRequest = Message<\"thru.services.v1.GetRawBlockRequest\"> & {\n  /**\n   * @generated from oneof thru.services.v1.GetRawBlockRequest.selector\n   */\n  selector: {\n    /**\n     * @generated from field: uint64 slot = 1;\n     */\n    value: bigint;\n    case: \"slot\";\n  } | {\n    /**\n     * @generated from field: thru.core.v1.BlockHash block_hash = 2;\n     */\n    value: BlockHash;\n    case: \"blockHash\";\n  } | { case: undefined; value?: undefined };\n\n  /**\n   * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 3;\n   */\n  minConsensus?: ConsensusStatus | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.GetRawBlockRequest.\n * Use `create(GetRawBlockRequestSchema)` to create a new message.\n */\nexport const GetRawBlockRequestSchema: GenMessage<GetRawBlockRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 7);\n\n/**\n * ListAccountsRequest lists accounts using CEL filters.\n *\n * The filter expression supports filtering on account metadata fields using CEL (Common Expression Language).\n * A filter expression is REQUIRED for all ListAccounts requests.\n *\n * Available fields for filtering:\n *   - account.address.value (bytes): The account's public key address\n *   - account.meta.owner.value (bytes): The account owner's public key\n *   - account.meta.balance (uint64): Account balance in native units\n *   - account.meta.seq (uint64): Account sequence number / state counter\n *   - account.meta.nonce (uint64): Account transaction nonce\n *   - account.meta.data_size (uint32): Size of account data in bytes\n *   - account.meta.version (uint32): Account version number\n *   - account.meta.flags (AccountFlags): Account capability flags (message type)\n *   - account.meta.flags.is_program (bool): Flag indicating if account is a program\n *   - account.meta.flags.is_privileged (bool): Flag indicating if account is privileged\n *   - account.meta.flags.is_uncompressable (bool): Flag indicating if account data cannot be compressed\n *   - account.meta.flags.is_ephemeral (bool): Flag indicating if account is ephemeral\n *   - account.meta.flags.is_deleted (bool): Flag indicating if account is deleted\n *   - account.meta.flags.is_new (bool): Flag indicating if account is new\n *   - account.meta.flags.is_compressed (bool): Flag indicating if account data is compressed\n *   - account.meta.last_updated_slot (uint64): Slot when account was last modified\n *\n * Available CEL functions:\n *   - has(field): Check if optional field exists\n *   - uint(value): Convert to uint type\n *   - int(value): Convert to int type\n *   - string(value): Convert to string type\n *   - bytes(value): Convert to bytes type\n *\n * Available filter parameters (accessible via params.* in expressions):\n *   - params.owner_bytes (bytes): Owner public key for owner filtering (REQUIRED when filtering by owner)\n *   - params.prefix (bytes): Byte prefix for range-based filtering\n *   - params.tag (any): Custom tag parameter\n *   - params.min_slot (uint64): Minimum slot parameter\n *   - params.min_updated_slot (uint64): Minimum last_updated_slot for filtering\n *\n * Filter examples:\n *\n * 1. Filter by balance:\n *      filter.expression = \"account.meta.balance > uint(1000000)\"\n *\n * 2. Filter by balance range:\n *      filter.expression = \"account.meta.balance >= uint(100) && account.meta.balance <= uint(10000)\"\n *\n * 3. Filter by owner (requires params.owner_bytes):\n *      filter.expression = \"account.meta.owner.value == params.owner_bytes\"\n *      filter.params[\"owner_bytes\"].bytes_value = <32-byte owner pubkey>\n *\n * 4. Filter by data size:\n *      filter.expression = \"account.meta.data_size > uint(0)\"\n *      filter.expression = \"account.meta.data_size >= uint(100) && account.meta.data_size <= uint(1000)\"\n *\n * 5. Filter by nonce:\n *      filter.expression = \"account.meta.nonce == uint(0)\"\n *\n * 6. Filter by sequence number:\n *      filter.expression = \"account.meta.seq >= uint(100)\"\n *\n * 7. Filter by version:\n *      filter.expression = \"account.meta.version == uint(1)\"\n *\n * 8. Filter by specific address (using inline bytes literal with octal escaping):\n *      filter.expression = \"account.address.value == b'\\001\\002\\003...'\"\n *      Note: Binary bytes must be properly escaped using octal notation (\\NNN) for non-printable bytes\n *\n * 9. Filter by address prefix (using range comparison):\n *      filter.expression = \"account.address.value >= b'\\001\\002\\003\\004' && account.address.value <= b'\\001\\002\\003\\004\\377\\377...'\"\n *      Note: Create upper bound by appending 0xff bytes after prefix\n *\n * 10. Combine multiple conditions with AND:\n *      filter.expression = \"account.meta.balance > uint(0) && account.meta.data_size == uint(0)\"\n *\n * 11. Combine multiple conditions with OR:\n *      filter.expression = \"account.meta.balance == uint(0) || account.meta.balance > uint(50000)\"\n *\n * 12. Complex combined filters:\n *      filter.expression = \"(account.meta.balance > uint(100) && account.meta.balance < uint(10000)) || account.meta.data_size > uint(1000)\"\n *\n * 13. Check for optional field existence:\n *      filter.expression = \"has(account.address.value)\"\n *      filter.expression = \"has(account.meta.owner.value)\"  // Requires params.owner_bytes\n *\n * 14. Use inequality operators:\n *      filter.expression = \"account.meta.balance < uint(5000)\"\n *      filter.expression = \"account.meta.balance <= uint(5000)\"\n *      filter.expression = \"account.meta.balance >= uint(100)\"\n *      filter.expression = \"account.meta.balance != uint(999)\"\n *\n * 15. Type conversions:\n *      filter.expression = \"account.meta.balance == uint(100)\"\n *      filter.expression = \"uint(account.meta.data_size) > uint(0)\"\n *\n * 16. Filter by account flags (individual flag fields):\n *      filter.expression = \"account.meta.flags.is_program == true\"\n *      filter.expression = \"account.meta.flags.is_privileged == true\"\n *      filter.expression = \"account.meta.flags.is_uncompressable == true\"\n *      filter.expression = \"account.meta.flags.is_ephemeral == true\"\n *      filter.expression = \"account.meta.flags.is_deleted == true\"\n *      filter.expression = \"account.meta.flags.is_new == true\"\n *      filter.expression = \"account.meta.flags.is_compressed == true\"\n *\n * 17. Combine flag filters with other conditions:\n *      filter.expression = \"account.meta.flags.is_program == true && account.meta.balance > uint(0)\"\n *\n * 18. Filter by last_updated_slot:\n *      filter.expression = \"account.meta.last_updated_slot >= uint(1000)\"\n *\n * 19. Filter by last_updated_slot with params:\n *      filter.expression = \"account.meta.last_updated_slot >= params.min_updated_slot\"\n *      filter.params[\"min_updated_slot\"].uint_value = 1000\n *\n * Limitations:\n *   - The startsWith() function only works with strings, not bytes\n *   - The bytesPrefix() function is NOT available for ListAccounts (use range comparison instead)\n *   - Parameter names other than owner_bytes, prefix, tag, min_slot, min_updated_slot are NOT permitted\n *   - All filters are pushed down to SQL for optimal performance where possible\n *\n * @generated from message thru.services.v1.ListAccountsRequest\n */\nexport type ListAccountsRequest = Message<\"thru.services.v1.ListAccountsRequest\"> & {\n  /**\n   * @generated from field: optional thru.core.v1.AccountView view = 1;\n   */\n  view?: AccountView | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.VersionContext version_context = 2;\n   */\n  versionContext?: VersionContext | undefined;\n\n  /**\n   * CEL filter expression (REQUIRED). See message documentation for examples.\n   *\n   * @generated from field: optional thru.common.v1.Filter filter = 3;\n   */\n  filter?: Filter | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.PageRequest page = 4;\n   */\n  page?: PageRequest | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 5;\n   */\n  minConsensus?: ConsensusStatus | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.ListAccountsRequest.\n * Use `create(ListAccountsRequestSchema)` to create a new message.\n */\nexport const ListAccountsRequestSchema: GenMessage<ListAccountsRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 8);\n\n/**\n * ListAccountsResponse contains paginated accounts.\n *\n * @generated from message thru.services.v1.ListAccountsResponse\n */\nexport type ListAccountsResponse = Message<\"thru.services.v1.ListAccountsResponse\"> & {\n  /**\n   * @generated from field: repeated thru.core.v1.Account accounts = 1;\n   */\n  accounts: Account[];\n\n  /**\n   * @generated from field: optional thru.common.v1.PageResponse page = 2;\n   */\n  page?: PageResponse | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.ListAccountsResponse.\n * Use `create(ListAccountsResponseSchema)` to create a new message.\n */\nexport const ListAccountsResponseSchema: GenMessage<ListAccountsResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 9);\n\n/**\n * ListBlocksRequest lists blocks with pagination and filtering.\n *\n * Returns blocks ordered from latest slot to earliest (slot DESC) by default.\n * Supports filtering on block header and footer fields using CEL expressions.\n * The whole filter is evaluated by the database. A filter it cannot evaluate, such as a field compared\n * with timestamp(...), arithmetic or the ternary operator, is rejected with INVALID_ARGUMENT\n * (reason \"not_translatable\").\n *\n * Available fields for filtering:\n *\n * Header fields:\n *   - block.header.slot (uint64): Block slot number\n *   - block.header.version (uint32): Block version number\n *   - block.header.start_slot (uint64): Start slot for block production\n *   - block.header.producer.value (bytes): Block producer's public key\n *   - block.header.expiry_after (uint32): Expiry duration in slots\n *   - block.header.expiry_timestamp (google.protobuf.Timestamp): Expiry timestamp\n *   - block.header.max_block_size (uint32): Maximum block size in bytes\n *   - block.header.max_compute_units (uint64): Maximum compute units allowed\n *   - block.header.max_state_units (uint32): Maximum state units allowed\n *   - block.header.bond_amount_lock_up (uint64): Bond amount lock-up for block production\n *   - block.header.block_hash.value (bytes): Block hash\n *   - block.header.header_signature.value (bytes): Header signature\n *   - block.header.block_time (google.protobuf.Timestamp): Block timestamp\n *\n * Footer fields:\n *   - block.footer.signature.value (bytes): Block signature\n *   - block.footer.status (int32): Block execution status (2 = EXECUTION_STATUS_EXECUTED)\n *   - block.footer.consumed_compute_units (uint64): Total compute units consumed by all transactions\n *   - block.footer.consumed_state_units (uint32): Total state units consumed by all transactions\n *   - block.footer.attestor_payment (uint64): Payment to attestors for block validation\n *\n * Consensus status:\n *   - block.consensus_status (int32): Consensus status (always CONSENSUS_STATUS_INCLUDED for persisted blocks)\n *\n * Available CEL functions:\n *   - has(field): Check if optional field exists\n *   - uint(value): Convert to uint type\n *   - int(value): Convert to int type; int() of a timestamp is whole Unix seconds\n *   - bytes(value): Convert to bytes type\n *   - timestamp(value), duration(value): accepted by CEL but not evaluable by the database; filters\n *     using them are rejected\n *\n * Available filter parameters (accessible via params.* in expressions):\n *   - params.slot (uint64): Slot number for filtering\n *   - params.u64 (uint64): Generic uint64 parameter\n *   - params.producer (bytes): Producer public key for filtering\n *\n * Filter examples:\n *\n * 1. Filter by specific slot:\n *      filter.expression = \"block.header.slot == uint(1234)\"\n *\n * 2. Filter by slot range:\n *      filter.expression = \"block.header.slot >= uint(1000) && block.header.slot <= uint(2000)\"\n *\n * 3. Filter by slot using parameter:\n *      filter.expression = \"block.header.slot == params.slot\"\n *      filter.params[\"slot\"].uint_value = 1234\n *\n * 4. Filter by block version:\n *      filter.expression = \"block.header.version == uint(1)\"\n *\n * 5. Filter by producer (using parameter):\n *      filter.expression = \"block.header.producer.value == params.producer\"\n *      filter.params[\"producer\"].bytes_value = <32-byte producer pubkey>\n *\n * 6. Filter by max compute units:\n *      filter.expression = \"block.header.max_compute_units > uint(1000000)\"\n *      filter.expression = \"block.header.max_compute_units >= uint(0) && block.header.max_compute_units <= uint(10000000)\"\n *\n * 7. Filter by max state units:\n *      filter.expression = \"block.header.max_state_units > uint(0)\"\n *\n * 8. Filter by bond amount:\n *      filter.expression = \"block.header.bond_amount_lock_up >= uint(0)\"\n *      filter.expression = \"block.header.bond_amount_lock_up > uint(1000)\"\n *\n * 9. Filter by start_slot:\n *      filter.expression = \"block.header.start_slot <= uint(5000)\"\n *\n * 10. Filter by expiry_after:\n *      filter.expression = \"block.header.expiry_after > uint(0)\"\n *\n * 11. Filter by max_block_size:\n *      filter.expression = \"block.header.max_block_size >= uint(1000000)\"\n *\n * 12. Filter by execution status:\n *      filter.expression = \"block.footer.status == int(2)\"  // EXECUTION_STATUS_EXECUTED\n *\n * 13. Filter by consumed compute units:\n *      filter.expression = \"block.footer.consumed_compute_units > uint(0)\"\n *      filter.expression = \"block.footer.consumed_compute_units >= uint(100) && block.footer.consumed_compute_units <= uint(1000000)\"\n *\n * 14. Filter by consumed state units:\n *      filter.expression = \"block.footer.consumed_state_units >= uint(0)\"\n *      filter.expression = \"block.footer.consumed_state_units > uint(10)\"\n *\n * 15. Check for footer signature existence:\n *      filter.expression = \"has(block.footer.signature)\"\n *\n * 16. Check for footer existence:\n *      filter.expression = \"has(block.footer)\"\n *\n * 17. Check for producer existence:\n *      filter.expression = \"has(block.header.producer)\"\n *\n * 18. Check for block hash existence:\n *      filter.expression = \"has(block.header.block_hash)\"\n *\n * 19. Check for header signature existence:\n *      filter.expression = \"has(block.header.header_signature)\"\n *\n * 20. Check for expiry timestamp existence:\n *      filter.expression = \"has(block.header.expiry_timestamp)\"\n *\n * 21. Check for block time existence:\n *      filter.expression = \"has(block.header.block_time)\"\n *\n * 22. Combine multiple header conditions with AND:\n *      filter.expression = \"block.header.slot >= uint(1000) && block.header.max_compute_units > uint(1000000)\"\n *\n * 23. Combine multiple footer conditions with AND:\n *      filter.expression = \"block.footer.consumed_compute_units > uint(0) && block.footer.consumed_state_units > uint(0)\"\n *\n * 24. Combine header and footer conditions:\n *      filter.expression = \"block.header.slot >= uint(1000) && block.footer.consumed_compute_units > uint(100000)\"\n *\n * 25. Combine multiple conditions with OR:\n *      filter.expression = \"block.header.slot == uint(100) || block.header.slot == uint(200)\"\n *      filter.expression = \"block.footer.consumed_compute_units > uint(1000000) || block.footer.consumed_state_units > uint(10000)\"\n *\n * 26. Complex combined filters:\n *      filter.expression = \"(block.header.slot >= uint(1000) && block.header.slot <= uint(2000)) || block.footer.consumed_compute_units > uint(5000000)\"\n *\n * 27. Use inequality operators:\n *      filter.expression = \"block.header.max_compute_units < uint(10000000)\"\n *      filter.expression = \"block.header.max_compute_units <= uint(10000000)\"\n *      filter.expression = \"block.header.bond_amount_lock_up >= uint(100)\"\n *      filter.expression = \"block.footer.consumed_compute_units != uint(0)\"\n *\n * 28. Combine has() with value checks:\n *      filter.expression = \"has(block.header.producer) && block.header.producer.value == params.producer\"\n *      filter.params[\"producer\"].bytes_value = <32-byte producer pubkey>\n *\n * 29. Filter by multiple resource limits:\n *      filter.expression = \"block.header.max_compute_units > uint(1000000) && block.header.max_state_units > uint(1000) && block.header.max_block_size > uint(1000000)\"\n *\n * 30. Filter by block time:\n *      filter.expression = \"int(block.header.block_time) >= 1767225600\"\n *\n * Note: blocks are stored in slot order. One call reads a bounded number of blocks (about 100,000). When\n * a filter needs more to fill the page, the call returns the matches found so far, possibly none, with a\n * next_page_token to continue from: a short or empty page with a token is not the end of the results.\n * Bound a rare match with block.header.slot to need fewer calls.\n *\n * @generated from message thru.services.v1.ListBlocksRequest\n */\nexport type ListBlocksRequest = Message<\"thru.services.v1.ListBlocksRequest\"> & {\n  /**\n   * CEL filter expression (OPTIONAL). See message documentation for examples.\n   *\n   * @generated from field: optional thru.common.v1.Filter filter = 1;\n   */\n  filter?: Filter | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.PageRequest page = 2;\n   */\n  page?: PageRequest | undefined;\n\n  /**\n   * @generated from field: optional thru.core.v1.BlockView view = 3;\n   */\n  view?: BlockView | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 4;\n   */\n  minConsensus?: ConsensusStatus | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.ListBlocksRequest.\n * Use `create(ListBlocksRequestSchema)` to create a new message.\n */\nexport const ListBlocksRequestSchema: GenMessage<ListBlocksRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 10);\n\n/**\n * ListBlocksResponse returns a page of blocks.\n *\n * @generated from message thru.services.v1.ListBlocksResponse\n */\nexport type ListBlocksResponse = Message<\"thru.services.v1.ListBlocksResponse\"> & {\n  /**\n   * @generated from field: repeated thru.core.v1.Block blocks = 1;\n   */\n  blocks: Block[];\n\n  /**\n   * @generated from field: optional thru.common.v1.PageResponse page = 2;\n   */\n  page?: PageResponse | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.ListBlocksResponse.\n * Use `create(ListBlocksResponseSchema)` to create a new message.\n */\nexport const ListBlocksResponseSchema: GenMessage<ListBlocksResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 11);\n\n/**\n * ListTransactionsForAccountRequest lists transactions involving a specific account.\n *\n * This RPC returns all transactions where the specified account appears in any\n * capacity (fee payer, signer, or affected account). Results can be filtered\n * using CEL expressions on transaction properties.\n *\n * ## Available Filter Fields\n *\n * - `transaction.slot` (uint64): Block slot number\n * - `transaction.block_offset` (uint32): Position within block\n * - `transaction.signature.value` (bytes): Transaction signature\n *\n * Header fields (a transaction whose header is not stored reads them as zero or empty):\n * - `transaction.header.version` (uint32): Transaction format version\n * - `transaction.header.fee` (uint64): Transaction fee\n * - `transaction.header.nonce` (uint64): Sender account nonce\n * - `transaction.header.start_slot` (uint64): Earliest slot for execution\n * - `transaction.header.expiry_after` (uint32): Expiry duration in slots\n * - `transaction.header.requested_compute_units` (uint64): Requested compute units\n * - `transaction.header.requested_memory_units` (uint32): Requested memory units\n * - `transaction.header.requested_state_units` (uint32): Requested state units\n * - `transaction.header.fee_payer_pubkey.value` (bytes): Fee payer public key\n * - `transaction.header.program_pubkey.value` (bytes): Program public key\n * - `transaction.header.fee_payer_signature.value` (bytes): Fee payer signature\n *\n * Execution result fields:\n * - `transaction.execution_result.vm_error` (TransactionVmError enum): VM execution status (0 = success)\n * - `transaction.execution_result.user_error_code` (uint64): User-defined error code\n * - `transaction.execution_result.execution_result` (uint64): Alias for user_error_code\n * - `transaction.execution_result.consumed_compute_units` (uint64): Compute units used\n * - `transaction.execution_result.consumed_memory_units` (uint32): Memory units used\n * - `transaction.execution_result.consumed_state_units` (uint32): State units used\n * - `transaction.execution_result.events_count` (uint32): Number of events emitted\n * - `transaction.execution_result.events_size` (uint32): Total size of event data in bytes\n *\n * ## Filter Examples\n *\n * ### Filter by slot\n * ```\n * filter {\n *   expression: \"transaction.slot == params.slot\"\n *   params {\n *     key: \"slot\"\n *     value { int_value: 12345 }\n *   }\n * }\n * ```\n *\n * ### Filter by block offset\n * ```\n * filter {\n *   expression: \"transaction.block_offset == uint(5)\"\n * }\n * ```\n *\n * ### Filter by compute units (high usage)\n * ```\n * filter {\n *   expression: \"transaction.execution_result.consumed_compute_units >= uint(1000000)\"\n * }\n * ```\n *\n * ### Filter by memory units\n * ```\n * filter {\n *   expression: \"transaction.execution_result.consumed_memory_units > uint(0)\"\n * }\n * ```\n *\n * ### Filter by state units\n * ```\n * filter {\n *   expression: \"transaction.execution_result.consumed_state_units > uint(0)\"\n * }\n * ```\n *\n * ### Filter successful transactions (by error code)\n * ```\n * filter {\n *   expression: \"transaction.execution_result.user_error_code == uint(0)\"\n * }\n * ```\n *\n * ### Filter by VM execution status\n * ```\n * filter {\n *   expression: \"transaction.execution_result.vm_error == int(0)\"\n * }\n * ```\n *\n * ### Filter transactions with events\n * ```\n * filter {\n *   expression: \"transaction.execution_result.events_count > uint(0)\"\n * }\n * ```\n *\n * ### Filter by event data size\n * ```\n * filter {\n *   expression: \"transaction.execution_result.events_size > uint(0)\"\n * }\n * ```\n *\n * ### Check for optional fields using has()\n * ```\n * filter {\n *   expression: \"has(transaction.execution_result)\"\n * }\n * ```\n *\n * ### Combined filters with AND/OR\n * ```\n * filter {\n *   expression: \"transaction.execution_result.consumed_compute_units >= uint(1000000) && transaction.execution_result.user_error_code == uint(0)\"\n * }\n * ```\n *\n * ### Using params for dynamic values\n * ```\n * filter {\n *   expression: \"transaction.execution_result.consumed_compute_units >= params.u64\"\n *   params {\n *     key: \"u64\"\n *     value { int_value: 500000 }\n *   }\n * }\n * ```\n *\n * ## Available Functions\n *\n * - `has(field)`: Check if optional field is present\n * - `uint(value)`: Convert to unsigned integer\n * - `int(value)`: Convert to signed integer\n * - `string(value)`: Convert to string type\n * - `bytes(value)`: Convert to bytes type\n *\n * ## Available Filter Parameters\n *\n * - `params.slot` (uint64): Slot number for filtering\n * - `params.u64` (uint64): Generic uint64 parameter\n * - `params.pubkey` (Pubkey): Public key parameter for filtering\n *\n * The whole filter is evaluated by the database. A filter it cannot evaluate,\n * such as arithmetic, the ternary operator or `string()` of a field, is\n * rejected with INVALID_ARGUMENT (reason \"not_translatable\").\n *\n * ## Performance Notes\n *\n * One call reads a bounded number of the account's transactions (about\n * 4,096). When a filter needs more to fill the page, the call returns the\n * matches found so far, possibly none, with a next_page_token to continue\n * from: a short or empty page with a token is not the end of the results.\n *\n * @generated from message thru.services.v1.ListTransactionsForAccountRequest\n */\nexport type ListTransactionsForAccountRequest = Message<\"thru.services.v1.ListTransactionsForAccountRequest\"> & {\n  /**\n   * @generated from field: thru.common.v1.Pubkey account = 1;\n   */\n  account?: Pubkey | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.PageRequest page = 2;\n   */\n  page?: PageRequest | undefined;\n\n  /**\n   * Optional CEL filter applied after the account constraint.\n   *\n   * @generated from field: optional thru.common.v1.Filter filter = 3;\n   */\n  filter?: Filter | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.ListTransactionsForAccountRequest.\n * Use `create(ListTransactionsForAccountRequestSchema)` to create a new message.\n */\nexport const ListTransactionsForAccountRequestSchema: GenMessage<ListTransactionsForAccountRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 12);\n\n/**\n * ListTransactionsForAccountResponse contains transaction data.\n *\n *\n * @generated from message thru.services.v1.ListTransactionsForAccountResponse\n */\nexport type ListTransactionsForAccountResponse = Message<\"thru.services.v1.ListTransactionsForAccountResponse\"> & {\n  /**\n   * @generated from field: optional thru.common.v1.PageResponse page = 1;\n   */\n  page?: PageResponse | undefined;\n\n  /**\n   * @generated from field: repeated thru.core.v1.Transaction transactions = 2;\n   */\n  transactions: Transaction[];\n};\n\n/**\n * Describes the message thru.services.v1.ListTransactionsForAccountResponse.\n * Use `create(ListTransactionsForAccountResponseSchema)` to create a new message.\n */\nexport const ListTransactionsForAccountResponseSchema: GenMessage<ListTransactionsForAccountResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 13);\n\n/**\n * GetVersionRequest fetches component version strings.\n *\n * @generated from message thru.services.v1.GetVersionRequest\n */\nexport type GetVersionRequest = Message<\"thru.services.v1.GetVersionRequest\"> & {\n};\n\n/**\n * Describes the message thru.services.v1.GetVersionRequest.\n * Use `create(GetVersionRequestSchema)` to create a new message.\n */\nexport const GetVersionRequestSchema: GenMessage<GetVersionRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 14);\n\n/**\n * GetVersionResponse returns version information per component.\n *\n * @generated from message thru.services.v1.GetVersionResponse\n */\nexport type GetVersionResponse = Message<\"thru.services.v1.GetVersionResponse\"> & {\n  /**\n   * @generated from field: map<string, string> versions = 1;\n   */\n  versions: { [key: string]: string };\n};\n\n/**\n * Describes the message thru.services.v1.GetVersionResponse.\n * Use `create(GetVersionResponseSchema)` to create a new message.\n */\nexport const GetVersionResponseSchema: GenMessage<GetVersionResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 15);\n\n/**\n * GetEventRequest fetches an event by identifier.\n *\n * @generated from message thru.services.v1.GetEventRequest\n */\nexport type GetEventRequest = Message<\"thru.services.v1.GetEventRequest\"> & {\n  /**\n   * @generated from field: string event_id = 1;\n   */\n  eventId: string;\n\n  /**\n   * @generated from field: optional thru.common.v1.VersionContext version_context = 2;\n   */\n  versionContext?: VersionContext | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.GetEventRequest.\n * Use `create(GetEventRequestSchema)` to create a new message.\n */\nexport const GetEventRequestSchema: GenMessage<GetEventRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 16);\n\n/**\n * Event represents a transaction event emitted by the chain.\n *\n * @generated from message thru.services.v1.Event\n */\nexport type Event = Message<\"thru.services.v1.Event\"> & {\n  /**\n   * @generated from field: string event_id = 1;\n   */\n  eventId: string;\n\n  /**\n   * @generated from field: thru.common.v1.Signature transaction_signature = 2;\n   */\n  transactionSignature?: Signature | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.Pubkey program = 3;\n   */\n  program?: Pubkey | undefined;\n\n  /**\n   * @generated from field: optional bytes payload = 4;\n   */\n  payload?: Uint8Array | undefined;\n\n  /**\n   * @generated from field: optional uint64 slot = 5;\n   */\n  slot?: bigint | undefined;\n\n  /**\n   * @generated from field: optional uint32 call_idx = 6;\n   */\n  callIdx?: number | undefined;\n\n  /**\n   * @generated from field: optional uint32 program_idx = 7;\n   */\n  programIdx?: number | undefined;\n\n  /**\n   * @generated from field: optional uint32 payload_size = 8;\n   */\n  payloadSize?: number | undefined;\n\n  /**\n   * @generated from field: optional uint32 block_offset = 9;\n   */\n  blockOffset?: number | undefined;\n\n  /**\n   * @generated from field: optional google.protobuf.Timestamp timestamp = 10;\n   */\n  timestamp?: Timestamp | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.Pubkey fee_payer = 11;\n   */\n  feePayer?: Pubkey | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.Event.\n * Use `create(EventSchema)` to create a new message.\n */\nexport const EventSchema: GenMessage<Event> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 17);\n\n/**\n * ListEventsRequest lists events with CEL filtering and pagination.\n *\n * Returns events ordered from most recent to older (slot DESC, block_offset DESC, call_idx DESC).\n * Supports filtering on event metadata and payload using CEL expressions with specialized byte functions.\n * The whole filter is evaluated by the database. A filter it cannot evaluate, such as event_id.startsWith,\n * event.timestamp compared with timestamp(...), arithmetic or the ternary operator, is rejected with\n * INVALID_ARGUMENT (reason \"not_translatable\").\n *\n * Available fields for filtering:\n *   - event.event_id (string): Event identifier \"{signature}:{slot}:{block_offset}:{call_idx}:{event_idx}\";\n *     == and != only. A value that is not an identifier ListEvents returns matches nothing.\n *   - event.transaction_signature.value (bytes): Transaction signature that emitted the event\n *   - event.slot (uint64): Block slot number where event was emitted\n *   - event.call_idx (uint32): Instruction call index within transaction\n *   - event.block_offset (uint32): Transaction's position within the block\n *   - event.timestamp (google.protobuf.Timestamp): Block time; has() and int(event.timestamp) (Unix seconds) only\n *   - event.program (Pubkey): has() only; compare event.program.value\n *   - event.program.value (bytes): Program public key that emitted the event; empty when unset\n *   - event.program_idx (uint32): Program index within transaction\n *   - event.payload (bytes): Event payload data\n *   - event.payload_size (uint32): Size of event payload in bytes\n *   - event.fee_payer (Pubkey): has() only; compare event.fee_payer.value\n *   - event.fee_payer.value (bytes): Fee payer's public key for the transaction; empty when unset\n *\n * Available CEL functions:\n *   - has(field): Check if optional field exists\n *   - first1Byte(bytes): Extract first byte as uint8\n *   - first4Bytes(bytes): Extract first 4 bytes as uint32 (little-endian)\n *   - first8Bytes(bytes): Extract first 8 bytes as uint64 (little-endian)\n *   - bytesPrefix(bytes, prefix): Check if bytes start with prefix\n *   - uint(value): Convert to uint type\n *   - int(value): Convert to int type\n *   - string(value): Convert to string type\n *   - bytes(value): Convert to bytes type\n *   - double(value): Convert to double type\n *   - timestamp(value), duration(value), startsWith(string, prefix): accepted by CEL but not evaluable by\n *     the database; filters using them on event fields are rejected\n *\n * Available filter parameters (accessible via params.* in expressions):\n *   - params.slot (uint64): Slot number for filtering\n *   - params.u64 (uint64): Generic uint64 parameter for payload matching\n *   - params.signature (Signature): Transaction signature for filtering\n *   - params.signature.value (bytes): Transaction signature bytes for filtering\n *   - params.address (Pubkey): Program address for filtering\n *   - params.address.value (bytes): Program address bytes for filtering\n *   - params.prefix (bytes): Byte prefix for payload filtering\n *   - params.timestamp (int64): Unix seconds, compared with int(event.timestamp)\n *\n * Filter examples:\n *\n * 1. Filter by slot:\n *      filter.expression = \"event.slot > uint(1000)\"\n *      filter.expression = \"event.slot >= uint(100) && event.slot <= uint(200)\"\n *\n * 2. Filter by slot using parameter:\n *      filter.expression = \"event.slot >= params.slot\"\n *      filter.params[\"slot\"].int_value = 1234\n *\n * 3. Filter by call index:\n *      filter.expression = \"event.call_idx == uint(0)\"  // First instruction\n *      filter.expression = \"event.call_idx > uint(0)\"   // Nested instructions\n *\n * 4. Filter by block offset:\n *      filter.expression = \"event.block_offset >= uint(0)\"\n *      filter.expression = \"event.block_offset == uint(5)\"\n *\n * 5. Filter by transaction signature (using parameter):\n *      filter.expression = \"event.transaction_signature.value == params.signature\"\n *      filter.params[\"signature\"].signature_value.value = <64-byte signature>\n *\n * 6. Filter by program address (using parameter):\n *      filter.expression = \"has(event.program) && event.program.value == params.address\"\n *      filter.params[\"address\"].pubkey_value.value = <32-byte program pubkey>\n *\n * 7. Filter by event ID:\n *      filter.expression = \"event.event_id == \\\"{signature}:{slot}:{block_offset}:{call_idx}:{event_idx}\\\"\"\n *\n * 8. Check for payload existence:\n *      filter.expression = \"has(event.payload)\"\n *\n * 9. Check for program existence:\n *      filter.expression = \"has(event.program)\"\n *\n * 10. Filter by payload first byte (event type):\n *      filter.expression = \"has(event.payload) && first1Byte(event.payload) == uint(1)\"  // MESSAGE events\n *      filter.expression = \"has(event.payload) && first1Byte(event.payload) == uint(2)\"  // Other type\n *\n * 11. Filter by payload first 4 bytes (uint32 event type):\n *      filter.expression = \"has(event.payload) && first4Bytes(event.payload) == uint(2)\"  // COUNTER events\n *      filter.expression = \"has(event.payload) && first4Bytes(event.payload) == params.u64\"\n *      filter.params[\"u64\"].int_value = 2\n *\n * 12. Filter by payload first 8 bytes (uint64 event type):\n *      filter.expression = \"has(event.payload) && first8Bytes(event.payload) == uint(6)\"  // PATTERN events\n *      filter.expression = \"has(event.payload) && first8Bytes(event.payload) == params.u64\"\n *      filter.params[\"u64\"].int_value = 6\n *\n * 13. Filter by payload byte prefix:\n *      filter.expression = \"bytesPrefix(event.payload, params.prefix)\"\n *      filter.params[\"prefix\"].bytes_value = <byte prefix to match>\n *\n * 14. Combine slot and call_idx filters:\n *      filter.expression = \"event.slot > uint(1000) && event.call_idx == uint(0)\"\n *\n * 15. Combine slot, call_idx, and payload existence:\n *      filter.expression = \"event.slot > uint(1000) && event.call_idx == uint(0) && has(event.payload)\"\n *\n * 16. Filter by program and payload type:\n *      filter.expression = \"has(event.program) && event.program.value == params.address && first1Byte(event.payload) == uint(1)\"\n *      filter.params[\"address\"].pubkey_value.value = <32-byte program pubkey>\n *\n * 17. Filter MESSAGE events (type 1) with specific program:\n *      filter.expression = \"has(event.payload) && first1Byte(event.payload) == uint(1) && event.program.value == params.address\"\n *      filter.params[\"address\"].pubkey_value.value = <32-byte program pubkey>\n *\n * 18. Filter COUNTER events (type 2) in slot range:\n *      filter.expression = \"has(event.payload) && first4Bytes(event.payload) == uint(2) && event.slot >= uint(100) && event.slot <= uint(200)\"\n *\n * 19. Filter PATTERN events (type 6) with payload prefix:\n *      filter.expression = \"has(event.payload) && first8Bytes(event.payload) == uint(6) && bytesPrefix(event.payload, params.prefix)\"\n *      filter.params[\"prefix\"].bytes_value = <pattern prefix bytes>\n *\n * 20. Complex combined filter:\n *      filter.expression = \"(event.slot > uint(1000) && event.call_idx == uint(0)) || first1Byte(event.payload) == uint(1)\"\n *\n * 21. Filter events from specific transaction:\n *      filter.expression = \"event.transaction_signature.value == params.signature && has(event.payload)\"\n *      filter.params[\"signature\"].signature_value.value = <64-byte signature>\n *\n * 22. Filter by multiple payload type options:\n *      filter.expression = \"has(event.payload) && (first1Byte(event.payload) == uint(1) || first1Byte(event.payload) == uint(2))\"\n *\n * 23. Filter nested instruction events:\n *      filter.expression = \"event.call_idx > uint(0) && has(event.program)\"\n *\n * 24. Filter first instruction events only:\n *      filter.expression = \"event.call_idx == uint(0)\"\n *\n * 25. Filter events with payload longer than specific size (using bytesPrefix with empty prefix):\n *      filter.expression = \"has(event.payload)\"\n *\n * 26. Combine has() checks:\n *      filter.expression = \"has(event.program) && has(event.payload) && has(event.timestamp)\"\n *\n * 27. Use inequality operators:\n *      filter.expression = \"event.slot < uint(10000)\"\n *      filter.expression = \"event.slot <= uint(10000)\"\n *      filter.expression = \"event.call_idx >= uint(0)\"\n *      filter.expression = \"event.block_offset != uint(0)\"\n *\n * 28. Filter by timestamp (if available):\n *      filter.expression = \"has(event.timestamp)\"\n *\n * 29. Filter by block time:\n *      filter.expression = \"int(event.timestamp) >= params.timestamp\"\n *      filter.params[\"timestamp\"].int_value = 1767225600\n *\n * 30. Complex payload and metadata filter:\n *      filter.expression = \"event.slot >= params.slot && has(event.payload) && first8Bytes(event.payload) == params.u64 && event.program.value == params.address\"\n *      filter.params[\"slot\"].int_value = 1000\n *      filter.params[\"u64\"].int_value = 6\n *      filter.params[\"address\"].pubkey_value.value = <32-byte program pubkey>\n *\n * Note: Only slot, block_offset and call_idx are in the table's sort key, and event_id equality selects by\n * them too. One call reads a bounded number of rows (about 100,000). When a filter needs more to fill the\n * page, the call returns the matches found so far, possibly none, with a next_page_token to continue from:\n * a short or empty page with a token is not the end of the results. Bound a rare match with event.slot to\n * need fewer calls.\n *\n * @generated from message thru.services.v1.ListEventsRequest\n */\nexport type ListEventsRequest = Message<\"thru.services.v1.ListEventsRequest\"> & {\n  /**\n   * CEL filter expression (OPTIONAL). See message documentation for examples.\n   *\n   * @generated from field: optional thru.common.v1.Filter filter = 1;\n   */\n  filter?: Filter | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.PageRequest page = 2;\n   */\n  page?: PageRequest | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.VersionContext version_context = 3;\n   */\n  versionContext?: VersionContext | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 4;\n   */\n  minConsensus?: ConsensusStatus | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.ListEventsRequest.\n * Use `create(ListEventsRequestSchema)` to create a new message.\n */\nexport const ListEventsRequestSchema: GenMessage<ListEventsRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 18);\n\n/**\n * ListEventsResponse returns paginated events.\n *\n * @generated from message thru.services.v1.ListEventsResponse\n */\nexport type ListEventsResponse = Message<\"thru.services.v1.ListEventsResponse\"> & {\n  /**\n   * @generated from field: repeated thru.services.v1.Event events = 1;\n   */\n  events: Event[];\n\n  /**\n   * @generated from field: optional thru.common.v1.PageResponse page = 2;\n   */\n  page?: PageResponse | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.ListEventsResponse.\n * Use `create(ListEventsResponseSchema)` to create a new message.\n */\nexport const ListEventsResponseSchema: GenMessage<ListEventsResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 19);\n\n/**\n * ListTransactionsRequest lists executed transactions with CEL filtering and pagination.\n *\n * Returns transactions ordered from most recent to older (slot DESC, block_offset DESC).\n * Supports filtering on transaction metadata and execution results using CEL expressions.\n * The whole filter is evaluated by the database. A filter it cannot evaluate, such as arithmetic, the\n * ternary operator or string() of a field, is rejected with INVALID_ARGUMENT (reason \"not_translatable\").\n *\n * Available fields for filtering:\n *   - transaction.slot (uint64): Block slot number where transaction was executed\n *   - transaction.block_offset (uint32): Transaction's position within the block\n *   - transaction.signature.value (bytes): Transaction signature\n *\n * Header fields (a transaction whose header is not stored reads them as zero or empty):\n *   - transaction.header.version (uint32): Transaction format version\n *   - transaction.header.fee (uint64): Transaction fee\n *   - transaction.header.nonce (uint64): Sender account nonce\n *   - transaction.header.start_slot (uint64): Earliest slot for execution\n *   - transaction.header.expiry_after (uint32): Expiry duration in slots\n *   - transaction.header.requested_compute_units (uint64): Requested compute units\n *   - transaction.header.requested_memory_units (uint32): Requested memory units\n *   - transaction.header.requested_state_units (uint32): Requested state units\n *   - transaction.header.fee_payer_pubkey.value (bytes): Fee payer public key\n *   - transaction.header.program_pubkey.value (bytes): Program public key\n *   - transaction.header.fee_payer_signature.value (bytes): Fee payer signature\n *\n * Execution result fields:\n *   - transaction.execution_result.vm_error (TransactionVmError enum): VM error code (0 = success)\n *   - transaction.execution_result.user_error_code (uint64): User-defined error code\n *   - transaction.execution_result.execution_result (uint64): Alias for user_error_code\n *   - transaction.execution_result.consumed_compute_units (uint64): Compute units consumed\n *   - transaction.execution_result.consumed_memory_units (uint32): Memory units consumed\n *   - transaction.execution_result.consumed_state_units (uint32): State units consumed\n *   - transaction.execution_result.events_count (uint32): Number of events emitted\n *   - transaction.execution_result.events_size (uint32): Total size of events in bytes\n *\n * Available CEL functions:\n *   - has(field): Check if optional field exists\n *   - uint(value): Convert to uint type\n *   - int(value): Convert to int type\n *   - string(value): Convert to string type\n *   - bytes(value): Convert to bytes type\n *\n * Available filter parameters (accessible via params.* in expressions):\n *   - params.slot (uint64): Slot number for filtering\n *   - params.u64 (uint64): Generic uint64 parameter\n *   - params.pubkey (Pubkey): Public key parameter for filtering\n *\n * Filter examples:\n *\n * 1. Filter by slot range:\n *      filter.expression = \"transaction.slot >= uint(1000) && transaction.slot <= uint(2000)\"\n *\n * 2. Filter by successful transactions (no error):\n *      filter.expression = \"transaction.execution_result.user_error_code == uint(0)\"\n *      filter.expression = \"transaction.execution_result.vm_error == int(0)\"\n *\n * 3. Filter by specific VM error:\n *      filter.expression = \"transaction.execution_result.vm_error == int(2)\"  // VM_REVERT\n *      filter.expression = \"transaction.execution_result.vm_error == int(4)\"  // NONCE_TOO_LOW\n *      filter.expression = \"transaction.execution_result.vm_error == int(5)\"  // NONCE_TOO_HIGH\n *\n * 4. Filter by resource usage:\n *      filter.expression = \"transaction.execution_result.consumed_compute_units > uint(1000)\"\n *      filter.expression = \"transaction.execution_result.consumed_memory_units > uint(0)\"\n *      filter.expression = \"transaction.execution_result.consumed_state_units >= uint(0)\"\n *\n * 5. Filter by compute units range:\n *      filter.expression = \"transaction.execution_result.consumed_compute_units >= uint(0) && transaction.execution_result.consumed_compute_units < uint(1000000)\"\n *\n * 6. Filter by events count:\n *      filter.expression = \"transaction.execution_result.events_count == uint(0)\"  // No events (transfers)\n *      filter.expression = \"transaction.execution_result.events_count > uint(0)\"   // Has events\n *      filter.expression = \"transaction.execution_result.events_count == uint(1)\"  // Exactly 1 event\n *\n * 7. Filter by events size:\n *      filter.expression = \"transaction.execution_result.events_size == uint(0)\"  // No events\n *      filter.expression = \"transaction.execution_result.events_size > uint(0)\"   // Has events\n *      filter.expression = \"transaction.execution_result.events_size >= uint(100)\" // Large events\n *      filter.expression = \"transaction.execution_result.events_size >= uint(50) && transaction.execution_result.events_size <= uint(200)\"\n *\n * 8. Filter by block offset:\n *      filter.expression = \"transaction.block_offset >= uint(0)\"\n *      filter.expression = \"transaction.block_offset == uint(5)\"\n *\n * 9. Combine multiple conditions with AND:\n *      filter.expression = \"transaction.execution_result.user_error_code == uint(0) && transaction.execution_result.consumed_compute_units > uint(0)\"\n *\n * 10. Combine multiple conditions with OR:\n *      filter.expression = \"transaction.execution_result.user_error_code == uint(0) || transaction.execution_result.user_error_code != uint(0)\"\n *      filter.expression = \"transaction.execution_result.vm_error == int(2) || transaction.execution_result.vm_error == int(4)\"\n *\n * 11. Complex combined filters:\n *      filter.expression = \"(transaction.slot >= uint(0) && transaction.execution_result.user_error_code == uint(0)) || transaction.execution_result.consumed_compute_units > uint(100000)\"\n *\n * 12. Check for field existence:\n *      filter.expression = \"has(transaction.execution_result)\"\n *\n * 13. Use inequality operators:\n *      filter.expression = \"transaction.execution_result.consumed_compute_units < uint(1000000)\"\n *      filter.expression = \"transaction.execution_result.consumed_compute_units <= uint(1000000)\"\n *      filter.expression = \"transaction.execution_result.consumed_compute_units >= uint(0)\"\n *      filter.expression = \"transaction.execution_result.user_error_code != uint(999)\"\n *\n * 14. Use params.slot parameter:\n *      filter.expression = \"transaction.slot == params.slot\"\n *      filter.params[\"slot\"].uint_value = 1234\n *\n * 15. Use params.u64 with type conversion:\n *      filter.expression = \"transaction.execution_result.consumed_compute_units < uint(params.u64)\"\n *      filter.params[\"u64\"].uint_value = 1000000\n *\n * The return_events flag controls whether event data is included in the response:\n *   - return_events = false (default): Only event counts/sizes are returned, not actual event data\n *   - return_events = true: Full event data is included in execution results\n *\n * Note: transactions are stored by signature, not in slot order. A call whose filter would read more than\n * about 100,000 rows reads one 100,000-slot range instead. When a filter needs more to fill the page, the\n * call returns the matches found so far, possibly none, with a next_page_token to continue from: a short or\n * empty page with a token is not the end of the results. Bound a rare match with transaction.slot to need\n * fewer calls.\n *\n * @generated from message thru.services.v1.ListTransactionsRequest\n */\nexport type ListTransactionsRequest = Message<\"thru.services.v1.ListTransactionsRequest\"> & {\n  /**\n   * CEL filter expression (OPTIONAL). See message documentation for examples.\n   *\n   * @generated from field: optional thru.common.v1.Filter filter = 1;\n   */\n  filter?: Filter | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.PageRequest page = 2;\n   */\n  page?: PageRequest | undefined;\n\n  /**\n   * Whether to include event data in results (default: false)\n   *\n   * @generated from field: optional bool return_events = 3;\n   */\n  returnEvents?: boolean | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.VersionContext version_context = 4;\n   */\n  versionContext?: VersionContext | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 5;\n   */\n  minConsensus?: ConsensusStatus | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.ListTransactionsRequest.\n * Use `create(ListTransactionsRequestSchema)` to create a new message.\n */\nexport const ListTransactionsRequestSchema: GenMessage<ListTransactionsRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 20);\n\n/**\n * ListTransactionsResponse returns paginated executed transactions.\n *\n * @generated from message thru.services.v1.ListTransactionsResponse\n */\nexport type ListTransactionsResponse = Message<\"thru.services.v1.ListTransactionsResponse\"> & {\n  /**\n   * @generated from field: repeated thru.core.v1.Transaction transactions = 1;\n   */\n  transactions: Transaction[];\n\n  /**\n   * @generated from field: optional thru.common.v1.PageResponse page = 2;\n   */\n  page?: PageResponse | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.ListTransactionsResponse.\n * Use `create(ListTransactionsResponseSchema)` to create a new message.\n */\nexport const ListTransactionsResponseSchema: GenMessage<ListTransactionsResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 21);\n\n/**\n * GetTransactionStatusRequest fetches execution status for a transaction.\n *\n * @generated from message thru.services.v1.GetTransactionStatusRequest\n */\nexport type GetTransactionStatusRequest = Message<\"thru.services.v1.GetTransactionStatusRequest\"> & {\n  /**\n   * @generated from field: thru.common.v1.Signature signature = 1;\n   */\n  signature?: Signature | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.GetTransactionStatusRequest.\n * Use `create(GetTransactionStatusRequestSchema)` to create a new message.\n */\nexport const GetTransactionStatusRequestSchema: GenMessage<GetTransactionStatusRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 22);\n\n/**\n * TransactionStatus captures status metadata for a transaction.\n *\n * @generated from message thru.services.v1.TransactionStatus\n */\nexport type TransactionStatus = Message<\"thru.services.v1.TransactionStatus\"> & {\n  /**\n   * @generated from field: thru.common.v1.Signature signature = 1;\n   */\n  signature?: Signature | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.ConsensusStatus consensus_status = 2;\n   */\n  consensusStatus?: ConsensusStatus | undefined;\n\n  /**\n   * @generated from field: optional thru.core.v1.TransactionExecutionResult execution_result = 3;\n   */\n  executionResult?: TransactionExecutionResult | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.TransactionStatus.\n * Use `create(TransactionStatusSchema)` to create a new message.\n */\nexport const TransactionStatusSchema: GenMessage<TransactionStatus> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 23);\n\n/**\n * @generated from message thru.services.v1.GetHeightRequest\n */\nexport type GetHeightRequest = Message<\"thru.services.v1.GetHeightRequest\"> & {\n};\n\n/**\n * Describes the message thru.services.v1.GetHeightRequest.\n * Use `create(GetHeightRequestSchema)` to create a new message.\n */\nexport const GetHeightRequestSchema: GenMessage<GetHeightRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 24);\n\n/**\n * GetHeightResponse\n *\n * @generated from message thru.services.v1.GetHeightResponse\n */\nexport type GetHeightResponse = Message<\"thru.services.v1.GetHeightResponse\"> & {\n  /**\n   * @generated from field: uint64 finalized = 1;\n   */\n  finalized: bigint;\n\n  /**\n   * @generated from field: uint64 locally_executed = 2;\n   */\n  locallyExecuted: bigint;\n\n  /**\n   * @generated from field: uint64 cluster_executed = 3;\n   */\n  clusterExecuted: bigint;\n};\n\n/**\n * Describes the message thru.services.v1.GetHeightResponse.\n * Use `create(GetHeightResponseSchema)` to create a new message.\n */\nexport const GetHeightResponseSchema: GenMessage<GetHeightResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 25);\n\n/**\n * GetChainInfoRequest retrieves chain-level information.\n *\n * @generated from message thru.services.v1.GetChainInfoRequest\n */\nexport type GetChainInfoRequest = Message<\"thru.services.v1.GetChainInfoRequest\"> & {\n};\n\n/**\n * Describes the message thru.services.v1.GetChainInfoRequest.\n * Use `create(GetChainInfoRequestSchema)` to create a new message.\n */\nexport const GetChainInfoRequestSchema: GenMessage<GetChainInfoRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 26);\n\n/**\n * GetChainInfoResponse returns chain-level information.\n *\n * @generated from message thru.services.v1.GetChainInfoResponse\n */\nexport type GetChainInfoResponse = Message<\"thru.services.v1.GetChainInfoResponse\"> & {\n  /**\n   * Chain identifier, unique per network (similar to Ethereum chain ID).\n   * Used to prevent transaction replay across different chains.\n   *\n   * @generated from field: uint32 chain_id = 1;\n   */\n  chainId: number;\n\n  /**\n   * Minimum timestamp (nanoseconds since epoch) at which 4f+1 validator weight\n   * has reported advancement. Zero if not yet available.\n   *\n   * @generated from field: uint64 min_lock_time = 2;\n   */\n  minLockTime: bigint;\n};\n\n/**\n * Describes the message thru.services.v1.GetChainInfoResponse.\n * Use `create(GetChainInfoResponseSchema)` to create a new message.\n */\nexport const GetChainInfoResponseSchema: GenMessage<GetChainInfoResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 27);\n\n/**\n * GetStateRootsRequest retrieves up to 257 state roots ending at a specified slot.\n * Used for transaction replay to verify state proofs against historical roots.\n * Returns state roots in ascending slot order, from (slot - 256) to slot (inclusive).\n *\n * @generated from message thru.services.v1.GetStateRootsRequest\n */\nexport type GetStateRootsRequest = Message<\"thru.services.v1.GetStateRootsRequest\"> & {\n  /**\n   * The slot to retrieve state roots up to (inclusive).\n   * Returns up to 257 state roots ending at this slot.\n   * If not specified, returns state roots ending at the latest slot at or\n   * below the durable cursor. A slot above the durable cursor is rejected\n   * with FAILED_PRECONDITION; if no slot is durable yet the call returns\n   * UNAVAILABLE.\n   *\n   * @generated from field: optional uint64 slot = 1;\n   */\n  slot?: bigint | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.GetStateRootsRequest.\n * Use `create(GetStateRootsRequestSchema)` to create a new message.\n */\nexport const GetStateRootsRequestSchema: GenMessage<GetStateRootsRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 28);\n\n/**\n * StateRootEntry represents a state root for a specific slot.\n *\n * @generated from message thru.services.v1.StateRootEntry\n */\nexport type StateRootEntry = Message<\"thru.services.v1.StateRootEntry\"> & {\n  /**\n   * @generated from field: uint64 slot = 1;\n   */\n  slot: bigint;\n\n  /**\n   * @generated from field: bytes state_root = 2;\n   */\n  stateRoot: Uint8Array;\n};\n\n/**\n * Describes the message thru.services.v1.StateRootEntry.\n * Use `create(StateRootEntrySchema)` to create a new message.\n */\nexport const StateRootEntrySchema: GenMessage<StateRootEntry> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 29);\n\n/**\n * GetStateRootsResponse contains up to 257 state roots ending at the requested slot.\n *\n * @generated from message thru.services.v1.GetStateRootsResponse\n */\nexport type GetStateRootsResponse = Message<\"thru.services.v1.GetStateRootsResponse\"> & {\n  /**\n   * @generated from field: repeated thru.services.v1.StateRootEntry state_roots = 1;\n   */\n  stateRoots: StateRootEntry[];\n};\n\n/**\n * Describes the message thru.services.v1.GetStateRootsResponse.\n * Use `create(GetStateRootsResponseSchema)` to create a new message.\n */\nexport const GetStateRootsResponseSchema: GenMessage<GetStateRootsResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 30);\n\n/**\n * GetActiveStateHashesRequest retrieves active state hashes for a range of slots.\n *\n * @generated from message thru.services.v1.GetActiveStateHashesRequest\n */\nexport type GetActiveStateHashesRequest = Message<\"thru.services.v1.GetActiveStateHashesRequest\"> & {\n  /**\n   * The upper bound slot (inclusive). If not specified, defaults to the\n   * durable cursor: the highest slot the node has durably committed, which\n   * lags the finalized slot GetHeight reports by design. An end_slot above\n   * the durable cursor is rejected with FAILED_PRECONDITION; if no slot is\n   * durable yet the call returns UNAVAILABLE.\n   *\n   * @generated from field: optional uint64 end_slot = 1;\n   */\n  endSlot?: bigint | undefined;\n\n  /**\n   * The lower bound slot (inclusive). If not specified, defaults to max(0, end_slot - 127).\n   *\n   * @generated from field: optional uint64 start_slot = 2;\n   */\n  startSlot?: bigint | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.GetActiveStateHashesRequest.\n * Use `create(GetActiveStateHashesRequestSchema)` to create a new message.\n */\nexport const GetActiveStateHashesRequestSchema: GenMessage<GetActiveStateHashesRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 31);\n\n/**\n * ActiveStateHashEntry represents an active state hash for a specific slot.\n *\n * @generated from message thru.services.v1.ActiveStateHashEntry\n */\nexport type ActiveStateHashEntry = Message<\"thru.services.v1.ActiveStateHashEntry\"> & {\n  /**\n   * @generated from field: uint64 slot = 1;\n   */\n  slot: bigint;\n\n  /**\n   * @generated from field: bytes active_state_hash = 2;\n   */\n  activeStateHash: Uint8Array;\n};\n\n/**\n * Describes the message thru.services.v1.ActiveStateHashEntry.\n * Use `create(ActiveStateHashEntrySchema)` to create a new message.\n */\nexport const ActiveStateHashEntrySchema: GenMessage<ActiveStateHashEntry> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 32);\n\n/**\n * GetActiveStateHashesResponse contains active state hashes ending at the requested slot.\n *\n * @generated from message thru.services.v1.GetActiveStateHashesResponse\n */\nexport type GetActiveStateHashesResponse = Message<\"thru.services.v1.GetActiveStateHashesResponse\"> & {\n  /**\n   * @generated from field: repeated thru.services.v1.ActiveStateHashEntry active_state_hashes = 1;\n   */\n  activeStateHashes: ActiveStateHashEntry[];\n};\n\n/**\n * Describes the message thru.services.v1.GetActiveStateHashesResponse.\n * Use `create(GetActiveStateHashesResponseSchema)` to create a new message.\n */\nexport const GetActiveStateHashesResponseSchema: GenMessage<GetActiveStateHashesResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 33);\n\n/**\n * GetSlotMetricsRequest retrieves metrics for a specific slot.\n *\n * @generated from message thru.services.v1.GetSlotMetricsRequest\n */\nexport type GetSlotMetricsRequest = Message<\"thru.services.v1.GetSlotMetricsRequest\"> & {\n  /**\n   * Block slot number to retrieve metrics for.\n   *\n   * @generated from field: uint64 slot = 1;\n   */\n  slot: bigint;\n};\n\n/**\n * Describes the message thru.services.v1.GetSlotMetricsRequest.\n * Use `create(GetSlotMetricsRequestSchema)` to create a new message.\n */\nexport const GetSlotMetricsRequestSchema: GenMessage<GetSlotMetricsRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 34);\n\n/**\n * GetSlotMetricsResponse contains slot-level metrics.\n *\n * @generated from message thru.services.v1.GetSlotMetricsResponse\n */\nexport type GetSlotMetricsResponse = Message<\"thru.services.v1.GetSlotMetricsResponse\"> & {\n  /**\n   * Block slot number.\n   *\n   * @generated from field: uint64 slot = 1;\n   */\n  slot: bigint;\n\n  /**\n   * Global counter tracking total activated state across all accounts.\n   *\n   * @generated from field: uint64 global_activated_state_counter = 2;\n   */\n  globalActivatedStateCounter: bigint;\n\n  /**\n   * Global counter tracking total deactivated state across all accounts.\n   *\n   * @generated from field: uint64 global_deactivated_state_counter = 3;\n   */\n  globalDeactivatedStateCounter: bigint;\n\n  /**\n   * Fees credited to the absent-block-producer fee receiver this block\n   * because the block producer account was not live (UNTO-1293). Field\n   * number unchanged (4).\n   *\n   * @generated from field: uint64 absent_block_producer_fees = 4;\n   */\n  absentBlockProducerFees: bigint;\n\n  /**\n   * Block timestamp when available.\n   *\n   * @generated from field: optional google.protobuf.Timestamp block_timestamp = 5;\n   */\n  blockTimestamp?: Timestamp | undefined;\n\n  /**\n   * Fees credited to a live block-producer account this block. Disjoint from\n   * absent_block_producer_fees by destination; total block fees =\n   * absent_block_producer_fees + claimed_fees.\n   *\n   * @generated from field: uint64 claimed_fees = 6;\n   */\n  claimedFees: bigint;\n};\n\n/**\n * Describes the message thru.services.v1.GetSlotMetricsResponse.\n * Use `create(GetSlotMetricsResponseSchema)` to create a new message.\n */\nexport const GetSlotMetricsResponseSchema: GenMessage<GetSlotMetricsResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 35);\n\n/**\n * ListSlotMetricsRequest lists slot metrics for a range of slots.\n *\n * @generated from message thru.services.v1.ListSlotMetricsRequest\n */\nexport type ListSlotMetricsRequest = Message<\"thru.services.v1.ListSlotMetricsRequest\"> & {\n  /**\n   * Start slot for the range (inclusive).\n   *\n   * @generated from field: uint64 start_slot = 1;\n   */\n  startSlot: bigint;\n\n  /**\n   * End slot for the range (inclusive). Defaults to start_slot if not specified.\n   *\n   * @generated from field: optional uint64 end_slot = 2;\n   */\n  endSlot?: bigint | undefined;\n\n  /**\n   * Maximum number of results to return. Defaults to 100.\n   *\n   * @generated from field: optional uint32 limit = 3;\n   */\n  limit?: number | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.ListSlotMetricsRequest.\n * Use `create(ListSlotMetricsRequestSchema)` to create a new message.\n */\nexport const ListSlotMetricsRequestSchema: GenMessage<ListSlotMetricsRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 36);\n\n/**\n * ListSlotMetricsResponse contains a list of slot metrics.\n *\n * @generated from message thru.services.v1.ListSlotMetricsResponse\n */\nexport type ListSlotMetricsResponse = Message<\"thru.services.v1.ListSlotMetricsResponse\"> & {\n  /**\n   * @generated from field: repeated thru.services.v1.GetSlotMetricsResponse metrics = 1;\n   */\n  metrics: GetSlotMetricsResponse[];\n};\n\n/**\n * Describes the message thru.services.v1.ListSlotMetricsResponse.\n * Use `create(ListSlotMetricsResponseSchema)` to create a new message.\n */\nexport const ListSlotMetricsResponseSchema: GenMessage<ListSlotMetricsResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 37);\n\n/**\n * GetNodePubkeyRequest requests the node's own public key.\n *\n * @generated from message thru.services.v1.GetNodePubkeyRequest\n */\nexport type GetNodePubkeyRequest = Message<\"thru.services.v1.GetNodePubkeyRequest\"> & {\n};\n\n/**\n * Describes the message thru.services.v1.GetNodePubkeyRequest.\n * Use `create(GetNodePubkeyRequestSchema)` to create a new message.\n */\nexport const GetNodePubkeyRequestSchema: GenMessage<GetNodePubkeyRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 38);\n\n/**\n * GetNodePubkeyResponse returns the node's ED25519 public key.\n *\n * @generated from message thru.services.v1.GetNodePubkeyResponse\n */\nexport type GetNodePubkeyResponse = Message<\"thru.services.v1.GetNodePubkeyResponse\"> & {\n  /**\n   * @generated from field: thru.common.v1.Pubkey pubkey = 1;\n   */\n  pubkey?: Pubkey | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.GetNodePubkeyResponse.\n * Use `create(GetNodePubkeyResponseSchema)` to create a new message.\n */\nexport const GetNodePubkeyResponseSchema: GenMessage<GetNodePubkeyResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 39);\n\n/**\n * GetNodeRecordsRequest requests all known node records.\n *\n * @generated from message thru.services.v1.GetNodeRecordsRequest\n */\nexport type GetNodeRecordsRequest = Message<\"thru.services.v1.GetNodeRecordsRequest\"> & {\n};\n\n/**\n * Describes the message thru.services.v1.GetNodeRecordsRequest.\n * Use `create(GetNodeRecordsRequestSchema)` to create a new message.\n */\nexport const GetNodeRecordsRequestSchema: GenMessage<GetNodeRecordsRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 40);\n\n/**\n * GetNodeRecordsResponse returns all known node records from the gossip network.\n *\n * @generated from message thru.services.v1.GetNodeRecordsResponse\n */\nexport type GetNodeRecordsResponse = Message<\"thru.services.v1.GetNodeRecordsResponse\"> & {\n  /**\n   * @generated from field: repeated thru.core.v1.NodeRecord records = 1;\n   */\n  records: NodeRecord[];\n};\n\n/**\n * Describes the message thru.services.v1.GetNodeRecordsResponse.\n * Use `create(GetNodeRecordsResponseSchema)` to create a new message.\n */\nexport const GetNodeRecordsResponseSchema: GenMessage<GetNodeRecordsResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 41);\n\n/**\n * GetNodeStatusRequest requests the node's operational status.\n *\n * @generated from message thru.services.v1.GetNodeStatusRequest\n */\nexport type GetNodeStatusRequest = Message<\"thru.services.v1.GetNodeStatusRequest\"> & {\n};\n\n/**\n * Describes the message thru.services.v1.GetNodeStatusRequest.\n * Use `create(GetNodeStatusRequestSchema)` to create a new message.\n */\nexport const GetNodeStatusRequestSchema: GenMessage<GetNodeStatusRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 42);\n\n/**\n * GetNodeStatusResponse returns the node's operational status including\n * consensus readiness, repair state, and current heights.\n *\n * @generated from message thru.services.v1.GetNodeStatusResponse\n */\nexport type GetNodeStatusResponse = Message<\"thru.services.v1.GetNodeStatusResponse\"> & {\n  /**\n   * High-level readiness flag. True when consensus is active and the node\n   * is ready to accept and process transactions.\n   *\n   * @generated from field: bool ready = 1;\n   */\n  ready: boolean;\n\n  /**\n   * Consensus subsystem state.\n   *\n   * @generated from field: thru.services.v1.NodeConsensusStatus consensus = 2;\n   */\n  consensus?: NodeConsensusStatus | undefined;\n\n  /**\n   * Repair subsystem state.\n   *\n   * @generated from field: thru.services.v1.NodeRepairStatus repair = 3;\n   */\n  repair?: NodeRepairStatus | undefined;\n\n  /**\n   * Latest finalized slot.\n   *\n   * @generated from field: uint64 finalized_slot = 4;\n   */\n  finalizedSlot: bigint;\n\n  /**\n   * Latest locally executed slot.\n   *\n   * @generated from field: uint64 locally_executed_slot = 5;\n   */\n  locallyExecutedSlot: bigint;\n};\n\n/**\n * Describes the message thru.services.v1.GetNodeStatusResponse.\n * Use `create(GetNodeStatusResponseSchema)` to create a new message.\n */\nexport const GetNodeStatusResponseSchema: GenMessage<GetNodeStatusResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 43);\n\n/**\n * NodeConsensusStatus describes the consensus driver state.\n *\n * @generated from message thru.services.v1.NodeConsensusStatus\n */\nexport type NodeConsensusStatus = Message<\"thru.services.v1.NodeConsensusStatus\"> & {\n  /**\n   * Whether post-repair consensus is active and voting.\n   *\n   * @generated from field: bool active = 1;\n   */\n  active: boolean;\n\n  /**\n   * How consensus was entered: regular startup or catastrophic recovery.\n   *\n   * @generated from field: thru.services.v1.NodeMode mode = 2;\n   */\n  mode: NodeMode;\n\n  /**\n   * Current consensus frontier slot (first slot without EXECUTION_FINISHED).\n   *\n   * @generated from field: uint64 frontier = 3;\n   */\n  frontier: bigint;\n};\n\n/**\n * Describes the message thru.services.v1.NodeConsensusStatus.\n * Use `create(NodeConsensusStatusSchema)` to create a new message.\n */\nexport const NodeConsensusStatusSchema: GenMessage<NodeConsensusStatus> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 44);\n\n/**\n * NodeRepairStatus describes the repair subsystem state.\n *\n * @generated from message thru.services.v1.NodeRepairStatus\n */\nexport type NodeRepairStatus = Message<\"thru.services.v1.NodeRepairStatus\"> & {\n  /**\n   * Whether catastrophic repair gating is active. When true, the node is\n   * suppressing consensus output and rejecting transactions.\n   * Note: during normal gap repair (non-catastrophic), this is false but\n   * consensus.active is also false, so ready is correctly false.\n   *\n   * @generated from field: bool active = 1;\n   */\n  active: boolean;\n};\n\n/**\n * Describes the message thru.services.v1.NodeRepairStatus.\n * Use `create(NodeRepairStatusSchema)` to create a new message.\n */\nexport const NodeRepairStatusSchema: GenMessage<NodeRepairStatus> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 45);\n\n/**\n * BatchGetRawAccountsRequest fetches raw bytes for many accounts in one call.\n *\n * Batching exists because the per-account path costs up to three ClickHouse\n * round-trips (current meta, historical meta, historical pages), so N accounts\n * fetched one at a time is 3N sequential queries. The batch answers the whole\n * set in a fixed number of queries regardless of N.\n *\n * @generated from message thru.services.v1.BatchGetRawAccountsRequest\n */\nexport type BatchGetRawAccountsRequest = Message<\"thru.services.v1.BatchGetRawAccountsRequest\"> & {\n  /**\n   * The accounts to fetch. At most 1000 (BATCH_GET_MAX_ITEMS); a larger batch\n   * is rejected with INVALID_ARGUMENT rather than silently truncated, because\n   * the address list is rendered into the SQL and would otherwise run into\n   * ClickHouse's max_query_size.\n   *\n   * @generated from field: repeated thru.services.v1.BatchGetRawAccountsItem items = 1;\n   */\n  items: BatchGetRawAccountsItem[];\n\n  /**\n   * Version applied to every item that does not carry its own. Set this alone\n   * to read the whole batch at one version -- the common case -- instead of\n   * repeating the same context on each item.\n   *\n   * @generated from field: optional thru.common.v1.VersionContext version_context = 2;\n   */\n  versionContext?: VersionContext | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 3;\n   */\n  minConsensus?: ConsensusStatus | undefined;\n\n  /**\n   * @generated from field: optional thru.core.v1.AccountView view = 4;\n   */\n  view?: AccountView | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.BatchGetRawAccountsRequest.\n * Use `create(BatchGetRawAccountsRequestSchema)` to create a new message.\n */\nexport const BatchGetRawAccountsRequestSchema: GenMessage<BatchGetRawAccountsRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 46);\n\n/**\n * BatchGetRawAccountsItem is one account in a batch, optionally pinned to its\n * own version.\n *\n * @generated from message thru.services.v1.BatchGetRawAccountsItem\n */\nexport type BatchGetRawAccountsItem = Message<\"thru.services.v1.BatchGetRawAccountsItem\"> & {\n  /**\n   * @generated from field: thru.common.v1.Pubkey address = 1;\n   */\n  address?: Pubkey | undefined;\n\n  /**\n   * Overrides the request-level version_context for this account only. Leave\n   * unset to inherit it. Set it when the batch reads accounts at DIFFERENT\n   * versions -- e.g. verifying each account at the slot its own transaction\n   * executed in.\n   *\n   * @generated from field: optional thru.common.v1.VersionContext version_context = 2;\n   */\n  versionContext?: VersionContext | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.BatchGetRawAccountsItem.\n * Use `create(BatchGetRawAccountsItemSchema)` to create a new message.\n */\nexport const BatchGetRawAccountsItemSchema: GenMessage<BatchGetRawAccountsItem> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 47);\n\n/**\n * BatchGetRawAccountsResponse returns the accounts that were found.\n *\n * PARTIAL BY DESIGN: an address that does not exist is simply ABSENT from the\n * map rather than failing the call, so one missing account cannot destroy a\n * batch of 1000. Callers must look up their addresses rather than assume the\n * map is complete.\n *\n * @generated from message thru.services.v1.BatchGetRawAccountsResponse\n */\nexport type BatchGetRawAccountsResponse = Message<\"thru.services.v1.BatchGetRawAccountsResponse\"> & {\n  /**\n   * Keyed by the encoded account address, as returned elsewhere in this API.\n   *\n   * @generated from field: map<string, thru.core.v1.RawAccount> accounts = 1;\n   */\n  accounts: { [key: string]: RawAccount };\n};\n\n/**\n * Describes the message thru.services.v1.BatchGetRawAccountsResponse.\n * Use `create(BatchGetRawAccountsResponseSchema)` to create a new message.\n */\nexport const BatchGetRawAccountsResponseSchema: GenMessage<BatchGetRawAccountsResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 48);\n\n/**\n * BatchGetTransactionsRequest fetches many decoded transactions in one call.\n *\n * @generated from message thru.services.v1.BatchGetTransactionsRequest\n */\nexport type BatchGetTransactionsRequest = Message<\"thru.services.v1.BatchGetTransactionsRequest\"> & {\n  /**\n   * At most 1000 (BATCH_GET_MAX_ITEMS); see BatchGetRawAccountsRequest.items.\n   *\n   * @generated from field: repeated thru.common.v1.Signature signatures = 1;\n   */\n  signatures: Signature[];\n\n  /**\n   * @generated from field: optional thru.common.v1.VersionContext version_context = 2;\n   */\n  versionContext?: VersionContext | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 3;\n   */\n  minConsensus?: ConsensusStatus | undefined;\n\n  /**\n   * @generated from field: optional thru.core.v1.TransactionView view = 4;\n   */\n  view?: TransactionView | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.BatchGetTransactionsRequest.\n * Use `create(BatchGetTransactionsRequestSchema)` to create a new message.\n */\nexport const BatchGetTransactionsRequestSchema: GenMessage<BatchGetTransactionsRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 49);\n\n/**\n * BatchGetTransactionsResponse returns the transactions that were found.\n *\n * PARTIAL BY DESIGN, exactly as BatchGetRawAccountsResponse: an unknown\n * signature is absent from the map, not an error.\n *\n * @generated from message thru.services.v1.BatchGetTransactionsResponse\n */\nexport type BatchGetTransactionsResponse = Message<\"thru.services.v1.BatchGetTransactionsResponse\"> & {\n  /**\n   * Keyed by the encoded transaction signature.\n   *\n   * @generated from field: map<string, thru.core.v1.Transaction> transactions = 1;\n   */\n  transactions: { [key: string]: Transaction };\n};\n\n/**\n * Describes the message thru.services.v1.BatchGetTransactionsResponse.\n * Use `create(BatchGetTransactionsResponseSchema)` to create a new message.\n */\nexport const BatchGetTransactionsResponseSchema: GenMessage<BatchGetTransactionsResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 50);\n\n/**\n * BatchGenerateStateProofsRequest generates many state proofs in one call.\n *\n * A single proof descends the state trie root-to-leaf, one node fetch per\n * level, and that descent cannot be parallelised -- each node is what reveals\n * the next hash.  What CAN be shared is the descent across proofs: every\n * request in the batch needs its depth-d node at the same moment, so N proofs\n * over a depth-D trie cost D round-trips rather than N*D.\n *\n * @generated from message thru.services.v1.BatchGenerateStateProofsRequest\n */\nexport type BatchGenerateStateProofsRequest = Message<\"thru.services.v1.BatchGenerateStateProofsRequest\"> & {\n  /**\n   * At most 1000; a larger batch is rejected rather than truncated.\n   *\n   * Every request's own target_slot must be UNSET: the slot is chosen once for\n   * the batch, below. A request that sets it is rejected rather than ignored.\n   *\n   * @generated from field: repeated thru.core.v1.StateProofRequest requests = 1;\n   */\n  requests: StateProofRequest[];\n\n  /**\n   * The slot whose state root every proof in this batch is built against.\n   * Unset (or 0) selects the latest usable root, as the per-request RPC does.\n   *\n   * BATCH-LEVEL, NOT PER-REQUEST, deliberately. A proof is only usable by a\n   * block whose execution slot falls inside the runtime's ACCEPTS window, so\n   * every proof a caller assembles for one block already shares one slot;\n   * mixing slots in a batch has no use and is expensive to serve. Each distinct\n   * slot costs its own root resolution and its own full trie descent, so a\n   * 1000-request batch of distinct slots performs ~1000 descents instead of one\n   * shared walk -- the same work as 1000 separate calls, bought with a single\n   * round-trip. Hoisting the slot here makes that shape unrepresentable rather\n   * than merely rejected.\n   *\n   * @generated from field: optional uint64 target_slot = 2;\n   */\n  targetSlot?: bigint | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.BatchGenerateStateProofsRequest.\n * Use `create(BatchGenerateStateProofsRequestSchema)` to create a new message.\n */\nexport const BatchGenerateStateProofsRequestSchema: GenMessage<BatchGenerateStateProofsRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 51);\n\n/**\n * BatchGenerateStateProofsResponse returns one result per request, IN THE ORDER\n * REQUESTED.\n *\n * Results are positional rather than keyed because the same account may\n * legitimately appear more than once in a batch (at different proof types), so\n * an address alone does not identify a request.\n *\n * @generated from message thru.services.v1.BatchGenerateStateProofsResponse\n */\nexport type BatchGenerateStateProofsResponse = Message<\"thru.services.v1.BatchGenerateStateProofsResponse\"> & {\n  /**\n   * @generated from field: repeated thru.services.v1.StateProofResult results = 1;\n   */\n  results: StateProofResult[];\n};\n\n/**\n * Describes the message thru.services.v1.BatchGenerateStateProofsResponse.\n * Use `create(BatchGenerateStateProofsResponseSchema)` to create a new message.\n */\nexport const BatchGenerateStateProofsResponseSchema: GenMessage<BatchGenerateStateProofsResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 52);\n\n/**\n * StateProofResult is one request's outcome.\n *\n * PARTIAL BY DESIGN: a key that cannot be proved -- absent when membership was\n * asked, present when non-membership was -- is an ordinary answer ABOUT THAT\n * KEY and must not fail the other 999.  Exactly one of proof/error is set.\n *\n * @generated from message thru.services.v1.StateProofResult\n */\nexport type StateProofResult = Message<\"thru.services.v1.StateProofResult\"> & {\n  /**\n   * @generated from field: optional thru.core.v1.StateProof proof = 1;\n   */\n  proof?: StateProof | undefined;\n\n  /**\n   * google.rpc.Code for this request, 0 when proof is set.\n   *\n   * @generated from field: optional int32 error_code = 2;\n   */\n  errorCode?: number | undefined;\n\n  /**\n   * @generated from field: optional string error_message = 3;\n   */\n  errorMessage?: string | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.StateProofResult.\n * Use `create(StateProofResultSchema)` to create a new message.\n */\nexport const StateProofResultSchema: GenMessage<StateProofResult> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 53);\n\n/**\n * GetCompressionConfigRequest requests the current durable compression inputs.\n *\n * @generated from message thru.services.v1.GetCompressionConfigRequest\n */\nexport type GetCompressionConfigRequest = Message<\"thru.services.v1.GetCompressionConfigRequest\"> & {\n};\n\n/**\n * Describes the message thru.services.v1.GetCompressionConfigRequest.\n * Use `create(GetCompressionConfigRequestSchema)` to create a new message.\n */\nexport const GetCompressionConfigRequestSchema: GenMessage<GetCompressionConfigRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 54);\n\n/**\n * CompressionConfig contains inputs from one durable finalized slot.\n *\n * @generated from message thru.services.v1.CompressionConfig\n */\nexport type CompressionConfig = Message<\"thru.services.v1.CompressionConfig\"> & {\n  /**\n   * Finalized slot shared by the account metadata, activity, and policy inputs.\n   *\n   * @generated from field: uint64 slot = 1;\n   */\n  slot: bigint;\n\n  /**\n   * Settled net-growth counter in state units, not wall-clock time.\n   *\n   * @generated from field: uint64 state_clock = 2;\n   */\n  stateClock: bigint;\n\n  /**\n   * Active state-unit load used by the compression eligibility policy.\n   *\n   * @generated from field: uint64 active_state_units = 3;\n   */\n  activeStateUnits: bigint;\n\n  /**\n   * Maximum state units a block may consume.\n   *\n   * @generated from field: uint64 max_state_units_per_block = 4;\n   */\n  maxStateUnitsPerBlock: bigint;\n\n  /**\n   * Maximum active state units configured for the chain.\n   *\n   * @generated from field: uint64 max_active_state_units = 5;\n   */\n  maxActiveStateUnits: bigint;\n\n  /**\n   * Active-load baseline, in state units, below which compression is disabled.\n   *\n   * @generated from field: uint64 compress_baseline_units = 6;\n   */\n  compressBaselineUnits: bigint;\n\n  /**\n   * Additional load, in state units, for each halving of the inactivity window.\n   *\n   * @generated from field: uint64 compress_halving_step_units = 7;\n   */\n  compressHalvingStepUnits: bigint;\n};\n\n/**\n * Describes the message thru.services.v1.CompressionConfig.\n * Use `create(CompressionConfigSchema)` to create a new message.\n */\nexport const CompressionConfigSchema: GenMessage<CompressionConfig> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 55);\n\n/**\n * CanCompressRequest identifies the active account to evaluate.\n *\n * @generated from message thru.services.v1.CanCompressRequest\n */\nexport type CanCompressRequest = Message<\"thru.services.v1.CanCompressRequest\"> & {\n  /**\n   * Address of the account whose activity and metadata are checked.\n   *\n   * @generated from field: thru.common.v1.Pubkey address = 1;\n   */\n  address?: Pubkey | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.CanCompressRequest.\n * Use `create(CanCompressRequestSchema)` to create a new message.\n */\nexport const CanCompressRequestSchema: GenMessage<CanCompressRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 56);\n\n/**\n * CanCompressResponse returns eligibility and its consistent durable inputs.\n *\n * @generated from message thru.services.v1.CanCompressResponse\n */\nexport type CanCompressResponse = Message<\"thru.services.v1.CanCompressResponse\"> & {\n  /**\n   * Non-owner inactivity-policy eligibility, also respecting UNCOMPRESSABLE.\n   * This is a prediction at config.slot, not transaction admission: proofs,\n   * startup warmup, cooldown, write locks and call-stack checks still apply.\n   *\n   * @generated from field: bool can_compress = 1;\n   */\n  canCompress: boolean;\n\n  /**\n   * Account's last activity stamp in state-clock units; zero if absent.\n   *\n   * @generated from field: uint64 last_used = 2;\n   */\n  lastUsed: bigint;\n\n  /**\n   * Policy inputs from the same finalized slot as the account's activity.\n   *\n   * @generated from field: thru.services.v1.CompressionConfig config = 3;\n   */\n  config?: CompressionConfig | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.CanCompressResponse.\n * Use `create(CanCompressResponseSchema)` to create a new message.\n */\nexport const CanCompressResponseSchema: GenMessage<CanCompressResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_query_service, 57);\n\n/**\n * NodeMode represents the consensus/repair operating mode.\n *\n * @generated from enum thru.services.v1.NodeMode\n */\nexport enum NodeMode {\n  /**\n   * @generated from enum value: NODE_MODE_UNKNOWN = 0;\n   */\n  UNKNOWN = 0,\n\n  /**\n   * @generated from enum value: NODE_MODE_REGULAR = 1;\n   */\n  REGULAR = 1,\n\n  /**\n   * @generated from enum value: NODE_MODE_CATASTROPHIC = 2;\n   */\n  CATASTROPHIC = 2,\n}\n\n/**\n * Describes the enum thru.services.v1.NodeMode.\n */\nexport const NodeModeSchema: GenEnum<NodeMode> = /*@__PURE__*/\n  enumDesc(file_thru_services_v1_query_service, 0);\n\n/**\n * QueryService defines unary RPCs for accessing blockchain data.\n *\n * @generated from service thru.services.v1.QueryService\n */\nexport const QueryService: GenService<{\n  /**\n   * Returns typed chain parameters and the state clock in one durable view.\n   *\n   * @generated from rpc thru.services.v1.QueryService.GetCompressionConfig\n   */\n  getCompressionConfig: {\n    methodKind: \"unary\";\n    input: typeof GetCompressionConfigRequestSchema;\n    output: typeof CompressionConfigSchema;\n  },\n  /**\n   * Reads account metadata, activity and config from the same durable snapshot.\n   *\n   * @generated from rpc thru.services.v1.QueryService.CanCompress\n   */\n  canCompress: {\n    methodKind: \"unary\";\n    input: typeof CanCompressRequestSchema;\n    output: typeof CanCompressResponseSchema;\n  },\n  /**\n   * Get block heights\n   *\n   * @generated from rpc thru.services.v1.QueryService.GetHeight\n   */\n  getHeight: {\n    methodKind: \"unary\";\n    input: typeof GetHeightRequestSchema;\n    output: typeof GetHeightResponseSchema;\n  },\n  /**\n   * Get chain-level information including chain ID.\n   *\n   * @generated from rpc thru.services.v1.QueryService.GetChainInfo\n   */\n  getChainInfo: {\n    methodKind: \"unary\";\n    input: typeof GetChainInfoRequestSchema;\n    output: typeof GetChainInfoResponseSchema;\n  },\n  /**\n   * Get account information.\n   *\n   * @generated from rpc thru.services.v1.QueryService.GetAccount\n   */\n  getAccount: {\n    methodKind: \"unary\";\n    input: typeof GetAccountRequestSchema;\n    output: typeof AccountSchema;\n  },\n  /**\n   * Get account raw bytes.\n   *\n   * @generated from rpc thru.services.v1.QueryService.GetRawAccount\n   */\n  getRawAccount: {\n    methodKind: \"unary\";\n    input: typeof GetRawAccountRequestSchema;\n    output: typeof RawAccountSchema;\n  },\n  /**\n   * Get raw bytes for many accounts in one call. Partial: addresses that do\n   * not exist are absent from the response map.\n   *\n   * @generated from rpc thru.services.v1.QueryService.BatchGetRawAccounts\n   */\n  batchGetRawAccounts: {\n    methodKind: \"unary\";\n    input: typeof BatchGetRawAccountsRequestSchema;\n    output: typeof BatchGetRawAccountsResponseSchema;\n  },\n  /**\n   * Get many transactions in one call. Partial: unknown signatures are absent\n   * from the response map.\n   *\n   * @generated from rpc thru.services.v1.QueryService.BatchGetTransactions\n   */\n  batchGetTransactions: {\n    methodKind: \"unary\";\n    input: typeof BatchGetTransactionsRequestSchema;\n    output: typeof BatchGetTransactionsResponseSchema;\n  },\n  /**\n   * Get transaction by signature.\n   *\n   * @generated from rpc thru.services.v1.QueryService.GetTransaction\n   */\n  getTransaction: {\n    methodKind: \"unary\";\n    input: typeof GetTransactionRequestSchema;\n    output: typeof TransactionSchema;\n  },\n  /**\n   * Get raw transaction by signature.\n   *\n   * @generated from rpc thru.services.v1.QueryService.GetRawTransaction\n   */\n  getRawTransaction: {\n    methodKind: \"unary\";\n    input: typeof GetRawTransactionRequestSchema;\n    output: typeof RawTransactionSchema;\n  },\n  /**\n   * Get block by slot or hash.\n   *\n   * @generated from rpc thru.services.v1.QueryService.GetBlock\n   */\n  getBlock: {\n    methodKind: \"unary\";\n    input: typeof GetBlockRequestSchema;\n    output: typeof BlockSchema;\n  },\n  /**\n   * Get raw block bytes.\n   *\n   * @generated from rpc thru.services.v1.QueryService.GetRawBlock\n   */\n  getRawBlock: {\n    methodKind: \"unary\";\n    input: typeof GetRawBlockRequestSchema;\n    output: typeof RawBlockSchema;\n  },\n  /**\n   * List accounts using CEL-based filtering.\n   *\n   * @generated from rpc thru.services.v1.QueryService.ListAccounts\n   */\n  listAccounts: {\n    methodKind: \"unary\";\n    input: typeof ListAccountsRequestSchema;\n    output: typeof ListAccountsResponseSchema;\n  },\n  /**\n   * List blocks using pagination and filtering. By default returns blocks ordered from latest slot to the first one.\n   *\n   * @generated from rpc thru.services.v1.QueryService.ListBlocks\n   */\n  listBlocks: {\n    methodKind: \"unary\";\n    input: typeof ListBlocksRequestSchema;\n    output: typeof ListBlocksResponseSchema;\n  },\n  /**\n   * List executed transaction signatures involving an account.\n   *\n   * @generated from rpc thru.services.v1.QueryService.ListTransactionsForAccount\n   */\n  listTransactionsForAccount: {\n    methodKind: \"unary\";\n    input: typeof ListTransactionsForAccountRequestSchema;\n    output: typeof ListTransactionsForAccountResponseSchema;\n  },\n  /**\n   * Get a specific event by ID.\n   *\n   * @generated from rpc thru.services.v1.QueryService.GetEvent\n   */\n  getEvent: {\n    methodKind: \"unary\";\n    input: typeof GetEventRequestSchema;\n    output: typeof EventSchema;\n  },\n  /**\n   * List events with CEL filtering and pagination. Returns events ordered from most recent to older.\n   *\n   * @generated from rpc thru.services.v1.QueryService.ListEvents\n   */\n  listEvents: {\n    methodKind: \"unary\";\n    input: typeof ListEventsRequestSchema;\n    output: typeof ListEventsResponseSchema;\n  },\n  /**\n   * List executed transactions with CEL filtering and pagination. Returns transactions ordered from most recent to older.\n   *\n   * @generated from rpc thru.services.v1.QueryService.ListTransactions\n   */\n  listTransactions: {\n    methodKind: \"unary\";\n    input: typeof ListTransactionsRequestSchema;\n    output: typeof ListTransactionsResponseSchema;\n  },\n  /**\n   * Get derived transaction status metadata.\n   *\n   * @generated from rpc thru.services.v1.QueryService.GetTransactionStatus\n   */\n  getTransactionStatus: {\n    methodKind: \"unary\";\n    input: typeof GetTransactionStatusRequestSchema;\n    output: typeof TransactionStatusSchema;\n  },\n  /**\n   * Generate an account state proof snapshot.\n   * Generate many state proofs in one call, sharing the trie descent across\n   * them. Partial: a request that cannot be proved carries its own error.\n   *\n   * @generated from rpc thru.services.v1.QueryService.BatchGenerateStateProofs\n   */\n  batchGenerateStateProofs: {\n    methodKind: \"unary\";\n    input: typeof BatchGenerateStateProofsRequestSchema;\n    output: typeof BatchGenerateStateProofsResponseSchema;\n  },\n  /**\n   * @generated from rpc thru.services.v1.QueryService.GenerateStateProof\n   */\n  generateStateProof: {\n    methodKind: \"unary\";\n    input: typeof GenerateStateProofRequestSchema;\n    output: typeof GenerateStateProofResponseSchema;\n  },\n  /**\n   * Get component version strings.\n   *\n   * @generated from rpc thru.services.v1.QueryService.GetVersion\n   */\n  getVersion: {\n    methodKind: \"unary\";\n    input: typeof GetVersionRequestSchema;\n    output: typeof GetVersionResponseSchema;\n  },\n  /**\n   * Get state roots for a range of slots.\n   * Used for transaction replay to verify state proofs against historical roots.\n   *\n   * @generated from rpc thru.services.v1.QueryService.GetStateRoots\n   */\n  getStateRoots: {\n    methodKind: \"unary\";\n    input: typeof GetStateRootsRequestSchema;\n    output: typeof GetStateRootsResponseSchema;\n  },\n  /**\n   * Get active state hashes for a range of slots.\n   *\n   * @generated from rpc thru.services.v1.QueryService.GetActiveStateHashes\n   */\n  getActiveStateHashes: {\n    methodKind: \"unary\";\n    input: typeof GetActiveStateHashesRequestSchema;\n    output: typeof GetActiveStateHashesResponseSchema;\n  },\n  /**\n   * Get slot-level metrics including state counters and distributed fees\n   * (absent-block-producer + claimed).\n   *\n   * @generated from rpc thru.services.v1.QueryService.GetSlotMetrics\n   */\n  getSlotMetrics: {\n    methodKind: \"unary\";\n    input: typeof GetSlotMetricsRequestSchema;\n    output: typeof GetSlotMetricsResponseSchema;\n  },\n  /**\n   * List slot metrics for a range of slots.\n   *\n   * @generated from rpc thru.services.v1.QueryService.ListSlotMetrics\n   */\n  listSlotMetrics: {\n    methodKind: \"unary\";\n    input: typeof ListSlotMetricsRequestSchema;\n    output: typeof ListSlotMetricsResponseSchema;\n  },\n  /**\n   * Get the node's own ED25519 public key.\n   *\n   * @generated from rpc thru.services.v1.QueryService.GetNodePubkey\n   */\n  getNodePubkey: {\n    methodKind: \"unary\";\n    input: typeof GetNodePubkeyRequestSchema;\n    output: typeof GetNodePubkeyResponseSchema;\n  },\n  /**\n   * Get all known node records from the gossip network.\n   *\n   * @generated from rpc thru.services.v1.QueryService.GetNodeRecords\n   */\n  getNodeRecords: {\n    methodKind: \"unary\";\n    input: typeof GetNodeRecordsRequestSchema;\n    output: typeof GetNodeRecordsResponseSchema;\n  },\n  /**\n   * Get the node's operational status including consensus readiness.\n   *\n   * @generated from rpc thru.services.v1.QueryService.GetNodeStatus\n   */\n  getNodeStatus: {\n    methodKind: \"unary\";\n    input: typeof GetNodeStatusRequestSchema;\n    output: typeof GetNodeStatusResponseSchema;\n  },\n}> = /*@__PURE__*/\n  serviceDesc(file_thru_services_v1_query_service, 0);\n\n","// @generated by protoc-gen-es v2.12.0 with parameter \"target=ts\"\n// @generated from file thru/services/v1/streaming_service.proto (package thru.services.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenFile, GenMessage, GenService } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc, serviceDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { Pubkey, Signature } from \"../../common/v1/primitives_pb\";\nimport { file_thru_common_v1_primitives } from \"../../common/v1/primitives_pb\";\nimport type { Duration, Timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_duration, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { ConsensusStatus } from \"../../common/v1/consensus_pb\";\nimport { file_thru_common_v1_consensus } from \"../../common/v1/consensus_pb\";\nimport type { Filter } from \"../../common/v1/filters_pb\";\nimport { file_thru_common_v1_filters } from \"../../common/v1/filters_pb\";\nimport type { Account, AccountMeta, AccountPage, AccountView } from \"../../core/v1/account_pb\";\nimport { file_thru_core_v1_account } from \"../../core/v1/account_pb\";\nimport type { Block, BlockView } from \"../../core/v1/block_pb\";\nimport { file_thru_core_v1_block } from \"../../core/v1/block_pb\";\nimport type { Transaction, TransactionExecutionResult } from \"../../core/v1/transaction_pb\";\nimport { file_thru_core_v1_transaction } from \"../../core/v1/transaction_pb\";\nimport { file_thru_core_v1_types } from \"../../core/v1/types_pb\";\nimport type { NodeRecord } from \"../../core/v1/node_pb\";\nimport { file_thru_core_v1_node } from \"../../core/v1/node_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/services/v1/streaming_service.proto.\n */\nexport const file_thru_services_v1_streaming_service: GenFile = /*@__PURE__*/\n  fileDesc(\"Cih0aHJ1L3NlcnZpY2VzL3YxL3N0cmVhbWluZ19zZXJ2aWNlLnByb3RvEhB0aHJ1LnNlcnZpY2VzLnYxIo0CChNTdHJlYW1CbG9ja3NSZXF1ZXN0EhwKCnN0YXJ0X3Nsb3QYASABKARCA+BBAUgAiAEBEjAKBmZpbHRlchgCIAEoCzIWLnRocnUuY29tbW9uLnYxLkZpbHRlckID4EEBSAGIAQESLwoEdmlldxgDIAEoDjIXLnRocnUuY29yZS52MS5CbG9ja1ZpZXdCA+BBAUgCiAEBEkAKDW1pbl9jb25zZW5zdXMYBCABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgDiAEBQg0KC19zdGFydF9zbG90QgkKB19maWx0ZXJCBwoFX3ZpZXdCEAoOX21pbl9jb25zZW5zdXMiPwoUU3RyZWFtQmxvY2tzUmVzcG9uc2USJwoFYmxvY2sYASABKAsyEy50aHJ1LmNvcmUudjEuQmxvY2tCA+BBAiKcAQobU3RyZWFtQWNjb3VudFVwZGF0ZXNSZXF1ZXN0EjEKBHZpZXcYAiABKA4yGS50aHJ1LmNvcmUudjEuQWNjb3VudFZpZXdCA+BBAUgAiAEBEjAKBmZpbHRlchgEIAEoCzIWLnRocnUuY29tbW9uLnYxLkZpbHRlckID4EEBSAGIAQFCBwoFX3ZpZXdCCQoHX2ZpbHRlckoECAEQAiL/AQoNQWNjb3VudFVwZGF0ZRIRCgRzbG90GAEgASgEQgPgQQISMQoEcGFnZRgCIAEoCzIZLnRocnUuY29yZS52MS5BY2NvdW50UGFnZUID4EEBSACIAQESMQoEbWV0YRgDIAEoCzIZLnRocnUuY29yZS52MS5BY2NvdW50TWV0YUID4EEBSAGIAQESGAoGZGVsZXRlGAQgASgIQgPgQQFIAogBARIsCgdhZGRyZXNzGAUgASgLMhYudGhydS5jb21tb24udjEuUHVia2V5QgPgQQISEAoDc2VxGAYgASgEQgPgQQJCBwoFX3BhZ2VCBwoFX21ldGFCCQoHX2RlbGV0ZSLCAQoNQmxvY2tGaW5pc2hlZBIRCgRzbG90GAEgASgEQgPgQQISKwoeZ2xvYmFsX2FjdGl2YXRlZF9zdGF0ZV9jb3VudGVyGAIgASgEQgPgQQISLQogZ2xvYmFsX2RlYWN0aXZhdGVkX3N0YXRlX2NvdW50ZXIYAyABKARCA+BBAhInChphYnNlbnRfYmxvY2tfcHJvZHVjZXJfZmVlcxgEIAEoBEID4EECEhkKDGNsYWltZWRfZmVlcxgFIAEoBEID4EECIrwBChxTdHJlYW1BY2NvdW50VXBkYXRlc1Jlc3BvbnNlEikKCHNuYXBzaG90GAEgASgLMhUudGhydS5jb3JlLnYxLkFjY291bnRIABIxCgZ1cGRhdGUYAiABKAsyHy50aHJ1LnNlcnZpY2VzLnYxLkFjY291bnRVcGRhdGVIABIzCghmaW5pc2hlZBgDIAEoCzIfLnRocnUuc2VydmljZXMudjEuQmxvY2tGaW5pc2hlZEgAQgkKB21lc3NhZ2UirAEKGVN0cmVhbVRyYW5zYWN0aW9uc1JlcXVlc3QSMAoGZmlsdGVyGAEgASgLMhYudGhydS5jb21tb24udjEuRmlsdGVyQgPgQQFIAIgBARJACg1taW5fY29uc2Vuc3VzGAIgASgOMh8udGhydS5jb21tb24udjEuQ29uc2Vuc3VzU3RhdHVzQgPgQQFIAYgBAUIJCgdfZmlsdGVyQhAKDl9taW5fY29uc2Vuc3VzIlEKGlN0cmVhbVRyYW5zYWN0aW9uc1Jlc3BvbnNlEjMKC3RyYW5zYWN0aW9uGAEgASgLMhkudGhydS5jb3JlLnYxLlRyYW5zYWN0aW9uQgPgQQIiUgoTU3RyZWFtRXZlbnRzUmVxdWVzdBIwCgZmaWx0ZXIYASABKAsyFi50aHJ1LmNvbW1vbi52MS5GaWx0ZXJCA+BBAUgAiAEBQgkKB19maWx0ZXIinAQKFFN0cmVhbUV2ZW50c1Jlc3BvbnNlEhUKCGV2ZW50X2lkGAEgASgJQgPgQQISGQoHcGF5bG9hZBgCIAEoDEID4EEBSACIAQESNwoJdGltZXN0YW1wGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEBSAGIAQESLAoHcHJvZ3JhbRgEIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEhUKCGNhbGxfaWR4GAUgASgNQgPgQQISMQoJc2lnbmF0dXJlGAYgASgLMhkudGhydS5jb21tb24udjEuU2lnbmF0dXJlQgPgQQISEQoEc2xvdBgHIAEoBEID4EECEh0KC3Byb2dyYW1faWR4GAggASgNQgPgQQFIAogBARIeCgxibG9ja19vZmZzZXQYCSABKA1CA+BBAUgDiAEBEjMKCWZlZV9wYXllchgKIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EEBSASIAQESPQoPYmxvY2tfdGltZXN0YW1wGAsgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEBSAWIAQFCCgoIX3BheWxvYWRCDAoKX3RpbWVzdGFtcEIOCgxfcHJvZ3JhbV9pZHhCDwoNX2Jsb2NrX29mZnNldEIMCgpfZmVlX3BheWVyQhIKEF9ibG9ja190aW1lc3RhbXAijgEKF1RyYWNrVHJhbnNhY3Rpb25SZXF1ZXN0EjEKCXNpZ25hdHVyZRgBIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEjQKB3RpbWVvdXQYAiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CA+BBAUgAiAEBQgoKCF90aW1lb3V0IukBChhUcmFja1RyYW5zYWN0aW9uUmVzcG9uc2USMQoJc2lnbmF0dXJlGAEgASgLMhkudGhydS5jb21tb24udjEuU2lnbmF0dXJlQgPgQQISPgoQY29uc2Vuc3VzX3N0YXR1cxgCIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1c0ID4EEBEkcKEGV4ZWN1dGlvbl9yZXN1bHQYAyABKAsyKC50aHJ1LmNvcmUudjEuVHJhbnNhY3Rpb25FeGVjdXRpb25SZXN1bHRCA+BBARIRCgRzbG90GAQgASgEQgPgQQEimwEKGFN0cmVhbVNsb3RNZXRyaWNzUmVxdWVzdBIcCgpzdGFydF9zbG90GAEgASgEQgPgQQFIAIgBARIqCh1pbmNsdWRlX2NvbXByZXNzZWRfc3RhdGVfcm9vdBgCIAEoCEID4EEBEiYKGWluY2x1ZGVfYWN0aXZlX3N0YXRlX2hhc2gYAyABKAhCA+BBAUINCgtfc3RhcnRfc2xvdCLOAwoZU3RyZWFtU2xvdE1ldHJpY3NSZXNwb25zZRIRCgRzbG90GAEgASgEQgPgQQISKwoeZ2xvYmFsX2FjdGl2YXRlZF9zdGF0ZV9jb3VudGVyGAIgASgEQgPgQQISLQogZ2xvYmFsX2RlYWN0aXZhdGVkX3N0YXRlX2NvdW50ZXIYAyABKARCA+BBAhInChphYnNlbnRfYmxvY2tfcHJvZHVjZXJfZmVlcxgEIAEoBEID4EECEjgKD2Jsb2NrX3RpbWVzdGFtcBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAhIjChZjb25zdW1lZF9jb21wdXRlX3VuaXRzGAYgASgEQgPgQQISIQoUY29uc3VtZWRfc3RhdGVfdW5pdHMYByABKA1CA+BBAhIZCgxjbGFpbWVkX2ZlZXMYCCABKARCA+BBAhInChVjb21wcmVzc2VkX3N0YXRlX3Jvb3QYCSABKAxCA+BBAUgAiAEBEiMKEWFjdGl2ZV9zdGF0ZV9oYXNoGAogASgMQgPgQQFIAYgBAUIYChZfY29tcHJlc3NlZF9zdGF0ZV9yb290QhQKEl9hY3RpdmVfc3RhdGVfaGFzaCIVChNTdHJlYW1IZWlnaHRSZXF1ZXN0ImwKFFN0cmVhbUhlaWdodFJlc3BvbnNlEhYKCWZpbmFsaXplZBgBIAEoBEID4EECEh0KEGxvY2FsbHlfZXhlY3V0ZWQYAiABKARCA+BBAhIdChBjbHVzdGVyX2V4ZWN1dGVkGAMgASgEQgPgQQIiGgoYU3RyZWFtTm9kZVJlY29yZHNSZXF1ZXN0ImYKGVN0cmVhbU5vZGVSZWNvcmRzUmVzcG9uc2USKgoGcmVjb3JkGAEgASgLMhgudGhydS5jb3JlLnYxLk5vZGVSZWNvcmRIABISCghmaW5pc2hlZBgCIAEoCEgAQgkKB21lc3NhZ2Uy7gYKEFN0cmVhbWluZ1NlcnZpY2USXwoMU3RyZWFtQmxvY2tzEiUudGhydS5zZXJ2aWNlcy52MS5TdHJlYW1CbG9ja3NSZXF1ZXN0GiYudGhydS5zZXJ2aWNlcy52MS5TdHJlYW1CbG9ja3NSZXNwb25zZTABEncKFFN0cmVhbUFjY291bnRVcGRhdGVzEi0udGhydS5zZXJ2aWNlcy52MS5TdHJlYW1BY2NvdW50VXBkYXRlc1JlcXVlc3QaLi50aHJ1LnNlcnZpY2VzLnYxLlN0cmVhbUFjY291bnRVcGRhdGVzUmVzcG9uc2UwARJxChJTdHJlYW1UcmFuc2FjdGlvbnMSKy50aHJ1LnNlcnZpY2VzLnYxLlN0cmVhbVRyYW5zYWN0aW9uc1JlcXVlc3QaLC50aHJ1LnNlcnZpY2VzLnYxLlN0cmVhbVRyYW5zYWN0aW9uc1Jlc3BvbnNlMAESXwoMU3RyZWFtRXZlbnRzEiUudGhydS5zZXJ2aWNlcy52MS5TdHJlYW1FdmVudHNSZXF1ZXN0GiYudGhydS5zZXJ2aWNlcy52MS5TdHJlYW1FdmVudHNSZXNwb25zZTABEmsKEFRyYWNrVHJhbnNhY3Rpb24SKS50aHJ1LnNlcnZpY2VzLnYxLlRyYWNrVHJhbnNhY3Rpb25SZXF1ZXN0GioudGhydS5zZXJ2aWNlcy52MS5UcmFja1RyYW5zYWN0aW9uUmVzcG9uc2UwARJfCgxTdHJlYW1IZWlnaHQSJS50aHJ1LnNlcnZpY2VzLnYxLlN0cmVhbUhlaWdodFJlcXVlc3QaJi50aHJ1LnNlcnZpY2VzLnYxLlN0cmVhbUhlaWdodFJlc3BvbnNlMAESbgoRU3RyZWFtU2xvdE1ldHJpY3MSKi50aHJ1LnNlcnZpY2VzLnYxLlN0cmVhbVNsb3RNZXRyaWNzUmVxdWVzdBorLnRocnUuc2VydmljZXMudjEuU3RyZWFtU2xvdE1ldHJpY3NSZXNwb25zZTABEm4KEVN0cmVhbU5vZGVSZWNvcmRzEioudGhydS5zZXJ2aWNlcy52MS5TdHJlYW1Ob2RlUmVjb3Jkc1JlcXVlc3QaKy50aHJ1LnNlcnZpY2VzLnYxLlN0cmVhbU5vZGVSZWNvcmRzUmVzcG9uc2UwAULgAQoUY29tLnRocnUuc2VydmljZXMudjFCFVN0cmVhbWluZ1NlcnZpY2VQcm90b1ABWkhnaXRodWIuY29tL1VudG8tTGFicy90aHJ1LW5ldC9ncnBjL3BrZy9wcm90by90aHJ1L3NlcnZpY2VzL3YxO3NlcnZpY2VzdjGiAgNUU1iqAhBUaHJ1LlNlcnZpY2VzLlYxugIEVEhVU8oCEFRocnVcU2VydmljZXNcVjHiAhxUaHJ1XFNlcnZpY2VzXFYxXEdQQk1ldGFkYXRh6gISVGhydTo6U2VydmljZXM6OlYxYgZwcm90bzM\", [file_buf_validate_validate, file_google_api_field_behavior, file_thru_common_v1_primitives, file_google_protobuf_duration, file_google_protobuf_timestamp, file_thru_common_v1_consensus, file_thru_common_v1_filters, file_thru_core_v1_account, file_thru_core_v1_block, file_thru_core_v1_transaction, file_thru_core_v1_types, file_thru_core_v1_node]);\n\n/**\n * StreamBlocksRequest subscribes to real-time block updates.\n *\n * Filter expressions support the following params:\n *\n * - params.slot (int64): Slot number for comparison\n *   Example: block.block.header.slot == params.slot\n *\n * - params.min_slot (int64): Minimum slot for range filtering\n *   Example: block.block.header.slot >= params.min_slot\n *\n * - params.start_slot (int64): Starting slot for filtering\n *   Example: block.block.header.slot >= params.start_slot\n *\n * - params.u64 (int64): Generic 64-bit value for numeric comparisons\n *   Examples:\n *     block.block.header.max_compute_units > params.u64\n *     block.block.header.bond_amount_lock_up >= params.u64\n *\n * - params.producer (bytes|Pubkey): Producer pubkey for filtering\n *   Examples:\n *     block.block.header.producer.value == params.producer\n *     has(block.block.header.producer) && block.block.header.producer.value == params.producer\n *\n * Available block header fields:\n *   block.block.header.slot, block.block.header.version,\n *   block.block.header.start_slot, block.block.header.expiry_after,\n *   block.block.header.max_block_size, block.block.header.max_compute_units,\n *   block.block.header.max_state_units, block.block.header.bond_amount_lock_up,\n *   block.block.header.producer, block.block.header.producer.value\n *\n * Available block footer fields (populated on the live stream):\n *   block.block.footer.signature, block.block.footer.attestor_payment\n *\n * NOT populated on this stream — do not filter on these here:\n *   block.block.footer.status is ALWAYS EXECUTION_STATUS_PENDING;\n *   block.block.footer.consumed_compute_units and\n *   block.block.footer.consumed_state_units are ALWAYS 0, because\n *   StreamBlocks emits blocks at observation time, before execution\n *   completes. The CEL engine accepts these paths, but filters on them\n *   never match meaningfully. For live per-block consumed units use\n *   StreamSlotMetrics; for the fully-populated, filterable footer use\n *   QueryService.GetBlock / ListBlocks.\n *\n * Available consensus status field:\n *   block.block.consensus_status\n *\n * Filter expression examples:\n *\n * 1. Filter by specific slot:\n *    Expression: \"block.block.header.slot == params.slot\"\n *    Params: {\"slot\": 12345}\n *\n * 2. Filter by slot range:\n *    Expression: \"block.block.header.slot >= params.min_slot\"\n *    Params: {\"min_slot\": 1000}\n *\n * 3. Filter by block version:\n *    Expression: \"block.block.header.version >= uint(0)\"\n *\n * 4. Filter by specific producer:\n *    Expression: \"has(block.block.header.producer) && block.block.header.producer.value == params.producer\"\n *    Params: {\"producer\": <32-byte pubkey>}\n *\n * 5. Filter by max compute units:\n *    Expression: \"block.block.header.max_compute_units > uint(0)\"\n *\n * 6. Filter by max state units:\n *    Expression: \"block.block.header.max_state_units > uint(0)\"\n *\n * 7. Filter by bond amount lock-up:\n *    Expression: \"block.block.header.bond_amount_lock_up >= uint(0)\"\n *\n * 8. Footer status is PENDING-only on this stream:\n *    block.block.footer.status is ALWAYS EXECUTION_STATUS_PENDING here, so a\n *    status filter can never select executed blocks. To filter on executed\n *    status use QueryService.GetBlock / ListBlocks instead.\n *    Note: EXECUTION_STATUS_PENDING = 1, EXECUTION_STATUS_EXECUTED = 2\n *\n * 9. Filter by consensus status:\n *    Expression: \"block.block.consensus_status == int(2)\"\n *    Note: CONSENSUS_STATUS_UNSPECIFIED = 0, CONSENSUS_STATUS_OBSERVED = 1,\n *          CONSENSUS_STATUS_INCLUDED = 2\n *\n * 10. Check for optional fields presence:\n *     Expression: \"has(block.block.header) && has(block.block.footer)\"\n *\n * 11. Combined filters (multiple conditions):\n *     Expression: \"block.block.header.slot >= params.min_slot && has(block.block.footer) && block.block.footer.attestor_payment > uint(0)\"\n *     Params: {\"min_slot\": 1000}\n *\n * 12. Numeric comparison with params:\n *     Expression: \"block.block.header.max_compute_units > params.u64\"\n *     Params: {\"u64\": 1000000}\n *\n * @generated from message thru.services.v1.StreamBlocksRequest\n */\nexport type StreamBlocksRequest = Message<\"thru.services.v1.StreamBlocksRequest\"> & {\n  /**\n   * @generated from field: optional uint64 start_slot = 1;\n   */\n  startSlot?: bigint | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.Filter filter = 2;\n   */\n  filter?: Filter | undefined;\n\n  /**\n   * @generated from field: optional thru.core.v1.BlockView view = 3;\n   */\n  view?: BlockView | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 4;\n   */\n  minConsensus?: ConsensusStatus | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.StreamBlocksRequest.\n * Use `create(StreamBlocksRequestSchema)` to create a new message.\n */\nexport const StreamBlocksRequestSchema: GenMessage<StreamBlocksRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_streaming_service, 0);\n\n/**\n * StreamBlocksResponse delivers block updates.\n *\n * @generated from message thru.services.v1.StreamBlocksResponse\n */\nexport type StreamBlocksResponse = Message<\"thru.services.v1.StreamBlocksResponse\"> & {\n  /**\n   * @generated from field: thru.core.v1.Block block = 1;\n   */\n  block?: Block | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.StreamBlocksResponse.\n * Use `create(StreamBlocksResponseSchema)` to create a new message.\n */\nexport const StreamBlocksResponseSchema: GenMessage<StreamBlocksResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_streaming_service, 1);\n\n/**\n * StreamAccountUpdatesRequest subscribes to account delta events.\n *\n * Filter expressions support the following params:\n *\n * - params.min_slot (uint64): Minimum slot for filtering updates\n *   Example: account_update.slot >= params.min_slot\n *\n * - params.min_balance (uint64): Minimum balance for filtering\n *   Example: snapshot.meta.balance >= params.min_balance\n *\n * - params.owner (bytes|Pubkey): Owner pubkey for filtering\n *   Examples:\n *     snapshot.meta.owner.value == params.owner\n *     account_update.meta.owner.value == params.owner\n *\n * - params.address (bytes|Pubkey): Account address for filtering\n *   Example: account_address.value == params.address\n *   Note: Use account_address for unified filtering across both snapshot and update messages\n *\n * - params.addresses (BytesList): List of addresses for multi-account filtering\n *   Example: account_address.value in params.addresses\n *   Note: Use the 'in' operator to filter by multiple addresses in a single subscription\n *\n * - params.min_nonce (uint64): Minimum nonce for filtering\n *   Example: snapshot.meta.nonce >= params.min_nonce\n *\n * - params.min_seq (uint64): Minimum sequence number for filtering\n *   Example: snapshot.meta.seq >= params.min_seq\n *   Note: for account_update messages, prefer the top-level\n *   account_update.seq -- it is present under every view, including\n *   DATA_ONLY and PUBKEY_ONLY where account_update.meta is stripped.\n *\n * - params.min_data_size (uint32): Minimum data size for filtering\n *   Example: snapshot.meta.data_size >= params.min_data_size\n *\n * Available snapshot fields (thru.core.v1.Account):\n *   snapshot.address, snapshot.address.value (bytes),\n *   snapshot.meta.balance (uint64), snapshot.meta.seq (uint64),\n *   snapshot.meta.nonce (uint64), snapshot.meta.data_size (uint32),\n *   snapshot.meta.version (uint32), snapshot.meta.flags (AccountFlags),\n *   snapshot.meta.flags.is_program (bool), snapshot.meta.flags.is_privileged (bool),\n *   snapshot.meta.flags.is_uncompressable (bool), snapshot.meta.flags.is_ephemeral (bool),\n *   snapshot.meta.flags.is_deleted (bool), snapshot.meta.flags.is_new (bool),\n *   snapshot.meta.flags.is_compressed (bool),\n *   snapshot.meta.owner, snapshot.meta.owner.value (bytes)\n *\n * Available account_update fields (AccountUpdate):\n *   account_update.slot (uint64), account_update.delete (bool),\n *   account_update.seq (uint64) - present under every view, unlike meta.seq,\n *   account_update.meta.balance (uint64), account_update.meta.seq (uint64),\n *   account_update.meta.nonce (uint64), account_update.meta.data_size (uint32),\n *   account_update.meta.version (uint32), account_update.meta.flags (AccountFlags),\n *   account_update.meta.flags.is_program (bool), account_update.meta.flags.is_privileged (bool),\n *   account_update.meta.flags.is_uncompressable (bool), account_update.meta.flags.is_ephemeral (bool),\n *   account_update.meta.flags.is_deleted (bool), account_update.meta.flags.is_new (bool),\n *   account_update.meta.flags.is_compressed (bool),\n *   account_update.meta.owner, account_update.meta.owner.value (bytes)\n *\n * Available unified fields (work for both snapshot and update messages):\n *   account_address, account_address.value (bytes) - extracted from whichever message type is present\n *\n * Filter expression examples:\n *\n * 1. Filter by minimum balance (snapshot or update):\n *    Expression: \"(has(snapshot.meta) && snapshot.meta.balance >= uint(1000000)) || (has(account_update.meta) && account_update.meta.balance >= uint(1000000))\"\n *\n * 2. Filter by account owner using params:\n *    Expression: \"(has(snapshot.meta) && has(snapshot.meta.owner) && snapshot.meta.owner.value == params.owner) || (has(account_update.meta) && has(account_update.meta.owner) && account_update.meta.owner.value == params.owner)\"\n *    Params: {\"owner\": <32-byte pubkey>}\n *\n * 3. Filter by specific account address (works for both snapshot and update messages):\n *    Expression: \"account_address.value == params.address\"\n *    Params: {\"address\": <32-byte pubkey>}\n *\n * 4. Filter by minimum slot for updates:\n *    Expression: \"has(account_update.meta) && account_update.slot >= params.min_slot\"\n *    Params: {\"min_slot\": 1000}\n *\n * 5. Filter by nonce greater than value:\n *    Expression: \"(has(snapshot.meta) && snapshot.meta.nonce >= uint(5)) || (has(account_update.meta) && account_update.meta.nonce >= uint(5))\"\n *\n * 6. Filter by sequence number:\n *    Expression: \"(has(snapshot.meta) && snapshot.meta.seq >= uint(100)) || (has(account_update.meta) && account_update.meta.seq >= uint(100))\"\n *    Note: for account_update alone, the top-level field also works and\n *    survives every view: \"account_update.seq >= uint(100)\"\n *\n * 7. Filter by data size:\n *    Expression: \"(has(snapshot.meta) && snapshot.meta.data_size >= uint(1024)) || (has(account_update.meta) && account_update.meta.data_size >= uint(1024))\"\n *\n * 8. Filter by account version:\n *    Expression: \"(has(snapshot.meta) && snapshot.meta.version >= uint(1)) || (has(account_update.meta) && account_update.meta.version >= uint(1))\"\n *\n * 9. Filter by account flags (check if account is a program):\n *    Expression: \"(has(snapshot.meta) && has(snapshot.meta.flags) && snapshot.meta.flags.is_program) || (has(account_update.meta) && has(account_update.meta.flags) && account_update.meta.flags.is_program)\"\n *\n * 10. Filter by privileged flag:\n *     Expression: \"(has(snapshot.meta) && has(snapshot.meta.flags) && snapshot.meta.flags.is_privileged) || (has(account_update.meta) && has(account_update.meta.flags) && account_update.meta.flags.is_privileged)\"\n *\n * 11. Filter non-delete updates:\n *     Expression: \"has(snapshot.meta) || (has(account_update.meta) && (!has(account_update.delete) || !account_update.delete))\"\n *\n * 12. Check for snapshot or update presence:\n *     Expression: \"has(snapshot.meta) || has(account_update.meta)\"\n *\n * 13. Combined filters (multiple conditions):\n *     Expression: \"has(snapshot.meta) || (has(account_update.meta) && account_update.slot >= params.min_slot && account_update.meta.balance >= params.min_balance)\"\n *     Params: {\"min_slot\": 1000, \"min_balance\": 1000000}\n *\n * 14. Filter by minimum balance using params:\n *     Expression: \"(has(snapshot.meta) && snapshot.meta.balance >= params.min_balance) || (has(account_update.meta) && account_update.meta.balance >= params.min_balance)\"\n *     Params: {\"min_balance\": 5000000000}\n *\n * Note: The response contains either a snapshot (initial state), an update (delta),\n * or a BlockFinished message. Filters should handle both snapshot and update cases\n * using OR logic to match either message type.\n *\n * To filter by specific account address (recommended - works for both message types):\n *   Expression: \"account_address.value == params.address\"\n *   Params: {\"address\": <32-byte pubkey>}\n *\n * To filter by owner (program):\n *   Expression: \"(has(snapshot.meta.owner) && snapshot.meta.owner.value == params.owner) || (has(account_update.meta.owner) && account_update.meta.owner.value == params.owner)\"\n *   Params: {\"owner\": <32-byte program pubkey>}\n *\n * To filter by multiple account addresses (recommended for multi-account subscriptions):\n *   Expression: \"account_address.value in params.addresses\"\n *   Params: {\"addresses\": BytesList{values: [<pubkey1>, <pubkey2>, ...]}}\n *   Note: Use BytesList parameter type with the 'in' operator for efficient multi-address filtering\n *\n * @generated from message thru.services.v1.StreamAccountUpdatesRequest\n */\nexport type StreamAccountUpdatesRequest = Message<\"thru.services.v1.StreamAccountUpdatesRequest\"> & {\n  /**\n   * Projects delivered snapshots and updates to the requested fields. The\n   * server strips fields the view excludes before sending: META_ONLY omits\n   * Account.data and AccountUpdate.page; DATA_ONLY omits the meta; PUBKEY_ONLY\n   * delivers only the address. On AccountUpdate deltas the slot, the\n   * top-level seq, and the AccountUpdate.delete flag are always preserved\n   * regardless of view, so every view can detect account deletion and read\n   * the per-account sequence number even when meta is stripped; without\n   * delete a deletion would be indistinguishable from a page-less update.\n   * ACCOUNT_VIEW_UNSPECIFIED defaults to ACCOUNT_VIEW_FULL, matching the unary\n   * GetAccount RPC.\n   *\n   * @generated from field: optional thru.core.v1.AccountView view = 2;\n   */\n  view?: AccountView | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.Filter filter = 4;\n   */\n  filter?: Filter | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.StreamAccountUpdatesRequest.\n * Use `create(StreamAccountUpdatesRequestSchema)` to create a new message.\n */\nexport const StreamAccountUpdatesRequestSchema: GenMessage<StreamAccountUpdatesRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_streaming_service, 2);\n\n/**\n * AccountUpdate describes a delta for an account.\n *\n * @generated from message thru.services.v1.AccountUpdate\n */\nexport type AccountUpdate = Message<\"thru.services.v1.AccountUpdate\"> & {\n  /**\n   * @generated from field: uint64 slot = 1;\n   */\n  slot: bigint;\n\n  /**\n   * @generated from field: optional thru.core.v1.AccountPage page = 2;\n   */\n  page?: AccountPage | undefined;\n\n  /**\n   * @generated from field: optional thru.core.v1.AccountMeta meta = 3;\n   */\n  meta?: AccountMeta | undefined;\n\n  /**\n   * @generated from field: optional bool delete = 4;\n   */\n  delete?: boolean | undefined;\n\n  /**\n   * Account address for identifying the account in multi-account streams.\n   *\n   * @generated from field: thru.common.v1.Pubkey address = 5;\n   */\n  address?: Pubkey | undefined;\n\n  /**\n   * Per-account sequence number of this update. Unlike meta.seq, this\n   * top-level field is present under every view, including DATA_ONLY and\n   * PUBKEY_ONLY where meta is stripped.\n   *\n   * @generated from field: uint64 seq = 6;\n   */\n  seq: bigint;\n};\n\n/**\n * Describes the message thru.services.v1.AccountUpdate.\n * Use `create(AccountUpdateSchema)` to create a new message.\n */\nexport const AccountUpdateSchema: GenMessage<AccountUpdate> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_streaming_service, 3);\n\n/**\n * BlockFinished is sent when block's execution is complete.\n * Contains block accumulator metrics finalized after execution.\n *\n * @generated from message thru.services.v1.BlockFinished\n */\nexport type BlockFinished = Message<\"thru.services.v1.BlockFinished\"> & {\n  /**\n   * @generated from field: uint64 slot = 1;\n   */\n  slot: bigint;\n\n  /**\n   * Global counter tracking total activated state across all accounts.\n   * Increments when accounts are created or modified.\n   *\n   * @generated from field: uint64 global_activated_state_counter = 2;\n   */\n  globalActivatedStateCounter: bigint;\n\n  /**\n   * Global counter tracking total deactivated state across all accounts.\n   * Increments when accounts are deleted or compressed.\n   *\n   * @generated from field: uint64 global_deactivated_state_counter = 3;\n   */\n  globalDeactivatedStateCounter: bigint;\n\n  /**\n   * Fees credited to the absent-block-producer fee receiver this block\n   * because the block producer account was not live (UNTO-1293). Field\n   * number unchanged (4).\n   *\n   * @generated from field: uint64 absent_block_producer_fees = 4;\n   */\n  absentBlockProducerFees: bigint;\n\n  /**\n   * Fees credited to a live block-producer account this block. Disjoint from\n   * absent_block_producer_fees by destination; total block fees =\n   * absent_block_producer_fees + claimed_fees.\n   *\n   * @generated from field: uint64 claimed_fees = 5;\n   */\n  claimedFees: bigint;\n};\n\n/**\n * Describes the message thru.services.v1.BlockFinished.\n * Use `create(BlockFinishedSchema)` to create a new message.\n */\nexport const BlockFinishedSchema: GenMessage<BlockFinished> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_streaming_service, 4);\n\n/**\n * StreamAccountUpdatesResponse contains either an initial snapshot or a delta.\n *\n * @generated from message thru.services.v1.StreamAccountUpdatesResponse\n */\nexport type StreamAccountUpdatesResponse = Message<\"thru.services.v1.StreamAccountUpdatesResponse\"> & {\n  /**\n   * @generated from oneof thru.services.v1.StreamAccountUpdatesResponse.message\n   */\n  message: {\n    /**\n     * @generated from field: thru.core.v1.Account snapshot = 1;\n     */\n    value: Account;\n    case: \"snapshot\";\n  } | {\n    /**\n     * @generated from field: thru.services.v1.AccountUpdate update = 2;\n     */\n    value: AccountUpdate;\n    case: \"update\";\n  } | {\n    /**\n     * @generated from field: thru.services.v1.BlockFinished finished = 3;\n     */\n    value: BlockFinished;\n    case: \"finished\";\n  } | { case: undefined; value?: undefined };\n};\n\n/**\n * Describes the message thru.services.v1.StreamAccountUpdatesResponse.\n * Use `create(StreamAccountUpdatesResponseSchema)` to create a new message.\n */\nexport const StreamAccountUpdatesResponseSchema: GenMessage<StreamAccountUpdatesResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_streaming_service, 5);\n\n/**\n * StreamTransactionsRequest subscribes to transaction confirmations.\n *\n * Filter expressions support the following params:\n *\n * - params.min_slot (uint64): Minimum slot for filtering transactions\n *   Example: transaction.slot >= params.min_slot\n *\n * - params.max_slot (uint64): Maximum slot for filtering transactions\n *   Example: transaction.slot <= params.max_slot\n *\n * - params.slot (uint64): Specific slot for exact match filtering\n *   Example: transaction.slot == params.slot\n *\n * - params.min_fee (uint64): Minimum fee for filtering transactions\n *   Example: transaction.header.fee >= params.min_fee\n *\n * - params.fee_payer (bytes|Pubkey): Fee payer pubkey for filtering\n *   Example: transaction.header.fee_payer_pubkey.value == params.fee_payer\n *\n * - params.signature (bytes|Signature): Transaction signature for filtering\n *   Example: transaction.signature.value == params.signature\n *\n * Available transaction fields (thru.core.v1.Transaction):\n *   transaction.signature, transaction.signature.value (bytes),\n *   transaction.slot (uint64), transaction.block_offset (uint32),\n *   transaction.header, transaction.header.version (uint32),\n *   transaction.header.fee (uint64),\n *   transaction.header.fee_payer_pubkey, transaction.header.fee_payer_pubkey.value (bytes),\n *   transaction.execution_result, transaction.execution_result.user_error_code (uint32),\n *   transaction.execution_result.vm_error (int32)\n *\n * Available consensus_status field:\n *   consensus_status (int32) - Current consensus status of the transaction\n *   Values: CONSENSUS_STATUS_UNSPECIFIED = 0, CONSENSUS_STATUS_OBSERVED = 1,\n *           CONSENSUS_STATUS_INCLUDED = 2\n *\n * Filter expression examples:\n *\n * 1. Filter by minimum slot:\n *    Expression: \"has(transaction.slot) && transaction.slot >= params.min_slot\"\n *    Params: {\"min_slot\": 1000}\n *\n * 2. Filter by slot range:\n *    Expression: \"has(transaction.slot) && transaction.slot >= params.min_slot && transaction.slot <= params.max_slot\"\n *    Params: {\"min_slot\": 1000, \"max_slot\": 2000}\n *\n * 3. Filter by specific slot:\n *    Expression: \"has(transaction.slot) && transaction.slot == params.slot\"\n *    Params: {\"slot\": 12345}\n *\n * 4. Filter by minimum fee:\n *    Expression: \"has(transaction.header) && transaction.header.fee >= params.min_fee\"\n *    Params: {\"min_fee\": 5000}\n *\n * 5. Filter by fee payer:\n *    Expression: \"has(transaction.header.fee_payer_pubkey) && transaction.header.fee_payer_pubkey.value == params.fee_payer\"\n *    Params: {\"fee_payer\": <32-byte pubkey>}\n *\n * 6. Filter by transaction signature:\n *    Expression: \"has(transaction.signature) && transaction.signature.value == params.signature\"\n *    Params: {\"signature\": <64-byte signature>}\n *\n * 7. Filter by header version:\n *    Expression: \"has(transaction.header) && transaction.header.version >= uint(0)\"\n *\n * 8. Filter by successful execution:\n *    Expression: \"has(transaction.execution_result) && transaction.execution_result.vm_error == int(0)\"\n *\n * 9. Filter by user error code:\n *    Expression: \"has(transaction.execution_result) && transaction.execution_result.user_error_code == uint(0)\"\n *\n * 10. Filter by consensus status:\n *     Expression: \"consensus_status >= int(2)\"\n *     Note: Use >= int(2) for CONSENSUS_STATUS_INCLUDED and above\n *\n * 11. Check for execution result presence:\n *     Expression: \"has(transaction.execution_result)\"\n *\n * 12. Filter by transaction with header and slot:\n *     Expression: \"has(transaction.slot) && transaction.slot >= uint(0) && has(transaction.header)\"\n *\n * 13. Combined filters (slot, fee, and status):\n *     Expression: \"has(transaction.slot) && transaction.slot >= params.min_slot && has(transaction.header) && transaction.header.fee >= params.min_fee && consensus_status >= int(2)\"\n *     Params: {\"min_slot\": 1000, \"min_fee\": 5000}\n *\n * 14. Filter successful transactions with minimum fee:\n *     Expression: \"has(transaction.execution_result) && transaction.execution_result.vm_error == int(0) && has(transaction.header) && transaction.header.fee >= params.min_fee\"\n *     Params: {\"min_fee\": 10000}\n *\n * Note: The min_consensus field in the request provides built-in consensus filtering\n * without requiring a CEL expression. Use it in combination with filter expressions\n * for more complex filtering logic.\n *\n * @generated from message thru.services.v1.StreamTransactionsRequest\n */\nexport type StreamTransactionsRequest = Message<\"thru.services.v1.StreamTransactionsRequest\"> & {\n  /**\n   * @generated from field: optional thru.common.v1.Filter filter = 1;\n   */\n  filter?: Filter | undefined;\n\n  /**\n   * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 2;\n   */\n  minConsensus?: ConsensusStatus | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.StreamTransactionsRequest.\n * Use `create(StreamTransactionsRequestSchema)` to create a new message.\n */\nexport const StreamTransactionsRequestSchema: GenMessage<StreamTransactionsRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_streaming_service, 6);\n\n/**\n * StreamTransactionsResponse delivers transaction events.\n *\n * @generated from message thru.services.v1.StreamTransactionsResponse\n */\nexport type StreamTransactionsResponse = Message<\"thru.services.v1.StreamTransactionsResponse\"> & {\n  /**\n   * @generated from field: thru.core.v1.Transaction transaction = 1;\n   */\n  transaction?: Transaction | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.StreamTransactionsResponse.\n * Use `create(StreamTransactionsResponseSchema)` to create a new message.\n */\nexport const StreamTransactionsResponseSchema: GenMessage<StreamTransactionsResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_streaming_service, 7);\n\n/**\n * StreamEventsRequest subscribes to chain events.\n *\n * Filter expressions support the following params:\n *\n * - params.prefix (bytes): Byte prefix for payload filtering\n *   Example: bytesPrefix(event.payload, params.prefix)\n *\n * - params.slot (int64): Slot number for comparison\n *   Example: event.slot >= params.slot\n *\n * - params.u64 (int64): Generic 64-bit value for payload extraction\n *   Examples:\n *     first8Bytes(event.payload) == params.u64\n *     first4Bytes(event.payload) == params.u64\n *     first1Byte(event.payload) == params.u64\n *\n * - params.signature (bytes|Signature|TsSignature): Signature for comparison\n *   Examples:\n *     event.signature.value == params.signature        // bytes type\n *     bytesPrefix(event.signature.value, params.signature)\n *   Note: Signature and TsSignature types are auto-converted to bytes\n *\n * - params.address (bytes|Pubkey|TaPubkey): Address/pubkey for comparison\n *   Examples:\n *     event.program.value == params.address            // bytes type\n *     bytesPrefix(event.program.value, params.address)\n *   Note: Pubkey and TaPubkey types are auto-converted to bytes\n *\n * - params.timestamp (int64): Timestamp in seconds for comparison\n *   Example: int(event.timestamp) > params.timestamp\n *\n * Available event fields:\n *   event.event_id (string), event.slot (uint64), event.payload (bytes),\n *   event.call_idx (uint32), event.signature (Signature),\n *   event.signature.value (bytes), event.program (Pubkey),\n *   event.program.value (bytes), event.timestamp (Timestamp),\n *   event.program_idx (uint32), event.block_offset (uint32),\n *   event.fee_payer (Pubkey), event.fee_payer.value (bytes),\n *   event.block_timestamp (Timestamp)\n *\n * Note: Unlike ListEventsRequest in QueryService, StreamEventsRequest does NOT support:\n *   event.payload_size, event.transaction_signature\n *\n * Available filter functions:\n *   - has(field): Check if optional field exists\n *     Example: has(event.program) && has(event.signature)\n *\n *   - startsWith(string, prefix): Check if string starts with prefix\n *     Example: event.event_id.startsWith(\"ts\")\n *\n *   - bytesPrefix(bytes, prefix): Check if bytes start with prefix\n *     Examples:\n *       bytesPrefix(event.payload, b\"\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")\n *       bytesPrefix(event.payload, params.prefix)\n *       bytesPrefix(event.program.value, params.address)\n *       bytesPrefix(event.signature.value, params.signature)\n *\n *   - first1Byte(bytes): Extract first byte as uint\n *     Example: first1Byte(event.payload) == uint(1)\n *\n *   - first4Bytes(bytes): Extract first 4 bytes as little-endian uint32\n *     Example: first4Bytes(event.payload) == uint(2)\n *\n *   - first8Bytes(bytes): Extract first 8 bytes as little-endian uint64\n *     Example: first8Bytes(event.payload) == uint(6)\n *\n *   - uint(value): Convert value to uint for comparison\n *   - int(value): Convert value to int (used for timestamps)\n *\n * Filter expression examples:\n *\n * 1. Filter by payload type using first1Byte (MESSAGE event type = 1):\n *    Expression: \"first1Byte(event.payload) == uint(1)\"\n *\n * 2. Filter by payload type using first4Bytes (COUNTER event type = 2):\n *    Expression: \"first4Bytes(event.payload) == uint(2)\"\n *\n * 3. Filter by payload type using first8Bytes (PATTERN event type = 6):\n *    Expression: \"first8Bytes(event.payload) == uint(6)\"\n *\n * 4. Filter by payload prefix with params:\n *    Expression: \"bytesPrefix(event.payload, params.prefix)\"\n *    Params: {\"prefix\": <bytes, e.g., 0x01000000...>}\n *\n * 5. Filter by slot using params:\n *    Expression: \"event.slot >= params.slot\"\n *    Params: {\"slot\": 1000}\n *\n * 6. Filter by program address (exact match):\n *    Expression: \"event.program.value == params.address\"\n *    Params: {\"address\": <32-byte pubkey as bytes, Pubkey, or TaPubkey>}\n *\n * 7. Filter by program address (prefix match):\n *    Expression: \"bytesPrefix(event.program.value, params.address)\"\n *    Params: {\"address\": <pubkey prefix bytes>}\n *\n * 8. Filter by transaction signature (exact match):\n *    Expression: \"event.signature.value == params.signature\"\n *    Params: {\"signature\": <64-byte signature as bytes, Signature, or TsSignature>}\n *\n * 9. Filter by transaction signature (prefix match):\n *    Expression: \"bytesPrefix(event.signature.value, params.signature)\"\n *    Params: {\"signature\": <signature prefix bytes>}\n *\n * 10. Filter by call_idx (0 = main program, 1+ = CPI calls):\n *     Expression: \"event.call_idx == uint(0)\"\n *     Expression: \"event.call_idx == uint(1)\"\n *\n * 11. Filter by event_id prefix:\n *     Expression: \"event.event_id.startsWith(\\\"ts\\\")\"\n *\n * 12. Filter by timestamp (events in last hour):\n *     Expression: \"has(event.timestamp) && int(event.timestamp) > int(1700000000)\"\n *\n * 13. Filter by timestamp using params:\n *     Expression: \"has(event.timestamp) && int(event.timestamp) > params.timestamp\"\n *     Params: {\"timestamp\": 1700000000}\n *\n * 14. Check field existence:\n *     Expression: \"has(event.program) && has(event.signature)\"\n *\n * 15. Filter using params.u64 with first8Bytes:\n *     Expression: \"first8Bytes(event.payload) == params.u64\"\n *     Params: {\"u64\": 6}\n *\n * 16. Filter using params.u64 with first4Bytes:\n *     Expression: \"first4Bytes(event.payload) == params.u64\"\n *     Params: {\"u64\": 2}\n *\n * 17. Filter using params.u64 with first1Byte:\n *     Expression: \"first1Byte(event.payload) == params.u64\"\n *     Params: {\"u64\": 1}\n *\n * 18. Combined filter (slot + payload type + call_idx):\n *     Expression: \"event.slot > uint(1000) && first1Byte(event.payload) == uint(1) && event.call_idx == uint(0)\"\n *\n * 19. Combined filter (call_idx + program address):\n *     Expression: \"event.call_idx == uint(1) && event.program.value == params.address\"\n *     Params: {\"address\": <32-byte CPI target program pubkey>}\n *\n * 20. Timestamp range filter:\n *     Expression: \"has(event.timestamp) && int(event.timestamp) > int(1700000000) && int(event.timestamp) < int(1700100000)\"\n *\n * @generated from message thru.services.v1.StreamEventsRequest\n */\nexport type StreamEventsRequest = Message<\"thru.services.v1.StreamEventsRequest\"> & {\n  /**\n   * @generated from field: optional thru.common.v1.Filter filter = 1;\n   */\n  filter?: Filter | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.StreamEventsRequest.\n * Use `create(StreamEventsRequestSchema)` to create a new message.\n */\nexport const StreamEventsRequestSchema: GenMessage<StreamEventsRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_streaming_service, 8);\n\n/**\n * StreamEventsResponse delivers event payloads.\n *\n * program_idx, block_offset, fee_payer and block_timestamp carry the same\n * values ListEvents and GetEvent return for the event. program_idx and\n * block_offset come from the event itself and are always set. program and\n * fee_payer need the emitting transaction's context, and block_timestamp the\n * event's block; when the node cannot resolve those at publish time they are\n * absent, and a client needing them should look the event up.\n *\n * @generated from message thru.services.v1.StreamEventsResponse\n */\nexport type StreamEventsResponse = Message<\"thru.services.v1.StreamEventsResponse\"> & {\n  /**\n   * @generated from field: string event_id = 1;\n   */\n  eventId: string;\n\n  /**\n   * @generated from field: optional bytes payload = 2;\n   */\n  payload?: Uint8Array | undefined;\n\n  /**\n   * When the node published the event, not when its block was produced; see\n   * block_timestamp.\n   *\n   * @generated from field: optional google.protobuf.Timestamp timestamp = 3;\n   */\n  timestamp?: Timestamp | undefined;\n\n  /**\n   * @generated from field: thru.common.v1.Pubkey program = 4;\n   */\n  program?: Pubkey | undefined;\n\n  /**\n   * @generated from field: uint32 call_idx = 5;\n   */\n  callIdx: number;\n\n  /**\n   * @generated from field: thru.common.v1.Signature signature = 6;\n   */\n  signature?: Signature | undefined;\n\n  /**\n   * @generated from field: uint64 slot = 7;\n   */\n  slot: bigint;\n\n  /**\n   * Index of the emitting program in the transaction's account list.\n   *\n   * @generated from field: optional uint32 program_idx = 8;\n   */\n  programIdx?: number | undefined;\n\n  /**\n   * Byte offset of the emitting transaction within its block.\n   *\n   * @generated from field: optional uint32 block_offset = 9;\n   */\n  blockOffset?: number | undefined;\n\n  /**\n   * Fee payer of the emitting transaction.\n   *\n   * @generated from field: optional thru.common.v1.Pubkey fee_payer = 10;\n   */\n  feePayer?: Pubkey | undefined;\n\n  /**\n   * Block production time of the event's block: the timestamp ListEvents\n   * and GetEvent return.\n   *\n   * @generated from field: optional google.protobuf.Timestamp block_timestamp = 11;\n   */\n  blockTimestamp?: Timestamp | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.StreamEventsResponse.\n * Use `create(StreamEventsResponseSchema)` to create a new message.\n */\nexport const StreamEventsResponseSchema: GenMessage<StreamEventsResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_streaming_service, 9);\n\n/**\n * TrackTransactionRequest subscribes to status updates for a transaction.\n *\n * @generated from message thru.services.v1.TrackTransactionRequest\n */\nexport type TrackTransactionRequest = Message<\"thru.services.v1.TrackTransactionRequest\"> & {\n  /**\n   * @generated from field: thru.common.v1.Signature signature = 1;\n   */\n  signature?: Signature | undefined;\n\n  /**\n   * @generated from field: optional google.protobuf.Duration timeout = 2;\n   */\n  timeout?: Duration | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.TrackTransactionRequest.\n * Use `create(TrackTransactionRequestSchema)` to create a new message.\n */\nexport const TrackTransactionRequestSchema: GenMessage<TrackTransactionRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_streaming_service, 10);\n\n/**\n * TrackTransactionResponse reports status transitions for a transaction.\n *\n * @generated from message thru.services.v1.TrackTransactionResponse\n */\nexport type TrackTransactionResponse = Message<\"thru.services.v1.TrackTransactionResponse\"> & {\n  /**\n   * @generated from field: thru.common.v1.Signature signature = 1;\n   */\n  signature?: Signature | undefined;\n\n  /**\n   * @generated from field: thru.common.v1.ConsensusStatus consensus_status = 2;\n   */\n  consensusStatus: ConsensusStatus;\n\n  /**\n   * @generated from field: thru.core.v1.TransactionExecutionResult execution_result = 3;\n   */\n  executionResult?: TransactionExecutionResult | undefined;\n\n  /**\n   * Slot in which this transaction landed. Zero until the producing block\n   * has been observed by the ingestor; consumers waiting to anchor downstream\n   * ClickHouse reads (e.g. GetTransaction) should ignore zero slots and wait\n   * for the next response.\n   *\n   * @generated from field: uint64 slot = 4;\n   */\n  slot: bigint;\n};\n\n/**\n * Describes the message thru.services.v1.TrackTransactionResponse.\n * Use `create(TrackTransactionResponseSchema)` to create a new message.\n */\nexport const TrackTransactionResponseSchema: GenMessage<TrackTransactionResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_streaming_service, 11);\n\n/**\n * StreamSlotMetricsRequest subscribes to per-slot metrics updates.\n *\n * One message is published per slot terminator. That is normally an executed\n * block, but a persistence consumer connecting without a durable marker also\n * receives an account-bootstrap terminator, which reports no execution state:\n * its counters are zero and it carries no state commitments.\n *\n * @generated from message thru.services.v1.StreamSlotMetricsRequest\n */\nexport type StreamSlotMetricsRequest = Message<\"thru.services.v1.StreamSlotMetricsRequest\"> & {\n  /**\n   * Optional lower bound on the slots delivered. This is a FILTER on live\n   * publications, not a replay: the server holds no history and will not\n   * backfill slots that are already in the past. Slots below this value are\n   * skipped; if not specified, delivery starts from the next terminator.\n   * To read past slots use QueryService.GetSlotMetrics / ListSlotMetrics --\n   * but note those carry the counters and timestamp only, NOT the state\n   * commitments below. For the commitments the corresponding queries are\n   * QueryService.GetStateRoots and QueryService.GetActiveStateHashes, and they\n   * answer only for slots whose rows were actually persisted -- a slot the\n   * indexer never committed, or one whose terminator carried no commitment, has\n   * nothing to return, so a gap is not guaranteed to be fillable.\n   *\n   * @generated from field: optional uint64 start_slot = 1;\n   */\n  startSlot?: bigint | undefined;\n\n  /**\n   * Opt in to compressed_state_root on the response. Off by default: the\n   * commitment costs ~34 bytes per slot and most consumers do not read it.\n   *\n   * @generated from field: bool include_compressed_state_root = 2;\n   */\n  includeCompressedStateRoot: boolean;\n\n  /**\n   * Opt in to active_state_hash on the response. Off by default, same\n   * reasoning as include_compressed_state_root.\n   *\n   * @generated from field: bool include_active_state_hash = 3;\n   */\n  includeActiveStateHash: boolean;\n};\n\n/**\n * Describes the message thru.services.v1.StreamSlotMetricsRequest.\n * Use `create(StreamSlotMetricsRequestSchema)` to create a new message.\n */\nexport const StreamSlotMetricsRequestSchema: GenMessage<StreamSlotMetricsRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_streaming_service, 12);\n\n/**\n * StreamSlotMetricsResponse delivers slot metrics at slot-terminator time.\n *\n * This is a best-effort, live-only feed. One message is published per slot\n * TERMINATOR, which is normally an executed block but is also an\n * account-bootstrap marker carrying zeroed counters and no state commitments.\n * Publication happens AHEAD of the indexer having persisted the slot: a state\n * proof for that slot may not be servable yet, and\n * neither StreamHeight nor GetStateRoots is a durability signal. A subscriber\n * that cannot keep up is disconnected with RESOURCE_EXHAUSTED rather than\n * silently skipped, and there is no replay -- a client that reconnects has a\n * gap and must backfill through QueryService.\n *\n * @generated from message thru.services.v1.StreamSlotMetricsResponse\n */\nexport type StreamSlotMetricsResponse = Message<\"thru.services.v1.StreamSlotMetricsResponse\"> & {\n  /**\n   * Block slot number.\n   *\n   * @generated from field: uint64 slot = 1;\n   */\n  slot: bigint;\n\n  /**\n   * Global counter tracking total activated state across all accounts.\n   *\n   * @generated from field: uint64 global_activated_state_counter = 2;\n   */\n  globalActivatedStateCounter: bigint;\n\n  /**\n   * Global counter tracking total deactivated state across all accounts.\n   *\n   * @generated from field: uint64 global_deactivated_state_counter = 3;\n   */\n  globalDeactivatedStateCounter: bigint;\n\n  /**\n   * Fees credited to the absent-block-producer fee receiver this block\n   * because the block producer account was not live (UNTO-1293). Field\n   * number unchanged (4).\n   *\n   * @generated from field: uint64 absent_block_producer_fees = 4;\n   */\n  absentBlockProducerFees: bigint;\n\n  /**\n   * Block timestamp.\n   *\n   * @generated from field: google.protobuf.Timestamp block_timestamp = 5;\n   */\n  blockTimestamp?: Timestamp | undefined;\n\n  /**\n   * Total compute units consumed across all transactions in this block.\n   *\n   * @generated from field: uint64 consumed_compute_units = 6;\n   */\n  consumedComputeUnits: bigint;\n\n  /**\n   * Total state units consumed across all transactions in this block.\n   *\n   * @generated from field: uint32 consumed_state_units = 7;\n   */\n  consumedStateUnits: number;\n\n  /**\n   * Fees credited to a live block-producer account this block. Disjoint from\n   * absent_block_producer_fees by destination; total block fees =\n   * absent_block_producer_fees + claimed_fees.\n   *\n   * @generated from field: uint64 claimed_fees = 8;\n   */\n  claimedFees: bigint;\n\n  /**\n   * The compressed-state trie root as of this slot: exactly 32 bytes, the\n   * commitment that account state proofs are verified against.\n   *\n   * Sent only when the request set include_compressed_state_root.\n   *\n   * An all-zero VALUE is legitimate and is not the same as an absent field.\n   * The trie is empty until compression warms up, and a slot in which nothing\n   * was compressed carries the previous root unchanged, so a repeated or zero\n   * root means \"nothing merged\", never \"unknown\".\n   *\n   * Absence has five causes, and they are not all distinguishable from the\n   * client:\n   *   1. the field was not requested;\n   *   2. it was requested, and the node reported no execution state for this\n   *      slot (an account-bootstrap terminator);\n   *   3. this server predates the field and ignores the request flag;\n   *   4. this server supports the field, but the NODE behind it is older than\n   *      the wire flag that marks a terminator as post-execution, so the server\n   *      withholds the commitments rather than guess;\n   *   5. the node's terminator was truncated or malformed, so the server could\n   *      not read a commitment out of it at all.\n   * QueryService.GetVersion separates case 3 from the rest by reporting the\n   * server build. Cases 2, 4 and 5 are indistinguishable on the wire -- all of\n   * them mean \"the server declined to state a commitment for this slot\", and\n   * none of them is safe to read as a value.\n   *\n   * @generated from field: optional bytes compressed_state_root = 9;\n   */\n  compressedStateRoot?: Uint8Array | undefined;\n\n  /**\n   * The active-state hash as of this slot: exactly 32 bytes, computed over the\n   * live (uncompressed) account set together with this slot's block context.\n   *\n   * Sent only when the request set include_active_state_hash. The same five\n   * causes of absence as compressed_state_root apply.\n   *\n   * Note that this hash covers the block context, which itself contains the\n   * compressed-state root -- so it transitively commits to the value in\n   * compressed_state_root. Agreement between the two fields is therefore NOT\n   * an independent cross-check of either one.\n   *\n   * @generated from field: optional bytes active_state_hash = 10;\n   */\n  activeStateHash?: Uint8Array | undefined;\n};\n\n/**\n * Describes the message thru.services.v1.StreamSlotMetricsResponse.\n * Use `create(StreamSlotMetricsResponseSchema)` to create a new message.\n */\nexport const StreamSlotMetricsResponseSchema: GenMessage<StreamSlotMetricsResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_streaming_service, 13);\n\n/**\n * StreamHeightRequest subscribes to real-time height updates.\n *\n * @generated from message thru.services.v1.StreamHeightRequest\n */\nexport type StreamHeightRequest = Message<\"thru.services.v1.StreamHeightRequest\"> & {\n};\n\n/**\n * Describes the message thru.services.v1.StreamHeightRequest.\n * Use `create(StreamHeightRequestSchema)` to create a new message.\n */\nexport const StreamHeightRequestSchema: GenMessage<StreamHeightRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_streaming_service, 14);\n\n/**\n * StreamHeightResponse delivers height update events.\n *\n * @generated from message thru.services.v1.StreamHeightResponse\n */\nexport type StreamHeightResponse = Message<\"thru.services.v1.StreamHeightResponse\"> & {\n  /**\n   * @generated from field: uint64 finalized = 1;\n   */\n  finalized: bigint;\n\n  /**\n   * @generated from field: uint64 locally_executed = 2;\n   */\n  locallyExecuted: bigint;\n\n  /**\n   * @generated from field: uint64 cluster_executed = 3;\n   */\n  clusterExecuted: bigint;\n};\n\n/**\n * Describes the message thru.services.v1.StreamHeightResponse.\n * Use `create(StreamHeightResponseSchema)` to create a new message.\n */\nexport const StreamHeightResponseSchema: GenMessage<StreamHeightResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_streaming_service, 15);\n\n/**\n * StreamNodeRecordsRequest subscribes to node record updates from the gossip network.\n *\n * @generated from message thru.services.v1.StreamNodeRecordsRequest\n */\nexport type StreamNodeRecordsRequest = Message<\"thru.services.v1.StreamNodeRecordsRequest\"> & {\n};\n\n/**\n * Describes the message thru.services.v1.StreamNodeRecordsRequest.\n * Use `create(StreamNodeRecordsRequestSchema)` to create a new message.\n */\nexport const StreamNodeRecordsRequestSchema: GenMessage<StreamNodeRecordsRequest> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_streaming_service, 16);\n\n/**\n * StreamNodeRecordsResponse delivers node record updates.\n *\n * @generated from message thru.services.v1.StreamNodeRecordsResponse\n */\nexport type StreamNodeRecordsResponse = Message<\"thru.services.v1.StreamNodeRecordsResponse\"> & {\n  /**\n   * @generated from oneof thru.services.v1.StreamNodeRecordsResponse.message\n   */\n  message: {\n    /**\n     * A node record (initial snapshot or update).\n     *\n     * @generated from field: thru.core.v1.NodeRecord record = 1;\n     */\n    value: NodeRecord;\n    case: \"record\";\n  } | {\n    /**\n     * Signals the initial batch of records is complete.\n     *\n     * @generated from field: bool finished = 2;\n     */\n    value: boolean;\n    case: \"finished\";\n  } | { case: undefined; value?: undefined };\n};\n\n/**\n * Describes the message thru.services.v1.StreamNodeRecordsResponse.\n * Use `create(StreamNodeRecordsResponseSchema)` to create a new message.\n */\nexport const StreamNodeRecordsResponseSchema: GenMessage<StreamNodeRecordsResponse> = /*@__PURE__*/\n  messageDesc(file_thru_services_v1_streaming_service, 17);\n\n/**\n * StreamingService serves server-streaming gRPC APIs for real-time data.\n *\n * @generated from service thru.services.v1.StreamingService\n */\nexport const StreamingService: GenService<{\n  /**\n   * @generated from rpc thru.services.v1.StreamingService.StreamBlocks\n   */\n  streamBlocks: {\n    methodKind: \"server_streaming\";\n    input: typeof StreamBlocksRequestSchema;\n    output: typeof StreamBlocksResponseSchema;\n  },\n  /**\n   * @generated from rpc thru.services.v1.StreamingService.StreamAccountUpdates\n   */\n  streamAccountUpdates: {\n    methodKind: \"server_streaming\";\n    input: typeof StreamAccountUpdatesRequestSchema;\n    output: typeof StreamAccountUpdatesResponseSchema;\n  },\n  /**\n   * @generated from rpc thru.services.v1.StreamingService.StreamTransactions\n   */\n  streamTransactions: {\n    methodKind: \"server_streaming\";\n    input: typeof StreamTransactionsRequestSchema;\n    output: typeof StreamTransactionsResponseSchema;\n  },\n  /**\n   * @generated from rpc thru.services.v1.StreamingService.StreamEvents\n   */\n  streamEvents: {\n    methodKind: \"server_streaming\";\n    input: typeof StreamEventsRequestSchema;\n    output: typeof StreamEventsResponseSchema;\n  },\n  /**\n   * @generated from rpc thru.services.v1.StreamingService.TrackTransaction\n   */\n  trackTransaction: {\n    methodKind: \"server_streaming\";\n    input: typeof TrackTransactionRequestSchema;\n    output: typeof TrackTransactionResponseSchema;\n  },\n  /**\n   * @generated from rpc thru.services.v1.StreamingService.StreamHeight\n   */\n  streamHeight: {\n    methodKind: \"server_streaming\";\n    input: typeof StreamHeightRequestSchema;\n    output: typeof StreamHeightResponseSchema;\n  },\n  /**\n   * Stream per-slot metrics including state counters, distributed fees\n   * (absent-block-producer + claimed) and -- on request -- the slot's state\n   * commitments. One message per slot terminator; see\n   * StreamSlotMetricsResponse for the delivery contract.\n   *\n   * @generated from rpc thru.services.v1.StreamingService.StreamSlotMetrics\n   */\n  streamSlotMetrics: {\n    methodKind: \"server_streaming\";\n    input: typeof StreamSlotMetricsRequestSchema;\n    output: typeof StreamSlotMetricsResponseSchema;\n  },\n  /**\n   * Stream node records from the gossip network.\n   * Returns an initial snapshot of all known records, followed by live updates.\n   *\n   * @generated from rpc thru.services.v1.StreamingService.StreamNodeRecords\n   */\n  streamNodeRecords: {\n    methodKind: \"server_streaming\";\n    input: typeof StreamNodeRecordsRequestSchema;\n    output: typeof StreamNodeRecordsResponseSchema;\n  },\n}> = /*@__PURE__*/\n  serviceDesc(file_thru_services_v1_streaming_service, 0);\n\n"]}