/**
 * ABI for the IntentSource contract
 */
export const IntentSourceAbi = [
  {
    "inputs": [],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "target",
        "type": "address"
      }
    ],
    "name": "AddressEmptyCode",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "AddressInsufficientBalance",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ArrayLengthMismatch",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      }
    ],
    "name": "CannotFundForWithNativeReward",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "FailedInnerCall",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      }
    ],
    "name": "InsufficientNativeReward",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "InsufficientTokenAllowance",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      }
    ],
    "name": "IntentAlreadyExists",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      }
    ],
    "name": "IntentAlreadyFunded",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      }
    ],
    "name": "IntentNotClaimed",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      }
    ],
    "name": "IntentNotExpired",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidRefundToken",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      }
    ],
    "name": "NativeRewardTransferFailed",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "hash",
        "type": "bytes32"
      }
    ],
    "name": "RewardsAlreadyWithdrawn",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "SafeERC20FailedOperation",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "hash",
        "type": "bytes32"
      }
    ],
    "name": "UnauthorizedWithdrawal",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      }
    ],
    "name": "WrongSourceChain",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "hash",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "salt",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "source",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "destination",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "inbox",
        "type": "address"
      },
      {
        "components": [
          {
            "internalType": "address",
            "name": "token",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "amount",
            "type": "uint256"
          }
        ],
        "indexed": false,
        "internalType": "struct TokenAmount[]",
        "name": "routeTokens",
        "type": "tuple[]"
      },
      {
        "components": [
          {
            "internalType": "address",
            "name": "target",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "data",
            "type": "bytes"
          },
          {
            "internalType": "uint256",
            "name": "value",
            "type": "uint256"
          }
        ],
        "indexed": false,
        "internalType": "struct Call[]",
        "name": "calls",
        "type": "tuple[]"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "creator",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "prover",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "deadline",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "nativeValue",
        "type": "uint256"
      },
      {
        "components": [
          {
            "internalType": "address",
            "name": "token",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "amount",
            "type": "uint256"
          }
        ],
        "indexed": false,
        "internalType": "struct TokenAmount[]",
        "name": "rewardTokens",
        "type": "tuple[]"
      }
    ],
    "name": "IntentCreated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "funder",
        "type": "address"
      }
    ],
    "name": "IntentFunded",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "funder",
        "type": "address"
      }
    ],
    "name": "IntentPartiallyFunded",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      }
    ],
    "name": "IntentProofChallenged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "hash",
        "type": "bytes32"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      }
    ],
    "name": "Refund",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "hash",
        "type": "bytes32"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      }
    ],
    "name": "Withdrawal",
    "type": "event"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "components": [
              {
                "internalType": "bytes32",
                "name": "salt",
                "type": "bytes32"
              },
              {
                "internalType": "uint256",
                "name": "source",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "destination",
                "type": "uint256"
              },
              {
                "internalType": "address",
                "name": "inbox",
                "type": "address"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct TokenAmount[]",
                "name": "tokens",
                "type": "tuple[]"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                  },
                  {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                  },
                  {
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct Call[]",
                "name": "calls",
                "type": "tuple[]"
              }
            ],
            "internalType": "struct Route",
            "name": "route",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "creator",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "prover",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "deadline",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "nativeValue",
                "type": "uint256"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct TokenAmount[]",
                "name": "tokens",
                "type": "tuple[]"
              }
            ],
            "internalType": "struct Reward",
            "name": "reward",
            "type": "tuple"
          }
        ],
        "internalType": "struct Intent[]",
        "name": "_intents",
        "type": "tuple[]"
      }
    ],
    "name": "batchWithdraw",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "routeHash",
        "type": "bytes32"
      },
      {
        "components": [
          {
            "internalType": "address",
            "name": "creator",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "prover",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "deadline",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "nativeValue",
            "type": "uint256"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "token",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "amount",
                "type": "uint256"
              }
            ],
            "internalType": "struct TokenAmount[]",
            "name": "tokens",
            "type": "tuple[]"
          }
        ],
        "internalType": "struct Reward",
        "name": "reward",
        "type": "tuple"
      },
      {
        "internalType": "bool",
        "name": "allowPartial",
        "type": "bool"
      }
    ],
    "name": "fund",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "routeHash",
        "type": "bytes32"
      },
      {
        "components": [
          {
            "internalType": "address",
            "name": "creator",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "prover",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "deadline",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "nativeValue",
            "type": "uint256"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "token",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "amount",
                "type": "uint256"
              }
            ],
            "internalType": "struct TokenAmount[]",
            "name": "tokens",
            "type": "tuple[]"
          }
        ],
        "internalType": "struct Reward",
        "name": "reward",
        "type": "tuple"
      },
      {
        "internalType": "address",
        "name": "funder",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "permitContract",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "allowPartial",
        "type": "bool"
      }
    ],
    "name": "fundFor",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "components": [
              {
                "internalType": "bytes32",
                "name": "salt",
                "type": "bytes32"
              },
              {
                "internalType": "uint256",
                "name": "source",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "destination",
                "type": "uint256"
              },
              {
                "internalType": "address",
                "name": "inbox",
                "type": "address"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct TokenAmount[]",
                "name": "tokens",
                "type": "tuple[]"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                  },
                  {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                  },
                  {
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct Call[]",
                "name": "calls",
                "type": "tuple[]"
              }
            ],
            "internalType": "struct Route",
            "name": "route",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "creator",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "prover",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "deadline",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "nativeValue",
                "type": "uint256"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct TokenAmount[]",
                "name": "tokens",
                "type": "tuple[]"
              }
            ],
            "internalType": "struct Reward",
            "name": "reward",
            "type": "tuple"
          }
        ],
        "internalType": "struct Intent",
        "name": "intent",
        "type": "tuple"
      }
    ],
    "name": "getIntentHash",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "routeHash",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "rewardHash",
        "type": "bytes32"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      }
    ],
    "name": "getPermitContract",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      }
    ],
    "name": "getRewardStatus",
    "outputs": [
      {
        "internalType": "enum IVaultStorage.RewardStatus",
        "name": "status",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      }
    ],
    "name": "getVaultState",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint8",
            "name": "status",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "mode",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "allowPartialFunding",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "usePermit",
            "type": "uint8"
          },
          {
            "internalType": "address",
            "name": "target",
            "type": "address"
          }
        ],
        "internalType": "struct IVaultStorage.VaultState",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "components": [
              {
                "internalType": "bytes32",
                "name": "salt",
                "type": "bytes32"
              },
              {
                "internalType": "uint256",
                "name": "source",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "destination",
                "type": "uint256"
              },
              {
                "internalType": "address",
                "name": "inbox",
                "type": "address"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct TokenAmount[]",
                "name": "tokens",
                "type": "tuple[]"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                  },
                  {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                  },
                  {
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct Call[]",
                "name": "calls",
                "type": "tuple[]"
              }
            ],
            "internalType": "struct Route",
            "name": "route",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "creator",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "prover",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "deadline",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "nativeValue",
                "type": "uint256"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct TokenAmount[]",
                "name": "tokens",
                "type": "tuple[]"
              }
            ],
            "internalType": "struct Reward",
            "name": "reward",
            "type": "tuple"
          }
        ],
        "internalType": "struct Intent",
        "name": "intent",
        "type": "tuple"
      }
    ],
    "name": "intentVaultAddress",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "components": [
              {
                "internalType": "bytes32",
                "name": "salt",
                "type": "bytes32"
              },
              {
                "internalType": "uint256",
                "name": "source",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "destination",
                "type": "uint256"
              },
              {
                "internalType": "address",
                "name": "inbox",
                "type": "address"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct TokenAmount[]",
                "name": "tokens",
                "type": "tuple[]"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                  },
                  {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                  },
                  {
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct Call[]",
                "name": "calls",
                "type": "tuple[]"
              }
            ],
            "internalType": "struct Route",
            "name": "route",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "creator",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "prover",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "deadline",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "nativeValue",
                "type": "uint256"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct TokenAmount[]",
                "name": "tokens",
                "type": "tuple[]"
              }
            ],
            "internalType": "struct Reward",
            "name": "reward",
            "type": "tuple"
          }
        ],
        "internalType": "struct Intent",
        "name": "intent",
        "type": "tuple"
      }
    ],
    "name": "isIntentFunded",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "components": [
              {
                "internalType": "bytes32",
                "name": "salt",
                "type": "bytes32"
              },
              {
                "internalType": "uint256",
                "name": "source",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "destination",
                "type": "uint256"
              },
              {
                "internalType": "address",
                "name": "inbox",
                "type": "address"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct TokenAmount[]",
                "name": "tokens",
                "type": "tuple[]"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                  },
                  {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                  },
                  {
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct Call[]",
                "name": "calls",
                "type": "tuple[]"
              }
            ],
            "internalType": "struct Route",
            "name": "route",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "creator",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "prover",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "deadline",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "nativeValue",
                "type": "uint256"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct TokenAmount[]",
                "name": "tokens",
                "type": "tuple[]"
              }
            ],
            "internalType": "struct Reward",
            "name": "reward",
            "type": "tuple"
          }
        ],
        "internalType": "struct Intent",
        "name": "intent",
        "type": "tuple"
      }
    ],
    "name": "publish",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "components": [
              {
                "internalType": "bytes32",
                "name": "salt",
                "type": "bytes32"
              },
              {
                "internalType": "uint256",
                "name": "source",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "destination",
                "type": "uint256"
              },
              {
                "internalType": "address",
                "name": "inbox",
                "type": "address"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct TokenAmount[]",
                "name": "tokens",
                "type": "tuple[]"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                  },
                  {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                  },
                  {
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct Call[]",
                "name": "calls",
                "type": "tuple[]"
              }
            ],
            "internalType": "struct Route",
            "name": "route",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "creator",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "prover",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "deadline",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "nativeValue",
                "type": "uint256"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct TokenAmount[]",
                "name": "tokens",
                "type": "tuple[]"
              }
            ],
            "internalType": "struct Reward",
            "name": "reward",
            "type": "tuple"
          }
        ],
        "internalType": "struct Intent",
        "name": "intent",
        "type": "tuple"
      },
      {
        "internalType": "bool",
        "name": "allowPartial",
        "type": "bool"
      }
    ],
    "name": "publishAndFund",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "components": [
              {
                "internalType": "bytes32",
                "name": "salt",
                "type": "bytes32"
              },
              {
                "internalType": "uint256",
                "name": "source",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "destination",
                "type": "uint256"
              },
              {
                "internalType": "address",
                "name": "inbox",
                "type": "address"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct TokenAmount[]",
                "name": "tokens",
                "type": "tuple[]"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                  },
                  {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                  },
                  {
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct Call[]",
                "name": "calls",
                "type": "tuple[]"
              }
            ],
            "internalType": "struct Route",
            "name": "route",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "creator",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "prover",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "deadline",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "nativeValue",
                "type": "uint256"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct TokenAmount[]",
                "name": "tokens",
                "type": "tuple[]"
              }
            ],
            "internalType": "struct Reward",
            "name": "reward",
            "type": "tuple"
          }
        ],
        "internalType": "struct Intent",
        "name": "intent",
        "type": "tuple"
      },
      {
        "internalType": "address",
        "name": "funder",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "permitContract",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "allowPartial",
        "type": "bool"
      }
    ],
    "name": "publishAndFundFor",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "routeHash",
        "type": "bytes32"
      },
      {
        "components": [
          {
            "internalType": "address",
            "name": "creator",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "prover",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "deadline",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "nativeValue",
            "type": "uint256"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "token",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "amount",
                "type": "uint256"
              }
            ],
            "internalType": "struct TokenAmount[]",
            "name": "tokens",
            "type": "tuple[]"
          }
        ],
        "internalType": "struct Reward",
        "name": "reward",
        "type": "tuple"
      },
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "recoverToken",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "components": [
              {
                "internalType": "bytes32",
                "name": "salt",
                "type": "bytes32"
              },
              {
                "internalType": "uint256",
                "name": "source",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "destination",
                "type": "uint256"
              },
              {
                "internalType": "address",
                "name": "inbox",
                "type": "address"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct TokenAmount[]",
                "name": "tokens",
                "type": "tuple[]"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                  },
                  {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                  },
                  {
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct Call[]",
                "name": "calls",
                "type": "tuple[]"
              }
            ],
            "internalType": "struct Route",
            "name": "route",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "creator",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "prover",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "deadline",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "nativeValue",
                "type": "uint256"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct TokenAmount[]",
                "name": "tokens",
                "type": "tuple[]"
              }
            ],
            "internalType": "struct Reward",
            "name": "reward",
            "type": "tuple"
          }
        ],
        "internalType": "struct Intent",
        "name": "_intent",
        "type": "tuple"
      }
    ],
    "name": "refund",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "intentHash",
        "type": "bytes32"
      }
    ],
    "name": "vaults",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint8",
            "name": "status",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "mode",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "allowPartialFunding",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "usePermit",
            "type": "uint8"
          },
          {
            "internalType": "address",
            "name": "target",
            "type": "address"
          }
        ],
        "internalType": "struct IVaultStorage.VaultState",
        "name": "state",
        "type": "tuple"
      },
      {
        "internalType": "address",
        "name": "permitContract",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "version",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "components": [
              {
                "internalType": "bytes32",
                "name": "salt",
                "type": "bytes32"
              },
              {
                "internalType": "uint256",
                "name": "source",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "destination",
                "type": "uint256"
              },
              {
                "internalType": "address",
                "name": "inbox",
                "type": "address"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct TokenAmount[]",
                "name": "tokens",
                "type": "tuple[]"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                  },
                  {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                  },
                  {
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct Call[]",
                "name": "calls",
                "type": "tuple[]"
              }
            ],
            "internalType": "struct Route",
            "name": "route",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "creator",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "prover",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "deadline",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "nativeValue",
                "type": "uint256"
              },
              {
                "components": [
                  {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                  },
                  {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct TokenAmount[]",
                "name": "tokens",
                "type": "tuple[]"
              }
            ],
            "internalType": "struct Reward",
            "name": "reward",
            "type": "tuple"
          }
        ],
        "internalType": "struct Intent",
        "name": "_intent",
        "type": "tuple"
      }
    ],
    "name": "withdrawRewards",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
] as const

/**
 * Type-safe ABI for the IntentSource contract
 */
export type IntentSourceAbiType = typeof IntentSourceAbi

/**
 * Bytecode for the IntentSource contract
 */
export const IntentSourceBytecode = "0x60808060405234601557612f4d908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c908163111980f714610c1d575080631299d61714610bce578063251043bf14610b93578063526a72aa14610ac357806354fd4d5014610a6757806369cc6c7a14610a5157806369f7cdc61461098957806381a09d34146108eb5780638616615e146106a357806393a359e91461068157806396c5c2721461063d578063a65b2bf9146105a6578063a900c6521461056f578063ab4b583e146104a3578063cca23bf214610419578063de4b22f21461010a5763fb4035f6146100da57600080fd5b346101055760606100f26100ed36610cd1565b61150e565b9060405192835260208301526040820152f35b600080fd5b346101055761011836610cd1565b60208101906101278282610ec1565b604051610152816101446020820194602086526040830190610e58565b03601f198101835282610d6c565b519020916101608280610f5e565b60405161017d81610144602082019460208652604083019061104b565b5190209260405160208101918583526040820152604081526101a0606082610d6c565b519020918260005260006020526101ba6040600020610d8d565b600360ff82511614158061040a575b610316575b9081600360ff6102b0959451160361030d575b600260208281019182526000604080850182815260608601838152608087018481528b8552848652929093209551865495519151935192516001600160c01b031990961660ff919091161760089190911b61ff00161760109290921b62ff0000169190911760189190911b63ff000000161791901b640100000000600160c01b03161790556001600160a01b0361028061027b8484610ec1565b610ed6565b167f0ba6f12b978882904e7444c7a8fcadd2d9f692a6a97aa18e5fb44c3bbc5801236020604051878152a2610ec1565b9060405191610dc390818401928484106001600160401b038511176102f75784936102df9361215586396110e4565b03906000f5156102eb57005b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600481526101e1565b602460406001600160a01b0361033760206103318888610ec1565b01610ed6565b16815192838092634ce8a2d960e11b82528960048301525afa9081156102eb576000916103db575b5060208101516001600160a01b0316151590816103ba575b506103a55760406103888484610ec1565b013542116101ce57836332567f1d60e21b60005260045260246000fd5b836335bd755560e11b60005260045260246000fd5b6001600160601b039150511660406103d28480610f5e565b01351486610377565b6103fd915060403d604011610403575b6103f58183610d6c565b810190610eea565b8661035f565b503d6103eb565b50600460ff82511614156101c9565b3461010557602036600319011261010557600435600052600060205260c0604060002061044581610d8d565b906001808060a01b039101541661049c604051809360809060ff815116835260ff602082015116602084015260ff604082015116604084015260ff60608201511660608401528160018060a01b0391015116910152565b60a0820152f35b6040366003190112610105576004356001600160401b03811161010557806004019060406003198236030112610105576024359182151583036101055760209281610554602461054e6104f861055d9661150e565b509290978860005260008a5261053b6105146040600020610d8d565b61051e8b8261158c565b6105348b8d61052d8b80610f5e565b0135611ff0565b8a88611ac1565b01916105478386610ec1565b90886115ab565b92610ec1565b9033918561168c565b6105674782611a89565b604051908152f35b34610105576020366003190112610105576004356000526000602052602060018060a01b0360016040600020015416604051908152f35b34610105576020366003190112610105576004356001600160401b0381116101055736602382011215610105578060040135906001600160401b038211610105573660248360051b83010111610105573681900360621901919060005b8281101561063b57600060248260051b84010135908582121561063857509061063260246001938501016110fb565b01610603565b80fd5b005b3461010557602061066f61065036610cd1565b61066961065c8261150e565b5091909285810190610ec1565b916115ab565b6040516001600160a01b039091168152f35b3461010557602061069961069436610cd1565b6114ca565b6040519015158152f35b34610105576060366003190112610105576024356004356001600160401b03821161010557816004019060a06003198436030112610105576001600160a01b036106eb610d04565b169182156107b157604051602081019060208252610710816101446040820186610e58565b5190206040516020810191848352604082015260408152610732606082610d6c565b5190209182600052600060205261074c6040600020610d8d565b92600360ff8551161415806108dc575b806108cf575b6108bb5792946084019260005b610779858561146f565b90508110156107c25785816107a361027b610794898961146f565b6001600160a01b0394916114a4565b16146107b15760010161076f565b63cd91597b60e01b60005260046000fd5b508290868660208201906003825260408301600081526060840190600082526080850192835285600052600060205260ff60406000209551169063ff00000062ff000061ff008854975160081b16925160101b16935160181b1693600160201b600160c01b03905160201b1694600160201b600160c01b03199263ff000000199162ffffff191617161716171717905560018060a01b0361086283610ed6565b167f0ba6f12b978882904e7444c7a8fcadd2d9f692a6a97aa18e5fb44c3bbc5801236020604051848152a260405191610dc390818401928484106001600160401b038511176102f75784936102df9361215586396110e4565b6335bd755560e11b60005260045260246000fd5b5060648601351515610762565b50600460ff855116141561075c565b34610105576020366003190112610105576000608060405161090c81610d51565b8281528260208201528260408201528260608201520152600435600052600060205260a061093d6040600020610d8d565b610987604051809260809060ff815116835260ff602082015116602084015260ff604082015116604084015260ff60608201511660608401528160018060a01b0391015116910152565bf35b34610105576080366003190112610105576004356001600160401b0381116101055780600401906040600319823603011261010557602435916001600160a01b0383168303610105576109da610d04565b60643590811515820361010557602094836109f76105679561150e565b509080978160005260008a52610a4b6024610a156040600020610d8d565b92610a21848689611ac1565b610a30858e61052d8a80610f5e565b01610a45610a3e8288610ec1565b86866115ab565b95610ec1565b90611c90565b346101055761063b610a6236610cd1565b6110fb565b3461010557600036600319011261010557610ab560408051610a898282610d6c565b60038152602081016219171b60e91b815282519384926020845251809281602086015285850190610d2e565b601f01601f19168101030190f35b346101055760a0366003190112610105576024356004356001600160401b0382116101055760a08260040192600319903603011261010557610b03610d04565b916064356001600160a01b038116810361010557608435908115158203610105576020946105679360405187810190888252610b46816101446040820186610e58565b51902060405188810191888352604082015260408152610b67606082610d6c565b51902095866000526000885286610b816040600020610d8d565b92610b8d8184846115ab565b93611c90565b34610105576020610ba336610cd1565b610567610baf8261150e565b505091826000526000845282610bc86040600020610d8d565b91611ac1565b3461010557602036600319011261010557600435600052600060205260ff604060002054166005811015610c0757602090604051908152f35b634e487b7160e01b600052602160045260246000fd5b606036600319011261010557600435602435916001600160401b0383116101055760a0836004019360031990360301126101055760443580151581036101055783610cc9602095848761055d960190888252610c80816101446040820186610e58565b51902060405188810191888352604082015260408152610ca1606082610d6c565b519020958660005260008852610cc387610cbe6040600020610d8d565b61158c565b866115ab565b33918561168c565b602060031982011261010557600435906001600160401b0382116101055760409082900360031901126101055760040190565b604435906001600160a01b038216820361010557565b35906001600160a01b038216820361010557565b60005b838110610d415750506000910152565b8181015183820152602001610d31565b60a081019081106001600160401b038211176102f757604052565b90601f801991011681019081106001600160401b038211176102f757604052565b90604051610d9a81610d51565b608081935460ff8116835260ff8160081c16602084015260ff8160101c16604084015260ff8160181c16606084015260018060a01b039060201c16910152565b9035601e19823603018112156101055701602081359101916001600160401b038211610105578160061b3603831361010557565b9160209082815201919060005b818110610e285750505090565b909192604080600192838060a01b03610e4088610d1a565b16815260208781013590820152019401929101610e1b565b610ebe919060a090610eae906001600160a01b03610e7582610d1a565b168452600180841b03610e8a60208301610d1a565b16602085015260408101356040850152606081013560608501526080810190610dda565b9190928160808201520191610e0e565b90565b903590609e1981360301821215610105570190565b356001600160a01b03811681036101055790565b9081604091031261010557600060405191604083018381106001600160401b03821117610f4a5760405280516001600160601b0381168103610f4657835260200151906001600160a01b03821682036106385750602082015290565b8280fd5b634e487b7160e01b83526041600452602483fd5b90359060be1981360301821215610105570190565b906020838281520160208260051b85010193836000915b848310610f9a5750505050505090565b909192939495601f198282030185526000873590605e1985360301821215610638575083016001600160a01b03610fd082610d1a565b1682526020810135601e198236030181121561010557810190602082359201906001600160401b0383116101055782360382136101055783836040608093602096879660608860019b015281606087015286860137600084840186015201356040830152601f01601f19160101980196950193019190610f8a565b8035825260208082013590830152604080820135908301526001600160a01b0361107760608301610d1a565b16606083015261109e61108d6080830183610dda565b60c0608086015260c0850191610e0e565b9060a0810135601e198236030181121561010557016020813591016001600160401b038211610105578160051b36038113610105578360a0610ebe958503910152610f73565b604090610ebe939281528160208201520190610e58565b60246111068261150e565b506020849392930161111d60206103318388610ec1565b60408051634ce8a2d960e11b8152600481018790526000979095909286919082906001600160a01b03165afa938415611464578694611443575b506001600160601b03845116604061116f8380610f5e565b013514158061142d575b6113345784865285602052602061119260408820610d8d565b940180519094906001600160a01b0316151580611325575b80611316575b6111e8578451602490889088906001600160a01b03166111d95763dac420a360e01b8252600452fd5b63313d14a960e11b8252600452fd5b938460036112bb95979652602081016001815260408201898152606083018a815260018060a01b038551169160808501928352898c528b60205260ff60408d209551169063ff00000062ff000061ff008854975160081b16925160101b16935160181b1693600160201b600160c01b03905160201b1694600160201b600160c01b03199263ff000000199162ffffff191617161716171717905560018060a01b039051167f6653a45d3871e4110fa55dac0269f9f93a6d9078d402f7153594e50573d7f0cd6020604051878152a2610ec1565b60405191610dc3808401908482106001600160401b0383111761130257918493916112ea9361215586396110e4565b039083f5156112f65750565b604051903d90823e3d90fd5b634e487b7160e01b87526041600452602487fd5b50600460ff82511614156111b0565b50600360ff82511614156111aa565b939493925090506001600160a01b0361135260206103318486610ec1565b1690813b156114295760405163e9cd2bdd60e01b8152602060048201529236819003813560be1982018112156114255761139990604060248801528360648801910161104b565b923590609e19018112156114215785856113c58195839795839560231985840301604486015201610e58565b03925af1801561141657917f69f2194063569059c6cc65d4599038f27aa9590bbb3f008178b6d20c453b9e829391602093611406575b5050604051908152a1565b8161141091610d6c565b386113fb565b6040513d84823e3d90fd5b8580fd5b8680fd5b8380fd5b5060208401516001600160a01b03161515611179565b61145d91945060403d604011610403576103f58183610d6c565b9238611157565b6040513d88823e3d90fd5b903590601e198136030182121561010557018035906001600160401b03821161010557602001918160061b3603831361010557565b91908110156114b45760061b0190565b634e487b7160e01b600052603260045260246000fd5b60206114d68280610f5e565b01354603611508578061150361054e6114f1610ebe9461150e565b50919060208501926106698487610ec1565b61200d565b50600090565b61154661151b8280610f5e565b60405161153881610144602082019460208652604083019061104b565b519020916020810190610ec1565b604051611563816101446020820194602086526040830190610e58565b519020604051602081019083825282604082015260408152611586606082610d6c565b51902092565b5160ff166115975750565b6330a4e71560e01b60005260045260246000fd5b9091611623611613916020610dc3946101446115ec604051946115d0858a0187610d6c565b888652848601986121558a3960405192839186830195866110e4565b604051958694611604858701998a9251928391610d2e565b85019151809385840190610d2e565b010103601f198101835282610d6c565b5190209060405191602083019160ff60f81b83523060601b60218501526035840152605583015260558252611659607583610d6c565b905190206001600160a01b031690565b9190820391821161167657565b634e487b7160e01b600052601160045260246000fd5b93600092916060810135806119ca575b5060808101916116ac838361146f565b93905060005b84811061174d5750505050505060001461170a57604080519283526001600160a01b0390911660208301527f97cf148f008486c490afd3b522e2398d5039247c7fffe81fcae2a8c6ee6221039190819081015b0390a1565b604080519283526001600160a01b0390911660208301527f2da42efda5225344c30e729dc0eafc2e56292ac9b9b5c2b16e0e74c86ea5921d919081908101611705565b61176461027b8261175e858861146f565b906114a4565b60206117748361175e868961146f565b6040516370a0823160e01b81526001600160a01b038a8116600483018190529416939290910135602082602481875afa9182156102eb57600092611997575b508082106117c8575b505050506001016116b2565b906117d291611669565b604051636eb1769f60e11b81526001600160a01b038c1660048201819052306024830152929190602081604481885afa9081156102eb57600091611966575b506040516370a0823160e01b815260048101859052602081602481895afa9081156102eb57600091611935575b508082101561192e57505b60008282106118fd5750505b80156117bc576118aa9260009283926040519160208301936323b872dd60e01b855260248401526044830152606482015260648152611895608482610d6c565b519082865af16118a3611a4a565b90836120f3565b80519081151591826118d9575b50506118c5578080806117bc565b635274afe760e01b60005260045260246000fd5b819250906020918101031261010557602001518015908115036101055738806118b7565b929b509190871561191357505098600199611855565b915091606493638f87ba6760e01b8452600452602452604452fd5b9050611849565b906020823d821161195e575b8161194e60209383610d6c565b810103126106385750513861183e565b3d9150611941565b906020823d821161198f575b8161197f60209383610d6c565b8101031261063857505138611811565b3d9150611972565b90916020823d82116119c2575b816119b160209383610d6c565b8101031261063857505190386117b3565b3d91506119a4565b83318181106119da575b5061169c565b6119e391611669565b6000348211611a1d57506000808080935b818115611a14575b6001600160a01b03891690f1156102eb5738806119d4565b506108fc6119fc565b919450508115611a3657506001926000808080346119f4565b631368c98360e11b81526004869052602490fd5b3d15611a84573d906001600160401b0382116102f75760405191611a78601f8201601f191660200184610d6c565b82523d6000602084013e565b606090565b9080611a93575050565b600080808093335af1611aa4611a4a565b5015611aad5750565b63da9a84fd60e01b60005260045260246000fd5b91600360ff82511614908115611c81575b50611c6d57611ae18280610f5e565b35906020611aef8480610f5e565b01356040611afd8580610f5e565b013592611b0f60606103318780610f5e565b93611b27611b1d8780610f5e565b608081019061146f565b611b3388809399610f5e565b60a081013590601e198136030182121561010557018035906001600160401b038211610105576020018160051b36038113610105576020840191611b778386610ec1565b611b8090610ed6565b9a611b8b8487610ec1565b602001611b9790610ed6565b94611ba28588610ec1565b6040013596611bb18682610ec1565b6060013595611bbf91610ec1565b60808101611bcc9161146f565b9c90986040519b8c9b8c5260208c015260408b0152600160a01b600190031660608a0152608089016101209052610120890190611c0892610e0e565b9087820360a0890152611c1a92610f73565b60c086019390935260e08501528382036101008501526001600160a01b03908116971695611c4792610e0e565b037fd802f2610d0c85b3f19be4413f3cf49de1d4e787edecd538274437a5b9aa648d91a4565b635eaf4c6960e01b60005260045260246000fd5b5160ff16600414905038611ad2565b9197969094959260608601359586151580611fe6575b611fd15760ff845116151580611fc2575b611fad5760ff84511615611f91575b602084019260008452600014611f89576001945b60ff604086019616865260018060a01b0316908115159283600014611f81576001925b60ff6060880194168452608087019460018060a01b038c168652611f58575b508b6000526000602052604060002060ff87511681549061ff00885160081b169062ff00008b5160101b169063ff000000885160181b1692600160201b600160c01b038a5160201b1694600160201b600160c01b03199263ff000000199162ffffff1916171617161717179055604051610dc38082018281106001600160401b038211176102f757848f611db692859461215586396110e4565b03906000f5156102eb57845160ff16600203611e31575050505050503110611e1c57604080519384526001600160a01b03909116602084015290917f2da42efda5225344c30e729dc0eafc2e56292ac9b9b5c2b16e0e74c86ea5921d9181908101611705565b82631368c98360e11b60005260045260246000fd5b91939590929498999650600160ff875116149182611f47575b505015611f05577f2da42efda5225344c30e729dc0eafc2e56292ac9b9b5c2b16e0e74c86ea5921d966002855285600052600060205260ff60406000209551169063ff00000062ff000061ff008854975160081b16925160101b16935160181b1693600160201b600160c01b03905160201b1694600160201b600160c01b03199263ff000000199162ffffff1916171617161717179055611705604051928392839092916020906040830194835260018060a01b0316910152565b5050604080519384526001600160a01b03949094166020840152507f97cf148f008486c490afd3b522e2398d5039247c7fffe81fcae2a8c6ee622103935050a1565b611f51925061200d565b3880611e4a565b8c60005260006020526001604060002001906001600160601b0360a01b82541617905538611d1c565b600092611cfd565b600094611cda565b8215611fa45760ff60015b168452611cc6565b60ff6002611f9c565b896330a4e71560e01b60005260045260246000fd5b50600160ff8551161415611cb7565b8963d287282d60e01b60005260045260246000fd5b5085311515611ca6565b4603611ff95750565b6305c2a22560e21b60005260045260246000fd5b90608082019161201d838261146f565b93905082316060830135116120ea5760005b848110612040575050505050600190565b61205161027b8261175e858761146f565b60246020806120648561175e888a61146f565b6040516370a0823160e01b81526001600160a01b038a811660048301529290910135949093849290918391165afa9081156102eb576000916120b9575b50106120af5760010161202f565b5050505050600090565b906020823d82116120e2575b816120d260209383610d6c565b81010312610638575051386120a1565b3d91506120c5565b50505050600090565b90612119575080511561210857805190602001fd5b630a12f52160e11b60005260046000fd5b8151158061214b575b61212a575090565b639996b31560e01b60009081526001600160a01b0391909116600452602490fd5b50803b1561212256fe6080806040523461055757610dc3803803809161001c82856109de565b8339810190604081830312610557578051602082015190916001600160401b038211610557570160a081840312610557576040519261005a846109c3565b61006382610a01565b845261007160208301610a01565b602085015260408281015190850152606080830151908501908152608083015190926001600160401b038211610557570181601f82011215610557578051906001600160401b0382116109ad57604051926100d260208460051b01856109de565b82845260208085019360061b8301019181831161055757602001925b828410610962575050505060808401908152604051632068274d60e21b8152600481018490529160a083602481335afa92831561034d576000936108d4575b5060208301805160ff1661071157505060018060a01b0360808301511681515192600094600160ff606084015116146106a1575b5060005b84811061017f575050505050505b516001600160a01b0316ff5b83516001600160a01b0390610195908390610a23565b5151169060206101a6828751610a23565b5101516040516370a0823160e01b815230600482015290602082602481875afa91821561034d5760009261066e575b508082106101ea575b50506001915001610165565b906101f491610a4d565b916001600160a01b0388168061038a575b5082610212575b806101de565b60ff60408501511692604051636eb1769f60e11b8152866004820152306024820152602081604481865afa90811561034d57600091610359575b506040516370a0823160e01b815260048101889052602081602481875afa90811561034d57600091610319575b508082101561031257505b8181106102de5750600193505b8061029d575b5061020c565b6102d791604051916323b872dd60e01b60208401528760248401523060448401526064830152606482526102d26084836109de565b610cca565b3880610297565b9192936001146000146102f657509060019291610291565b8583638f87ba6760e01b60005260045260245260445260646000fd5b9050610284565b906020823d8211610345575b81610332602093836109de565b8101031261034257505138610279565b80fd5b3d9150610325565b6040513d6000823e3d90fd5b906020823d8211610382575b81610372602093836109de565b810103126103425750513861024c565b3d9150610365565b6040516370a0823160e01b81523060048201529193906000602084602481895afa93841561066157819461062a575b5060405163927da10560e01b8152886004820152866024820152306044820152606081606481865afa90811561061f5782916105be575b506040516370a0823160e01b8152600481018a90526020816024818b5afa9081156105b357839161057e575b506001600160a01b03821681111561056d5750905b506001600160a01b031682811061055c57506000925b826104f4575b6040516370a0823160e01b81523060048201526020816024818a5afa90811561034d576000916104c3575b508382018092116104ad57106104915750509138610205565b84906303ae10f160e21b60005260045260245260445260646000fd5b634e487b7160e01b600052601160045260246000fd5b906020823d82116104ec575b816104dc602093836109de565b8101031261034257505138610478565b3d91506104cf565b813b1561055757604051631b63c28b60e11b8152600481018990523060248201526001600160a01b03841660448201526064810187905260008160848183875af1801561034d57610546575b5061044d565b6000610551916109de565b38610540565b600080fd5b806105679193610a4d565b92610447565b6001600160a01b0316919050610431565b90506020813d82116105ab575b81610598602093836109de565b810103126105a757513861041c565b8280fd5b3d915061058b565b6040513d85823e3d90fd5b90506060813d8211610617575b816105d8606093836109de565b81010312610613578051906001600160a01b03821682036105a757604081610605602061060c9401610cb7565b5001610cb7565b50386103f0565b5080fd5b3d91506105cb565b6040513d84823e3d90fd5b9093506020813d8211610659575b81610645602093836109de565b81010312610655575192386103b9565b8380fd5b3d9150610638565b50604051903d90823e3d90fd5b90916020823d8211610699575b81610688602093836109de565b8101031261034257505190386101d5565b3d915061067b565b90945060405190635480632960e11b82526004820152602081602481335afa90811561034d576000916106d7575b509338610161565b90506020813d602011610709575b816106f2602093836109de565b810103126105575761070390610a01565b386106cf565b3d91506106e5565b91509250600160ff825116146000146107c35750608001805161073d906001600160a01b031684610a5a565b5190516001600160a01b03909116908061075a575b50505b610173565b818180471061079d575b50600080808481945af1610776610bc3565b5061075257600080516020610da38339815191526020600092604051908152a33880610752565b60009192506020600080516020610da383398151915291604051908152a3478138610764565b909150600260ff825116146000146107ec5750508051610755906001600160a01b031682610a5a565b5160ff166003146107fe575b50610173565b6080015181516040516370a0823160e01b81523060048201526001600160a01b039283169392909116602082602481875afa91821561034d576000926108a0575b50811561088b5760405163a9059cbb60e01b60208201526001600160a01b03919091166024820152604480820192909252908152909161088591906102d26064836109de565b386107f8565b836308a285bb60e21b60005260045260246000fd5b90916020823d6020116108cc575b816108bb602093836109de565b81010312610342575051903861083f565b3d91506108ae565b909260a0823d60a01161095a575b816108ef60a093836109de565b81010312610342575061094e60806040519261090a846109c3565b61091381610a15565b845261092160208201610a15565b602085015261093260408201610a15565b604085015261094360608201610a15565b606085015201610a01565b6080820152913861012d565b3d91506108e2565b604084830312610557576040805191908201906001600160401b038211838310176109ad57604092602092845261099887610a01565b815282870151838201528152019301926100ee565b634e487b7160e01b600052604160045260246000fd5b60a081019081106001600160401b038211176109ad57604052565b601f909101601f19168101906001600160401b038211908210176109ad57604052565b51906001600160a01b038216820361055757565b519060ff8216820361055757565b8051821015610a375760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b919082039182116104ad57565b90608082018051519160005b838110610a74575050505050565b82516001600160a01b0390610a8a908390610a23565b5151166020610a9a838651610a23565b510151906040516370a0823160e01b8152306004820152602081602481855afa90811561034d57600091610b91575b508751600194939291906001600160a01b03878116911681148015610b88575b15610b485790918093868060a01b038b51168303610b27575b5050508481610b16575b5050505b01610a66565b610b1f92610c02565b388084610b0c565b6020600080516020610da383398151915291604051908152a3388281610b02565b50610b54838784610c02565b828111610b64575b505050610b10565b610b7a610b8093868060a01b038b511692610a4d565b91610c02565b388080610b5c565b50838210610ae9565b906020823d8211610bbb575b81610baa602093836109de565b810103126103425750516001610ac9565b3d9150610b9d565b3d15610bfd573d906001600160401b0382116109ad5760405191610bf1601f8201601f1916602001846109de565b82523d6000602084013e565b606090565b60405163a9059cbb60e01b602082019081526001600160a01b0384166024830152604480830186905282529193929190610c3d6064826109de565b6020600080938193519082895af115918219610cac575b8215610c90575b5050610c6657505050565b6040519182526001600160a01b03908116921690600080516020610da383398151915290602090a3565b909150610ca35750823b155b3880610c5b565b60011415610c9c565b50506000513d610c54565b519065ffffffffffff8216820361055757565b600080610cf39260018060a01b03169360208151910182865af1610cec610bc3565b9083610d41565b8051908115159182610d1d575b5050610d095750565b635274afe760e01b60005260045260246000fd5b81925090602091810103126105575760200151801590811503610557573880610d00565b90610d675750805115610d5657805190602001fd5b630a12f52160e11b60005260046000fd5b81511580610d99575b610d78575090565b639996b31560e01b60009081526001600160a01b0391909116600452602490fd5b50803b15610d7056fedce1598fdc26bc6ef7bef35c4bf92827604fbe4defdcb5c8569c2c8e035acde1a2646970667358221220000c9b2850cf2230ab080147c87b71a0fec8ab0f5a2377170a6feeceac60109e64736f6c634300081b0033"

/**
 * Deployed bytecode for the IntentSource contract
 */
export const IntentSourceDeployedBytecode = "0x608080604052600436101561001357600080fd5b60003560e01c908163111980f714610c1d575080631299d61714610bce578063251043bf14610b93578063526a72aa14610ac357806354fd4d5014610a6757806369cc6c7a14610a5157806369f7cdc61461098957806381a09d34146108eb5780638616615e146106a357806393a359e91461068157806396c5c2721461063d578063a65b2bf9146105a6578063a900c6521461056f578063ab4b583e146104a3578063cca23bf214610419578063de4b22f21461010a5763fb4035f6146100da57600080fd5b346101055760606100f26100ed36610cd1565b61150e565b9060405192835260208301526040820152f35b600080fd5b346101055761011836610cd1565b60208101906101278282610ec1565b604051610152816101446020820194602086526040830190610e58565b03601f198101835282610d6c565b519020916101608280610f5e565b60405161017d81610144602082019460208652604083019061104b565b5190209260405160208101918583526040820152604081526101a0606082610d6c565b519020918260005260006020526101ba6040600020610d8d565b600360ff82511614158061040a575b610316575b9081600360ff6102b0959451160361030d575b600260208281019182526000604080850182815260608601838152608087018481528b8552848652929093209551865495519151935192516001600160c01b031990961660ff919091161760089190911b61ff00161760109290921b62ff0000169190911760189190911b63ff000000161791901b640100000000600160c01b03161790556001600160a01b0361028061027b8484610ec1565b610ed6565b167f0ba6f12b978882904e7444c7a8fcadd2d9f692a6a97aa18e5fb44c3bbc5801236020604051878152a2610ec1565b9060405191610dc390818401928484106001600160401b038511176102f75784936102df9361215586396110e4565b03906000f5156102eb57005b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600481526101e1565b602460406001600160a01b0361033760206103318888610ec1565b01610ed6565b16815192838092634ce8a2d960e11b82528960048301525afa9081156102eb576000916103db575b5060208101516001600160a01b0316151590816103ba575b506103a55760406103888484610ec1565b013542116101ce57836332567f1d60e21b60005260045260246000fd5b836335bd755560e11b60005260045260246000fd5b6001600160601b039150511660406103d28480610f5e565b01351486610377565b6103fd915060403d604011610403575b6103f58183610d6c565b810190610eea565b8661035f565b503d6103eb565b50600460ff82511614156101c9565b3461010557602036600319011261010557600435600052600060205260c0604060002061044581610d8d565b906001808060a01b039101541661049c604051809360809060ff815116835260ff602082015116602084015260ff604082015116604084015260ff60608201511660608401528160018060a01b0391015116910152565b60a0820152f35b6040366003190112610105576004356001600160401b03811161010557806004019060406003198236030112610105576024359182151583036101055760209281610554602461054e6104f861055d9661150e565b509290978860005260008a5261053b6105146040600020610d8d565b61051e8b8261158c565b6105348b8d61052d8b80610f5e565b0135611ff0565b8a88611ac1565b01916105478386610ec1565b90886115ab565b92610ec1565b9033918561168c565b6105674782611a89565b604051908152f35b34610105576020366003190112610105576004356000526000602052602060018060a01b0360016040600020015416604051908152f35b34610105576020366003190112610105576004356001600160401b0381116101055736602382011215610105578060040135906001600160401b038211610105573660248360051b83010111610105573681900360621901919060005b8281101561063b57600060248260051b84010135908582121561063857509061063260246001938501016110fb565b01610603565b80fd5b005b3461010557602061066f61065036610cd1565b61066961065c8261150e565b5091909285810190610ec1565b916115ab565b6040516001600160a01b039091168152f35b3461010557602061069961069436610cd1565b6114ca565b6040519015158152f35b34610105576060366003190112610105576024356004356001600160401b03821161010557816004019060a06003198436030112610105576001600160a01b036106eb610d04565b169182156107b157604051602081019060208252610710816101446040820186610e58565b5190206040516020810191848352604082015260408152610732606082610d6c565b5190209182600052600060205261074c6040600020610d8d565b92600360ff8551161415806108dc575b806108cf575b6108bb5792946084019260005b610779858561146f565b90508110156107c25785816107a361027b610794898961146f565b6001600160a01b0394916114a4565b16146107b15760010161076f565b63cd91597b60e01b60005260046000fd5b508290868660208201906003825260408301600081526060840190600082526080850192835285600052600060205260ff60406000209551169063ff00000062ff000061ff008854975160081b16925160101b16935160181b1693600160201b600160c01b03905160201b1694600160201b600160c01b03199263ff000000199162ffffff191617161716171717905560018060a01b0361086283610ed6565b167f0ba6f12b978882904e7444c7a8fcadd2d9f692a6a97aa18e5fb44c3bbc5801236020604051848152a260405191610dc390818401928484106001600160401b038511176102f75784936102df9361215586396110e4565b6335bd755560e11b60005260045260246000fd5b5060648601351515610762565b50600460ff855116141561075c565b34610105576020366003190112610105576000608060405161090c81610d51565b8281528260208201528260408201528260608201520152600435600052600060205260a061093d6040600020610d8d565b610987604051809260809060ff815116835260ff602082015116602084015260ff604082015116604084015260ff60608201511660608401528160018060a01b0391015116910152565bf35b34610105576080366003190112610105576004356001600160401b0381116101055780600401906040600319823603011261010557602435916001600160a01b0383168303610105576109da610d04565b60643590811515820361010557602094836109f76105679561150e565b509080978160005260008a52610a4b6024610a156040600020610d8d565b92610a21848689611ac1565b610a30858e61052d8a80610f5e565b01610a45610a3e8288610ec1565b86866115ab565b95610ec1565b90611c90565b346101055761063b610a6236610cd1565b6110fb565b3461010557600036600319011261010557610ab560408051610a898282610d6c565b60038152602081016219171b60e91b815282519384926020845251809281602086015285850190610d2e565b601f01601f19168101030190f35b346101055760a0366003190112610105576024356004356001600160401b0382116101055760a08260040192600319903603011261010557610b03610d04565b916064356001600160a01b038116810361010557608435908115158203610105576020946105679360405187810190888252610b46816101446040820186610e58565b51902060405188810191888352604082015260408152610b67606082610d6c565b51902095866000526000885286610b816040600020610d8d565b92610b8d8184846115ab565b93611c90565b34610105576020610ba336610cd1565b610567610baf8261150e565b505091826000526000845282610bc86040600020610d8d565b91611ac1565b3461010557602036600319011261010557600435600052600060205260ff604060002054166005811015610c0757602090604051908152f35b634e487b7160e01b600052602160045260246000fd5b606036600319011261010557600435602435916001600160401b0383116101055760a0836004019360031990360301126101055760443580151581036101055783610cc9602095848761055d960190888252610c80816101446040820186610e58565b51902060405188810191888352604082015260408152610ca1606082610d6c565b519020958660005260008852610cc387610cbe6040600020610d8d565b61158c565b866115ab565b33918561168c565b602060031982011261010557600435906001600160401b0382116101055760409082900360031901126101055760040190565b604435906001600160a01b038216820361010557565b35906001600160a01b038216820361010557565b60005b838110610d415750506000910152565b8181015183820152602001610d31565b60a081019081106001600160401b038211176102f757604052565b90601f801991011681019081106001600160401b038211176102f757604052565b90604051610d9a81610d51565b608081935460ff8116835260ff8160081c16602084015260ff8160101c16604084015260ff8160181c16606084015260018060a01b039060201c16910152565b9035601e19823603018112156101055701602081359101916001600160401b038211610105578160061b3603831361010557565b9160209082815201919060005b818110610e285750505090565b909192604080600192838060a01b03610e4088610d1a565b16815260208781013590820152019401929101610e1b565b610ebe919060a090610eae906001600160a01b03610e7582610d1a565b168452600180841b03610e8a60208301610d1a565b16602085015260408101356040850152606081013560608501526080810190610dda565b9190928160808201520191610e0e565b90565b903590609e1981360301821215610105570190565b356001600160a01b03811681036101055790565b9081604091031261010557600060405191604083018381106001600160401b03821117610f4a5760405280516001600160601b0381168103610f4657835260200151906001600160a01b03821682036106385750602082015290565b8280fd5b634e487b7160e01b83526041600452602483fd5b90359060be1981360301821215610105570190565b906020838281520160208260051b85010193836000915b848310610f9a5750505050505090565b909192939495601f198282030185526000873590605e1985360301821215610638575083016001600160a01b03610fd082610d1a565b1682526020810135601e198236030181121561010557810190602082359201906001600160401b0383116101055782360382136101055783836040608093602096879660608860019b015281606087015286860137600084840186015201356040830152601f01601f19160101980196950193019190610f8a565b8035825260208082013590830152604080820135908301526001600160a01b0361107760608301610d1a565b16606083015261109e61108d6080830183610dda565b60c0608086015260c0850191610e0e565b9060a0810135601e198236030181121561010557016020813591016001600160401b038211610105578160051b36038113610105578360a0610ebe958503910152610f73565b604090610ebe939281528160208201520190610e58565b60246111068261150e565b506020849392930161111d60206103318388610ec1565b60408051634ce8a2d960e11b8152600481018790526000979095909286919082906001600160a01b03165afa938415611464578694611443575b506001600160601b03845116604061116f8380610f5e565b013514158061142d575b6113345784865285602052602061119260408820610d8d565b940180519094906001600160a01b0316151580611325575b80611316575b6111e8578451602490889088906001600160a01b03166111d95763dac420a360e01b8252600452fd5b63313d14a960e11b8252600452fd5b938460036112bb95979652602081016001815260408201898152606083018a815260018060a01b038551169160808501928352898c528b60205260ff60408d209551169063ff00000062ff000061ff008854975160081b16925160101b16935160181b1693600160201b600160c01b03905160201b1694600160201b600160c01b03199263ff000000199162ffffff191617161716171717905560018060a01b039051167f6653a45d3871e4110fa55dac0269f9f93a6d9078d402f7153594e50573d7f0cd6020604051878152a2610ec1565b60405191610dc3808401908482106001600160401b0383111761130257918493916112ea9361215586396110e4565b039083f5156112f65750565b604051903d90823e3d90fd5b634e487b7160e01b87526041600452602487fd5b50600460ff82511614156111b0565b50600360ff82511614156111aa565b939493925090506001600160a01b0361135260206103318486610ec1565b1690813b156114295760405163e9cd2bdd60e01b8152602060048201529236819003813560be1982018112156114255761139990604060248801528360648801910161104b565b923590609e19018112156114215785856113c58195839795839560231985840301604486015201610e58565b03925af1801561141657917f69f2194063569059c6cc65d4599038f27aa9590bbb3f008178b6d20c453b9e829391602093611406575b5050604051908152a1565b8161141091610d6c565b386113fb565b6040513d84823e3d90fd5b8580fd5b8680fd5b8380fd5b5060208401516001600160a01b03161515611179565b61145d91945060403d604011610403576103f58183610d6c565b9238611157565b6040513d88823e3d90fd5b903590601e198136030182121561010557018035906001600160401b03821161010557602001918160061b3603831361010557565b91908110156114b45760061b0190565b634e487b7160e01b600052603260045260246000fd5b60206114d68280610f5e565b01354603611508578061150361054e6114f1610ebe9461150e565b50919060208501926106698487610ec1565b61200d565b50600090565b61154661151b8280610f5e565b60405161153881610144602082019460208652604083019061104b565b519020916020810190610ec1565b604051611563816101446020820194602086526040830190610e58565b519020604051602081019083825282604082015260408152611586606082610d6c565b51902092565b5160ff166115975750565b6330a4e71560e01b60005260045260246000fd5b9091611623611613916020610dc3946101446115ec604051946115d0858a0187610d6c565b888652848601986121558a3960405192839186830195866110e4565b604051958694611604858701998a9251928391610d2e565b85019151809385840190610d2e565b010103601f198101835282610d6c565b5190209060405191602083019160ff60f81b83523060601b60218501526035840152605583015260558252611659607583610d6c565b905190206001600160a01b031690565b9190820391821161167657565b634e487b7160e01b600052601160045260246000fd5b93600092916060810135806119ca575b5060808101916116ac838361146f565b93905060005b84811061174d5750505050505060001461170a57604080519283526001600160a01b0390911660208301527f97cf148f008486c490afd3b522e2398d5039247c7fffe81fcae2a8c6ee6221039190819081015b0390a1565b604080519283526001600160a01b0390911660208301527f2da42efda5225344c30e729dc0eafc2e56292ac9b9b5c2b16e0e74c86ea5921d919081908101611705565b61176461027b8261175e858861146f565b906114a4565b60206117748361175e868961146f565b6040516370a0823160e01b81526001600160a01b038a8116600483018190529416939290910135602082602481875afa9182156102eb57600092611997575b508082106117c8575b505050506001016116b2565b906117d291611669565b604051636eb1769f60e11b81526001600160a01b038c1660048201819052306024830152929190602081604481885afa9081156102eb57600091611966575b506040516370a0823160e01b815260048101859052602081602481895afa9081156102eb57600091611935575b508082101561192e57505b60008282106118fd5750505b80156117bc576118aa9260009283926040519160208301936323b872dd60e01b855260248401526044830152606482015260648152611895608482610d6c565b519082865af16118a3611a4a565b90836120f3565b80519081151591826118d9575b50506118c5578080806117bc565b635274afe760e01b60005260045260246000fd5b819250906020918101031261010557602001518015908115036101055738806118b7565b929b509190871561191357505098600199611855565b915091606493638f87ba6760e01b8452600452602452604452fd5b9050611849565b906020823d821161195e575b8161194e60209383610d6c565b810103126106385750513861183e565b3d9150611941565b906020823d821161198f575b8161197f60209383610d6c565b8101031261063857505138611811565b3d9150611972565b90916020823d82116119c2575b816119b160209383610d6c565b8101031261063857505190386117b3565b3d91506119a4565b83318181106119da575b5061169c565b6119e391611669565b6000348211611a1d57506000808080935b818115611a14575b6001600160a01b03891690f1156102eb5738806119d4565b506108fc6119fc565b919450508115611a3657506001926000808080346119f4565b631368c98360e11b81526004869052602490fd5b3d15611a84573d906001600160401b0382116102f75760405191611a78601f8201601f191660200184610d6c565b82523d6000602084013e565b606090565b9080611a93575050565b600080808093335af1611aa4611a4a565b5015611aad5750565b63da9a84fd60e01b60005260045260246000fd5b91600360ff82511614908115611c81575b50611c6d57611ae18280610f5e565b35906020611aef8480610f5e565b01356040611afd8580610f5e565b013592611b0f60606103318780610f5e565b93611b27611b1d8780610f5e565b608081019061146f565b611b3388809399610f5e565b60a081013590601e198136030182121561010557018035906001600160401b038211610105576020018160051b36038113610105576020840191611b778386610ec1565b611b8090610ed6565b9a611b8b8487610ec1565b602001611b9790610ed6565b94611ba28588610ec1565b6040013596611bb18682610ec1565b6060013595611bbf91610ec1565b60808101611bcc9161146f565b9c90986040519b8c9b8c5260208c015260408b0152600160a01b600190031660608a0152608089016101209052610120890190611c0892610e0e565b9087820360a0890152611c1a92610f73565b60c086019390935260e08501528382036101008501526001600160a01b03908116971695611c4792610e0e565b037fd802f2610d0c85b3f19be4413f3cf49de1d4e787edecd538274437a5b9aa648d91a4565b635eaf4c6960e01b60005260045260246000fd5b5160ff16600414905038611ad2565b9197969094959260608601359586151580611fe6575b611fd15760ff845116151580611fc2575b611fad5760ff84511615611f91575b602084019260008452600014611f89576001945b60ff604086019616865260018060a01b0316908115159283600014611f81576001925b60ff6060880194168452608087019460018060a01b038c168652611f58575b508b6000526000602052604060002060ff87511681549061ff00885160081b169062ff00008b5160101b169063ff000000885160181b1692600160201b600160c01b038a5160201b1694600160201b600160c01b03199263ff000000199162ffffff1916171617161717179055604051610dc38082018281106001600160401b038211176102f757848f611db692859461215586396110e4565b03906000f5156102eb57845160ff16600203611e31575050505050503110611e1c57604080519384526001600160a01b03909116602084015290917f2da42efda5225344c30e729dc0eafc2e56292ac9b9b5c2b16e0e74c86ea5921d9181908101611705565b82631368c98360e11b60005260045260246000fd5b91939590929498999650600160ff875116149182611f47575b505015611f05577f2da42efda5225344c30e729dc0eafc2e56292ac9b9b5c2b16e0e74c86ea5921d966002855285600052600060205260ff60406000209551169063ff00000062ff000061ff008854975160081b16925160101b16935160181b1693600160201b600160c01b03905160201b1694600160201b600160c01b03199263ff000000199162ffffff1916171617161717179055611705604051928392839092916020906040830194835260018060a01b0316910152565b5050604080519384526001600160a01b03949094166020840152507f97cf148f008486c490afd3b522e2398d5039247c7fffe81fcae2a8c6ee622103935050a1565b611f51925061200d565b3880611e4a565b8c60005260006020526001604060002001906001600160601b0360a01b82541617905538611d1c565b600092611cfd565b600094611cda565b8215611fa45760ff60015b168452611cc6565b60ff6002611f9c565b896330a4e71560e01b60005260045260246000fd5b50600160ff8551161415611cb7565b8963d287282d60e01b60005260045260246000fd5b5085311515611ca6565b4603611ff95750565b6305c2a22560e21b60005260045260246000fd5b90608082019161201d838261146f565b93905082316060830135116120ea5760005b848110612040575050505050600190565b61205161027b8261175e858761146f565b60246020806120648561175e888a61146f565b6040516370a0823160e01b81526001600160a01b038a811660048301529290910135949093849290918391165afa9081156102eb576000916120b9575b50106120af5760010161202f565b5050505050600090565b906020823d82116120e2575b816120d260209383610d6c565b81010312610638575051386120a1565b3d91506120c5565b50505050600090565b90612119575080511561210857805190602001fd5b630a12f52160e11b60005260046000fd5b8151158061214b575b61212a575090565b639996b31560e01b60009081526001600160a01b0391909116600452602490fd5b50803b1561212256fe6080806040523461055757610dc3803803809161001c82856109de565b8339810190604081830312610557578051602082015190916001600160401b038211610557570160a081840312610557576040519261005a846109c3565b61006382610a01565b845261007160208301610a01565b602085015260408281015190850152606080830151908501908152608083015190926001600160401b038211610557570181601f82011215610557578051906001600160401b0382116109ad57604051926100d260208460051b01856109de565b82845260208085019360061b8301019181831161055757602001925b828410610962575050505060808401908152604051632068274d60e21b8152600481018490529160a083602481335afa92831561034d576000936108d4575b5060208301805160ff1661071157505060018060a01b0360808301511681515192600094600160ff606084015116146106a1575b5060005b84811061017f575050505050505b516001600160a01b0316ff5b83516001600160a01b0390610195908390610a23565b5151169060206101a6828751610a23565b5101516040516370a0823160e01b815230600482015290602082602481875afa91821561034d5760009261066e575b508082106101ea575b50506001915001610165565b906101f491610a4d565b916001600160a01b0388168061038a575b5082610212575b806101de565b60ff60408501511692604051636eb1769f60e11b8152866004820152306024820152602081604481865afa90811561034d57600091610359575b506040516370a0823160e01b815260048101889052602081602481875afa90811561034d57600091610319575b508082101561031257505b8181106102de5750600193505b8061029d575b5061020c565b6102d791604051916323b872dd60e01b60208401528760248401523060448401526064830152606482526102d26084836109de565b610cca565b3880610297565b9192936001146000146102f657509060019291610291565b8583638f87ba6760e01b60005260045260245260445260646000fd5b9050610284565b906020823d8211610345575b81610332602093836109de565b8101031261034257505138610279565b80fd5b3d9150610325565b6040513d6000823e3d90fd5b906020823d8211610382575b81610372602093836109de565b810103126103425750513861024c565b3d9150610365565b6040516370a0823160e01b81523060048201529193906000602084602481895afa93841561066157819461062a575b5060405163927da10560e01b8152886004820152866024820152306044820152606081606481865afa90811561061f5782916105be575b506040516370a0823160e01b8152600481018a90526020816024818b5afa9081156105b357839161057e575b506001600160a01b03821681111561056d5750905b506001600160a01b031682811061055c57506000925b826104f4575b6040516370a0823160e01b81523060048201526020816024818a5afa90811561034d576000916104c3575b508382018092116104ad57106104915750509138610205565b84906303ae10f160e21b60005260045260245260445260646000fd5b634e487b7160e01b600052601160045260246000fd5b906020823d82116104ec575b816104dc602093836109de565b8101031261034257505138610478565b3d91506104cf565b813b1561055757604051631b63c28b60e11b8152600481018990523060248201526001600160a01b03841660448201526064810187905260008160848183875af1801561034d57610546575b5061044d565b6000610551916109de565b38610540565b600080fd5b806105679193610a4d565b92610447565b6001600160a01b0316919050610431565b90506020813d82116105ab575b81610598602093836109de565b810103126105a757513861041c565b8280fd5b3d915061058b565b6040513d85823e3d90fd5b90506060813d8211610617575b816105d8606093836109de565b81010312610613578051906001600160a01b03821682036105a757604081610605602061060c9401610cb7565b5001610cb7565b50386103f0565b5080fd5b3d91506105cb565b6040513d84823e3d90fd5b9093506020813d8211610659575b81610645602093836109de565b81010312610655575192386103b9565b8380fd5b3d9150610638565b50604051903d90823e3d90fd5b90916020823d8211610699575b81610688602093836109de565b8101031261034257505190386101d5565b3d915061067b565b90945060405190635480632960e11b82526004820152602081602481335afa90811561034d576000916106d7575b509338610161565b90506020813d602011610709575b816106f2602093836109de565b810103126105575761070390610a01565b386106cf565b3d91506106e5565b91509250600160ff825116146000146107c35750608001805161073d906001600160a01b031684610a5a565b5190516001600160a01b03909116908061075a575b50505b610173565b818180471061079d575b50600080808481945af1610776610bc3565b5061075257600080516020610da38339815191526020600092604051908152a33880610752565b60009192506020600080516020610da383398151915291604051908152a3478138610764565b909150600260ff825116146000146107ec5750508051610755906001600160a01b031682610a5a565b5160ff166003146107fe575b50610173565b6080015181516040516370a0823160e01b81523060048201526001600160a01b039283169392909116602082602481875afa91821561034d576000926108a0575b50811561088b5760405163a9059cbb60e01b60208201526001600160a01b03919091166024820152604480820192909252908152909161088591906102d26064836109de565b386107f8565b836308a285bb60e21b60005260045260246000fd5b90916020823d6020116108cc575b816108bb602093836109de565b81010312610342575051903861083f565b3d91506108ae565b909260a0823d60a01161095a575b816108ef60a093836109de565b81010312610342575061094e60806040519261090a846109c3565b61091381610a15565b845261092160208201610a15565b602085015261093260408201610a15565b604085015261094360608201610a15565b606085015201610a01565b6080820152913861012d565b3d91506108e2565b604084830312610557576040805191908201906001600160401b038211838310176109ad57604092602092845261099887610a01565b815282870151838201528152019301926100ee565b634e487b7160e01b600052604160045260246000fd5b60a081019081106001600160401b038211176109ad57604052565b601f909101601f19168101906001600160401b038211908210176109ad57604052565b51906001600160a01b038216820361055757565b519060ff8216820361055757565b8051821015610a375760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b919082039182116104ad57565b90608082018051519160005b838110610a74575050505050565b82516001600160a01b0390610a8a908390610a23565b5151166020610a9a838651610a23565b510151906040516370a0823160e01b8152306004820152602081602481855afa90811561034d57600091610b91575b508751600194939291906001600160a01b03878116911681148015610b88575b15610b485790918093868060a01b038b51168303610b27575b5050508481610b16575b5050505b01610a66565b610b1f92610c02565b388084610b0c565b6020600080516020610da383398151915291604051908152a3388281610b02565b50610b54838784610c02565b828111610b64575b505050610b10565b610b7a610b8093868060a01b038b511692610a4d565b91610c02565b388080610b5c565b50838210610ae9565b906020823d8211610bbb575b81610baa602093836109de565b810103126103425750516001610ac9565b3d9150610b9d565b3d15610bfd573d906001600160401b0382116109ad5760405191610bf1601f8201601f1916602001846109de565b82523d6000602084013e565b606090565b60405163a9059cbb60e01b602082019081526001600160a01b0384166024830152604480830186905282529193929190610c3d6064826109de565b6020600080938193519082895af115918219610cac575b8215610c90575b5050610c6657505050565b6040519182526001600160a01b03908116921690600080516020610da383398151915290602090a3565b909150610ca35750823b155b3880610c5b565b60011415610c9c565b50506000513d610c54565b519065ffffffffffff8216820361055757565b600080610cf39260018060a01b03169360208151910182865af1610cec610bc3565b9083610d41565b8051908115159182610d1d575b5050610d095750565b635274afe760e01b60005260045260246000fd5b81925090602091810103126105575760200151801590811503610557573880610d00565b90610d675750805115610d5657805190602001fd5b630a12f52160e11b60005260046000fd5b81511580610d99575b610d78575090565b639996b31560e01b60009081526001600160a01b0391909116600452602490fd5b50803b15610d7056fedce1598fdc26bc6ef7bef35c4bf92827604fbe4defdcb5c8569c2c8e035acde1a2646970667358221220000c9b2850cf2230ab080147c87b71a0fec8ab0f5a2377170a6feeceac60109e64736f6c634300081b0033"
